From 3a19ae71dce2986d0a9a6ef3bfd03846c4b85d11 Mon Sep 17 00:00:00 2001 From: Tony Baltovski Date: Mon, 7 Jul 2025 09:07:01 -0400 Subject: [PATCH 01/25] Added Warthog W200 in supported platforms. (#430) --- components/supported_platforms.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/supported_platforms.mdx b/components/supported_platforms.mdx index c812a331..bbab1b0a 100644 --- a/components/supported_platforms.mdx +++ b/components/supported_platforms.mdx @@ -31,7 +31,7 @@ for information on cross-vendor commuication. | Husky | A200 | Yes | Yes | No | No | Yes | | | A300 | Yes | No | No | No | No | | Jackal | J100 | Yes | No | No | No | No | -| Warthog | W200 | Coming Soon | No | No | No | No | +| Warthog | W200 | Yes | No | No | No | No | | Dingo | DD100 | Yes | No | No | No | No | | | DO100 | Yes | No | No | No | No | | | DD150 | Yes | No | No | No | No | From 635f008f655e60f60e5d4d28c7e5540eb39c731e Mon Sep 17 00:00:00 2001 From: Hilary Luo <103377417+hilary-luo@users.noreply.github.com> Date: Mon, 7 Jul 2025 10:26:37 -0400 Subject: [PATCH 02/25] Feature/foxglove default true (#408) * Foxglove bridge now enabled by default * Fixed typo --- .../ros/config/yaml/platform/foxglove_bridge.mdx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/foxglove_bridge.mdx b/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/foxglove_bridge.mdx index f9edc9b9..790956ec 100644 --- a/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/foxglove_bridge.mdx +++ b/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/foxglove_bridge.mdx @@ -10,11 +10,11 @@ By default, all Clearpath platforms launch a [Foxglove bridge node](https://docs as part of the diagnostics features. This is required for the [Cockpit ROS 2 Diagnostic extension](../../../cockpit/ros2_diagnostics.mdx). If the Cockpit webserver is not being used then the node can be disabled. -| Key | Value / Datatype | Description | -| :---------------------: | :--------------: | ------------------------------------------------------------- | -| enable_foxglove_bridge: | boolean | Enables or disables the Foxglove bridge node. Default: `false` | +| Key | Value / Datatype | Description | +| :---------------------: | :--------------: | ------------------------------------------------------------------------------- | +| enable_foxglove_bridge: | boolean | Enables or disables the Foxglove bridge node. Default: `true` as of version 2.6 | -For example, to disable the EKF node: +For example, to disable the Foxglove bridge node: ```yaml platform: From 4ac15ff74f90d19bd1eec7d2fd04eb0583836f34 Mon Sep 17 00:00:00 2001 From: Roni Kreinin Date: Wed, 9 Jul 2025 13:10:27 -0400 Subject: [PATCH 03/25] Added mixing humble and jazzy section to troubleshooting --- .../version-ros2jazzy/ros/troubleshooting.mdx | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/docs_versioned_docs/version-ros2jazzy/ros/troubleshooting.mdx b/docs_versioned_docs/version-ros2jazzy/ros/troubleshooting.mdx index 34a6b5c3..91e99d72 100644 --- a/docs_versioned_docs/version-ros2jazzy/ros/troubleshooting.mdx +++ b/docs_versioned_docs/version-ros2jazzy/ros/troubleshooting.mdx @@ -21,13 +21,14 @@ computer; the firmware is ROS-distribution-specific, and must have a version com One significant change between ROS 1 and ROS 2 is that Clearpath robots using ROS 2 Humble or Jazzy have their MCUs boot to a reset state. To establish communication between the robot's primary computer you must press a button on the robot: + - on Ridgeback or Husky A300 press the e-stop reset button located on the rear of the robot - on Jackal or Dingo, press the MCU disconnect () button ## Robot's COMM light is off after upgrading to ROS 2 Most Clearpath robots have an MCU that must also be updated. Ensure you have installed the correct -MCU firmware for your ROS distribution. Refer to your robot's [user manual](/docs_robots/robots) +MCU firmware for your ROS distribution. Refer to your robot's [user manual](/docs_robots/robots) for instructions on updating the MCU firmware. USB or serial-based MCUs require [`udev` rules](https://github.com/clearpathrobotics/clearpath_robot/blob/jazzy/clearpath_robot/debian/udev) @@ -36,6 +37,7 @@ to be installed on the robot. If you have installed the ROS 2 packages as `.deb` packages (using the `apt` or `apt-get` command) these udev rules will be installed automatically. Verify that `/usr/lib/udev/rules.d/60-ros-jazzy-clearpath-robot.rules` exists in your system. If it does not, try reinstalling the `clearpath_robot` ROS package: + ```bash sudo apt-get update sudo apt-get install --reinstall ros-jazzy-clearpath-robot @@ -43,6 +45,7 @@ sudo apt-get install --reinstall ros-jazzy-clearpath-robot If you have installed the packages from source (i.e. they are built in a `colcon` workspace), make sure you have installed the udev rules by running these commands: + ``` sudo cp /path/to/colcon_ws/src/clearpath_robot/clearpath_robot/debian/udev /etc/udev/rules.d/60-clearpath-robot.rules sudo udevadm control --reload-rules @@ -54,17 +57,22 @@ sudo udevadm trigger The command to install the firmware will exit normally if the firmware is successfully installed. If you do not see any error messages then the program finished normally. To double-check, _immediately after_ running the firmware installation command you can run + ```bash echo $? ``` + to print the exit code of the previous command. If this prints `0` then the previous command finished normally. To verify that the version of the MCU firmware running on your robot, run + ```bash ros2 topic echo /a300_00000/platform/mcu/status --once ``` + (replacing `a300_00000` with your robot's root namespace). The result will look something like this: + ```yaml header: stamp: @@ -81,12 +89,16 @@ connection_uptime: nanosec: 338000000 --- ``` + The `firmware_version` field shows the MCU firmware version currently running. Ensure that this matches the version you just installed: + ``` ros2 pkg xml clearpath_firmware ``` + This command will print the `clearpath_firmware` package's meta-data: + ```xml clearpath_firmware @@ -114,6 +126,7 @@ This command will print the `clearpath_firmware` package's meta-data: ``` + The `version` tag near the top should match the `firmware_version` field of the MCU status message. In this case, both are `2.4.1`, indicating the latest firmware is installed. @@ -122,6 +135,7 @@ In this case, both are `2.4.1`, indicating the latest firmware is installed. An invalid `robot.yaml` file may result in one or more of the `clearpath-*` systemd jobs to crash or for the simulation to fail to start. Check the ROS output for errors errors with any of the following prefixes: + - `generate_description` - `clearpath_config` - `clearpath_config_live` @@ -194,3 +208,9 @@ names in common. See [ROS 2 communication](networking/ros2_networking/ros2_communication) for more information about configuring domain IDs. + +## Mixing ROS 2 Humble and Jazzy + +Communication between Humble and Jazzy devices is not supported due to differences in middleware versions. Attempting to communicate with a Humble robot using a Jazzy computer or vice versa will trigger errors such as `eprosima::fastcdr::exception::NotEnoughMemoryException`, causing nodes and services to fail. + +It is recommended that all ROS 2 devices on a network use the same ROS 2 distribution and middleware. From 380dcb0e8250d007795881a1a87cc0acc43789a4 Mon Sep 17 00:00:00 2001 From: Chris Iverach-Brereton <59611394+civerachb-cpr@users.noreply.github.com> Date: Wed, 9 Jul 2025 14:24:27 -0400 Subject: [PATCH 04/25] Add docs for setting up Ouster lidars on Humble (#431) * Add docs for setting up Ouster lidars on Humble * Remove cap & base types (not supported in humble; jazzy only) --- .../yaml/sensors/img/ouster_os1.png | Bin 0 -> 40095 bytes .../components/yaml/sensors/ouster_os1.mdx | 43 ++++++++++++++++++ .../ros/config/yaml/sensors/lidar3d.mdx | 4 ++ 3 files changed, 47 insertions(+) create mode 100644 docs_versioned_docs/version-ros2humble/components/yaml/sensors/img/ouster_os1.png create mode 100644 docs_versioned_docs/version-ros2humble/components/yaml/sensors/ouster_os1.mdx diff --git a/docs_versioned_docs/version-ros2humble/components/yaml/sensors/img/ouster_os1.png b/docs_versioned_docs/version-ros2humble/components/yaml/sensors/img/ouster_os1.png new file mode 100644 index 0000000000000000000000000000000000000000..933859597483f3b478e06869f103fb38e0adbf19 GIT binary patch literal 40095 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∋#CJPJ{FOs#{Imr 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 literal 0 HcmV?d00001 diff --git a/docs_versioned_docs/version-ros2humble/components/yaml/sensors/ouster_os1.mdx b/docs_versioned_docs/version-ros2humble/components/yaml/sensors/ouster_os1.mdx new file mode 100644 index 00000000..49918474 --- /dev/null +++ b/docs_versioned_docs/version-ros2humble/components/yaml/sensors/ouster_os1.mdx @@ -0,0 +1,43 @@ + + + + + +
+
+
+ +
+
+
+
+ +```yaml +lidar3d: + - model: ouster_os1 + urdf_enabled: true + launch_enabled: true + parent: default_mount + xyz: [0.0, 0.0, 0.0] + rpy: [0.0, 0.0, 0.0] + ros_parameters: + ouster_driver: + sensor_hostname: 192.168.131.20 + udp_dest: 192.168.131.100 + lidar_port: 7502 + imu_port: 7503 + proc_mask: IMU|PCL|SCAN|IMG|RAW|TLM + use_system_default_qos: false +``` + +
+
+ +#### Package and Setup +Ouster lidars use the [`ouster_ros`](https://github.com/ouster-lidar/ouster-ros) driver. This is +an open-source driver, maintained by the manufacturer. + +For more specifics on the way Clearpath's configuration system launches the `ouster_ros` nodes, +see the Ouster [launch file](https://github.com/clearpathrobotics/clearpath_robot/blob/humble/clearpath_sensors/launch/ouster_os1.launch.py) +and the [default parameter file](https://github.com/clearpathrobotics/clearpath_robot/blob/humble/clearpath_sensors/config/ouster_os1.yaml) +in `clearpath_sensors`. diff --git a/docs_versioned_docs/version-ros2humble/ros/config/yaml/sensors/lidar3d.mdx b/docs_versioned_docs/version-ros2humble/ros/config/yaml/sensors/lidar3d.mdx index 4377371a..0ae1a328 100644 --- a/docs_versioned_docs/version-ros2humble/ros/config/yaml/sensors/lidar3d.mdx +++ b/docs_versioned_docs/version-ros2humble/ros/config/yaml/sensors/lidar3d.mdx @@ -6,8 +6,12 @@ toc_min_heading_level: 2 toc_max_heading_level: 4 --- import VelodyneLidar from "/docs_versioned_docs/version-ros2humble/components/yaml/sensors/velodyne_lidar.mdx"; +import OusterLidar from "/docs_versioned_docs/version-ros2humble/components/yaml/sensors/ouster_os1.mdx"; Three dimensional LiDARs provide a pointcloud of all points detected by several planar scanners at various angles, which is published as a `sensor_msgs/PointCloud2` message. It is important to accurately position the LiDAR in the visual descriptiuon of the robot to ensured that the scanned points are accurate with respect to the robot. ### Velodyne Lidar + +### Ouster Lidar + From 8f11b776482573a72af46a87fd8b086d91599ff3 Mon Sep 17 00:00:00 2001 From: Tony Baltovski Date: Wed, 9 Jul 2025 14:54:25 -0400 Subject: [PATCH 05/25] Fixed typos. (#428) * Fixed typos. * PR review. --- docs_robots/outdoor_robots/husky/a300/maintenance_husky.mdx | 2 +- docs_robots/outdoor_robots/husky/a300/troubleshooting_husky.mdx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs_robots/outdoor_robots/husky/a300/maintenance_husky.mdx b/docs_robots/outdoor_robots/husky/a300/maintenance_husky.mdx index bf7f8ffc..dde3624e 100644 --- a/docs_robots/outdoor_robots/husky/a300/maintenance_husky.mdx +++ b/docs_robots/outdoor_robots/husky/a300/maintenance_husky.mdx @@ -105,7 +105,7 @@ to ensure that any water has drained out through the drain plug, and allow Husky The air filter is used to prevent dirt and dust from entering the robot at the front air intake. It must be cleaned or replaced on a regular basis. High-dust environments will require -more frequenct maintenance. +more frequent maintenance. :::note diff --git a/docs_robots/outdoor_robots/husky/a300/troubleshooting_husky.mdx b/docs_robots/outdoor_robots/husky/a300/troubleshooting_husky.mdx index d77f1a70..f929fcee 100644 --- a/docs_robots/outdoor_robots/husky/a300/troubleshooting_husky.mdx +++ b/docs_robots/outdoor_robots/husky/a300/troubleshooting_husky.mdx @@ -39,7 +39,7 @@ the image above). Gently lift the front panel up and out to free it. The serial number is on the white label indicated. It will be of the form `A300-#####`. To reinstall the front panel, reinsert the metal rods into the rubber bushings and press the panel -into place. Then rotate the two thumscrews outward to lock it into position. +into place. Then rotate the two thumbscrews outward to lock it into position. --- From bd107219cc301b928f8f9658fe8e9ee4de96125c Mon Sep 17 00:00:00 2001 From: Roni Kreinin Date: Wed, 9 Jul 2025 15:34:50 -0400 Subject: [PATCH 06/25] Added more error messages --- .../version-ros2jazzy/ros/troubleshooting.mdx | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/docs_versioned_docs/version-ros2jazzy/ros/troubleshooting.mdx b/docs_versioned_docs/version-ros2jazzy/ros/troubleshooting.mdx index 91e99d72..de8262f3 100644 --- a/docs_versioned_docs/version-ros2jazzy/ros/troubleshooting.mdx +++ b/docs_versioned_docs/version-ros2jazzy/ros/troubleshooting.mdx @@ -211,6 +211,18 @@ configuring domain IDs. ## Mixing ROS 2 Humble and Jazzy -Communication between Humble and Jazzy devices is not supported due to differences in middleware versions. Attempting to communicate with a Humble robot using a Jazzy computer or vice versa will trigger errors such as `eprosima::fastcdr::exception::NotEnoughMemoryException`, causing nodes and services to fail. +Communication between Humble and Jazzy devices is not supported due to differences in middleware versions. Attempting to discover or communicate with a Humble robot using a Jazzy computer, or vice versa, will cause nodes and services to fail. In this failure mode, you may see one or more of the following errors: + +``` +eprosima::fastcdr::exception::NotEnoughMemoryException +``` + +``` +'Bad alloc' exception deserializing message of type rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_., at ./src/type_support_common.cpp:123 +``` + +``` +Fast CDR exception deserializing message of type rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_., at ./src/type_support_common.cpp:118 +``` It is recommended that all ROS 2 devices on a network use the same ROS 2 distribution and middleware. From a304d0eb9ba3de39ed64cd45e5b40ca2e0f1cd66 Mon Sep 17 00:00:00 2001 From: Tony Baltovski Date: Fri, 11 Jul 2025 13:43:41 -0400 Subject: [PATCH 07/25] Added how to clear the Needs Reset state from software. (#434) --- .../husky_a300/husky_a300_emergency_stop_clearing.mdx | 3 ++- docs_versioned_docs/version-ros2jazzy/ros/api/mcu_api.mdx | 7 ++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/components/husky_a300/husky_a300_emergency_stop_clearing.mdx b/components/husky_a300/husky_a300_emergency_stop_clearing.mdx index ba65da92..04af7015 100644 --- a/components/husky_a300/husky_a300_emergency_stop_clearing.mdx +++ b/components/husky_a300/husky_a300_emergency_stop_clearing.mdx @@ -29,4 +29,5 @@ This state is common for machinery safety; as it waits for the machine operator #### To Clear The Needs Reset State: {#clear-needs-reset} 1. Press the _Emergency Stop Restart Button_ on at the back of the Husky. -2. Or, if included, connect your Wireless Emergency Stop remote. +2. Alternatively, it can be clearing by running `ros2 service call /a300_00000/platform/mcu/clear_estop_needs_reset std_srvs/srv/Empty "{}"` on the Husky's computer. +3. Or, if included, connect your Wireless Emergency Stop remote. diff --git a/docs_versioned_docs/version-ros2jazzy/ros/api/mcu_api.mdx b/docs_versioned_docs/version-ros2jazzy/ros/api/mcu_api.mdx index a4ddf6fa..e083dcbc 100644 --- a/docs_versioned_docs/version-ros2jazzy/ros/api/mcu_api.mdx +++ b/docs_versioned_docs/version-ros2jazzy/ros/api/mcu_api.mdx @@ -25,6 +25,7 @@ toc_max_heading_level: 4 ## MCU services -| Service | Service type | Server | Description | QoS | Platform | -| :--------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------- | :------- | :------------------------------------ | :------------- | :----------------------------------- | -| platform/mcu/configure | [clearpath_platform_msgs/ConfigureMcu](https://github.com/clearpathrobotics/clearpath_msgs/blob/jazzy/clearpath_platform_msgs/srv/ConfigureMcu.srv) | MCU node | Configure MCU domain ID and namespace | System default | A300, J100, DX100, DX150, R100, W200 | +| Service | Service type | Server | Description | QoS | Platform | +| :----------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------- | :------- | :------------------------------------ | :------------- | :----------------------------------- | +| platform/mcu/configure | [clearpath_platform_msgs/ConfigureMcu](https://github.com/clearpathrobotics/clearpath_msgs/blob/jazzy/clearpath_platform_msgs/srv/ConfigureMcu.srv) | MCU node | Configure MCU domain ID and namespace | System default | A300, J100, DX100, DX150, R100, W200 | +| platform/mcu/clear_estop_needs_reset | [std_srvs/Empty](https://github.com/ros2/common_interfaces/blob/jazzy/std_srvs/srv/Empty.srv) | MCU node | Clears a Needs Reset State | System default | A300 | From d65d997bd368c8337d687acf6c8ef6fba165806c Mon Sep 17 00:00:00 2001 From: Chris Iverach-Brereton <59611394+civerachb-cpr@users.noreply.github.com> Date: Fri, 11 Jul 2025 13:45:43 -0400 Subject: [PATCH 08/25] Replace the A300 thumbnail with a new, brighter render (#435) --- .../website_images/husky_a300_thumbnail.png | Bin 398423 -> 44307 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/static/img/website_images/husky_a300_thumbnail.png b/static/img/website_images/husky_a300_thumbnail.png index 9d59d4a5c7f8d1563bd36c1b6670fee9f15cc9f5..c50147d75a35169246326645e132493c8054b89e 100644 GIT binary patch literal 44307 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 q?fLl&% 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 Nqb#o>S0QT}@;@5GBV+&o literal 398423 zcmdS9Wm_Cgv@Sfj!vuFH5F|hd7Tn$4A-F?ucPF^J1b24^hv4om!QK5#^6cx~=lq11 zFEDgZ^{Q2?Zduh~^0Hzmi1>&A002coTv!nRfW-v>pnk%`g8$>_XE6@|kfWIk3CWuq z8Ug@jeidnI%2+aW_Z}wu$mtpEsWRi7`x#Vl2Gbu#vubU4sr;b@Lvd$6KB)<{jUQ3d>px=c~?P0b2>7zC*4l2);wbfgEBiLTTx3 za42=~@Bp+>U&Ps0$ZbQ)d_kqIcXI+ch?@y+ifg&bcaODqi$H!+PXGYuEaw8(*GF}7 z*xiwymI16Q+Isfzp7#ZUx_DkKo*OpJlBFq4rsrt$WU|0~8eq>&I5LBc=a~@`Z&!WboHO5NrtL zB<3EL@-Op`9>y~n=z00LU&D-oeLT$|h2pW}Vu1OdsBy6H`{9kC2bpm%-y%Z~jFx;4 z#5o!8DW(~}3dY|}zzx1*6u*Ni@<*mKgamiYu|-AeQ<@KQCOfR}h$#f2a1|~i`8B^Q zlTt+e5n~BAe4q;a$ZRG$6&pLHaQQVLFtAzvy)SU`fCjG!2;vA95H{loD5Rv5TfxD? zAWE*rv3j+|PV3_f8aP+Mzu3@#e3Kz3Ai|-)-_YtGc`O?4d;Wb&6%(Nk{VW144EN=r z_Wfp?#OD2U+{ZN%O;PcM5l8qdG@zln?O6yDAdLrD8FX=Z|9X06lfAxUK0yeasK08hXA9b`g?mvs$bO!w&Y@m(C9AtP9E& z!gdqN({F<~6@nB9eaehqJ81Gi+!jlUC>*fJqq}ooECczQ6y}%z*BI0<{2zy4IZ1JL z{UGgtgpffw@R$J+7LpUw79So`k2~qhMOO8;V?F_o1xD9JvMn$pwYT9 zU7=073@@NZ{W&j?x#6xisnh{gU6vQH?J(zE9@UVl-EbEOp0IjdY8NOk0KRV6MQBhL z_5)O7H|k;#DSU7Y5V40}9UkoiDY|el4Uk1RNS%x=6ly!LnT$9T4c*r)21tnIMQ^mBbnC_;ETUBsnQT(ZD2Vm!4PU~2qBrN8ObhU zix6=P&Mwqx$V(0&6aq$wOdb~#LPTIno*om8N>D-`(GegS@+Fs^25vY2F-J)LgCp)Y z$VC3ZT*YF-(!kOj{9;rKU;NyU2gtLK4FaaQ4)WBF#7DvIxx8io{J=_nwOj);O#A>F zL5xZ3gU^m6X@P|~<_F9-m}vo7Lf4a!H~5jEQ_v^O7~kiGmm1^9BD4shyWUW1(V z0liG<16>>`fOvgG=^zaQ=M;=T!H@b7>OkyZ5d#Eu^rT>80~mD#Rlhj{8FhmBAQXLy zMQFAV1_R4QRA=8zeVj#F>wa`hl>MO=t60m(w`gfYpn zV|~R%3HgmkYd^GvLJE`R;VSrZ_|b?dQyc-QKgfid2ovN%O$8l@Y6~Niex|4-7X=!I z+V>IldG!hPeceX*j(Q1M6Y3h^8lo=XDO^t0NiqKc1oQ!NiQ|GRCKj3!Mna^Pj5D@f z9O4&H5mQ1;l437LQe5R1tRh@V^jE<&GKN?-akyVB(^!XLHv&%-ctb!V=r8zq(b9s2 z)~u zLvFityXZgg9wAzSU!t_d-b8Kk0f=EedGIud;V}JC+oG5Gf%17Y-y~rRd=*7Y^6M3z zXebi!h7pZJeh9bZaLe=3_$UKuF|oqJMX2%=74V7)m3d2nPS8$-Dp94PbNRBlX$q&s zva>L=BC}MpKnrLmC?_N*v|Au+K$=JgKSN%U{77+hF=KIdv0gFA%vUt8#*91-VJ!TQ z@O2){RG!&4P1p)wRRPN!r>S5wrFyDm?9)JJ5sy5tDTo80BlI`eOkY_M(;SCMn1kK} zbjMGvh&mxQ!tD7gQ<(?Ej(ksF+;Mq=v-mfJ_=NdHCvx|vs;15-NhU21&JSd6NRYco znK_UVg!-!uU6~+pKSV-{!sh!b^qYOZVG_l4h(sBH*zv#YdiV~>M3y2hP5%)gKKOUf zu3C0G!ERx00U86IJ)XVghK)>Z z>Xg_aR0bvLsPv4gK)T?>o?(N;8hmw~@(=TbmH|$Et=~JUy%$NXIM`s*LwS71dj1$j zR8uW}v0`n6@W5XQKJB~HhpQG^R5;x0PmB z(d^Jnyb3s@J^N+@=|XZ3&mNIJ*wM|f!@JYDF$crPPI;a?tkC+ycKZq;eo^R3olf52xDLJ=Ex=MgQzD`C)CDIk}kb|y}^whzOISQ z{R^arrU$eK#s{Yt5=h}LU??=LUwoGwkW3tX7oHZH!5^YKQeVi9ycxq2!7q?W5Sc72 zMs|n_6I~L1FHp1RlOSDg{G=2vB{GH$`Wbp5yd1)HAbX%n4^GdwEwm5h-$N{ znG8x^vQE;@kCniM(BnQn%FsZnSP3gi;y6+Xe@ZDuGV@qui9eKF)4Xvwzq2tV!#`5R zPD{A`BA>Qbq$=^7l|CZ9jrklKEV1*;^oI@ljPjIRbSAqT$Dkgh4BULE6ghb9Sg&&_p5_S?SBq<6K zr$r9)krf7LTs}q9I3$P+dkmWnf7@fk@JE;sHs1c8#~jA;o4Mr6Arl^p1`8*%8`C38 z(3gIu0w!Z-A|qOZQhf`33zKhyjJmJ*keIa4^pIm0*uT6`aA95@|#99XV7|3r)mjT(-+q!y)SGlNWY zjo*e}A`pw!X@iCZuyVqcj7v(DbxJ?YCACH$$r#I1l!VP9Tkzh(H)LqaSrMCbqY(ai-AkOmJ*g6 z7o``imb8~VmjoBTFDfqmSVXN$teLA}t#hiqtwX7kspc_CH}vRl9KOr6jv(rmH8M5c zH^ebaHdHfQFm2LzF}l}B(~s7dGnz2s8}g3qNb3me2zVub20qK&!JWu0;Vh{wf@*B- zNjX9Z%LzRRzZ3o-JR*c8Od^ye)FniYqKPt!vWg;)QjBts!j8HoOy&^fJhPK_Xy0@l zxlA>T$FSSxD9PZ?AkV1Hu*i7Iz|M%u(9J*|rx`aICmiq1FwVHmsK~(Kfa4tGIJf8h zqrIv9=ViF1KWLNuM~wr5-Bb%^OMSC+vsKG#^GkD23wraH7F7Gp&C)%KKS$fGeXPSy z$(F&#R0|%JRoYss@HXh|TA5|*x4Eyl)3^t?8@X+`-?%?;hjD9gi*Orrqi|bu^Kc7s z?{K5JWnI!=dj4734RS?jw`zxMchsfQCDLWlh0~SOg|$UKhgkPqM_;#CpJ~r*hiYGN zJHO=J(%IG7d;Q(k8?u*wb$Jzb{prH|GWBBV+U)}7O60oWYVR`fLghO1&+&F!pG)RB z?}k$6f+xx2{38TkR`yRlU%fcJRK4U4|BbMX5WYaZEWQ9x3@8%h2g(E`zvI6%yqUkb zy&1oqzxco~K`KM&LfAuyKv+YtK!`yw`sw>|_&NFsK^8!wKw3j~KrTSrAW0*&W2%36 zAgdPYomMw{`T9*JwNR|?7w3$pxk0_KCR;^{s)S{p)AZ-50W&l+2QcN~pEi*y#*hy& z(9qH_7E_tg9*`bT;nL$$r+iYURR6q4vq-kc$U*C>XQz7cbJMh2Pf(mJ9M}|79Mc}t z7?T>49}_KKEblL$Bwr(6ARjNEJef0zk{cp85wwovh4DleiDmKu8<>Qt`hgADi0zDl z3XH<$CH0hl2($~ZYqQI~2)*FhD(bNfTnO}u$PrEvb`_x%P7uBkE*I7oei6wNRun-L zmJOYasE@b_iws@GNX61X*T7gp7l}|5c@#O!qs@cOW6L|sL!QE&a-0&J`Z1-Hmzfuk z$1YMNyf2b0;uCrn{-KYfFR*{NufA`zFQd=1zo$R0|EfPKVlJW~;x_DO_!>?+h6ml9 zij@{2_4vonG+=#2W5Mm}8j>nRA&l9?Bn59&#VA8H;>)a?K|yLW>_v}cC!8mM=zXN#!d~KD*dKLZ;vk#+1N}?=Yy9(jyn|?h z9D{lh=MXCpy$}r%l@O5-voRYnYr;>$$-~3LpTZl%b;Aw9OTt4i=`bf~?r5TDc;z$H zUUD9!5GwjgDa(K5{3Yn!=!SKv*RRV~{whXA!ta3nWL0d>WP76V6PrF1rsEn`tO(j_Q zta!A9zO1~ATt!0}MrBXsR@qvmL%CN4tr)vRwWP81u54X7Q^Bj^NySO+XZb+U$BM!N zliWXr*yTyTRC81-okc6uPFt4~mh+a=mK(n*WQyr1>IkiAuc`2e^Cbx6O~yGK7c z-F~_ixn;ezM#+PX4o(Oz3=RrT7p)ep9T515_|xPk?@t2!8T=~NPIE|^@Iv3h^1`UX zpM}XL%_eDo48}Ca>e2$znpjO)lUdp8CpE1!^E8Jw2Q+0hAvEnZTQsTb)9PCrL>mh0 zu^T$gPR-&Q9vh77o$9UYJL)OwXBr|Jj_W7P^`<(@UbUYC?re!NP?J%0#DoU52W6;* zsYQz9i!_U5_T$DGGBq-dGi7ulKZjH{SEf~_R+iaR+ti+st{I`TLOIW9WHIbJw+ zIntZ+$$3|NuX~GvSn}QAALpOw8rKI2L<&T8BLvLAcEGYDn;@^_zkC(OtHle)E5%R4 zYsC-7EyTsfo5y#?Ma5fZ$zXr6YPJ?;LuZO(nP&gNbj1?RGR#8DZoziMp2n2Ms>$|b z9Le&BE$PermqxZbwx}=TUwCa+jaDtWO}GtT=3UpIt$Pf}4e|`Wn{S(=8^jqXexEj* zw*IkZv~2Wyx9HPwLa%aGYN+25@?ExV1# zjBSXS7cnh}|08tItnSgx7# zSn(Kxbx9G*a`1@gu;}2x_`t-+^}?>g;XmbLD(MpGYHS;_1X_A494nqH zk}GwMLXBuvIM$#QveU)W17}U=M(5|#?Gwb4(vxo|mCG{A9gWWh(T)4{$+ZhLO-=Vr za`k*hdX^i;eBb%3-{-w&AojbCN%!?PH&1{kF-LZNxl_4=TZO&ly`{Z+V&VBQ`L+3} z`5}hC3>ytg3?p`Oc6bJ125n`qTzM*M+ziFl9rlvs_YkbB+z<%-f3(UsOM&CT6i)Z>qvs$14I;bq39_T9^l z$R+xn;&tuS@_FK>%7M!H+^N%y<@j+t`|j8unfv)m=L-{8l8eumyr(>yUK1Wu&mm~@ zAq!&bgNuV})YH@pMbkySrhTRZrc3)(jPX^)Rl!viRUq41+nV!F8@wA_os3?fbFuUN zCB~)=SJ2Aa&}+*x-F@~7U+w$l+uZAlw=$nS9|NBUU+@M52pz=Y9pH`jqWf(9fbnAf zM*D{S#`|{p7W9Vl*74T#qW9o~!VhByHw1$V*9<2NvkRjP=Li!CGYad87znupRRDPl zbq^B^V*;ZJ?F=0S&5NpyvT9JxbbzcAj6o3?+f8Fw&r-=;h({NBN@@|~8Y3HHC~qe( zDsL{YHQA7Jn3I@us&7#(TrFFzWG8NCVyAJjw7Io8*j?7$MpjN1N9IoUEZ8GhD?}?a z9;A)thJW=56Lk+h5rGxa3F#-|7+M8F2k;y56ZwrL?zc#GY35PxQ7(Gka+-4Ha=sIr z#j@(3cHf)jo86nOUG*RQE_Svmw$yrydewSd$kiz*DQ+mV$;ruoP?S=Pi>*ew5?`{S z6a6MA!8HGHNRW!FLAZp;iOY%i$o7LSoKuopl6v?PEj=w)>6cQvBhlHq;;N|wvvsoq zvxtM&DTyhuya{2wsH|{rk`AI?bPBwDk{x^uym%5Nf*A}4Iuo)#ru1a0G^#xFpV?^G zcpB*&DV)DLvpF-M;tgUH;hGZf6C`80e68d>lU&VjPHbLty>mTu&3BD{SbXSt7cgHxRY?oY=rlbz1I->kW9Zdb_<2(2Goq6pD0; zd=jA!AIDmw*Q8nI9(7c|s-7}9@0AFNCgSyQJ-K+`^Sm+b8HR8wb*>LV$^grKJo3hG{>8VsX8%RLN7PRy1*9U(!S=t zBFcha^}p(j@^)2z&od_(eiJ>uALoxfb(@fxI# zuFCM0yU3E~G4LUO5$+Bfz(|%G%}}T7PeM$zNN!CUNWxBTOo~e4Wqj2T{gj`Km;9Je zkdT<@l(_cUL+P$5BVRjrwUxV=yQsa=Gsm;^#So^{Uo}^yri#39+fGEP->m;S{8m!3 zz^Fi?z;@4XIDGhQxGnL#lpjkjQ8Lj>#dWT`w6HX{v`A&6G;D5rE_iNz?)O~5oX%WR zS#qh1MYBbM<%va)1)_!Q9P%7@#iOcJIaU>G`E7|z1w&PbyhqcW4pH$=g;JSAc|k&MG>-18J*rwdxsmQi{msIHJljkg`3hd zsg|Z$nHshxHc94OL?oLtvecT@M# z^mW1{tAdNm_3m=XmS`9CH)>r}SJX*Va1-&i+ zU4A`aXO2(zzTk4u5z;G;$!E{gk4{p~=`Jj-4s8T&RZe{8>n8@s3MVz^VJDocGwUqt zb+btBj~)%~Yaa3LBOV^^BzNAep&%OXsolKy{*wr5MpPY7XZ!r<2DzGvO2*o%=Bf_c zymM>5RmRDxne(OWWxb`11-`X+Ctq$-9(`sYw>*=b$>vkncGn$MmK1)nHY1fTZQHEF z;a0&!K%l@=&Jw91lWn!RozcbKX7-47@*HEEwrsPud&~3H?%sqNyxM`R=$f`wdafP1uij!Tv{mu7ce07%#}n7#BN5QyTavV~-o3#d1rMR*6TGqiu*qm; zb~n5n7?Wj}Z6wG+0pw}UfSGzgMok{gm+loOUCOy}Uc z)Ze~l*k(A?Qf=z7CF-2BKOV1`TUlH|ZyK|K+u(I=yS;ljb#ak*5kAA+KxmJ5*&od$ za9LjsI!9b%Z9aBk-?y1rn`)~%^Yf_pc)IsIH(s-BXa8Y)xqjy5_w0V}b!NKG=jQY9 z*7KSP_k!j~^1wahX?N9q5fB8&6%QHj9^VJS^EQ%TuO3kQ)YA)AM*y+ zyQ}vr)w9%X@)_fd?mURlyQLYx0MCHS$b^l`P|vuk^H49YnV?m#7pXX^iKalN?1-p656<~4nby((#wDwb-d zAf}*KDpM+6N^e7PgBIlEmVVWEcRJUEbe`kVb1uCO1EO>G(c4hkpaZ$MWj}SE zy*AuOj9kDMbG#{Q1;*;`C$@NUH+y-Brx9aoB zCFjm{$pkwuNUOI}qGGACzcR5(N7JLT@ipkK|3GRoIgc?@kJ$V1E%CJMNo}GkRWH3W z%17r>^x@<4*p^mL(~+&v26m^=hDc|+58Au#Rmc8w{5i<`;$`xA>pg#SaEavJ$Mf~~ zmC|j|;6!A$44>_rwgz?iNCj6Vb;Uxto|aF8-zspUdO38RW({}IwXvq-Q?q$HUagx^ zori;o!!^zXy&{T0#p`^v$r1}PY zA9}Zci@z#*n>fgB@~QDDcwc^(dC|JQU*1?)DYkxU9CKcE-n&aY4I*+C^BlCGb}#ZY zwKMg`ISD`0JP|!hIzv6_TwHs-2gUISy|84Y!gO&G0gmASv$K$-*vNqX<9CRPyiCJ9 zM<*))fD|AhETHVVe6oh%sJx%K{|W*iFp$>QhRf&!1@#F6aG2PDO*<&TcZ;&qjXSR2 zF73aV#>vXbee^11DcU%5^GMB-T|c}(jf~Fhi;8y~3|k4a-Ubd@pDZpe!W*hW!9t+t zpq#crA9R4=bet4EGf=5Ws7&AQD2bWbmpC5JS9oM^T)*=ntgWs6eP89@4=@VB3iAK^ z@EP)dFR=ap8Qh z(Z!_>>+c|u-+~|}xUZ$Rl0h$fLKq*Vt4GV}EzNBj;dt*`yx&14=cc7)rR9x{^UEvC z<(-}D%bHphb#*hJwVUnwC;t5TL;Q)B_URT1jr*cwu1qa^d}6|OY-s3U{u~NCI*|Ck zoacX3E|zchY+)FkIKO@`sVK2;s-0H6cbne*-Dr0CJ)P51HTzvoAAU+*&$hza`ZXA+ z)nxNprc$PQN*4Gx%qP*VzrXZ_VS*8#xVflJyX3p?%aZjPTbDJZq^0X4l0T9beSly0>R(ncZCPP)C2$s>(~{?@LH$oc#W|JAYwrh@i~urm6ujF zI+%_(`^ZU3*O!k!bH6AHrF&(%1_&1y`b)l}m z1Cr7T1|do%(TBOiGcD87(Uvzfu$}<(s;jHnC@6Ly$)LgaY{NkO&4h0#URADOGp68d z2A{3<`rVZfJcGQ~;WU*XJosuK%71z46)Xl4c?AIxNil_?5mCuZCbHHN6B3O6O(XQ< ze>WLWD2JkW!z-w%nPw6ZfpbN`Zu2s}-5+re8w~vY`?r-actm8p{~jwqrW`7_6$}Kg zPuKm`)s+Q28Tcv_@V}wF5RtKFf9waR+tfDBt1dK(1D z%EK$@sOab=mOp@j03;IhK@?vYmSF9b?~kS+n)r zA@HejyZ$5D2n0kjLjT=ST^t1v8)~|4#sh!G(&=v8F47P~(1`0_pYN6u>c7&_HxHMV zPOSL5IaEwPr^IEPER#uC%8mSLY;-=avq{fNH{^0TZ4ASpUOwS;kX8ZWdPvG;H)4?Z zSXJ;;)PDK$#Y)2<*Vx$f{_*_=OVH8Tx%HKqDR5|Pj7L#f`Nk3)ZzClorDK(PO;1Ob zTo$)^)9Q~1qz^0YhTU)^o-tk6kiPbJo&5ju6G;LUgqW+GklY5LkMfb7l~q&CG?_rU zb&&;^+kP8bD&y;K^!PY>YPy+aM(x_39>MwVxV>3kPv$tJGLq7cbF}yh?YlZ!&K}Qw zrX-$r>i4H1z=nnf8=}xIAbGRJM`id}@atn0M|gl(6-C9kX0xe0*$&f#j@{K32b+#0 zaNb(NS=Su3IUEmwWKe)eivJRb%bp+)aUkcQ6o2Y{&SPn2b@HnD{d-=8ddu{mv22pp z4HBT>*ZGAu+VD5Q&r5C!$31%T=91JmCE0k>+3bDTwkMv^gT^;dBv;cJXXlGIGcGnS;`A+#k< zqo-$P+Q4#gRj>j+k)6-Mcy^hN9EFLcNyA$xq zr#pbD@xRFIBjq7ND~H1on_}Gb;d2|vZkCT318L~#%fYzV%n$EZvpMnpGQs{bw(&BC zdU~(vB4Al%#{GMv>DCqoEj2Y&RY&KvbAEa{E+#InX8_8VIm-7h?1!=hBJx`)z$-Ys zwKp_0g%AmjX7RMqefsnpo(wn=9uYBf*1QvCqVh^3JoydTJBAdI@I@qxb^KSO#Qu0D zg+9R7-uJ(Opuhup9@7QN19BH!a()u9dz)Tv_j@3a0qJzTANTO|o~Dy&F$o`XHS`$b ze)X(u93LMe-~#jsQ~Eys&HZta32 zm+f_|rMHmR9tgyZT3%lM zZHu3GZyx7MySqlmM<BFg_o6;A;Dt-gr~Ox;3^s_#$ZsC3S}Dxf?*f%891r>ul|hxw6Ofj7g$_T;lz;g zghckk!66zG3+puvNX`r99ZGC$Y-i`YKy`2@>a#vPvC{ND0s_L_+PSyO<4!c6cM1a> zz>wr0(Ewor5do7v@E=wO`Thqyx}fuq&)?3@E8hp$J1?_(0umB1m8b&VDsFi^ORYG3 z-rAp^`Xg{|38@b(0lqaq|0~XzE_pI=O;>8Rf}sQe3&i~g7~zrsFJMGww6?YemY0`H z#Z${UV|~GwIyyM0?(6GY&rapA&wJL+_0JlSO8!hm1D2_g*8ias6Lbio!~R&E)A2%` z0f5v$7+uh6sdjHJmBo||Ll9X{P*Ct*MNP+8Mn-0Sa&og2bGd!L3k`Uqu%fo*zmBxB zvU2MM=1p9*^AG>!*%eIxYI+_OGO1sJenJ8ADLDeo%&h8>baVoNA1Lr)gaL&5Bw}IBFE6```~{7#>g#&&3hL_W z>9Mi)2JOK>L|k3By~N~MY>5>KlCsiLEAaA@`Miy$vOIDA4GK=(`meS-5CZSb*I*Rz zY56PETQ0nrwaUTC!gwf#l*B&fx6m{WlqaAdK)Z(gdIFn2d~? z=V=y$7CjwT`cJ4nrXZj_H%t92xHPetED* zVh&B~|VcS1N#z>rDF7vGDTz zd=A>SgbD(Vjg8H3ue|`bCpvE{s$86$erm#RsWBImMF6Cab^GlnN7#-yiajy>60805z(2gxs{b;Q+s=R44Xa=80B}(upMGsS7N9NmsE~7Akbt_U|E=nX#-kI$xJ?yf2XmX#O7= z@4F}nz8T<~@^w|7Z1UXeX{NELdGSkKZFykOU!77?`pn8Y}JivF+V)@+aVl(kvNB}e~kJqxS=Sz)c;>VItpBk+mf21E0 znKH4JD9W(xp`C2lvRCL>YAh{TC6Kw_9Tr(1P8ZnN=|yl`Zh{I5`u~ikVm#fdYJMZf z^8XJEj<5@DZitn@K13@=(^B{bM-USmd)~yzNSibe;JZbk4-TNKm|PhEv<7)@!TdFD z5@BJ^hub0xpJmu9e#e1aYbtb_qJDl2rjcF-*=Bo;zwUE#axQsgH0eW3+ykNEkXcz- z&o=6w;15J;^>LAdfUNryT3Q|+i)4K#OLcAasu*A&bMq5h0{kdk`&cU(%Bxjr`oiG4#bqd4 zC^w*pgu>d}yQ>1dRxoHcPl5?sn}7u6sWdT~7VqXfBZH9c-uo;wldHrCckual*v?=@ zU4E}u)>pS$20D7jx%k&hq0s5t+A5O!w|6_R#+w4WxPM;5x0p;ByvzyPYi-tGOs#Z^ zHhYEXxGyeHKC4utrHSb-15JI7FV6EZ-CQeqcdE5Tajggl&HnMGXKA$~%fC0Ztd@9G@OD9uC zLhAT6%|EE#ccKBdz$YEd?^%;f*;(Ezdk?Lq-0WUQ|oV24fkH#5cQU=p_sOUTST zg@k?8f(S5KD}(vjdHx>B8(eC|Z-!q#&xRC&Eh~ESKql<-0_@>(A^2Y_b=(E)@%ZU@ ztc?bM{cm({m=MHN4UIrV+@$QcUFx%Z5U@-$y|~~vk;_{D00a~L;o;$#Yo2~?dHHCe zT=p6Ejfl~s0Lu4d5<&WZ^a&{#>JP3SfAADeQy@PDF19)y>s4qrSfG(X`||%I(1$?z z+@2>b+tYh;EZj(NwRgC%)nG5pqURp5R={YYk#LLiIRb>Hm!`UX*@1;%0y|x4;(P94 z^fmxj2;{$%c9DT;>#wPvo1bm=Q3Kn%=uagjY}AYsU=mv72LKHrd(&&GCs}$}5`f!a z5+D8S=yXf)f6ExaW%OSmrB6r!9%_nINXNROp|SDKn}LgZa2j?>48Lpfb_7SaS|a{q zi=nWkRD_l%Co97k_>Cv4%Q&juR$G){r8$7`hQ44Z*u%J>^20+!^8B0N4stG}Xq+Z_ ziDI{&Z7w4|w6@#roDEO#>fsCmk*~e}pk-Byyuj-V1_s93Lj8r6p-{l-S{r-0ufSl6 z9UO^9sOtgdI@4l=-Gik|5P@KQQ$x#+AegfZ3=FJAMF(I6;q@K=v3Dfcpx~No${EPn z*E~1D=G7k@-LkJAU~5@hS~>)TJ2^R3-imq&1!x5roP(Y5wl_LDy7og(w;02EDMYwN zooU?=2NSFnxb=X8Tx^}jtE#5fRwbADr9TN1Gtf!zt?O45v$y&b4vKPVfz*XB6?sUK zOK*|atOt}+RfPFWp+>;HZiyEc1&hOI@I?R$nZ(4qW#sw<_e(3G54O|D7dH1{>6W|`+B-q>x^f}XT+V|X@uj~s# zb?`R4Qx*MMEIqEQ1DhPQBi7V%WGCg`P@4PYfb8{(M(ph>f1i7Q zzeD14;$K}`Tf08_f!|TS8%$%s{jZ@{b5-8ATXwWqFWveeq97CR#Q_*L^GtYPjudm*=i);>w28O-baVsS4__oRg~AyHYi|LB>%W&T|mY~Y`umv(7{NKi}kh#w<0bCToGZbSh8p@gXUn$iLF9CID3wkU> zDtNIBEm;qGV=Ys?J#$I>^fHtE(w9U(-c+WBx%9KF(dtbho~- zErN8~=JU>O12BHJby*~^J+H^0mIFIq%(insIMH2O#7h6>-L)qq(qezW_l3q}-5*d} z?muR*WE5L36xA7H&a`&Vu0e(Pv~}m}`5-PG41GWufBX`QtABtO7g=(b;~L z*-{lK&J%)4Q5FD96={royEALN;@=^BvvgYbhiP{X5W8DrPv~<9(dmL4Sd+0{XY${GT#Gz6tGS4#l^;@ zJ-9x}$S|lXv3n+RsWzCZa@lYjl+EIpA`mo}3BsaNL$$cjdp0S4ogtz5fC4bnr<~XN z0aFQM-z&o&^n!(JUle zKX57#umkz$<`;E@gNEurumL{Of;Vd<(HBB1Q4s@(;uYTVY3sWE*> z;DFD9Ds;Q9=g|R)iHRb4@WLPd`bmCdcr4m--MWv3%l-N%3dPkv?{DiOn5=Eyzo!eF zca|HhGT<)*u!4YIDgrctG<0-zP~g^YP-P{Via@bUu!+Ob@e{5rX>R}5Xkwmau91~< zrHW^_t;hY-_2;vlFk$T+7)Qqgb>J$9_d*>)_?mm~B3GzVCV@7l(EZ$_v=kbs^)DNu z2w)-&Fqtar;0N>Xvv$C6-SySUK)TKM3SWi1(@Mn9&Qj7oy_ly1F%lGYn5`KHum}CV zpzUD|vMd`-=i6BO8hQ{SgUC7HU~Ah)atgxt6}|y(>QmAa< zxNiTbn<7*mB3~e2hHJxnB`rN|bsyh#T(5p;JcDz`WHkGl_ig)epO4vfw`n9bA;k>r z50ZsKOO%#!KK$wuThU<%PfJU$0GqA0#X6=&cPZ);9YxKwu`HgI%GM*=Hs`t0nEM?@ zaUCr!ODQBotBv)J$}a{zePMTJZRf4s3!6KUcW_=hNX?SzE}oJSvd&1Me`K@AVKtCUTiasR#8*ChlQ&%nP|Ln z*k9fMtGVy6-y%1l&o}T_=lSD03(w8<+j2YCTfcFgt}fM8>Y#c(QtTAyy-gn-AG!0X z#ZdS$h}ExYb?i%4#MQsf`DoVX?17$NH$dBO$}qW-!FP>p9$Wi-=N%K3g&$o;5zbiO zcSznQc^162e#yVQ3Y}(xS!DGMLkdX|DzwtY`OJ~*myahR+_6?94`Mzm^A@-%P#Jfo zD2GcNjx^Na#qW396NL24z5mm>LC`1q1OM(nd@yKb44|Dr&Qxc2tgrW%h2=h9{4Jw~V9b!trayfsH8ixKS`pX2-a3aITlY9s)_ zz;M@h?_*}${#u!CJk-hk6~BBYQeP#;3}Es&U3LO`{k?GF`uo%KpX_%uI`tokGT;NU z)eI{-PPb)LB2J4Y+t#_a-7-CUzH2d`r;W8sk^9^nv5BCEI^I`}0Xo%6#|TF_)GKq+ z{f3Q~0kBnI)I)X$`OKGVRDKuatMVfXA};keo5csBpv>>So}|`(aajS`>YaN%S_&NS zD$nJ0E;{UwJ0+skFGCIlHyqEmIN%WJ4a;VCZhN>#=TOZ(Tprz>I(N1%XVN`P`1oM* z9~7#3H?XpPCS7pn^~U-&u5st}kjv_R&f?A(X4C-b8=K6J#sltTWD$LHH2a~TpwQ+b zo4~aCjEF@`uTdN5r!G8qJ;AdNn*?=8t^+lYd)JX^+hM#vo^|>8X=QCwUQ)7FW}d!x z7gI_`#+h$sdD%uJ2&VBlpd%?Y)qq-3wndc(gIcEcnfDrx?TN|!uE+#dE-S;RWrt4hEH~mYQwThJ6UwXm{g* z_U7gmbP0agy^j%bm6zAwgr{a?x1O>cpB(*ow>e(&QFQMKdlU2r0Y;7K>jqjVBMR~b{*U=s>+c$o-hLtL6Ow)e)C+c zt*i4et+X_7S79q~TWODm^0i*95BtduOGE0~>p?OF9sGVVxqotSiE;O5<$Q5CPf*L_ z75{m?j<3F}Lr^G009b?p0fCaB^4LGLXcsT_wv*Q!V^ z^T%_npmoQButSaAX_@9Z^mOq^84UC&*U=CDPYBy-AY8fptL#|I}TJe8rA z3bRU77l&=(RucW;E#5x_^5kFX`_%dD8lAZd6 zYR&_#nNWR!ovrykJt|68%jdX4O_`2nbe`FV@_@N`jsgM-sPh+n^;c;=eUi|wH;Zj+ zo`ku4dAzo^kSn=6TWdS*$I;7ho8Y-uMs?(Ct@hqaR5P(!Z*LLI#-JrdckK4Q8^v>( zs%T_ub)6U;#=m%<5$q&6Su(6(V6fSw#suNiVq2o3l6*ZFjl5bc_&+?obzGD0`~E*b zkPc~(Qk0UC25B%rLSS?$(k&gMODPpW>5}g52C?X7zzFFWT?6*J_IiImzyE!>-S@6I z&*OL=Cs=-U^`jt~;5l}%wq;-L%3Be_Rq2gxJ1fm?n}?MLr}gQXtlpUIGR_tVS0*e; zqb2b&DoWiaC}gJcyHNpO&uZ*^zIU-+2QrjSoH2tcHtOoX@@4d4oweKtZv10qtk6?L zTpVe`ke&G}6g^hYK7|15xL-o|+q&_wTe!(m_RWcjdQE}WR#t{4Ci79cJYk^yjv@X} zU$ij&KQBZ?Gch&Q{(=o}jgXM=WpEeJh(EU?1K)gbF4PPbp(ZCFqzO13LeEKc7S9A- zHpm|NWy#NjUZe$Xj)xT&cvS^GCf>8lB)vNhg=Bxg#U*FJA6^XNzBm3Ml798RYK;;U z`tGpz{elOzjy(C6cW&3^@)@EbB_(B{V)J4&<`r53G)ZobpJ`V4D@nvEwoL+8PRlY~ zL#1bF#~-RvQ_U{~qK~hU&1h##bZRr&_URpiB$nnK<5+Qdwiwb9M2@R#(lfC zY~8oN6c`?X?=lbS&obs)D)jZ_`z!0j5O)uKeje>vmwCw+v?30A0&kL~FaE~QO?jjp z(b~1S8~_t#54JDc*x9u!ySXXJH%nqa6*pbKVZX@jok>y}GQ9m%XbL!k^9cH%6(O4V zpZ2b$L6xgWY3%s@EWDk)${g8P4HQ)w8Q*cH=sL5PM}w5^f0-P8U@*6_4RN8(`AR9Y}i$@CX)N+0L3PyYrbJ%`*w8)K5 zvW$0|{Ej}ZAPro=R!ZNip$>Rp!IXj0q1iW%4D5R0-Ajs*#+|wHz$NCj#pS8%C`cup*{K%q?WX(geft^W;AHs~$+d{M>N z_uI&hp}5&VRzp75lfT+p{W@>YGc9dY-xzc!v)3@;)5PrLq;s7@;fk^DyT^=9F&`%E z!f(ER|8BgTjFS_ooPh;o|FMghVp1Ug%n?tN%0G%xEri58k_|d9w8m>UnmZfK`{?-X zsh^-7Z(13yh2@)}QcotMT7g!YmxBk)+R&kxfsU&hv>h68mRYy;`}abv4dqD>;#t{YT!4RDOwu#3#tQ9g-$jdoJvIC_PZx58`pW`@syTnx%i%X+_21vAO5?`KzE4i?0+oaT* zt-N*MYfs+8C-d+Qj!2vEf7lUeca2({m>8Xj+aho4@qF()M|~P(JYJZ0o6Fa@L$0g? z%;KQN0-|&js82Oay_dq#b&8u(j1PCtl;S#XIw^Y zTXqechuX4N?-SF+oz~m>3s=+)?LJ(uf|9!ZEFR&Bs3x#XM*TS*+);94`D)wg zCyaLKu?tfJG4yl|EOe!U(pI|MEo*pjeC=%`+0yCG7ts@m0mgnUazNfoR&OuJU3~!w6>IvWwbRY|yX4 z6F+RT82qoSk<;&3>Fo!KI!OwJ!$L5hKLj%^Zbc0{xU#tr@-~LZv((M&ytqS1P5e5|BD~O?lb5${rp7wbAzcZ# z=jSLYaWZk_qI{A-pa0|BFJ^LT#8nrWN7(Le ztV^Eb7V*{8*LF?%Y)<=E2KN6up`IidSg8?FWU9Q8t>|IA62(G-MlqMJNVgZ`LsRii<};NPacbMPS$F z4$ju5!E!#atO61GtE87X71v!oWHppZogG(K>v~}X(nx;2zY$~$1y`A`3hR8fCqJU{ zJK}AI2g%}&1&82zz(yHI)gX7~Y=I@BSNoGt8Fj#ogsDxC+e%N+tjqv4rFyfeX|GPD zliXmI!>H|A4~)pTMI0L&TV4j=60x85zQ0%?d+|QCsp2%`t8e!n!2&9Bwt2q#b?88< zY@p^@?n;80Yrz={E_Jq{c^@HDI=>!o3gBwXrYY0D}N{GtVMf=A(Y zcvuc@qq6(Lsf^cnBX;j7^9ibSAVaAC z=FAM;RARnA-+m&Ll$x;1oEzZmapLpmKnBfkcKxADzy0s^-(W?S8L=CbS#wt+3iXX3 zKG;^%OsLN7o!jn9+amayq4UaZ#C6I{M@^dWfA0dsFGPZsgq5WxlXG*UC{zQ$?KBnzZ1E}-@alTG4Ry_VzS7Q)me9-`Z%Uj7UJoFQW|G~U zp6=|XicVX^%K$Veu~~k~%*n5hl;vW&xDB>`ndRRi%h}2^$_tD zm1`lN(4bLGgG2tGv%z|UM^W#{s8vY*9EZHZ0lsFHw1sHnct$|rq+4Ybdn)n~$K3yb zhg_I-bF9>bq;`{z%Fe2>8+YJd$5Dpg9HiQC-R5Z#BCe<+*qAB4R=hS&mciZ0uJtar zyNAjC9`f+z>v`vQDuAOMMw;pB|4g8g_a&v0YY|nBjpef;oVfEsxG^y?c?ml*WlfY; zoil6H?}e#pMp@IrkB`6-JgZfY>?RzEd0p3Ws8|wQKIVZYY^p_?Ao`K`{~ByYL&l%U zUKV=M_y)3tnc-&B4+D)P?t(jNF(?~&%57EzbP*a@ik}-gitHkS*xI@N%D}e1_{G|M zG-b1RL{zFfe4uO3%{5N)wHp<9)gNelbG{PKV#N=+_n(o}i_5#*YBj(xMU^T-4e6DH zzG&;P|4Q^Q#J0Y0o0ciKuTZc##E8{${h$8Q;VK&~Ojon+XtzOjA9yolkLTkzbjcVzA($C>Jn|ZhrC@m2f(Vo?<;EZIA3V6(+Z3`o zX3S8AV{jB7x3xyB7t)^C5kGxaPNqz@MX@8!-GRq~n^IiJFvxoSd=!<1z*B!+tT6qa zZPt~921+dFuJ(o!983BbNb3ERvD-iwfHJVd3IFJovg$wt-srrj+@ANU_|{gA1+Dwi zv{K%3c^z0+Xtmg#!eD%wmzS69WxQf!!GVaK zvwO9OS^yjF|X>nCH98ofuQUwo}y;`Ic!{GNlb=neSg z2tid!uB}t#GG*dL&7(8Cm`0=V06aK@u>F*ofVOb7R%mZZSBvL-bK#&rskPu%CwTQ) zQ(0#=gX}EPS2T*jydMu~d8SvnMy6`$ZuSmPT(od zdli{S?Nte+5#rGdGfN-nmt}p_$}U@2Ic^7rQh&$uv8tLbxY+;yBm!I5int`g#;Yb@ zik&4OF%NlbOWFr+mVX=C7~oLd7sN5@P;6+&+qm*zlbNpRC)tW94%x?v0wjcvJn^eS zn&;cjZ63qCAJ_Qx%^RHNrjf{D^Gi?>1THsC1Oe8e1$FI&{xewr<=?+QWwr0z=4bJ% ztQw)@1+6e~O>^onyccytTDXFTwdKkU4G1<*Oy#vua=ehIoNDq%4k@S+dnl;Ze+RcQ zUix&pM?>b~U;MOv(9i#zvX~Exny;OR2Rd&Bd9M$#pTPx8n!N?zQY(RSjAXx8l{&10 zyvFL6J;bz2BT#5nr0{#ta~uTDKr!hIw(Z5C3|bb-VlzO3KC?G>9ypm2!k76A6HDX9 z54WAYo%G1yu^lz>knCBSA8%7fcG0i4dR;%1ym?8j_X$we%I$t2>U9Kq@xncVq0mnb zTvWWl6NHj{CB84HP4D+ryxBip3DYMv5As&T#dKqW0EIna6dnG71G)Fe<)M$6;~F+x z0P2mN4AL+I-Ag^)iALZd<=F^}`Q(l#FJyL72p*`=eG7T?o=<-ytI+DiPOd3G{|CuW zT>cL`6`ushX`VAo^B7izU`^m7TVSBGauM1I1t3}2w$EJxS>HAKvzBA=tMDdj_3OP@ zv7PK^%u6qnm5QpjR&t-s-{e~y3nQoR#wICz0z~(}V(Q~r&2ME>=QhOqC@68f?2S0s z>bG8DEWI3Vox&_EMv|BBtqeD}o3S8op1FV@?p=#tF)McLzc=G4^yQ`~JF?@z_UkDp z`L_t9?0KOP`AjAWe0bU>J>BGVi$4?9fbPiaW4<_KF(^4Z(C#?%+Y30|o%d5FVu$h& z*W-R(7{jv*4*QfnY`fGQ?lcTtQpi2K+D`iVmG*FbC{q@x0FfmhKH6+}I|?c6kX`pf zDdab3kky(oOZ$#9Y;R*2Os%%5&>KXa>enA{c}iSfbqQQ9R~gEqqT}jjt>4&6&l%Bv0E$+KXJB9Krh>eI+weXu^As-D{U#_q z6^=*0Ird0IWTv_mrJm_~al??xcYDTqFbN)V;d2V0lR3F5Q2fnJMb2W|u8K@e19)(E zF&M|`qXrH%T{@B2@c!#}L!FrcR_dnASeN+pDxF!^6|Jpv(44|a`JpQG6Z@o^4u1Pg z`k{4pxT)_iKt3W#=xW<^vF9(#Y_aMSKjUSBTu+Ce#&mp8ris!R9-NfY<#=VPLG7{;DHLuHNZ#9V-^_CiWI| z?@NZHVYX0p`=n0gp3_vfLX9{YRI1_EnMm|7cS(t3-=SqvLZanR zN8`ZS>OfWVC0@%)eXQ=gt=e>PpWpdvstxE1S_Cj@Z@!-LFAUk7Cg2f%yC#4f{35%3 zxmCb29Z~e}+_ixw437_G7-N_n4DR}_KM@glsSW1xnL>G9?I%e_ocd=KsIk&x4TO*N z&*6JIMC{?@O-)Un|9(=?`tyAICIf4Rogr@`nfN6v%`R5Zc4q$n_#9(#az_hwq~y%w$mqQ=W3v`JIJ>5^I)1N??>7Xl4n_M(NSMdSg%%Em@B-P zjvPUayOfK83BvL!M5sfogY0yNZ(t}4emCH4^rfSdo4drJdiE`Qf&Q!4!Awv5duM0i zrMWd@1O8eS4zB_y0qFs6KG~jGT={62$!UDZUo67N=e%bOue7CPyiFG=GZOKuC8BM7 z?6zsB5<}G3BlmF9_R<{(3@n%~<5ApTeYNW~_gct$VC$MboNU1_xehQXNYn)3W#E)? z;59W{FJncAQ#9@0I@oQ}8IP&bT1(ZhjamLnAwH*xvN!oqU1&?cAjn&w)>)ps#+15e z)tFKjqo3Q^ZOc?u3U{wpbO}m}^*goslsPtSpDuWaJ0UKUD|zSujM50u#JUJ~$n=FJCV=!HtF!7F?Y9kM%FW47aWiebXEiv96SZnPz|{KlHj z6jR))p$ubfu%|d-5LQXPyVD(rwgzCn`bFc(D2HCBD3_ekgcAZ|7S@L@!P17(Y|!N{ z8p)qSRgk=n!AedYGWC1rVa6C`hL^Ly`V?|%X{EVBl%#inw&Mu|-0t@-X2 zmu{F?TO7WXj!f6PMQnIm&R%vPS%~8w>>OyI(&S}TokwG0;gUWJp2s+NZKlQl$2DgJ zy*3BuNs+B>8_{?_HTpfNMvtW&Wd~MB+wlU`-Mhp|#XCx6SG96( zIbLQA;?T~beWMWC+)0RV=x`NV}1@XX7@!0)5eyWUBkoJh{{q&phDCYFs4bd+_ zSR>g}YFcSS4)N?vsawyH1)#*8 z!x*YeU@)AJdan%~0LVJImt)QNpu82eT~^XYJ3v_r)jk(fVkBDL!nsT??Skf147;mr z(ir`UCulee>Oy@BSr+vyrH!w4nlv6;vkWKKA|dW}@xKXk*duNIVvouzLL%PTyW8CHhAdUcD^d3jb3q8drdlGUY4I~VCJAJ?8V$SJCN2Ee zI=DOCuSSlFl~bvw^J8o5vFieU4-U4E&(EiKni7Zo?|a-6*ZC%5PXlmA)^cUZ=X9ij zu@NBL_Ypw`^y@bxcDqz}<(`{UE4eV{*JfnhUpQY2{pJDow5;EX)5ZzaSSEDUwpri$R@5v-o!Q}1^)T z;|678P!? zp>%1#zO#qwX*Q`&EoEM68HgEahz? zZy*klaTA}1MzWA@-(aeVe#-E4J3kSyE-z>KAQ71SP>^5*2IxK))&y126g9hlrFA?b zJ24cOf++eG3jka_+fe0d-^53*O{Le&uFg@XC5ToljqCmXg>}ca*PUip4bJ+YwLkq` zg0^!s)SpBd4Dd}cF!EHiH+vcFaPfJTRjR0`xu7c)5<8C=afzcyrCBW4T1V`k5>c0Y z$S<)L^cq3bZ#8e@!DMG?>jtCiRa^gFIUkuyIWE|%_7mcIYqweSyro&jBWJ_7W-(Zb zB-Fw!`<*w}Nl8g-GE;Klc=spgTzXc+`GIWxcONkYzPw5)P~o~%uLnzLR*kHF2pcuE zVlG==4yiwqQZ41@GqUJyw53?7sU>>f3*Doh!Chz4#{#rZYB)X8)&8mX;-do{q#G`2 z7d0!x#zYp^8^zLcXF=y1e=kPDaKC_w7}+DUvcxwg+S&>B*SY<3|B zaTjQ2hwwGumJ&M9GO~;H_%Jj_5LNrulcL?k|q$tQT+rDBN*)XZM^*_8B0zT zT^%=l++CTsyk%vRBL~hxKSZV_EPTtMnH5d6Eybzi>4c?GYTnfkpXqv>hzB=Yy0=uVa&sLt_f0*`MM%MjVB2;0BT zoInn<7EU^P1AwC8*mle~Pr)pnGAhZtTz6QBEq$!SP`)hn$FjouI+TR^_RwvC3=9iF zzLL|FuTV%72>CBGXkU>pYR6zcPQ20D*_c80Ux z%5-gd7S&K2!KLxy&s4@j5$4eKST*)M15m7^3Pf>fh*KZL3 zurZP13pc*`i}t2#)CFCMm-L!9fntQ}>)-51XaDU1v3miCuY9Jpn7~8pz5ksPtWU@P zFRQ9i2w|nMeQJ$?{u`8G>2)^WZD?v}+@X-JPF4s(9bFxZ5@ij=E77nj~E# zy1-BCUFAabB}5ecp;ekpIdFgY_5(Z_R_?!U14Q#td( ztb`T7kzyh*L4p zkoSM9=nDv!{fC%?GvC;t%_^3fib@|G@J{JTAnLBF{=(Is|5o{kz}*1G%ua(-hAgJ7 zN7lzfELU;LhC2R;NESnIqx;1G+&hWlHqNo#RBo_ahera9qZQ;z#V}A_e${-+o}d)_ z(|n7UhC!RJ2a(a8s3({=c#jh}S2vSJ_dT&lz?O2RdPGG--4r->hpYV-Ul!9J%#E_5#c))u3-#=$pz>S%1*VSI3>C-_>ujS|e;cx^T`shX3*}@+@ z@R|1q%~lk!Lh#(4X;~_VONkXr1h#vzO57I`T5CwAdEjL4=mCFOmXC3C{{2drNxs); zq6iJCut{qZ4E z1PVIP+q7_p8P-^-34u2K7*k=9hXK6KcCFOlbmlgTyL=BY`{$Lv@MV40)^flke6nAH zmH6qO9>3D1wITtu>|;VI;}M+G#r1VD^}S~aPC6qcy9|SGrga1%_anh&4T)Em>A0Mz zka<}cq@SH7F9yNaGneBcTjY)Z@q!S%pv;GH&t`LF+XI`om-i>L7+)0DviyU{_@vfDedM-tdOjoa{_@eOUL*ZPuR+oDwEju6~)wUb9oM$NC6%sOw`K%5C zVuzdwQxzz&V_6yaL0>6>^+=Zxq8JWtMa;W~{2-_^Jg}a*|HPxN?({I4zd4YWnz|_{ zJ3G4z%4oB%7aZ4~Pk)uOTUueiZ_=dz<}iqeik>c*fh!zueI?rvC=LT8FYV284B4tH z2A(ne10^{Zbn5Nx4ce2o1P3 zV<-{=;VA!|jaTrKy%tw!8F?#S5cAo%0By-ro8aKsko-@?4z(5aFTa^%CWtKkm-n^C ziFyQ%964h~yTUBx8TW&%JB}|7_`YdrX&1SGPoujn{4<&AcFo4Kl)-F|lG4IT>At?6 zX8tRhbg^-&Gd%uwS{xe0;E#KaQ>I2?~+cj+> zAMb9nsV^=zFqhC&#T_$1R$eVOQ_p5pkqZ|YDxh{PfIzzsxU-A<84pU`}t(*pxPxuHNR3*D9Ag@u0Z?2gEkyWJFKi^UkpnKhDOu` zL(IR}k|%dr+^XLiS!|#w2GcLXNhqk!9jHzpSUc{ z&;wJ0fs3Ph|BJ)M=Ju$sy3z;UyEKiCD{Xg_rZS{Fcg}tN{7@|0&R7CZFt3V2S`hYs z)LXY~)qU_e@wLwv-^?dHdTjyJG!X3+vssT!{KdtU^f~Qs6UEcMjO90|^Nm-u(>4*n zRpmO@DI1=g-6|KM67Ewi$;j5+NJvlUsb_i!732(R1}S*ZmEOY)J|KsJOf&?NjmgVw z<2C6}TM`f?B_^&a+#X;?U**PE2X|A={kV+-9I<`t{Pllp&B#rAJG2-TJw5&8m9Tj;swtb60#{~EGVn=CH zK+uO7=9=f6o!oyG*NEit9_|Mc_{X!Ukuk|5Hi2;_{% z*`Jl0c!D7o3kK-xfv_poqm@jAdCO^9Wwo2flg{f2%(M9mMJiP{adGE$46W=|) z6CEk#d&V{n4sYch;tl02t*y7@b5WBW=2 zoGH6l;SrQKm(6uJqSbZyp&FrdrL^tns;5qk^;>me4X?O{2Rc0;tddaE;g7?HV@x^e*!vT?>@fe725z=9XRSwUOqSBO=lO*Zk3O zofS%dlD#Q0eo-|T8(Cf7=j|*gvUsYdUauTYP>rd=XhT{p9^xPy05yrX68BA2=bmlFa|Q{?>fp+^G&%4!mZ7Ut~E^PW?*|N^6p>s z*Y(T>F70l{unfruGu*`ta~;%g3bEza-!+G)_^?c)&4TfTwiLBBzdKGKx>sS+hyWX* z45ODMjR;>CYnbUJNDOC`|Q+Sws0#~xUv(b;+>B<@NIH>c=6_j3OOfz|G_GyELixLKh1{ZaLxgjUd!m*%vBt( zvF;M!&00R7G4$^f!9r8UtiS{BhM2#97m(S`Tx=O|&13)VriZlz8jr!3`3NetPH`}o zK>xAZ_TVn zc(dMf*DzJY&vTq5x137`9nNojpbthq?Est?RL@q|o=h z>FzpO40NBtS#43T_l2`xIDW^BX#wfn`ED94Jd8y3gG~Xqx0&mB4woFO_`__2SA~eM zXmfIH4t;w{lN694M9G611=H-pSCy3&i*+^q(wk>Vk#w_mW24$-HQON%H1-0kRxLQV zOM6fffjLncyf*Ge{u5BxO~>l`paImQj%ls~L2@kW+wb)H(|SAC_k&D(TtT3#hL*c` za@eBE3~KU|L1FlWKt&V_veE-evvPcD8a_iMfM&0dT}>47e)f_XU6?$5pZOwFbby3V zJyT}hX{Pa0EFSBlA(`u1d$J`%SMP@27YU^%HB$U0)qtx0Z`#To0ld~4w}JVQiP^jlELC8bOBZ7~`;_B7`u zeG&eZpZ~zf$fzLiJNrzL(E9HFC%4Jj1>3KDCd?MTS3G9)hse1G=Sidp_E$#8?O0>lIRevqDgID?J6b(rGWH29?a|v;|9*NKhA>Ip_}6A7rG2X9oh@ zTDMT?W?~mU-*N3mVRCoCtg-S*S~@EZ701G?YiNw9PKC*)S=!@E>!0Wd{eu?5xGG22rh+WL{hPP zc!Q)h5w5y+(Piv!QT0s8ljl(A#N&EA0rA@B*g=BNv%&v04>bmdvmEMvFQLizy#v0a zKdnT*fmO05oHTr9PDDpXw_ArNOH0XGi57kzzQatcNhE8A`5)ULhb~}#b*7=0gM;5B z#s=obo9^N6f4X7q zeA5g2l2+bybe(=MrKw&94 zgE3sKR{jICqmjw8ng>AwaWi1H9vx$dA}*AB4v_Z_bTN`9I(QL;&H5P<77=wmwC_`b z^8&h4@;I8KCSNvj+1iTo3XMTIIQ{o=Lf`?&Gld&cTyo4jgIpHazneglpknMCV7Gwu z>=erF7CETD$QbCRc5a^gUG&kGmDf+EYj3P&BIf)MFhxT}ZXH15ddiIy>f(QwcL*nH zT0l--d>hO?mO43uc^8h~;ZU#q`?nSgxjw&4$;UeK_i`truR!GfRWi#}r>@QD7^~5k zrIqDOKbR^8#@l$nd!cGEHKcb5Kf9}!beIIInnnBIblQM>CrBJ50&O~vxskU(D7i{b zXg`igVwvxyC7`Bs&GgoN&qa^tu8590i5?8dQJs7#D=vOlbH3nvq~`U?W1w!z@b#-# zKM@5%at-!+Wm`wfuu7~jz6I#J@|mC->mg4l4dz+p62B4Bx|h2YSyvjZ6OWCK?S`*s zlJUI7Z!nb44p9htuFG>vTZ#+Wy!=i|1zELWp)!gKfbOk%I}@qz-+Nzt4W&jR&t#_K z(UxCLOi3Exvr>Gcs=K5N#&Q7QWh`)D06lh&1pisUr5cF`}#nXu>hd0$&SDYK5 zLyVvb^aci^UVFxqfj}8b8{YAox3jmKW8lv*SWRios>8#3JZ*;?_|ZUirQ%th+fC|J zMZDn#!UaJvlPt$UUc7IXvOhb?2e} zkR&ldQbv+Fuj71MB2&&$SL$Rr$@YOU>}29}Z!moUrtS{s;^G?Ni(Lvvbc#MFtOODY z81RS>>BXpUQ8@o2KZxx#wP|Hj@?b9L0I!@1qD0CC*oMLeCY*|rMHz?*;nRIcc<=x- z#Hva6SY-KAEquY>Vf!IjK3 ze}7u$S$2q1Xxy_C%mv?=V)s%1=5~NXBJ+V^o4mBIk~z6Nv0V!^)KKoypY^m0 zcTt~E0!;EPPQA1*RS*#f7u06w3=!`&OVDIYgvDlAi(T%EZgYO6mU}F$Y(r!kzJo!%(?uDx#fmAooK6R zO2WC&Lrmauh!W(im<`#nIyo8DQMoP@k67;#LKXs!)Mz2+ILj$7yatM)6b2nVi2j0@ zgBhQjOEOp)3&kMzc-0-bbLsCQbXp^nDH~Nqt37}SJ6gtq#I(5OFWQA`+VeyiF2B^Q z3pvZEkben%TyD}b*#<1yS!U;s|5eTd|2j@*?RVEs8uYbmCgY_nNl0Qv?I#~Kd^`nn zDHgfqR}P$yr#QDuKI2v?+Qa^VX{oPOA)(JYA&^{ic12v)Iii2kz}?f84M4v#*(qyU z!lS{B|9nG}mE?krKk#Kd-2Um)2z#PW=?RpHkY%xsn>v(& z@csDxUNAT6NnPyR|0|mpXhrTz>(qr<{o{!`E1^CX`V;*DlP_jyfIDS+k=7vKp1i!g zAo6GlLWsIv81$_?9yJmv>6 z#^w+npIn*6M_EXY+`XBW#dJZ72(>e(&?5Kdvm2BnCO6!ye4R5dlaS`%i-Kvk^4G0+r6Q2hv!U!;2U31kb3BiRQH8TlBN+Bc0mzDEd~b()tzMVq ze=?!R`^yi3+^>(mS*XuQQrlb*)na^T5*edVtY-|ROo@8OMg%X$tzvm6D!U?wS z>3)%M^u+&tjp?%W(F4z&vpdxbe`=VLd*cX5eGdA2qR1I33D_R0*(4br1<4(ae>T*z zzZ^um?=Bxtlok8gZxwG{o0aH#>FLcc&AFXQSfkGt0@IFLz1yGdG)Kx2RdcFR%n^05 zzOB~8CAsfrTYXw46ZYo0Mhf$_ft4dK0<-#V+$~RT# zUpw3fdoB9onuui{^Sdfg3U?ucF5)}b#$4-jfYt0!r>g{2N8@em8Pms(NpkDuQ}Jq`_G!akf!_g zvrQI}JY`WfLMuK${u=!adrxU>1desdcfpxYD1XQ};&b)X9qvE^kLc6R%68kixs!E3 z7cDkbo-+`R3;RYqt8=aUQ}Hso)X(Q4@9E|lUrpE<>;0W*G!g5j)%?3ZV_=%>MR9$j z0tJbR04I3Rj4Hpgy-8rF&SiZM$)O6~U;GivIH24jf#cw7ptCakX(ya>(GLfYblm3T zUQo57l-Hg+JJt{Z2Vp9QLC>#=w-<|3$2^+-LD2Cecx%V`~!=6Ki9c7cq_n zZgHH2WzxI&5kmFz`d=^OUT35~k$ryqZhPy{Y-ncQXX?eDAjF?zmPdJ9e#=2hp(KqZ}+A)+rxZdoS=v85S8Yp~WR) ze5y3S8J4?#G`teHINClVP9bd|{Wj`;GK8L}6wR3`_a6VZDC;uQt;_`E&-L5z71nyr zWS+M|cL9e&!R9bL9Y%OCZqv1ym$$;Ii4B(2ckD1LSa)`4=#-#F9ZaTyVLapCyICD#C3Xd>K_wcDk;;t%X?E!VkAO9ytNU{Bd}eO2+-Z(B~y=NEB8 zusFP`RLL&}PgVFsd)qSVww345{7>&s)&`DRa%bV*MeovF!*K54hf zG;yENyRxpMY1OGpG~oE8GMdB@s}^n@&zy@f1Cm4tl%3Do3SMH<|k zO0A_Q+Rq7XOq3M(IU%lADpI8V&QcwvJd@izdupua@y<$F1Iaz+oZ|cQzgdeq^x_Ly zZjBEg-KlCiZ9DtiOT~C!bl3~FOldG9fscO|3tsQ!0TW8^iNx0wEfcrBJlVExhR3F_ zH-8iaLi2wtz#Vcza6{pTj0W>}9BX~%w06q9A|14KJzwJN9f6IhiRDStsP}P=m|CMq_5ER-;W#6{jyor;l_*|v)8_!QM!lotjH$r9E%P6*TWtCZiAd#k6WAko5pYX!8Fr$@nIUXEnX`V}SjqXyD zPPL7|5b$e)_8Q);7vb$NREn*THFr@KCw=RAHxY@4=kC2mivsoh_}$$3 zot(^=aL#L;$ILExX5wb+qQhVLU`je4fpfR@!*kc94HhRo?evd299KOumQnN@83N%v zm?k|H_2i9(Hgsaa>BsixR5!gl-Lr*K&Y8~Y6DBSqMSTV#4;8sv`rOP~tYRg6k8P@3 zZ>a~k`rmp{vQ3k4dNln5l&mS6r+4S?eNg@Y5m|5WoHRbUN7pkb&(fPb-gnxO>fA2z z4y}v1B3FYY!n8u}I6m>-H$U?;4#Bdn8$Z=ZEDH*qu??9XlDAp(W|DQyNfvmmFl(XB z9c3@K9^4eS;sSepWcRJ-@kYs~Q4M3Bx|=4kw9Jop`^r%)RF3(r%ZptTEVew;nIDNg zJl6jzw{Vz+ znY4J8`DM%#6(TtEvvdga%v27HR}h^>HU%RZ zoDm*@7heOLh8NbeLFz}c1+V>K&IzG1mjVH%Ov0C^D+;R2dOF6fLao(cxOLnTTkNKw z*EGPuXdJM7%Sxyd&w#0RbyvSD8yl-r$o*5`sj|WSoN|4{K^oW8$KOt`?nOr_x^C5c z+HrJbnxU)~e3S70;cch*lGAS|wA;IWylT-&ya{onS{pD}gui7yK2~t!2`X6lxKb_c zzkM)rC0BIk@nbhOI{ZQMHasl1`$yzQ(V1mINph0?+gdHmxjK}$&`^!_4^5w>mH+f! zz1KDoW(#?s`_>f4KMDEk2}kCVsR2$@%>u=>=S{AX_QU1-v@U@gVy>nfv#t9=Yky~i z`1JeuL*0W}!-H&U-U{L=r`isQzm;br!26}OG&^eRtaIn;-SZtEiYIX)YMuixWcfUw zJ`*Is!>SJ}bq;afAUnQpw9Gl@dwbtfS^E>o6C$aHQ^?PE$Uo$V-5~~h{ZkM))AF$ytDro(;sv~^%3A2nPzO7wWD%Zs zO5&aLs$6&7Df!s#^lI1w)^{5iMXTQb6vSd&VBA$`sxe_#^~8=d5Y?MKQ)Lwo-G(nyHbV*xsWpWRWR*Flo`b{gN+JT zk;Ci-%hGJluT<=Gaqv1Sd+y1jO>%a+>H%HI&?Cd+SM*FnSbU@&?-wG8Y5TLq7bw13 z?sAw9JdAtJMy^x>{&JyxjV7*y-S?1O~ z$x+R+YH*%2;GZ;fOF4BVhx}Hk5>nNu;I~zg@US)CtTfK`lhS{h&02CnJ9^cc^oo7I zb8HDi=ZZ&2_Ddar>=?k?;08kI86Ay z$jYcp%WF;h!C_QiK<04T0#~Afe^~W2G_#%$|2}J>V#&!tD(PD;Io92ox<3+BO8ye* z<=wxjdFJr$3{SD91NS>{-kPfcSAHT}F>%cEn}Ad4=4?|9!k@c+Fwa^T4bQa_NQJ6{F&BCEAA@ic8iJ-jT%(KxK#Ar;4rvVi{ z`&Jh~IE5?ZrgOHD`TXj;$-4xhWFr6+APJSZIFucnUSXlbjZ1#3EbT3}HmCdSmT}4* z;5~5|v0bd?Y&1TtVQi2uFVp`hTegvkhpmYAW5)0YFXtqI62I5MeDW}%ehAPvW?5QG z2Vc`|G)jx^&sKGtjUVj+EqEif%$F$>mMEfl_CIT_-12u8Yf^XI##PPE=GSo4pP~ZG zO;*?(I*?)%Pr@RqK+Ku#@tdcrJb+tc^V23tW)5AP$v-V+<~Njz&7Y^r^?8M)2TZEf zy8o$t;uwm{7a-hWCyC(b6OttrMI}2A>Aa3MRGU?ne1LXzSi2aJ;w^c(?e3 zBv1f1F9AQ(HmB8~SYS2fJ?YEGfz`*T2EJ%|@$<|tdYU}}k9QE_y|fZ$2-7g_HOzzN zF9Gu@3%$nWV ztoAG**rq-TEQ>wAlHMeX|F)n>@waE?+A{|sfVn1L)~pp-DO6fzQDec)Kva`q{1tOMee_mf8RCto%4 z2j7b8r~>C!?4?*vGSvI{!k2GMz-QDPO@0&Ej3l6Y*1w=2sJrsYMo>r=k$(c2rK6l7 zAt;q<6jr#MJ`^Mp?n@L%Y?YQGcp8<=vz?SowA!dcZXW}op$0Yqce?P#V%$t!Q+(v| zw;z1Ub)lzIiT8)zU+#C3aBIswOq)EmzDmqZ;nnU7`O4usB;#tX9T>37vKx3fx>=g=EkmqR4K6+SuM`JH zE$QvP7`u-aXYKbl!6ez|MKV(-c-peBJsHI*y$#ofl6vddi%pv3*!p(tjo0~}gP%}+ z6fT6JQn%BeHayJlGR&_*^*1-?e73?P3eivk%CkHUB8=aBn7B9*-cJjURYbWsx~0Xi zgmG<27aD7Jj3}>ha1QJ6A874r;rd?qI^_leK6@?(ZIj^G{)du(Plp14GUxZ{zf6XB z3=|*CSrm(B1yHU;|KX~Le=g+mGsDGW#_D904j5nYRi&3i@87)?nlsN37aRxBW*zUb{SK5*AB{|DcW)FXe%B>N- z2(doe{f>TMJhI$b1lT94t&1(3MOX?sApvuC7i9qEXI5?5pcFjlS*Ode=zX>|jGJmXPLF*3@uo~uXBAoPgk z`9ULN&2ER8*Hy_aDNEF}dT#YcLQ}wnvx_L+Yum5ZA2&!kE5cI|Vf?R}8eniG9{&i8 zW%?BYyH$faT+6p44Fe+`zoPZ}+tpgdt%Z=yF@^#+&OytA412V9kp9<;orT|f3m0vT zfZ5U2y_Vl5M&g3cjOyi(zSm&R{nf?b#HaB@{A<9bncamvG=?f6k;OmR1JG{+(NMYG zon&6zJZ@UqJ}>c5SL_CR1mxPoa%qf3rZjRSh})t$r3WOoCdS?a_fV!kJt+^9HFG^E z@QX(Rj_(p~ESRhP;#VbOuItOy-VkTWwbDK@oRuj0qL(qR$zUPzPxQWzKhNb}QWZ%z zm@HD@JcNbzPV(r|z~K9I$J-`xjaT94%vvkX`=4&a&4MGJ&eCD0<6!CNNXq0=4s`0{ zihjC*41KPZS@hiHDZcsgItv7$#?#;}X(T3?|K8Hi1k%(9N6R_IHy;b$lZEo~CctkU@c`-dHMrKm~<=8Y>(yJd7Q(nI> zLZ+<==; z|GgK=r#Rq;Fha)cnudy;GEiyOA)TEoVb8A^bS}cq4!5eBiv>SFYllhb>MN#rFyoMe zVQu=Bzgl-@;}740vUt#!jl*jILL17q#RJV7EKPB978p-p>pd-yJzN^)4JPbF31DB(0>!kcd&avbb8G+d zO|1T0&6Yd}@x7>90~)z{4d&I9ITq+Pik&))}KYB29mARO62! zA$05~&btZYrcW~^H)dD8X+}4D?!PYsA8G5ufT0GWdZkfh@W)Ht%;{C?S>#3?pl;y3>=sbS##-({ps zBU#dcF^EtA00=YzzXuhrdR54K?sgxGrWi;+SKrvnzgwmjLGxqBnOxXJHN@crLjc?*^JY!*S!3%U!GUq+*$cu z^PF_%f0%>TOkRO_{JRFiYd(m0bqLcv3PS~Hv-Lp(g3@}p8}Zeeg#Ik)0scj~o}A@JdD&#wQi zZN`}W&Mf=)`!d3b0P152voLD1#$*(QyFWx`J^cMUl>TsD_d0{VnF!vB9ScWi%;tC5 z+TGv%n16VBIE9>D^Bix~@*2WRDD;G5MUX7T($QE2zPttaT z4FJZhKa_Ce@${QroXq49qA%@xKy~jeD2Z}gvqnmuyfB&Mws{u>ICe(hp@!Nd3?QXMq z>AGUG;{H~5b7Y0t{9lEy$^G4*saM}=pM9$UEsOE$Hcb#P2==@@i>YAAA(DohEF&vTH&IX;tTFr1;k9z7ozoXGo`Kh&09|_w<&>4-FJX~@`q((JpP*ZS-3{K{I0&iAHK+Zpl1Cx;DdO(y+CD*jp@kCQn$BPI$fS~r<~+vC(a z!fR-=?qzSzV=#yR{^dYmHF4Yj`@F{GMs0j{NUMU^V_`_AY!H4}>I{3)p~RwA{}&=V7_5|} z`Qj8J3>Gcms}cy^rg~wW_B04}nm{?yqu|(30OMmfOzvpPhb@wxH3GfkA?yBLTxS zA<^V(P!szyQuXmAN;rzasm-Kv3zf(zt2Le#<2?mQK-EfWgG;y|Vb+snvp@kH6>#F5=cWPeG z`PcZM|8~IT&U95!Rt~RdV4iFk*UfEn2GGB1dPP3Er6@v~xFD_X2zl~?6^HK{3|IYZ zdvYw2YK(zO`}}F6h#K;0}AVipZ>@T!7k6P%9v3q65p1UvX`49&b zVFW`*TLNNEBeXN6C7{YliuGvF+C%~A`mW4Ir<1oNTk}^@zqaR`8*J{q6+VXBqPre0 zJ?t;h_=G+54_IP_CI^vMR3Qp+r+#^c zX&RQ+HOdE+I)Gfmw2dS%-lY;z3--+5R|^C2sG)tR^eiOrQsWytJX=bB2DHCTB8YUx z2sEX}dG9ab-@s|s1?H`8jl<~79X*u`{qH*>n5JF9Y|1=ip7qP(xuxx4}b;ZxH`v=6kfUmo*#w_>OGEvKVxfARYaZ1+UydQiJ1Tac35-F{+`1w%p>ee2=O2o7qEEAudDeYSJ*x z@4C6nDtqM)yY(@)`W|wPanKNU7mcKj#W5sFs+iYIc}B^0?Yd zqnaFLsQ!yVD2mfupKbdBaa@QrTzCUO`n4Wm`d&svkPp7Ve9EAQ)$lLv=~k~FHa|iI z6*a9SA}xhF@e7$|OD#X}^Wwh5`R?#~r{J-voS>^2%gx(`Mu0U_N92?6oc}!>4MM*C zJ09h3Z@L&NLv=amD$Wa*?zaSM8TZdS{9R+8;noWtC5NR61Blgn-Q;bp|Yg-X}$>Q-9R&`;Etb{;5yd!xpv$ zQDxkXID>nA?q=&^xf4kgwTe|$b~uQ>08kDv91xf=ewaMo7!n}r)P7?ovgYFnmqE96 z9rd-8c0OFJtdjJ-4Q7TIc-=kG^4ct&sj~X9&!|5Ll<2S6ZyNP_-s6uB`=Bv#NN?ML zXOguXqwiyxp}zw;$qG^T(o8LtT;HUPzp5s$G>*RDn87pdXA3f(@4q)UK?Woa8d-AB z&W{cP66WX}{>99?bJ~vq(U_SQE)WFrz6m9aZP@>!;NH72RV{%4Ye}H2pF#9$6#qnp z5VOj9M(_s(_4Ci#23h|sC5~QJ5l8!lqY08dR^ruaK$itQ*fMMYGJ zSpf?18uIM-wf)}K=QvKkC-P#AE?1;@pSRcWXBHf(u-yGt`9An{)C9?MK3|9egNpz> z-sZvIzmQEpHj{DUN*JJSKZ{pqF$m!OLCod@oZoLb6h=3#uc<3+BP?CyZ2jl+4+pcv zMK&y`^6gpylOvIMpLjwCTpVWxQK=cM^Z^&#s*Vq?+ar0L`}i2$@0u3_J8}<+Xob0# zB#A_Rf)%>LG0Nl4!bothP&24at6?@Of{tLPK-Rj-l;e3*zgqWytCAPMJgPCzk1zj2 zCOKvqrDy}#B~oxYel1N^LHb!Lz|R#sT<5$FN6G#{yX6`|Q?@|Ll&U{oFk$h6w;<3E z?UQSUs#g<65qv@$aPuf0 z8Ja>d{s%;Wt(JAYx zxNZC0d2LSjCw%IWc0a$=fARQ%EIqSzRJS~g zDxT+;zs<`0so18;s2VAgj4};pg1V?QeUM>w?=gl`cfWB$ zDSLnVZ6I)U_h4!e7~UVJGQI`4A$5`E3*-OO0&sAlYx?d0J9oGP-J-U&Kw{Ltv!wnmoc39Ii7vVS#6UD&Th0}ic;fk19*b^$0bg9A( z-vR;+#hwM`#*tUk!J))v+;Ygb{sp!(-`)u725^{JuaD5>M@F10z&qmP@5b^Og=mEj zMV?L_I8f_7>28Kpzw=KVB`cSMPISW%mdF^nvZLY=zMI7_L_vQ zG)BBlM-`@MBoKdmFlh(E&=7I}qBBfvn|9cA-eLzDoopgwlND2ZAi-gltVejvq&SM< zf7jox6Im|(+sl`H$gh{GY1<_=v18g;udJGW+aIdH=;Is}3F`}bpMIs)qq+X@8-VaNj7ksjjQo+TG`0NSrXEgM*iT;CO63wpUg&2v5hP&JDAZ(=Z z4PK&kn@|^JZs;pSt%_ts{ZuNqgDKdRDK!y<59Gh1dIpt5sDOyS81$Z$&HXfkC} zqsLeF4!uQ*@;zm~Al)K5PZbDs{r#iuUdd^Fn%b%Ao|$KOiF?la?~tKjPK(vYe3O>b zU6-PRt~Vm=%j*^uK}bKKAyQ$qABKK{-1tr3`Af9O_ZColEU5ojsNVqwU-WTVHY4#V z!Q_YtVJ9LaYjcETZ|ip~*?Z}$*VUH@*i}W%8l$GwYEJ~GR8ou@`Y_q3`6*=sg>T=e zl;e7Ta_oloRzOP-N?vp#ow%al5d+MCOAxjBtx{p{05xc4y5Z|OX93x8t=*SGtE#?J zBHSZ?Yj;4-(*$ZHRra&lIkwrQK0WbAs_Xm6W!Vdu-Jk*Zo0%xSb%tQVMMS9fH%^SzFz=TRhz7-&E5^ zzd0-u@w=LO7`ORcG@Lo}6@%mgT?tf-K@vESyfz|M^O6|okWMN>)khy#Z^A4XpX-Jo zd1B>7e#SDm6t-yhe;6f`R`-3>)-ENL`3s2;&U7)LLMeU7GM|ZtRC>ssyhFd6YQIi- z`gFZ|o8}V<$ADYS=`XuKwp=9`l<2a*KwyF%ATWA zeL&;-Osu;ht*dj{sq!&3Fdh(M+qwgBug?y zu`-$jnM4fZBSSIqDd;AP6F=%beUwmnUlyPd3zY4#MCU6;eq438gei>to9kso|r2`*aARYaZLd$)dCYKsxm z_gY+D+SC3sHlc65@$-A!YrjpQA_WGzX_ZuNfo9i(SCPVgw`+`Ut`E-;$YM3IV)ko1 z5UX!}7y0Xswz2;@uoOHA$x_mvtAx`TnZG*%XFkMZ&3uW9jvJve*k+++Mj!u#$t7SdS(=F{_Ud`V z<@CH?(xz*L*I3wwvaRP6vjoW_i26gtn`l8|qtho$sgOdB7^b=jz&xnfjE$T%;_D1v zG_l26X-p48QW?MRYELq>>*qlu#;3U=7yR-2pI=W8}d?iwk#ew(fUK zLdpB`01#%;t092hr)iDz#duG06>hCVM&$6Eyb^BuM(gu;^<2M*`(a?-G{<){-Qpgw z`nc9~@_YLzK|_)m7X*fLK|+;G*|}}t!evOKX3NWY3rVy4Ik&c)dFP~}xV&Nt5i{27 z_d!b)c6Lrn3+-n2+wg}9Ck)7@>z2OT4x0L7{BOMgu9y;G$y0>)nEZ=@~{{cL^j{S5e}yzUK={_q=k>&>}%@j@l!&!*qq zMLYk}4gA4I_>Z-lM%mz~w9<7K8nGGiX}1y@xW+w$*YR?-H}vdP*FS~!<}{F2ibX8? zzko1?rh{qGPpGR)#~wqY&2Dx=QbnW+c^uCIXYo#NDy=cMTEyl+4u{>ub`b<&L%8De z%o;=ALGKA1g|Tp(%!1$hEX_zkZIc1U!TH#4P@AB2XhBkbCWE?HN&k0EDAcoeH!qU_O}kuB+kH z4sN1CKCBG%ei76V@)A&Ve?bfSsH>=s=M1uQJE40p7ZrU_fMU;}hrKIp zXnXF$E=Q#AHiwb|p5GVuKHuPwVjrK;Tb)+lfj*pKq22~wVuo%eVmcvH%rX#8%={{h z$r?(ICxbiJs84C zZ$Mv~>ykD8XDn@Mriz0-gx6=QZ!?{}{iwM}_K!kc$EYt@3sEd_@o$ZNUe9A?74ziO zEnDzU5G@nRXz;t+?@MWhEe+H9hh5kVBiQ;V+#dVSx74qi+ppSo#+!BW9~NqkoHh@{ zZGTv0tQ9F-*qUEt`X zFfqCk@)eSTLoAsuFS;dUjfklDM`9knMRZTD-Z24sedLe`I+naOt`Mu(2H5c^C46Z!m$xc4`8e|6{;P73@YA- z9;}9(6q$s@ZU!$r!(q{<(fInsRST;Bl7g)%;cWrh`X4~nweT~7Lrhr1x;)&-xcj;3 zH2>DL7Ep^`6|a)UD1afW$M~J_i5oM@zZUY7W;F1cvR!rAD=w) zL^R`q#E#5vy;(T% z*gq2){E|Vx2?(>1cI>reBRgP05_TR9*KzY9ZR|V*3&gCs(rTKW&ixJXHJ8SvHv{$y zjR#ZI`S=m5=DZZ2g^>Zd16h_@+woc83<*PWXMf)L%I?w*T2-`t-k;wI4fpe+bEp)u z1@nrs(YzFm^P2IIn;#7P+L8WRe3<|b3C-2tI~(EMv-3RN{v_$Um36S_Ap|<|G8(a-^Y$KuQ zfig_uK9%WAh#1c`AEqLy$AKKZWp$Dp*#a?YG*Lf$rVz29s`pm==E)Ch>K~JKqtq1~ zz&GhcseA_Z>AL<;@?d!RH~#(4;l+BeGV*^i!UKy7&B&4@_Q4q^ml#B3kdf>VewXp~ z5%JWH^Q$ybK#xPl8r3j^CuxsRY26{j_2P`>GWj6t6ZEC*18dgXvc2KAxML6{X%=T& zcbS*{_^L_uHZ-sTzmvZev^e2SP4cW^)ex|t8N|K~tJv2+^6S!=i!=32fFEmO_D_JZG+;a_|#$Rw_L7 zpEM>LvD_+`Kupd2nG0tl9j1mN4o*j_*9E{&hc;9(o>9d!$ONLcoD7MZ$?zK$d!s=( z?g<-+&}b`7rcIUg*04W=UFVvj1@75RF+j9zedQ|CAF86DlKlcI0nYvMT6vr}SezR$ zDY;#fKi}TaXTWi4f#OLndw8ORhOl8K zK~oj2W~M`Rh$INNM_X+Yln;MQKWC8edJ%YeE-tw!jW#_j%`m~P7!-B(ge6dPG4rIX zEpMJU9S?++O8S9Yha|S`sVNgnHSw*b@m1Dtkm>RZFqQp!iKWwldSITt^ftBey7ehp z$75JSLv)U>$H2?Py2;0Z!(iXOI7UW~!P071q9>t7^6DiZ0u7vCEb*CdG8U!!&7uBO zR>K@m!{kGfp9Fg2&c1taTefPwl&bI)j$VrB=(EjI4Iep?obtbOI|&(mFZhizSvC+*97E+^Al>L~L!B2I6oIe7dc9X)z=B=j!P*U({U5=2 z@2aJ=YsK7v7hY7FWwnQ1*!tburM}JqPyEp>?~9XtSDrri7_RFUi(v*zjac8Hij!j? zF6u>B#k+*7Y1CgN_8WipmVm`g9_Gm73%JYTHx8`fqhls-1Y2nt_(s(8cR?=En9>Ft z)~-=u=q%b*nHMwR!bvk4gIfgPE_dItiyc2)&BhRrL<-^KQz01iUjd(|4(pEMYcT>8 z6irCbQv+oOJ%`bcsU?4n8Ln@)@Lg@0!XjuEtwrXb(v^)Wyj}a7aZk+Bj+`fsRU*4k z>7P{kF1*+>HCu~25-GeTi`2wm;rIX+6`NioZOw`D7d*$;BxA?zh#+^Cyo%+9&>zc5 zU(S4NTN@+>l?8iSg2DB6OPlA4C_b4$o2XGx{w&oS8T|Vf$I5qHw3Tm^0(670Bflc3 zW>P1Ejv$w}IG^;$hZ^!@bh^@7w^Z)@J@OJ66wI~H0L>AzsKEaN$N~_1O&tURl~mJ> zyb=Xuy}yMOMSj+xYTQIKV-)72pne`mkWmiL_W(fg!7M&;gdZ=&Hck~}Aqn#8Z;Cx* zkgBP|?kvR=vwd3eQlH;Srkr{2LVF#J=DD6pnhi@5#y(BveYvUWYBpYkH4F}+N^6fy zcOZ6En|+!WHHr|M2K~3TD4~9%2suDl3zQ;IV$x*nyq}Uz>~Kkh-Y>3jcxU`;MPZEC z#4K0zJ*HW-x`$p3b_|$Qb6&9fvX`}7{g2{aixEhF!SW-O;Q@L{;AaDpmY1xW6oH0a zFhz_9FU@1610`p+OZs9e)M>gKb&_o6)K}T4uHXu%(8%I za8ZYk+YTdA9VIj=I5@OxC6&H+o;nB70t_2o@dO}ty{E1TV@iWtjoaDF>wOf`Y>Frm z(`c!U86fLEgH4lp($=_`?jq@V`@4^J!AAYbb@2yo+2S+o+xkb67e9p<#T?gNW zf|NibAD6Dl_`eI47eTc^1SRDOuGLPKF+Q>RTnnL(PgpVs|2dFJq##p3C}?)eJ4(3Pr7v>-A?R2W-rum zbo`sZB$o2-pX^|kZz5@^5Ho0x*kN#vNwU*wLm$c1)Atk;i?Q$!a5|1mo|~ZvG#s5S zTmy#$SSx@M$HRA~0(t(NX>r}39Z7_pS|D~hTRcvnaWw!rpIRv9eze?TzzAbU3h=#b`3mgKQq@mk5#-a zI&x*qh+|$C{Q?9c4hdeq$W>>1Lh0s4dZ4LJohm~>g3V(}u#QG+BixN{Gxyb~hKVuv zi`b0TsnE5cPl9jsn)y)Kj|@ql8*`U=sOeJ-84rTs=$ni7nZ1Q(cFyUHC!O(x8Zfnd z5Xc+5m`du3due~Sj;}98(d3u3Vrt0puJ}40u%`U=K&i^{j(yqN;uYkQE?CMI=jXtn-n$x^a_e*Mc&Ro$S=!P>3SiQ5Qu*A&N}5kMUtzT;!~cAOx&9C3H&8Wgj1)i2r+l zBE2E-W0k_9hokF6R&&4s_~0T`mHz|zzMjpt(D^+tYcN)pY^96UkAG5tc6rY9=4_bJ zW3OsAHs-R-2?$hM7yen=3{00;0y0XgEsb>x0>BW);Ifx5QO)YQ@Y875nd-cPXrok} zecld;d2P9D<2SMm2upWo)6I+5NMAK#sU}w-hNgp;Fl5H$iFqj^Q(k<;&D-3z!#W;xAb6Iv;AX?$kadWchz4&Sax z{uFuaqlg6|+Li(lw%iV4aM}f%NTj92zfNQ!1*}`Qtr;%DkmSuNk$OkJFbtweGmn$` zyJ8*pU!qTXTZ&>##Yi@S*9a~Hmo&Wlj;Uk&JQ~lx&M@tObZXPDB5#m=jrl0V)}wuj zm^j>$I=>LZk4%E9Ke!~f&%Mz%x~ z+}G!(A?EDMe%i;Ea{F#LF;V@ZLpV4x%CTf5qIe~plBWIYHC9t< zThWP56mX+{j2!4G|m`@rv5Z?hkJuS$zO~Y#(|NUovGp<>A=to^#_UR)9uMWfH<++ zr)Z!&e`v<3>A5D7(CPLPx5oH{!f81uXft<#Y%RLC3LD6c*eK80g}<=*AZMk`F~Hbq zjY((J8|hk5tM%p$_Ewsh&$V{Grfi`+|0O8F0zzfFC-OYlsN zfMT~ngI=?Jh=F$V^}JVwaP5BxG%~Pj%J1tB_zx>c;8#%+N1pcJ8uY-RlPbcdcZPmh zm)|<%j)_+m4&;SwKL&vdVZK&hz9Q&G$Y$_l`0J^xfH_Ym8C5{*ZM8ng`6f`N=Q-+> z%Bd|UF@b19!Ix$x04c`%6);h*UgAN{?axp2!dosNo&+FNO-G)bJJdN?#Ev)aLa{6) z90!7Lzs+p$>p{;NB4>i86=Mn#V zFJiaG&_<~GU z7BaW1piQe`Hp`pVh?3`j$J#C9%v9-+p1HqMj!BYkkps9cS?{I^m@r+0yn0|?3mgm- z^~4i==o!_P-bEQxnapW4Z!m?@5r3X6IrsQcd-ADQY%S%#O;O=@w|jBF946%*fqD4m zwKqRUH4dr<-fH9{yqgzYZa^26u8pmP=JjKNP;d6-UnpO(B8YLn9@T&Y3u8F)gUiu0 zKI`vUhe2(+XF&OA~y7g!6cEOyr#r}?PCnPF3wj!<2!jjvRk2p1#?BZy^?fP&5h}{F$nX*@RnAyHab?`HRJIz_uPZ z(;dtFozAZ&zNyqT0yDjl(ABH0Y^VB2xh!siDl=0xpU*2$8!)g!)S}=5?a{sX7f4Ot zPrF}u%=c&Ocr&h}7g$IZ`ZB&2F63UQ!181~tCe~gjC0<-uEKrm2$%`HtMROxsj`8? zwRVQH_OBVj-f^Nh=+GI7+7K~HCRc6N19~XCOu$hxMW~B2V?d0q_fs@j!1a|N*d9fe z2~79W@BUUkr_h@VYV+)b}d{Cjcc-ucMJMgc}%Ar(Px{XpGnJ_xiXXPtAPrT)9z*xHc9~ zlF#d{B9@>PxD7Ai7fK2JS$gGL%oIgll*dAVDc9|AF-)~%+vs%c&s(#TfGWrJAbk{d z_#4fZU~e2e?!QIAwBb4_Fr=PXBgdUFA1GklS1E(jr1`y3w@3R8aBcTD82laYYYh(0 zeaW($TZ6kI%XBqOw??p^IPG48)s>!$N)@RIdsh#Q3nxzN#dtm@?!3LtWS+kETuY#R zWDir0vy+`NFkJIoKC@)*hn?Gfgb^-%tcrZ+oL#$(IWptVwx5vspuH!-;D*GBHU4{i zb>C3S2WN7KBT~D6LS7^G^)d#~l7I^aK}2z8pS)q5A$~w3WXe6@V?bAI5z6E=6L!!5Ib z(lsR)K^*C9uuutIswp{0NxyKWM4d3QKOa4xxO!dO7f%!j))Frcd`di{&eWICIEX(T z=6(H1Gb_h6f;pKR#N@v_$U4V*NiFy+jq#T}(pj}O1@@rOY7U`v&u-~=DwT#W&;`ZM+HHP7upiE2rx zUDDq?U;(1HK~qf7^_Ou*S0&Z~OFW+^88Nzph$Jtwl`L865 zqqV>c`>|%uQ-6lJsMj_x2Altxp~FOD^SAcXFF|EIIjwF=S_}Hc35@}V&NdW>EoKEm zam|AH<*AJ?mTy83Wd1_Lt$=q4R{Ht=oOmDG&7pT{Py`x;GJJlhS8VW1t2@W?{MC%w zZO-gnJb|g=)p^L65@2i?L$8{BaQ$^pT0QXlsga?jL;>j{a`G+AA$MH9FP7d4#`-D8ilxN{e`2I^)QC{%v#swT%XKB zPE#d4j+_Lr<&f&8ZLNoGHwIK?IWLW=cuAaM^ z+|}Qzu#$EuV)m0Bl#TRQ92xY3Rz6hjMknd1psh%=lgh>>sYv0W-?Ls*4)1RQ zwhspnn#UZxnh8VOq1N*aqX{$%P7|c-O$aRV$}fP+!fAwZ9r8aQEB(WEVdzV@i#%s5 zj4X8fado`^zXhS3_n6YRT|fnS{NxNulAj`vEQ0at=6#b5s~&iZB6{;~SVh}nYe+w{ zLFgi>B-U9AQ<0Ml?V4w3C<<^Kd)5gqOz^hgB=lWucV7vd6QS&ORYxm}v8muMw$ZcT zr$z-a?9HIBW?k(9WS99_F42lIew5rJnYLnrvSKBCvC)Fi%MV+xfn zjW|jQ5U?n=C(sjxPMB;&dHZYoV=RBD{G*2t0|kyXnh!~5v(UP zwVO9f5BE8$*)Oj$v$%C#_Gix`xxLfoL*(oR2tutPg{fUksNM@<9EGX&gdA7@Tlmwn zZ0G4-92^t^XNrqeHxG!YEvU4-`NnlYdQ6B-wmQ@s{q-$}ql{kX)W;x+%4B&wv@nr` zgWeGn5Vp7aQwV(9>Dd#@6Kj_z|FI9{x6fJMn1U8ZVYr+zrrH7?4LTaJqSahtsV zcyX{$Cg6CiDmS4?}Vx;$wSv0kX`uQTo6%M`0+ zm0q?+BC6wUB+fssXfrhj-Z>n-m;p3My^X)9_Gm!*LzH0A$AXH(My8(7Xkc>r6(fL; zCkegKu)@{Z@zFHL`T77ixo0Q9K`_|T{^=2gPG4L<(a4@C83~d&kG4**J`maS{Y%PP zfLqWL*ICn>u+-?Zg*fLa&l3Lk8``)xwAh+d*boR_!=T5)L0Ai+qU;ZQ+%+18>0}qq=u$R>X-Ys7{ zd~G-;g6x`4E=zcw3t|(t$vK@;{`pz`7tn11 z{&R& z=gpeVZ{AepANE32>t*J*ogaL`I`-dGO6XzV9sCt+!o0soMapso*J0aaL@lEDQe~@Z zYeKZz70>*#DNTZ$HW2hOb3zoF`fyVr=}e8Tr*J{dF@=0-fW%=MHiBO5y!Lx>4dm*K zZ9b|7eGZ!s+hkMRb6&Lp)wdg|;NH`p-}JjKDL*V1&x4~v`3tyOYd!ybTVK^w=BqN| zBwxTT_t-k$wGF9LV9&csgVCI3SaKt+{^{_Jsi{^8J z$!v<{2{LTDUF%Hq4LpdZJynVc^#?iUN=h=v0E<`(sqU5&_6-Oy5u%r4PCJI%5E zgZT{TCd;)p>;pnoeM8T?yaE3WrImF(a39;>9LwuRmG)r9^QTvS18gg$3jpJI19vJK z_YD7Q0lF&^m880+4v0gTN&ke^#~$bf7c>%jE6pV0Nj6}|rs8ks>s5%Z;wQ9%b2esV zyD+ov9jf`qhzTUqgg)tHi^-HaRI_f^Xh;oP06{Dd&a88m0H(#nMn6x{G1&1rY`u6P z7!YCG;g7nRlykc-BR>5bFzkD>u<`0=WG`BhrIXQ9`~cCy)PAaeE{vH0R)J$GAbe}} z_ea&BWw}$@sGu^q2weQ2W&HG)L)HJhcL3a_-^ecOXi5dsp?$C~vM16&&z#?SF(8wD=Hqm4^7^h$}$$`t3W?V^5NAep7b(*P{>3RE|kF zWVMUB%cyrlbkyZN#{s4Ij)47wDM2uaiMnbxzI|S)&7`nStT0*)TK}tZnhwgrs_ul*cyuckBh; zhY`bb$_#oxd>CKqBYpai5KQEZ+TgA(i*fu#8MT#MXNq}v=M#WTUDF=*&_jZk{_6}_ zB=J!Q*q*C^{ltE7L+;P_7X@kuADICAo~T}}F6zRD0keg3#a>)%NgBX4rKHU&77fR_ zvqSCwYLNTiqe>~7r%F5PU&ystw-j5V1i8@m80XiDIkWk8Ku|g`3m3V9w%pWSLi+-I z!>B}-(y%OIw;jfk8RMit4e7T#!iH3j%*y@h4B{Vk3pM+uKoH_c@OqbT$4a9_Zhnq> zibWj>EZqKXdXRn-LB!6`0|jl6C<%0sFt08Q39lUo;Hp*ZidWiu@!?<8NP&}>e)mM* zjtsfEP#To3-GNzrH_B|`0pdm0t&Q8450hit5WGlnT2n`6S^OC4X0LcozfBe-ju>3t zLxGzLkmiYMxXo|Qkn#|OJiy;;Cyk&DI1fiiJkI{EecPMJAgS&pAMK%;1(A(d8EWTtbu?hGLu@7PKzQl`0z}bLAy)>s zIhf(jkt%=So;XbULYnrY9$x|VVwJo_CD#p2BZt5r)1na5Hx~dC-tqgH>_Jd7q6d0Q zg4xH{jDN?awJFoQ_jEV2%chN|8Lh*&y9v$t?mm*3Q~R6*TS|dT&2!D$_gn3Ef?dxi zxGV}o0&npO`3&%bpW~;K1p3-MWinvvcbC-mrKfP3v(?)qv=O7Sp~N}NN5J3UX@@v* z>M^rb9~=a}aB>{V@DvhORb`&2YE7qVFAW?Yi%2nc{+?#jN3MDL2cm)+J+NLc71=Xd zJfN7Vt~}=LrWSL)W<^bs@MXf?t?eJh03WAxNg;LvUc{Hu)iQHtCycfu$qn2>GGfv~ z?MuTT$$|)&$AaY03<1~Dr!2vX=M#lVx(GO`PG>ZU1BY^N|j{J{) zSDb!TSiT@kIEc^wwK;Sw21l(vrI~TJcO;(-`-ERxvm<12zNjDU_d2< zEjs)`km=B0EvSo$6hNh>+q-E-r~fWS@;)_WaZDa}wv^sLqT;661Zr8C6b+$)NRX*X zvbmm#p&6l!^aBXsI_L;~`JOAX19f43hb6u9^MC4qsSh87DROt-{|6{BEY!`PZNNiz z$H*?S7}sKhem>unj3t#!3E~gRirRvnMYa6!lFcQ@Kl@<7MHr%!9};85vXMNvN!mQ* zrE$$CC*(ub79gV7B1D@ATnc6j-;F5br8iS9=U`1Ad3ja)nA3!>U!L%2B$hN!+ zgG}(fBg7W4BI~xf?8*%koNzL8U5B(#@nF!s5FdKcw#%vG;vY6p^Z|IQ&Jdu6g6n}g zOsvps<-7mnU*OT;23)<(^aeY`x)M>2FVrags5O|}sn9SO`qa`>Uw^drb?x!90%D3@ z3$!xoX_1K9mq71>bjd7p=&9AIoDTkd0%fduB~ne%w|+<<(X3pussnS zB-?&KNEgP6LNya^pRR>9ha4v3Gr!l19Sqo>4knXjDb(i}TgrV#gUNb4mGv~#zK>Ui zlJG!L{Tt$N8?#zAm0kfR_^H2E0UzDButEVO4YeqpwJX6fGbKT|r|?duK0(52;1^Wi zDeN?s78B!y@)ar(#$gj-oweG&+MmN-1d3TSiEjXPPR3usjrn z;B`KcRUs&|be`_7I zm$(yGWM}*jL|EB;cw2QX4K*mLTj=bqwbfg3N4F)uHa7Hnu(;}x#26IWOI6C60NPP< zs1uvHu)6HWS)33Mj=j8Js&`uv6fE%{$w8hve2L9=3saM|0lY33Abz>8CuHdCmQ1~7X}JBs_zm(g7~ce#y}2B9+% zu51~1eTZ;vac(p)#RR+U0CrVtW;v(=7RU{tq&VCG8KVxqVRoXTVBY{ALM%g91yuC-esGA|n+gmdj zK!~l$K}x`aIV5mD#y`+Izq1i81bthW!dDd8(_tyOT-kSO|1MtBbox*Z9$cA?n-}}I zTJP=gaq(08i*}GW7Rf&x_886Hbuaq3vn(E2aDSQB{d`_19i7Wsb{o+y;9?yYI4wUU zk)D8ixv5_0HU$Vq+2S|717kZIac1<$bSO$+9sEX$pMZ(Gkiy|_YrPsp@pR8b^l9*a zTrL3D5||kdThDtD8ejcr&6(>`hp`w=STdxwR!1<=T~4{Ne-36f%r-w76bXQx&9ir;LGvtMU#aB*|_`TbpHK-4{u zpZ$6aSO$OZYlK5_I02;9*oLhdFHE^~v@Nwv%*es-Va!Cs`L{i&`hfypaA|Zr`y2K+ zWWR#n36bu)<*EKovkh&j+~OVJqdyM#9wRTQy|Xn~l*w$N;zslb?NFddSNO-IHZru? zlpB2ld3dLO8ROd126_x{GFgCWs{YX9TOmZiy$%x^vzR~mEMed%v20Z)6O5O#@55Mu zjI$nbjg6Wd*F_c`WnzhU72vQy3qZrhVw~A<4AP4-ZwSmuL_BnvU#;l~mM?w1hzfl8 zJ&)5h?;yXR%Z^-;9UR0Gcn^yuff{JrIsG9_sF-}m^{#{`^A=+kW4*p9JVBY7m%-QK z$DivIyIQFib6L^HUkCJgJ}!#1%|!Ntox2V7<-)#|3H(hg`MsRBcGgb-1KgI!0de3?08z3T zwmPl3+AwBdR6fo8BgxdIX9pQOVGr~F?{l{6AvSwycdy;!w?!pboqNvGL*CwH((~n>wY$_mYs(-$)F&O9XW)>D-oaD_={Qf@#d(d22ly z{~p;szU{r`|H;p`jci&_k;hGSv&!90_du?3Ac#4rB7{?eQ7^V9QLBs6dp9FwOreA7 zLOIU^H;jyK;zNJU{wF11!4$=BZqZ43?mIK39wnZY(J5!z7~DO~C?w)4yAkfS&+QMX z_>ALUU_k~SeR%Az@{+_lqiZBlGo&EOO8c}1!$~OMrfujW=)NCZ_x%^%NRSRWOP*@} zLXmWs)^%Mn39O_vU#=d|dH;|Bl_=k%f)A(8%tkPLJQxiStbIq5F68vNma%lGT+wW= zw`lp(16+}H8%dXn1v`=wcTf_N!08wb%w!=xV7Tc2@9Rbf)c-;^#YypOpt7d=`!YiP z>tS}eg&{KLune$3E2qC2m+C1CC1`nf7k%NC|F`bjbSBUEiQ}P$3GiMPg>=Gt&)Sil ztCP##(qiKB6JGGYZ&nrfHR0~z9|MyF>bCQtI1JFpGUNUdnHc8uPp~PPHdkbMm)-Y4 zs8apD?}rlHBRUvX6e(x?3;7<^1y2FT3befkXnRA+xX}Z=(J+! zc+6h*@o{rx?x2clcO+RKAI2N@rvrI~{DBpT|w{>r`$0Z?e$2 z2B!m&Yuf<{=bH(&3oT(QdiKThbrqf57h?9Q&^0W*fHM>-^=Is73h&LQslxlpAQARF z^ZcB1wEG^BK}zNSiUKkv^VEaH6KXiyc>z})0iXRJH-C}1eGDtQ6hNK4Q`J~xXv8sy z=3Dn^)K*fO>;bIwO5Xc9U&)sM6j9Un#cYYgkfr!O$6KfK+l_nkYWmNPyAi{8$lId> z1baI)pRoJ#Rl5C3HTI|2KDoYlpJgm8^q5|k-_R`vn(Q{R`1K8}6%Ua{_tp`+Me;h| zjn^9#ry3aNUJ&a3^0hLXE-IXxBsf%HM|x0IC`mIkY8YUx)zKkqiuSAxJQi@dE`Nw$ ze;)GLYs{MuuLMv8vUD8K-VT>twSRoHDkyH#lU8~DesQF|%5vIpuP5*>MPGFQ+V(mc z_@98Lk&Z4EQ0Dg)I@2la$!Kb}GywA-9X3KJ8HF{Ep5!3fdL7@tP+;*DQ7N2TNLn`* zv5kv0VHc7!uXzLQkZo)S9BIcl-vy8l*kKDUejf7OQy}XGF+lztI!c{2vX|s-1~bWa z=IQr#B8ruC^$-A@*n}&!V zpBEU)Aex$b;gdiA$y@g5FY>@gvv3c5EiZ32Mt9ueXyhOG9fw1C!a@gn9nr*pX^w=d zdcHpF6TCj}i@xd2VsnD{w=)7bwFr%|?9jO-)EAS_>LP|!x00tl3gF^sk4oVAjQb#_ zb+-_}ZB*1LjIsaS#=sGOg7eFZgBf}r*B<1-cCW8w+yl#VnH4rT8j6xaUrDipA2}=J zfpo~w<~@8QE~>!rUOOPUv-L>1WfEj@(o$qng!st8bzjehBVdH38W!eBitIFAt1GUA z>oPbQ)`~ay(kW%_Q6;^P{vW&PJwLGIS+~SR*7oS$#F8NZ;p6uOE#$jGy!)c?&gD z0lo~EaTcM!i~mmwp4Nb_Tc9k6qT!`_Z>B)9XpFUv3jH&#LV%>&gB)U?eo}c@oji@6 z*k=xT0O_%%0Rud1g{(+7ph66(hyTe!O=petn!e{TUTd6v%d2; zb&m>5)5ZX0m@Iw{%WBST_)^i+A>ScVejEB_jayyA2ASE~#oEvhl5c(*YnB{yl=tM- z@9iTC(gv-UyhgsM{<4;CA0_H=6;KOS;{_TY{u3qKDgHau7`PUy4edSbR#I80#UAoq zT({~RY7`-G#mO217Er2!&0o(%rVd?q6;5Gcuqw@+(}-I|D<0Sb4NEX1V_Xfd?;qcr z5UG!`0&CI!XGg$H`C`;|Mwf`|-h{anr~lI_$kwRA~_E07JyZY^HIUJKBfL?O zhDQfgDVmcw!vtF?`x(r3zJ0@?4w3Aaa^s2iX{^>ho*HPG!`s#EEW z$VKE&q=!jDM&&g&r1q^l|KNR6C(hX@NbrPoBys}b-xuY%S23iab6B$Gfu;PL2H-Uk zpg$wGWBh~uV}T7egUAHCUv<@oP6YF_n)SFXrxzfi(xX%?dIhrR76d@|j>aOrLVw*U z%}kj-6}m10rQoD{qrWkQ>-~Ab$S&n9*$++1C$$ZsJ%z(|1-!&SwPQQ%*Jw~Z4o{N! zGfpxL@@qGyFJ765x9=m?3!Mg0uFtX9#yX{yX2fYJLvV;B*{~q{#pXTMW$jq-{u$Pqx4f0rYrdUc_dsJS!U>z3|qdEXQVQd z2Ls+H9wgo`ve<54V$>tRYUoudPviw+|6}d;`oB@$`dDnzSak<>AYJq-W16&YMk$?x z(w}S&-Fyra=%->l4kVz#cV$y8z z%g~tWaPEiE?2PYyFVx*rtN73akw&Yf-$5~_?N@P;CF#PP{aWyY6YDck6uhM1C1tA) zVw5uXGE)DU$_O+g1#RJ6` zkL;ecPrQ6+yKwlcU-MG!HIi|eDD?vC!_0Ddf|$dN?_hUJb$f*W`LiZ6gceWSr8bBx z6>61L{)95@s81M!uJqquY)SPK5c4;B2C9!4Z|EvyWG^>b3PFqiQ89%4D0aj0Z&VIL z9no?enC41AO|qj(10+rX4Mn?Hw(WQ^`BT<)bZ;N(7_+hEe@3HDf-))WY3y*(3`}R3 zo2?^eOrNm_t8jqvBv2}osl~D6^$6@z^rx=uB6P*xW+LLZUJ)Pj6Ii1Z3iC9{3i3;6 zB_@V`{=5&oM_a4=+=XU6>9H>B_n)_p%M)bYP`DgyG8)Mc8^Z7i#{-8Rzu{I3R2^fKH8U<@yT34F!=^fr%AXw7I{2#bw$lfh>BX3|zz^2`o=$&e-TwOSq3)_5ek~lwayAJ= zO{y%o8^M2!hK=#3xcA<%2uA_)L%y7a?P?*5>0ybVM?&Sl5r_e|W$|~bob-Nn1BqM4 zbUO1{`#$+x0jf9>(O=eA<@I(vK2j-09oy#V_GDD<%`R{* z`)b>hfZmT03q=GZ+A1TqVt$ErVb>;#~$~Q9d6T7CA^!1x@A}bNGXonyiz&9uLcgKRoOt>CLj1FIMYn+%yB_`W?6X{&Z`M zDOg2aq%itj05Wa*say@+Kp^OLke(E=_VjcoKraElNDEb5_oEd9j$emvCpk5n4hc3Mjx~WZn6pLaXI}Tz!SJvTvCgj+CQkWB& zO_TZiYi?aF<)gY>3d0lyE#X#?CL%nkPGK;;1^7AhEC#`O^(u*XV(`~U+jF7Gj44(&lSSyZ=)>5NbQh|m9QJR!IsmFIMJ#We)Pifa=xhNiG=`^gq zL|Arq?`~sQ+zdlWReq+!NZ*B8_6Y>Lnh2UwLOLaU!s;2Q0Ev)@)}+U4N_badOs+}9 zzVD$hnUX2=L2_V@JE3BUT!h)8qHrRIG_O9P)_^vv*RQ4IMAqUYA7HBzxPhhC2LB3n z^9E;>Gq`BW?yX#I&Os5lT&Sm|tWtj2r__i-aO@iI0(!W`$~I?9zPSz(U(<`Kb-f_2g`XgZP*Es|yZy--XT#NW z`<&pg3OJfl4KLj(o@W(QT9^^%)~WG|Kfy6FBadQOxxk z=)Hk;P5V1$IoK@mAutimr$Ekmg6wK9v)kvnnbZH!z&UT#uxG07iVGHcLPKA1=CG(m(oG^RY+ z4jy2n9}eYMKkN6;aJB7FpG@Vsl~X=$MYG@P0)w#0>)$S4?<`0Errd?@#V^0BjA&W~n20fLAl*>TQPRK{hU*uTc3F^ux`hwQ+)n|E-(7I5Z#b_9A z7H<=Vf&0J55vW0URbxp7;QrJBvl!Yow5YQ>__CF*f93Xeb#-QBtL(E2cCV6Mm zZ_^SLAO>D|W6H@ey&Hc9;y5q&vo2N`|<(%LQog#`!_s;ZYvQ zu9|f6-{k#Z`6akDx$H-PIh**_hs+(qaRLO&&kFK@3MWYl-|JsFECK1&!!bljF0+F@oDuR+ z{bI1+L&c{yEH*m<1*i!No~27_he?jk_=B_gxI`43aIqxY4m40=DTWd>sdh&$+zGeF z`4vrHqa+c1fQ?ZxR;Un`mb?j1Xj#@sp|8e zBanS;VpxYze1#2KFziX(g~k126#|^mFu!~tSjk<~s`)%`0!X0yW0hp{&&-#BKw3F&gYyg@pV0`%wIYddHQuqL@P_jNyFgW$79 zVTJ;fvVl8r;9?vFeW}ga$>(JC=jy=Op5RpDHckA`0p%Dn7)tc67BiL)G7}q!G<9NE zEKu0k>b5qMl6NcXwV&rZ;-@MEH9l#(*Q_UZd|LB8LiIjtzI|ML)W!wj>0l0=KTepP z>vLdZqTFU13z}1_wiCzU(&HWcRa8^Z>o|oLzHF(m%-K7O zd;OBl6#LYjrpAcHd_ta5c+bb3L0Mj>)kRjnF~(=ixX?fi==k2MT8++)D)~;`_dm;N ze!Do=e%4|g5Y{3DVR>@OSe?iGLHOiE<&9T{ES}lwn$0p&_s1!|LvIKO z#Z;%P#Y&s*W&F0AqOB0uX!UH?GnRm4qAYaxE;6a9$HcYTM-G03vBMLgis0MIl{wB$ zfvr1g7}TYST?oeSwnMiL0k6Gk_lfCLg^U+xY&$_RUcU$7Z1>T>NVbBkz7$jWEAhBV zvTm*QmZHOsf;GMrnFPB*f>fOY{C$ie0R|o4+`~<@4{84yHt)MUa zWn-*b13vI#~1~1;{)g9ml_Ji;CJg_)brLIeCmN0W}r+ z1yUeJ_B6KdW!kQiO9lmr)Pv+*eb|==txFU^TuZLenyB8nHiv7&;?&h@;4FmCpI5mN z#~LhXPp*r9ve~|igTBO+K%KWz6)$FQtvm*#jwQ;QK43#N`V=G zt{>(I0@t&{+S1B>GRb`E*V(z51isXQe`z8No+$G~0Aa2=ZO8JxP6Dd{&dmBY1B%hU zgtEqru!%z(n-8>Z>YH4L@RSf!{@VC~LuQFu6zwc8K^GEec5{|D`Ag8{9(+im)(IRK zRfdFIV#9{S$pzufwSc*jSEA2^S8L`d23gif3Zrq+xybPZa@7r@gaLyLg=M z^50(7K+aM1Q#Y{Qusd+w;yh1O-^Mw*`0RisP0@5n^_Vw)+S;tiPh_XuzC_^P!6POU zKu;%PmziayT8;*L0RN_7KNHbbZD3hcXI?|V^xiTkqY2nQrf&4-Tj;;Xe!h0*cZVSx zN9sjk{!U#QAc&{tH|h@hsiv~{rVr5*<;8nCv+dLcF!O`wWxK(H)QY-kR)&w0X*iCF zab(OqipW7sp_GzBg`2QwoMHT_6m4q5hCHgZXOh74msm&O{i?PjnO!<(7lw4LFlt?Q z2BQnhf9Es3Xq*Ctr1zgC|db)@EI*l4tnXcK-+)u&X0KObMk0JtaRa zeERUT;X{ePwBHa;J7R=3N@fHfx&7p#C{%5~)A%x7178o`?R@_U#kqr~ zd`i``kez6#?^mcK&KwJw&!5rLoe5&y=TV}3dUbZ&ikB_nEx?3t5WP|2+ekRS@BqfM z?JJN)QcH$FVU@gFXnY>p*&-!wiG{X2tC!H+dy{TE-!LzmA z_WoDQC%qaG!W+a0xCq9D_2PMBiP=47L^!g0VddqYPQrZJ^>i99 z@_0~$vAHD1r8)^7S_%mS;mgEDrf8xw+CZf=NMwuR&%Q_du4AYBVJKE*dMj7ZeO4f> zzq1a6y|Y*lC)gEBSr$ZL@!B9`|oRV)dr12s~%4$Y?9i5egQ}CZnFgSCqrk^3yrE@=NZj8JP9D-ZRj_> zOy4J8qS+x6e%>9qzx$^+C3Gh?;d?U={ybA`{s z5slBzd%RHXOfpbl*v92c>;z&{eRv6z?BvUV50BQ}pt^7qceb;gJKPJCV-Ljw$~D9J zXBENdUI`eYZ-**5QW>xW=G&8ZV8`q<;8J~$a(lXLrd6x6Nh2U7VpW_LxWv%ICt!%$ zVCsKv`DkktaL}nzAM~vM3tpj)-|t*U_+=zqF51)7 z2XpZG^0Qfe9^uk}y4m~?=qY>2>_Y!ad9TnWv=wD1Xax0w8xsqJQc$`)Ww2qo?B^fj1)Dmq$1s@G3>#(`Bkn zq-`QBSlH8A32$vQohW}K%-|Bre$`hP7M8^#WesF@jQM{-$C&;~N`1X>%x1<%(-ljC z9%fO@M-5jSGk}U-9J)E4^f+cP4ngoNM%d?HV!OXKZhc`Qb6i8ZS#|r&WD}IPedoKO zqagC0Uhu{@LWf%VoAuXv-Bd6}XwMLwLrzi`25@ZrbscBT5kV+t0aA8Wyl&w(a2whe z>NP#?R+7t?2S{xWX9QBS0v&1m+P}B?SXuX%ZR|MB27V-sP@^^QdQSiSp)_qskp9>A zcUl$R($nVfm40pK?H~0$0lX0j77l`R0@xNBofK(!q_@AK_)z9IS(O;{YPNYqz3z{q zduY&c<~-bn<@zH@G|9r``*DuBbkjCCf;!}<>ux1pf5UK zb@G-Pv6xAI?cije2q^<%-0A(1cDLXg#@ji@qIy?< z5Lx))M+uP)L~-O|#yJ!}^dW6G6cg(tXlS@#AR*d)O#;*5oXO!l>ov80LA41)S;F@y zeTj>|nN;5z+cN#un6oBDkKnKtjJ;N`azA+HoZPpXvxY0D>D>7if%_yfkYJc;&iBQH z1d7ZIaOwSZ`u#_d>+Rn*4FZ1po&iCb5*sbIVH>z-1Vqae+mFU(C+U3%Bzz7(ug0fx zgpP}$18LYJg;SW8djFX?Ol-fmxzspesLf_+85t9SE7~syK269DtxOxMK~T?-~|nJ0p~(%vTH^u&PPchdW$mFgAuTL zJyYsG$A+!MBFf?4);MR0T#}-n%~K<`Q!F~00USH@9(qLdH462 zSe;d`1@iM_Mlm8A7z~9;FgwCx-O?_ z6Z6ic2Vyl@%HcP@;O}-;G9K^l^x|me%B;X6S6PKh`2pO{%AvRkZW7S^kgk z*fL)Be-5W63fZBbBSjKes9!m4rT!G3eyUz0#?HA)C-M>Bdj*(>6;3?Y{t51%&PlvOHxX1Xwx;#+|k(@C@N!IvT+37PrU zSB~jFNko@Y*iz)G;J26Qy-%Q44VNPxCOfixM%x{_Ey!!9ev0y zb^LSm!z#rKpHSCSM!_HrSUJn@Sff7Pb9>TYA+MunB2#4YwIlp+{d>2r%T*0tVxVb~ly@c!1Rp$( z8C@*BZ(BJ(F>d6BOn~+pfDlGnvw`wn#h(FaZ~0n`r_meiae1MZ`m))cAE_>K@_s*< zN8ozycV2lrSkws#xhJ?I`uJgCuE6Uxd#^Z!s84=?#iF)zKi9jxX+ZJcsp1JZ`O1oT z;7KNmS6ZFTAffDR@&Waqe>fPF9Yr(^({3Y34i=kJMksO^Z-jYYN_#lvtIP-h&dYc^bbmi8cGyk6+9 zWox{$`|Y7?A%z20BWGIe<2TG%u_+W?Lg%WsLRF3CoU0sJMwu{F9VgSSun7Vqb*Zh-(l~^s>y!7bD1B(dRY9VWGcQFPbwO- zAt#Y8=l&j6x-$_`ekACFH#g$NY&BZWwpelEvtOgQF$N8h?w(BZg4rHL9(Ce31EgmD zD1C%m)*q`bZ$NS9+jvl63j~M}kusB}mBiZ;E@f{H%$|DzKJSb;=1-^}J@KRXm#LCt zea?~aT<*29Z z9!K^5Z(r})k1DGq{4t(ndg=#hxo*C8>1y7xPoL`4^TFRH_t5r61Adk?pZ6D?h=n7z zH%Ifd@=Axp^Bo6i?s!lM2V)_2+*yI~1IMuQ5u|xTrdzQ4Z-bLRn zd*`yy&6y{NLw`__lk2%M_y1#n^i$@v_uW!IYWn-p$xfO{)1-Gqdbdh3oh-1DnD_ky zVtbQW``E&iggQ8c{=i9}P9Mc~+x&lC0R3o9^O(tv=qGR4Zwetb{_{uO;Ni2CP zJXr$P&pW8mES`i=r1F_(JN2p$D2&5l#v|M5=GQ#~+DzK?%%LErA-9p4BRAc@-Dmdu zBhfHZg_QfvPEm0@(!TkrN@ZT5qXnY?V{eh0eEc*sOzcHVf$Ln7R(uw$064j$KIaQ* zF*}ign`1r6V&QKYRvm->vUgsqFSES5G!QHa4}nDRyE5K78ZeT+ciH0ttvQH!=I2J= z0Yu_8k0BxAcEgV)n%J2JYrjMMz5Des(H~?~f*tt6a7S|wt&h{qJP`NHx)}Ec=GBee zk9`}zSp7iqzP#cYECX2#`jCzJ5ipeT{4344Vm-^JcEzVit(OJmn2&wfz(J1DtLQ6- zuNTYL%S>!UxUQnTtW%pHG3x6uj0kP5ud)fS^U1X|+%D-TO4P)@4Sb=SM)CRzk>Wvw zN90#?+sN*^$~l`j852PjuH+HJn+ygLbmQ7UyHlROGmu{{Kq3Ex`g7V8FI!WW8C;Kx(vU7W%(-L>fXzR10AKyFkKvH(-cK%dXI#>8Lx&WhA&2P@y&=+S+n;{bg zn~;Be9OZvL1G#8|T<<9e3%t$9rQ`3gDA?d~EpR2u=z^9efnTFt5D{#R^mN_}Rtm>^ zu^RIgL^m#YBux(ZhaXEV)gfX|Ds(%Nb&tJiM%djf$~Q2*a<4Mj4aJ-8OCpMuC?Qhk zzWrZ+ZjX z=lT+(M0pZHFNUp@#mjm(Z90))fR@mE=k+PxnFU++d&j9D!FC}3c;n|VvuILw+l)Np zR05DpG3Wb{q6QGV3+2glgG6P%9HN$Pvw6=DS8kBHJlMPXW((!QdnvFkU1mX`-?Hv( zz`=|fqI1~5#ZD$1^}7zfei%XYzW0qlzF5F@&+YT|^I3)tzb4@?P%pTd0tTMAg(t>X z?weiuS5)*Q%@Np9#Ldt^vkOmvfP{2cH9klpBT=8QL$+8{h>FaVf8Ce=D4k2@dGw`- z^U9;mT1Sa;Reus;(EKJ3G^Ic>6&V^dkC8I+?ztA5!|<96`jNAb9XOG}R8P)-X_yaZ z7ajCX^Nk9y42YMUO_nnZ2^1T+Fl|O^iG4|ih=&~Xm0o1O^aw$TiS`&qVj@0TT{;e- z4PRGL_`EU4J!9wLBu^$VNhNSy;y_t7L5!lWr8f3q19o1us4&f+UD-qG&PNg7KI~>^ zQ)JKX;qWKMIAA-r0?zYTm|QY5pw>%G74$?%l<)HG&KjGGh$IGUi#TT7C6Y}(jvZSc zFxMA$kZ%cjX|g-zPUu=Iptq^Agvn8n{sIE%hDzi^)Q+CaxP=*pZ)` zshors(YVVShnJ}=v{j(OL0ge6iAjDQ`cg6EuUrOB-^dFXZro2x)#z8>>r@QN(cGhX#2bG=Dj`S zb$dSSrVSh7@;Uy6&|%|2a}0T9hXdBD z;zxA(3PI;$q8neUl6gn%$pClpHbY(MNIO8OE5SpD(5yGgV_=g_SOA39xmxXG!EfAI zKOhbh-)PNWIxT$lanuC&u%w>ApxBoJHws?jYlW6^ELCglT0g$2Ecqz-!k$o!1%6RO0ACtkTqLc%+*HOC=0C-$XzU&1DYU@Bf8 zd74V>LVSJE*6D7*XQ9bdvTKQg&%z*J=k-qVpRa~GM0QX-Z_^dHFpTgOoKKot6KPa_ zG$sW@8gw3MT*Qpl+xlY&1uAzSKbj!y<}kXl&xR+R`KrY-0CQ`)j?h7GkD*KOjAou( zMEc_lCQEX;JoWeqMC1s_ONASX>?RmNE*LTN(8{xS;y{x`)T3D4=K?iv?2Ufv;DO9- zuH_T=or<;^#Bh}Z4hN~n0Eo%!q$_0|0G;#(n>Qd?uvrx6)t* z7$1xT-b;HJ&zGA;Mcd91Nd>2DF0zl7bSlEmBsr4AXqd38*}YDf!7P$YNcUWJCV=_RyuijD z7(f(go1@C_uBw#}#{5u9oUQGVjw{}`PvP{MZ*Lg3b|j)sa6{@f43nyv4bdq-;3An6m% zjn)9haBljc=)&Z&y^(|w+J#O=H1{6C0;-SDZ%2kK7+HEgJCK+!=N2GmtO2`bgk-p& zeR0l&2B&8}aC)TJ#j|&YOsxNzuM&d$N+@}7rLZ1e3pRZGAxr+xHI=T>?YwC42*z`d zPt&e_pT+0kww>-Jtr8@Iiuu@UZ-=6Ecub49vL=4nTVZMhyWnp9hY&6(;hr=xQoMdbY$H|y70KLF_9%E2X^K?g^h{m8AI|8BgsnsBl6oMHRHQHde)hxXZWk*s8P zmF75X6+vGYJ%41e8*y8K0@zE%9pj1yqs<0tJ5|h5vvFTxK*A8IECtj_z#spu=5zU{ zjT}x!UxLeOFtWFyFtK^PCme+%{%j&6PRCsdP5xyv?#<#2JNFyj6*w!et? z6P6;bPd~bDYA7Bp9G&sI=c}}Z=xsLpLUT|tVS||;ggscAPc4`Bi!8&Ss6DZ1*OT1~ zT+w4Y=|)kNf?WQru$$2_$}8KE zbS=t0!8)YnN-jAI&LcXy^DQsEo&_S73cVAC{DVWu=K1Ft3pKiCdw3;ycu_QBsir_2 zsr0)6%2&G;EpQ7;1@wS*&%=*?ZsnN*}IiJS-SsIuSd6QO)VCoM&IxPoFpQa2&TBRH}0TFxfMq@eiS> zH)?F;Frkt<>rs&t&ot-os6v=a!`%jwY}gcWdHsM}e6Y}9t4b#JKA;>_X1E9~GAYhF zF1<3*U?wM|QZ0@V_Ufxlbe!;`c_^CNo-HhS!ku&{N0(%#Swp9VMC7U#6D6%(`!U;E zkRaFbWCNrHtj1sf9m#>OOI*8rmdq?Js-kUcQh8Jg+nt4A74Kn#x5O6SgLg+2WXfc0qi$G_8zcueHsVH7k66`Ko5EeHX zjHsp0mz@avqIk=KBBy;8d{R7Ze~D~(I?!-~(mgMdfb^9bOHF2O#chX-vjRs62gwaW zKP`$mq~C)xn#Rk-XHCG6CYOV-VwNJ1y=kDy?T?6b}*x#4+fS3)~pW5z^a{n$6F|fJ>#y4#zzdv?z zbY%ZCaw}%Dpax+Cp}jcuzjeqG62LAdFNDWYzl0`OT24<6iB6ZQjCa^{&h3i3-e}Oa zs`;sf=9z2$f0{Hr5vny$LMGp(+P3O0VmG=a9~cyk5m0fKq2}gGsYLP{!-@;-USjQ# z`S$n4lad3VEO%<#7D)E@sF-T{k)gDAuc7FTNwB`?`BT>ECmpZ<>ElUjuJ9I#z5Ta< zF;tI{Y!}Jhdw`fp_BZw45%m3hke7uF$3THHs%9@$loCCx3CK~qs>RIvwoI&DH^AHN zjgvm8<03uVJNu<5q4y~&uJ9MUT+%kY$qVmjog$0~J>q>(yVjX}pfGgPgEr1EfLjlL zINT80g7xqMVfH4vN3@RClI^5ENWR=#2?^1?t~rq%1KhM+q`N(F`$6S9nT6i8%pjfN zQqq~A}HIn<;|4mk-rvT8Q-jWe-FB4d}ErI3bE=GEqnw~k!tG7D^3&jhT_ofQOJ5$^SG8Gl7;}yLUg1jE zqAgyYh|@e&r-`}1(j**9)A-CYz4o?sc826r(qE(lD_%zgb>>sVFLd6{WE4rN0bX@mndfAf<$)H(fq-J z9L)%%OgBf`tlMvx*rg^TSnyc<&k~Mz&IkG!aUe6k(qwa$NODT>n{tmC*t45N&gTRl zsWsu~>57@VB%9UHrg6UVJBcHG90Jg#3ZEHr3GqKxEZ;Q9Mj`dN8j1{=O^s)i{&J4>bfL0n*(o>LvEh$0gp=p@!j*Iow?zI59?d3}8`D3wL@J zT$TtspXNR;C+_@?@1A`tZi0ce*br^qpRm1JB98fB7pjo#X1C>oD~HCdY{tYK4@rO+ zzmX>Jh^-|_RBB|tEfmX8-(`po>7Y--Xm|gb8BlDZC%+Mr0yVw`bBClHa9Wwp{GM@A zfI}my48~F3xCJUqOEW|O$I!ErHf@P>X4;9%qu}HxZ=?$wcc$%72aAqIHP`jP z_vi;`4M}K#xK*EKoAbSnh$kSlv6*h!;~NuN5HKIhD_`B-BD|sO*sBND)U=_u;zWUc z;iY20Wj756N`83`wDT0Zb>h!YzhYs}9rs=Ch1R%(+ljfm-OVHKfiQSObmvAWcDl=v z^1qJ_GLHD=ue&$TJpN1Os zn^M@f6&CVpssWntH$Mi1i_$iew&EYgpAT&$?{@*FW~(4n}&OOHrcZLBE(`1%txW7M3fBXAtx^|Dx%#Z#fUQ!#gAI;s`4d9uGK*W^GVn+*I z{E~#bU62A))B{-%d2ARxRr>8q@dhy_6>C;@u{508zYI;?r8EgmHUIdW=zTeCyr;TS z#KS^Kt(|XHBf`46J@!5yZ7DMwfU(Ws-cS~oeaxV|vG=7U`Xs+127i_j z--ubfFBiVSWA@>CCadaV`+O{JPi5bjGoZr`7wWpTN*a12sPN!tHZM^#x!RvbVSv$E ziC_sU*j+nMu^yjy>w^k=-8S`OA^+3b$h$I`c6YT$l_f%K?##m<`Q6`TW`-cpg))Bv zvw}lkg@S!tNhuDg$n^H{zR|Xj! z-v*x0Rnqry$*H*`i8vL~_w_v20%nFul_uC4MEVL%F4|?y$9}y3{w`FC zvgwobHR*F4J0}Y7d-VY~uAQ)`m^4w%IiQGPHsX(a%ca#-(G*y1%GNea|NCCO6+TNk zMV>MxnyELYP1aV-OJjP`Po5$T;!ER-U#)IWgCBpF;A|13zNzSHA7lWkHn} z#@TEk7umm&q0DGf&^HBUx%@KD=jRRUBR+xa6~; z(9;P0lsicq*N$NhXNk2-1ey29Ozxw0xYFwPt_eb~;z)EC@UBiO5yoHp$c;=fC2Sdj z{Z45U0{{DH^v2>!#n)rB>iwwHXEXE>Z$=(uCZQ(GpVg^rH>Yb}#;$`5|BK>V)HCtg z&IigqpD&!*$Nm9fGMP_}0r!pX69g*F@rh*R5Z;v5e9V+q=R(jW%KIf53xA~|LOGyR zATw{p_`ZaIo;2JyupIn5?A?$T7+q%!b7zS)9@qD{t`}V-8c9x3e2xBVct%_Z4=05RqEJ;_4cX;3uNiuAQm!1 z1=u#fL<_)%{ZGerjsVF($%WQ+-~Y6ri`;?FicwfBpTk?PMb4+BiKQEu)}z6-Z%g>dG=Rwh_0f8oHx0>MkSd0U_^BmKdyG zV)+hdf8IZr7T5s2tw2}2+%#rLr#gw=ElE{K=4QmsiR}Jre`EAU<9*y_<|9hbz0h3z z54)fnyc(A8Jn?OD&_N5Gl5sHJ5okbpMkXg_wUdoW#;>mM- zr6>61Pi*s`ODHzCmTdq@*!oHO79!CrZR7=^DcPU*Qyu*TM7irAsAe4nX9lBay>|9z zPD>YXG~8mb;*Mz_m<^K z%VPS$7Z9doAD!~kU@f5S9j!6G41UaXm=+2@nfe5If{k6NLBV4 z(uT;}45XW4e_zNKjR;we0UwAvT@@8k$VlF_v$>{19Ghq4XaUuxi-lx^j54>&)b-R^ zxuF@S%x9#Iw=zl^6>{mLZ*??o%znc4d;e8)dg=1wfrj(*xDRh{w`2)mR`7E~L9U zoQJE|KZbigHd2Hi>@oym%$k`>QE$>2Fh6wAbHAB*cGr62?rgzZ?fv zeiVs8W>nL!-s1}r@y=q74UM zB|^$JZZDB68vb+L^li2dNX)WhTt>T=-At08kxu%xDrE43^F;9oQfz3)yBM?;^DUXh z{m`{G+%k)ZQnLs;!hKbaH>C@_xzCt`{Vx5V30lL(2PBG;w~#bov^GG%@*`iAVznAfb~ zfqkgtlN#>qr{)Z~naM^GUxwEx>TvKy={yohw$2AGir3kmE77{(d?o}J{}QE2OT37^ zblIV@CWoE%uly-zFw|PO@|^UyR%{RT8%=59BmXI7I1l@yKi89wb`?syP|tw2SxAQB zK}iwlwlaD;X(&mtN?O9lt`D6~3$=yQOG1i2{24k+W%_`?Zf?)zW>+3X zZHwx_Iu|pZ^O3Wshmz2)afc-vD%4C1(mrOg1ck0+@xYSl7&MIs8^^Ynury;QcR9J7IoJv7-DWLc? z!GcI{1b~m;aqxDqW_xbc<3>t;!;`UqnrtEcqr0NSoRscXd(4=#WZSm6Yt zl6r)9Ke~IEneM+9Uc|`5rLY$QypmnGgM^FtrmVm1tWK7b32@IpFvT52{sQE1%b$TD z`|*sM{^hv|S&9IhizDOHlavweom>7s6*9+>4)Nfg5aW;DWNv-_ekXY{i8g?-B0{Dj zU2XV8Xa64T>Jz^uTXTZk#SCoL?QtY;y(3k83Q~X_JDRDl;KEO1uh98$xvsz5sODGw z;i~DYzPR%IPAEY&zL?8H69u}L)d=fGu+Ny7gB&Ky=u*{*OQAS#Ix^%J3ZXFzKSnG? z6m64gXXaV9t_iw|J|5|w(VikU2jKN`@gvM!bZth3wJCY?jcgYlJRZTHT zZA*F&)Kog((Z`9M(FHdqtb^JcffhR(Ge7~K{bz$FbBnIIr)}UpQ*7iw2)pC_7jG|v z0?whDBJ)mW4c-1c9t*4fzQ)229Uy3Y;ng>LiU8_pQY)a)t*?B+d}M2)&o=|2>Qm-@ z!3GCe9_D8i)!+k32Z#-yL}DJ#vn~Kx4W)ztp+g^hs$|;T5Fm>-GQJk1$dI4%w_FhH z26W!J12%Ej=VPZ`{cIFP&kEg6rjdNwd^&2_%eVff6fvoPe+6ugAjw5)6ZwS-qI%KO z@l_u)GG5f<5IPh0jX>@;=!FIyn?;08CFhJX4x z@!VAwvoK>Z67bXFB;1(E=g(WO3FoQPGj#yTc+xy5n)>;GZSuRz8acwToBBlu6W%Tc zP;p{>wHK2e0Vh6{%_5s==dO#9y`zLDkA23Tg&<1zd^=Rr)zv+|KQ>bx()V(Fbf=@V zpY{LT6VG`8>jR2hO0uCu&yb`@mkgfFL_!*|`tbsI!}jn<70D%bmt|?o953&2APgjO zIFWt`M940dpPv2+g^M9S1iH~KgpmBJDDf}BW4j^n(vf`i9XzPzCFr5{z6RW1B`44d3PZ=XdcaD@tN$o=qx5Rm?mI|wOyJADKh;A$BWOmQs*)l&P_nC zOmO{bh&Dbo9&K`|nfxs5#zBlCTXY61Ge4(ks2z4bUKXIh;3~aimhDGk#}GWNQ-FN0 zkp1q|sK-Q+@E;g>XqZ3+7NY-ZXniMFHE9iP`D?M<8mt){IF`ryi7iR;z(Nh+=;7WT z2z8C(kVD%AVBXAhGOS7}o8w^=# zr?rDS?%-=Gtt+qOV-U?pyg9ft#RgI1udxz)Xd_fm^K<@X>iNo&OKcYFwywKn&)_aq zF|W2R*@O<#7NRPm%#;)NhQ$CixZ*yV2k>24Jdr9pu^jEw!BAIm(n&F1FAnn_SxVP$ zbir}FfqRf&2q<{dxw9v;vHc4W~dgTJf)pr%RK;s~IL zelH2+j5ngd3O-{BsAZ}|JYVh3<@&q#sKFkr`DuOqByT9#xAQ6T0Z&0(ze3~aT*CM( zV`u6=K^1R-4f7tf#HA{ewWS5K+V#UvGa$eaKe4Rgq*^R2FlJp?G!^?Fv#tbCM1io4 z^hX+CS?=xis*bnHlz1X8{2~%eTp<~cZR?niJf%dl6~+ewqiVX7)UBEnRGXX4`vn$e z?=K(i!;csL$Y6p(^V$PBiHQTpl{ikR{{=H=90~ef`7jhjI)(IFKZK2Y4eISurTiOz zKP~lZAXUi~N=Y9{srCBI?wArC3W@(Zd_&JXYU4`fqrbU zVir``S7nT>A^Gu%Ywp*IvPdOV%V#5!sYNB%2s7+!Y}tje+4?vO?Q1` z0TNh@d8LiId<0pf3;$C8 zgL#ja=oFwIV2$fTJ-o&Y22gJW1w!;?h1mlVSUrJ?%?-wF3w&D(UO378MRnNtC5o`q z#z*ruf$kmZ>*O^t(`Kg)b(^F~#+`S{0qHeCql64GVg!!C1W-+s;OEw-RR!^UX4`@_ zpKTUG*f?{fgO+$jck~o_`0g~FN*c2fmwOpM^TUTPHu1Y|lnh;^Eoh7^3x^OTR^KpKK}df| zl_Mho%NJcT-=y@r{{25mm`gL4slgWf)R9R&n^M?xn0CLVY+|XI;FR}tMtGMC#(?Ro zMGNK7PEhzFO1yDl9C4QxkR1aK*R~x)V-5Cooe1cd*ow~_uVQ2&``daN_k0t_X+4t< zQj37_C?bso$#1_P)OR)kS2lwFd&;KXLrf$a0*&k91@Rb0C=26;{5$w~q(Nq#aPDvO z^-89}C3c~9S@eejiP{k{N;9vdrO2BTip;6-i)QJ=mwiY|3}4*1eC#cGd+z$H=(j^* zQTylv=(W?qlghw1`BVF?32jhzNlhT`E(_J+wWF2K8Ox{Cfy4gr4-QAGjaBPNXUjTa z#hNDp^x9GGNh1+}NSFrYM|^1{;g*V$0Mu<)2@WW+#vXxnikRc_{Pei{ojWAU?dyqw zBc9X0$MEX&vu*f)*1$9S6+13ostf#}GiON20hm%W{YVqwAVmnAWsoNHu_EAUn}uvY zCITKdM&|>WgJ?Bvu=3@JC7ger7K3zq0U|xq&KgL z0@k2cP|rJGDFSVbyeR~cI8v4AhJuE{JU09X6{LEo$SY}r@OnjLlFdCB3UaonCD(yl z939D!B0Ynbzsq1KGr>2?AiV4Aeayo~QeFuc@KvT9r!@T#Jt6}s!A1}|_07^q8t=*Q zeG@4<(qyf9Bq;tE-<4Kz1}T>tE9wLYNp|)0P9%NJ!Yl_X(QPAoa0|Iju|s7PPl6ak zU}qv9A2i|9x2bx3%R>zCJmkt!2DbWd&{%Iktj0*A#vL@5yLlp*)t<|ISs=|VpC9y! z2ByT)J#~5A;Z$Q$){1x*^4Wlu3Q$Ysl=XZ%V2B-DHhN#}J>8)+j?SnxS)(Wls9Zke)4&2?xG z`|px7=<(gO978`quRKnK)A-+fV^(watzNUV7r3USl6H9JrRqNby-mb-x&{H+q?vf1UDa#{LKPr1a*S{6 zIQUD&2mlld^|<5tDVzqVeF-08_qN5#8-Q@nv(!|uodMEBsE&8P4>0Y!g)y^PO71_@ zk-K5w$4kRvlnvS8+dm5$kwBD*MESfwmC|szn*H%YLUjbtK*fI_G+&(ge&48pG>m%* z%5xU>B^$+U*?)xqZekFOlEA*otQy=(fnmh2JmrAIUat54$Uk~cnX`gfNfMiHle1;u zXYIbud6(!XL8l|H;h%Sl62)OR@vu4ar7bwIj)b`A7pxtj=UC$NN703^=1Qt4Dmm{5=( zAsJn~^w1yXBvDRcGZP2W^S>2%Ho-#;cQc^->$W2#+N0gEv;%EwKr7Dt8avF}PDC{~ zX4I;B&wajc5FfX92#6_st(nneJ&+tH!w)e{>~u;W%{)?5&G&oL%y1c$-QGn8>>SN5=-IVb@PDAWsGmaDIHHW#9P?a4$GlKi_DSS#iv%j> z0*U{VIUOFlzOnJrrmecu080A zEYBJ96Z)|Gf&Cs$e5x=v+^y#imYT0*U*R&a@P2;aXbVUABLVI zPlSSX-u~pUam6PIPPo-CmqJ`={c3SlDdFP=D6%a9OcV8cp$Y+z?LndmH*%g-pw+>m zs2E+hS+eZgmS6erSJkJ6b^#ZO@7AP1>wTgem4vHRKkr-J!TVRjuG12&S)v}Pjn{|V zkB6VJNQHi1)bvY!?0*I{FFR1Wgj`k~ddPQ&5Vm=ewfqI0c2^EwRDd!w-iYY#oo|8A?x(|g z;|#`V8XJ!j|KWHL%D>q9AL*9;v8^Ovyainw>=>di$2jrh=lq-JbR>{4IK)!;)#Rx# zOY+y(PhJTKFm=czhl@AD*0O2heGmD-D#5|`52%P&QR97jnSxFxgG}AMl?Y4dx)GU0Kr#C$Ef4loo*jlbwm07Z~tY045JZq zpD^;Usjw}XD@f0mH;uwj9EyY)5wCw{h!D;fTSzJSmJmk_!AcbZ!VQOkK8|h~09#-6 zFT7UEWOhJPz?~7!e+gv{eX%5dkk$Ua=gx4}1zfopqEs|RH71la-q&s~H1R9{@O=#r z-Jm{PxwM`UJWx7x2SanijuMGEQh}I@I|JTd#|s}39=|`IVNT5*S2fv4-Y$%f3U*vp zH$P>~rP*ZrnJ{@$1=|c#PBD(_M0C4%JvuZr8{eveHnBPx3uBaPzc+3VWAahN&7ESAKR5zS3hmIcZHZ+V^qav2 zNT$M`CO4hh>{2WPH^Q^t(|4MorSX`AOzGUr!5Ch68|pc4x#Zw@bvq;6bwJgNRbSZW zgOP8*DXU?BjYA{$mxUSV1x_jfxUx2HMtUn8OgWYWo0mBOC~U`ClV0)K&GKQM8RzBA zk&g@;uqEDMrtgD^c^uCF?n+NKu$HODQ#1T;sBH`IoKwi%>~Q(bSnA5G>)`l*$ju`7EtTrk7BweUFV2ndSWvYjMVmeQ#ORx2oQ9_aGJ_lq+=W=fTPKks)kMrxUIYJFO0KXHa&Rme;n=F%y%kkNvd<~FXoqK~xgiy9cTp=f0! zwF#i(rM9qMufT?6A?%=ypRi?0kYtqQraCQ1+{59sWx8us6EW;yvZpz@v#KXq`qac@ z;Y0j5=46nMafKaPABN@c6bw~ZNzvGR1`yOLl0mPC08zhYVR43z^S%~g1j`cz>qjt> z{)$A~NK~$Do^>$n7<6*N*>qMAluC+ITsaC`!0 zl(x%SVpaeX`)j1gn>gY4lYy!m@g6mCco_(pLYFnLc8PAUFrx%P6L!ybslE zzQqtNGBnwzlMcM-7KplFle94JdTa>z9bSeD{}->-+bHidI4*$(wtw>Kb&%zoTMeq4 z#iyl{br0T^!c#5+A_ z+|Iu}*(hqco^_i4>;H67H=dSJ8BpAOHq^TlWqPNi2r~ZmQMX#qW;7hZ40}U96Xwt8 zILo1&zu>BfCZiUD|9akIb}09i+$5>e^r~ySEpoqR1aOw_tRz4O$%7qYdPFc<2ou-m zXG$5(95;Dks+snP5{dWyLa?5g!~vEWEUVSTkm0tWgJv1E;tCTCdZ1%j>^%$TsbUR# zRw;2g)$T3?or~n^=Vh`FY7lPBH0@}PmjnSHr&=js-g_2x+Zh)miJ`DD@wwEw#(|(? z=PFv@9H>tY%z%)NNqjJN;|FRl~(y~vvMX64=Kt@a8<)i zztEBDqx{-RfaMJS>dgIMVI9i%39akt)lAp`*XK|y0)-r#F0|{e1sMN^u7G^b?qA)DRMDcgb+!?uKvrq8& z54j$7cK1xuoTVg(sf?`n*jp=P{gh7}waO@#q{DoUV~f@GqOi|aDm_n;|3tke<<5sn z^+xx2i$}}Jctsu`dQ)^$x%1zqiTkVysEglcdhOhjC_#z=+ktf;#3S1VxtywBm#|oh zLJ}vU@bs62@+7!_*B+h=HEe^27~x@G{q(^su)U!~sUbN=MUkmqMIyVmY9IC+_Q9r0 zBU)uEjdbIu%^BqdQX!=`I&#E)ew;s^m0Fucb5Tzv5cz9ik7NEBsoUmvxN)8{Bg?VX z;LeUz?{qt{_xrwbb$x3Pkl=uXDL@&gPai4vN5IKrcOW%G!d_Q8mhX4)H-fIt_fSaN zc~Qp5FlYPU*chi5gS%kWCe*H%_Vs?`e`dZpY`XHI3E_Qnm=>9rjBzN_6oV1Cet%^< z9+q|`Qd$lL?VRiI99P@LFKpQG*u2ei$i%2eSkt@=GJS~^20vMtC&svI7nx?~evyU7 z7!H9IyFVh~)*Ad8(BQ`ZnZh<^)Otdi`>y|yj7Mr0z&n8DbQyS~TKvb=Uc~tO3G$Q9 zQai4LMw0K}K(vOb;6Oy_kbl4q4EWaNuGGp|2a*xhZ&w4%L;;|EhRay2&A()Ss?fm$x&}1<%)ny z8)bD19B)QWHgne8jJ)>><2wWco_x>u%c?{~;d-ADL-yJ&HchkN{3ALx<=;>-A2&=F z8c*e>e|IUJJ%c3{SDzHvCKk!{P{2RCa&BZ?^z#xKOcM5cV1b%Ou^{>J9`qqDvb=@t4Y>8-b%7i{5ndA$=x=s`5h8O+qb1DDp1%FI{ZnStYBU`?oA?7hTr{l231wZCp8DL z^<(-2)N6t~^YN87j*qhHVb~Oc!gSI|4wik<0*^l&YEEd8-Dbtks^YR6)wQS5<&I@E zjqx%GTf^DG(p>6Es4NK8dzvn>Y+JDMVy|KPTj(SZZxm)Gw5u{Bn|VKQCp!{Reo!us zUf`OW9+QxdH`61`T4KG{0{-5l4*U;A?IXl>SPaxnQYpc-cdbL4^E5M_M#Rxi-wN_C z|CIA_e~~^MH^tY`tI}~rU&6lsXx(C`?ZyI5pvEysO=zGML03st3x;xO(^1_xoqc_C zoOZa>zI;(<2~!GV)=4fvk!i!jadq+<3;aiuf>r(&KwnT~ahmRrTP5#+t^vufo{8*8 ze^iEYH!+a+ZKgw2ah`Bo1LfH(;}aFaP_ENP*yN1f&8o^8MKW{S8Bu_MoQsB!7~%9t zLDKYTLVi>a2j=VUY*n7wZ{vtDz5vMirWmuCc?ZuUKeD+o9C&Sz{*kIA@9K@Sgf95*M2JbR6cbd@Gm9cgMW>$m$_T)>}@oe z^)ZxQxu2?W*^c`CU4BvW+b;wOV(O04M%o_^p>R-w<|M#{KfwA9OwWNqWF>E~P7_)|cfII?bP-opM zAra)X*Z?QM}bQ->>J zN92Aeb?=bAZ$CE=H8hnyR{lZFo4d!j?sV{U^c4H*X!*cbt<)ouhCn^I$?N!g@d%&& z6r)QFW{2<0D(+CZNe7227U= z_j9fm(hZ9uA@vJ<6t0 zo$E409ee^B+)PQP5%w*~MO{+feE~L^UysI$rK{Z=P9&wP1(y^})ux5`3K>t&#_R*J z6L*#k0NV8leSlGCg~IIdUDDcj_6M6>BKq5)HeKym@$(;-`rpQXWjG!4++R1Q?zwRa z&^(=nXI)*y2rfIcKOP0}uinm~k2*ckypO_;do_{4zapGKtshEW*5FY(N)1oFvphL@CyA26Tnuc>f<^czMONzphKv{+hk zM*TR>j)$}KSmW>3x#@up53biZ0oXKbwrkDrh{`Tk!6c{oY9t^2Q;4QC5Ro|9)`^LT z>x^=V=^>EoHuG`hi^%5t@TDx_zx4&1(a&?HPI739rKG<)I3F_J`rmHI@7&sCyD0v` z3y@AqhFljJF=*)_AQ2L!6!>ZN*i;Du{4^o6dh_|1=rtGDh7wY*aR{liw3&**Yc3_} zL2Aa&nUg=VL_J$Z89;wh>7ooib*GaEIbprZAZFCo-K0UEe2)kx3*qkRiesty@@{8< zAM3OhhwJOd@rmH|t1@@B8*uP>(&#L{*k^wa{O+<8V+zjt`&q@={&eojpRfP#%`GGT z%TRlph^q*^IVIKNK}gTrFH`P@Fk-K+lr@(RSF^>sw(*N}`rLWrU{gF_+LDV$nup&H zL+B@eFX~pGd&GC1pMH^yJ~X?HfI9R)q5Zj4aoc_S5>Uhm;`s>Se%!BmwthEEmlT@J z#Ya@FgDlHZ3O<-Gwu$7%D>kEoC=g&l85u}^tZ%p~yh~ z=pp2XSiYVRJPKQK8XG{O7OxnGIVM^$twya6jE3LSgGjaX`H`Ped;TU!4WMRo&xy{O zFg;P#R83g+w|qF$r~#;Lt?+0N6iec~`Z3dOHW|D6nlb>1hB$AHN^r?+=zqZ3)236l z_XZ}@Nj=c|G~dRvuS2c~hS(CIrg$g4McU8WLK%9u@mGqGfo7hqmJ22097==Mp%gUU zpW4UHxjFB!#lmjnh0j>MLx+j*UGqqOIYs)+ht)Yw-?dhuizo{3LTUL zE}tL=bFSSs05YJxf=89r6*#*1NY2VkH>LPQ_rpEN(RvzAz0*K-WbGNnjUM+SV@5RE z=W}!w(k+)SoZB)CU?hPx_hsiLymE62x?=!HICW}J>~G%F(m*h=o}cR>Nhk-?HnM`O~dT+7s)FpG6rO;jRo39NhcJ+@^pt7__>w1m}2 zJ9i|n`4gsWv^1lK{-^n^CGfx3n|%7Cows+`$(u5L%J!j(bW2Yn)_pj(2uC7DxbJg>uDfJA`mH*y-Y=C+4?>;{CdA1Ed9KMxwoqLPq zV$!DDLNI3fV?3Ihz*B9eOe~?5nqT!cP}-biAKQa&T(O%knO90EPX)Xhct!?T(vL5E z*wh?e&13Wdol<1PoJh~~Z(~O;Gatu;3j3gLaYBuDDM&J4XJZwy?-$&QIUo6E;jVRkm<`P0v4*#)ri^p#H1qd4tSo=>KUWUj32gJZ zW?gBODas5eqq#NWJl{-NRNm@-qCeU>lHE- zoGj)cBjsbCEOekKCV&tRJPg0abgq@o=JQh8JD>kcR7$PZG{Pg0(Ejv5-RhD&-nmj| zdlejbgMw0D#-8~7FII<(z$Oml^u4L#v`E6f)+#*T z_dh=IhT~9qNYjF`9f)E;6+(mPhYh`z)&5DKSf23+^n%a}TQe z?H;`9cIebv!4^{5Rpp%3^V9bPxk5YIm`tttwn!gbqw{sY`=x7M>k+6Ccf7mrD@1y& zuQH6zWAl3ceUG~~PpK9$YfmyTu%&#pL8)q@l($3t`sy$>p;tF>D_E|f>~i@F&k&Uz z8fYQpq>l`#B3M1^r{=7rRpb4rXtGX;^Lm$l?k(;Yn{3}-OU~!5GG#;}IR?Ae*5g_B z0_E>_eW%QjuUy?2KRth~ti^Z14D(KY>pGWL#3IRN+WuhC>YSyf%q52ymIfgGhpfS0 z%tWMph#iRol?r9L278dkw^Wq5zTQ)2+7K%;V$Hz|_T0&H8wPf30@tF$$s}pbg;Mx> zU_yMP;Vzq^LmUQNpuT)|E&JxQ)8B-s!UZqFdBP69owS+g&2{UY5#e3_zXY5t#_G3<2>FbXmoOvjTh9zIMp1KCC7)5l0RM9c$V zTZGmtc(xytS~g#Y(PgREZIWs7gCz+{?Rdm)-guGNLttH=*YBxCe4grIe&K#<{OV=E zObB9QLiN$8(Mu|b2iSC}fhabYWM=JjTnGsqP@}04A$F$=jSm6HL?aF8D9aN(4Y>h4mAGMSr#LDa< zmO^sn=ZA5}TTT-$JyV|w%p`dr77Lat;@INVy+Tg_0kdqtKU~gw(qhck=AziW-Zuc` zbePj}+u^oTMOo&*c^1y53zBNdkglFk=tzfQqk&e^O5KcgHGrIbR~S?SKKyU8mmAaU zE(Cv9!UZ=^B8~-*7^n&_vKo>wb6f6s4phsqAvJ0Io|AXJMiZa~m%CejA9K4H7t^Nq zI1-He?c1UY@9_USME*zIsI+}igFz2rCiQxA4?Ck9V z#_j16`GGbi4iina-=jClK)3;6G=a?jwgGapbKOrC2ea0Ti#|-g_MCPD&sj^5#D=f|?N`RzvX5yudiOQfp~9iiLJCAPK5jUpd_blfY+PSo*7V zg&{`k7&DK2DRK4Zi`0R{lI?VjZXq4W-Yu4eONk{UiTA8)^~;FxcoC%+G3r>TKIXql zTVCtbqxX#>6uiGp0!W)XPw=O&2yw!2D0Uq19)G}_4|Sqt36^X*S3FI258bv;3W4e< z1k)DufbmxrDE1OF=rj|l%dS%g z(q`pm5JFx>iGp73N&>|W1frCD<)k#x^nIE4DL^nvJEzsJk_jpumKTDM=gs1uF@C?I zpY$Y)uSU~pNjN$jDsS_jufCuAJN;e@vKFWkem5$*ve4XJ2*>^7d030)k;6~fpJ^FE z+b@idE?-K`l@QIJF-H}r zR+0n3HJM$>Y$5-=g6=r&i9ria^h1tzhJ;uCiXN-&k32cD_6PCW6d&bzZer?m(7r!u zazHnRW8ZY-eze9|H+}PPEPAn7y5oinnpzZLjNn5xPmrR zIdV)<={5iUAC85Ak`jQcs2Ni8T)Cg8uh@N$(quf2evrZ~ar1rvbpXLX1qD?>oihTR z6rThfogV+HF1pe^;44>$xxlXdlWr zx)LF)YM`{4L9l!?=B;(|KOP~|<@xbi^5GK5!lxwzdnGw)**cd9k@cpYC2e+(y@MqY zvvu;lQuY~ZfDnU;z_0YhxT9T&O)EkDuvP2?E`Sbf(lu~LB}L@=pyC$iM=tVC{5puC zPwaL_XP>qQ~|f+_rWvjRfR@Yu=ZCW#?6Sen0ZYb$t(R8}yQRK!5zkyO5FOf}&D zsBu-Q?W^F+;s`OKx-p1ctTzB&I!Od%c7fN%!iJ4-7p^bgP>QzELyUs5azHCIke!x$ zzSv+t`fy7{mhk_0It#Wazi{i*Aq~>qAky94(j`4~w{&+mNQZPuBOu)&T>}z>fOL2B zKK{>p&i({*U9)G;9c%s8vwoH2T!pIKqC_^`jLm7w;P-lOOsM0Rs|q~|54eWj7R=SH zCOOUT9-_FzvU9e?(Y_RjGA;dmU-9n9pr3BH*eTJGOs^&q@k5_5VKq5#DUBpbLvL`V zaz)I5Ma(G@d~f@vB!!JsIPB{;xz9K{{N`u;1>w2aVFQ@HBq9Y0@S~CSVF)5u&g`mF zXXko=Z);ch%(tLY>cf4eSpg@uDiwG~2QC6D_~rxPmmX0#((L;6PfO$)VQ!}8AjYVh zkLL6F{S09ax1IKZFrEsXXOh3Nt34fcEG@Bo71dTgX9*n6Pk>!K95a+Wy{A_i_7NSl zXSnoLMVz ztM7Eb?PJSH`bxio;$w-$hHJ5^k%m=21p60_Ztm!Ii3QagEm@S5M(^1(S$3Fhx9iw6 z_N~aKM)kVb8n#fluIN_dML}i@VwQuiBWm1BkrzwkiJcYC;DW4MC8G|<~Cs(pxg z2q}nUl|6QvNuqQlag8sQiRTe)b>gfB(BY!xTRh>AmmL!i4>h}uQm-8EpG2Ra^mj}E#UdK|p@;6)L?ARAKs@KNrXyRzrBPK>Gh&cW4;y4jQYsK~uk!XE zLDw1DJXKM<2@TXx>phEa1P@~`Nap0%_XZbn7e)pjh!2e;mxa_b+rlL&ZB3~5At3)51) zBy;<-84P=xO-XyZ(o=eI)fOWq9%(q_M9OJdv(n+2NZp3O~Gt@HRZ;v3d~CJwFM zt)bXN`T0~Xw1uKL92|s@;Q0K4zG(@DMMRs#_=a#0$TY$Nt{$`y^O*u^(p|wFE`rq| zix>>Y*w>$4dKa?VyAnRkcdT&({7Rb*^pjColDW`& zKaTO2daqliU2=idPq6p%#mM9@);ew=JpN11h{U*`NyBrf=zWFYhFPMp3Ed}xqX2r9 z%f8Q;@UdIFfFf{0#U2Jl#bCpPzoZKY#!J1Fuzs9KMR37M2Cod>$(Z#F>rTn57BC z;o|hcKD(uh+fMD(sd6#RVS1Xwn~iK?qYfI<6lTx{Y=?rpx+onA;3=SAfhriPQjbD8 zZTC6aTl{10$6LxEf=XI`Yy?wKI#C8S7ib_rSQyVA6hVL2bNRzV^3#o0~7h2U~X5sve7o<+pB_fbG$5+L8xSoEhnp~?7z=_Mwn<0 zdC?IUICO1Zgk2r`-_O71xjo6xoy_lb+HHT<uBe*Gj^aR#1A$@U@ zY-zBuScGo@Y&~BGCF)%`7YW4?c%ygT$1>xjk4LsCi!D5@8H4YKSChzDZIKemsj@_w40oXv3}3uvw|GFr3Nne)aF-#mS8J|{2mwRU+ardmP(6}4 zJWSby$Aq|(ur^=vWe~|NkavQRK8+mwkz@M`!5Bttgk#q2nYUa46PMTq3;Qx#gf(h2 zJ8wuRpSQN`S7RcktYwDnoLdw`^CmSj&dIG&2PmUr6vSqty!MxjrA{jT%IJU#heyHB zzFYU`pvGH!OM(;iTzcM*Ow5|~NcfZ`u$T-p$O%Bo9XHHhk2f5CIBpz^q|(i-^~ADv zO}ZRD(0Yo~O<(GPTn^kh#QfDrz61&y4k3#>uYK z+s8RP3(Z(u9Sm>=WtP3{;TnSp?D*B2{{Qd4-?QgwU6h31b;sYE9G@e&xBX)bR3o%u zUo$SwYlE)PAfViA=rxs;CrCwrp{+bMSnd!0v*{&H+TDyTzqa~^S|I9O6+Xz+#6$GU z_XJNzjkoTl{epcpTLdYJ*T%Ut<0%#ekCq(RQSc|4l_6wJ?yE<&dlCgA zU4mmQv#8ktXu4|39yZ$%CkdFre#@aAUH+;9W8Ai5_9ow)8NQFc<2j%%+dVtvU8&X~}79!rMi9AtA z90~up!Hi7eoZIbB^c>_=x@?#25&jjosIbLq?RNf&yIQBPmvIQWU_d9u;=zganybnnAm{{C-!P-z?SD0**@BV;L7!n3u^Ua*9zrRpL&qq>`pPC|!``HGjPnWvCf1lA#(it<%hc^x^Cp9 zJ;MV<%6m*ZOoxfCGgipiZh?x(^IhUK*W1;q!>*ku$8P@Jkr%+TeJ9O9(&}5gu@rE7 z0BQGLOCE?E=P?*o8Bl(}&9#~Ro$Uv^K0!es9SHxdmk*s4pbI$Z-btVQo2EuKdxT}8 ziYsq1xMYUU)FnGi8l*Km&nx7uKg09`A`#`N|*JErDx5+cU^F;z3%ZZ zljVE_+U}m{Lv$=XhbO_6FjCa2OW?!S&}k?7kLFByjj~MYNc7dc#yYM*J)p6hqIyFl zgh>`xLEPB(rBv?kb*Fk8e7@B(BmxXldkQ2U`IL#J$;J#Ni`TDZ`hmP$k=-f5vo*=D z9{Hdx% z=KJ+?QuMHA6It`MRey}oZUy|#;LUDHc@jw49(HrqePI!<8)TeK;Um*^P9K58>>+Ps%L9%Lw{jQYim}Hlb&h5*QGRl z-C!G}*(NkKK+FSqL(@D1s5%@-lf8F+Ay4hxDUxe#d|&p19+QQvVp(B?KtGc(t6bYshfNfsCEWwiJN)9}NL-7IYKkNIa*h3ggc zBoWp4id)3E0(??arJGO3C4|Iq=Y$0`q?k!%^e}hPeCbIjnxuT*)V{1qygv^N&vV=AmL2Y&V|7 zM&|<;*u$R*Ue3~OBj_f(C;WU{fbTVpQA6SC-CJti;O2QS1xK6CJP?@Fv^Rk~A-O#o z`}gf3Rsz<}_a)qX@^;2sua4b$OBmCd=J-+UVql|yOs{Wdr|qA<_8m20>B-kJd9}|? zR(MJX25G0C*QQOOhlA=f>2(LUl?m9D*<#f zfV#wo`;ox!+Z$y3wjvK>9cy=(80wVgCr)ppM3bDBzZZ~qZ+JI2td2WPVF72VIB6yibyw}`5#K9R{jKsbWS1kRi- zmdz|4NyyQv=4tBmnyyIfnfuUQ*eVg3`-9=Fs~p8L!aUS(t%xmjJswtj9fLiTKagyC8z`hR18EQ>Kb)su(I(Kl#XiAgF(Bjl{S|R&a`XHV%bIRk z^z>#z9U+J;kCfbe)m+`jm+|!ZvLIHyEMANSik6@XHCwpnek=A)dhAUK?OtJ+vu1@e zHh^EgtPL$CYo|WtBZc=qT)#qNMSb*N5zXIhv^F~=a0u`zG)xT?XHC|r?RzTD3JYTj z>cY=cZI=1$J)b>?g`SR^b^&&&TRNhU-3Nz&`vLObR^VUoXPzg&?Y;uKCYGPpjZcO! zM>#xaT*N$`r^8(LEpI1ZvD?qrnwTd4W&k08)Ib#kl!)Con;6HIxf>Y%>&xqh*Ra0X z0Qs!%c_gqCgLNA+n)le@q`*F;tRB@nCJYjCKS~I7_QL7Nc?khaG`Mb{#sFb!8Cdy zgYs2)M9H6_u!WReyA8H$*EhKEn?NJ9svT>7X?;ech}a*Yen1U) zeM}&=G!>(bVC1(tHMlxt4LlGLR8aVykBmrZ9OBlXwv)W}`1~*(X!KnZ*9BnPzCE+P zZn3@s!37ith`m(fVK~&WJcNHU3F>N;>*wVJz0Nx?b7_J;Z~F1!5khG)Yue2Z3MWs$ zW0F+bA{q5fLiwm1U^d|Ibmkt*pA{5qxqpAlzJz}9vLy3^L}V{JJduohG~rEfosVjN z+MiV5OFcK=-UJX&KXD28%_Ckfw#!K_dZ*7iuatFUc)c(AfM+-0s_yNP+U`q2CK$48 zmhZhw>vpr4@pJldskPgwV3Lv3c887AZRx$+q85I~VRS5O{>dxAr*ykLL(jSEdCS|4 zVZzIPdmdt)T$-#V%MPT2bd&^I&Glp-1N4ethKKu;{wp~slOW% z_HoT%0kdJ6rkyJ9-3xMIGrZ{q_WvHR%lolkODk5b%b`klNYe%1ydnGZVmQsA=M33e!l)s|Y0PP^k7# zFXQAk*EIp7KRDUnC*8&CU*z;3`OMzXx1wBBf+*~y--#pMdd@|LZWu|%WK~bT<1p|R zSwr+T62jj&JA6lxk1?IUSGFkkAndf8#=u(wf0gqvVbr5uBe{UuILKCC3a3mQ4l1+_ z?q%6iL@l@Un5|946s;*8J>QJfgz>!v{#e@f#sr`klS^bJbwa(!?0gK~qI@Nf6OSxT zh_#RXSM+MkDP}WYk^a#bWc3rXRo=jFwqY{+YJ6hf?m~QV-xx)iyNvG%`%c60jZM!k z9Iq~8aHUt5SC4PlFfVuwPTg+gO(FVoN=4|;pl zr}8xzBb;9OzR}#Ri*6{^pP@83u?;RaL_2&W#!Mxkv6HdJ%P#%8ko{4w>1XLzy~ESi zo~K-`uA_a;#mXv;MXmLxk@5;{rM+DLTO;4^H~O$Es2w+L^VHBO!QTBoTlp>lW$aDH z*rdXU1+*Mkqk5a2?dbVq%9xiyBk-c<{am5wYbv{zU9aC~&4vw9hk|NKBc&LRq1%Hl z8t*(fL$oh*#a^vQfI?NC>+0tbk#&=x70qdWM;;<+yDID&o3m=-HBNl-r1R?y07Ys2f#RnfW(o3nsy1N;D_P=oF0x^-keBvgtAZ zPX_^)SN+ddA4>eg1<3OWgmzl1nl7c)Uz5h@?)4I4FTW#@IqiRd@v2&vPIPnFA6};E zRhQqTIbDlp3woP6Y-+t#dwYzXNAAa3 z<00AYGTyY~0*38#^8SaXIg6~u-m=2iGn2cy)B6vNZr}hdcgrMxt2A2F8L-ilm{Xkp zVz+-}i$MkF9&qb*ZU%7@tqEsk9hU12(W;4Z8;`MdNzQtD#+5h_ffL#MxwDTGJxBjT zN-lLuN&yQMj+y1m<})!zv806Nmz_q@IEzp+#4mE!NID3WLcw_^84bOC;@1cH!oJw? zQpiDAvQ$4Ql5@&m8o%;|x4kXPOPP;DYU?DP!kMaZS-1B4Fb(GKmFD=%k%OM@w-Y%Z zvF9lD>0R~3NS@>5*{5*{#~O5*0OMo)j%d-YDAwVS2)Hdckd63(wF|%Y5zb8|_fD@B z6tK=_n?@9{?r!@$hVt#$(acsWVW! zTYn>Lu|L4(_O!&{cDMJunW{qBH7K#l=n@IDt_LUZ&3NO{|4fTQ)ju-X4#hxdga`;* z$Qmc)uo<1Kc8uI#jhAX_pNss`+j$Ic?#mEzTx%N!KBqeopEGEzkv;*$K!L}sr&&t> zX2^G_#$m#^{mH)!0~Th*@pgifm^NX>kM#MY(TdkRw|HZ8_?O9?6KNcJ)l;lb>O_ng zu5#ia)a4bF3|3#pEYK?#Z)?*KDdTY5{m>$IXrCgnaCqIh&7p`itH3gE;V z^-x5^a*uqzRMn7A$kkPSGVC;S0B{3W2D8qfMV^$;St_1PSY|!&?d33C$B5mZ%y~@` z2DIFeeDUHG_{8XzTkv9^tgZe*Nd|uErRO0>l)dh4$k5)n@&0x@dS52e=9T0o?_GdYIjlwqZHw$L_T%y zw@|exT z;^i*v#}>D9f(KtZrpAr<{14NdXt=8hi`SkLP|QP0#u2bC|EQj5xywxN0hJu_CG=+6 z9nqQl(v@3cw)_117PArbVhSzoTMb}|!)1{XMQ8Tv3h_AkT_^JD)#@GJ{;41e8Am27 zF8J>+a87%`#g>+afK5?=|3ydjB%L%XA`%=2>S@=Rw%ciVsS%+3UHjQD+f@492SzINs zj2(91TD4d_=GlUdjccDauLiY~HC=~CMIqPn96|Jdr?SC0-HL8*&AY918j~%!&r-1C z1j+Z7F)BjD|I#x8XLi`hql80DVy;lOi1+rLIoKnOz4w69!Vf{ZqS)}Xek>w8n<#Zr z>;XM0LeqV4Z@Pf|@e$bG>=Ntn;0~s^mt`2^wOz1IHLUOX zsVDq8h*Q;Gs;iY5F^T)A>pc!qrwfhzq>Gj&{kW1C2$U+h6{qcI^U>;zCOig#T##%lJ3W!zmKgQELQh0IyC!&p|4gu zM=Zl#6`c@A;l<|n>ARnk4y$`qqUrMca#!XTf1EtUVUIN2zYGsE?egB8t~-o|zrH+G z-EA0KOoe_#e7}zOoxtyDRV5oWO5dq#QOZ{6YJ$^p?+YR7e|PA>d8qgT+wl&TK+rKayY8+JRzuRW5Y2 zX7jleF|v;35`P}H_}Dm9p;nB2I|l?fXkepN9%GFM#heUyA`?ln4kq{J#$YoZZf;_t z-D57J%-`gpew80bxW_~?W#Zm!mi_vE)g(~`c`n?A{udKY2?=(>z3XukAR5eRw2?VU zH}5t@TA-AS^g*|NAt-hSAcs$t+|@eOkich`?HoHBM>S?#X1uYPE#V_@AqIAbY|JNw zR}oD&xvu9_@@jUo;VPAN-vaRG_HO0HJkh$tYskF>!`){U>b% z^U+Aj$b^dQ&@`r}0{JVSgE`u=X6&qYiGc@XH*e29tT}Ts{pi!#+(TS(`TTBW2ThdpBp-jn1jte*fL6PT^v6I`(oYHo~*!E56?H!e^t49Xt%62 zw>hgO8lhKwQ*qNqo%3T6(}wrmx@}yksN?5W<(vKFo&fqj!jtuePuJy1TuF?i-%(Qt zy7#8?xf2o#=aGbM=gXAn2ufTxd(pXB_-MV6X2nz&fPrdCF6n{2uszP`JIap~#G?@- z-JD%Q0-FXXIlc+@E~EHx`G4+}rP-pK!l%tOuHG7Zc+-C8ORo?gFCEqObX$)|(-(GP zxW+?uf7)K&7^j3cxi0>AE9Iw|G?9WfAWS3adc5oc42ONzMw7vIS<9x+cx3HKA?DT> z`C5w7MGy(L$Uj!10rE;&0!r&ZMig1Qs!sV7I8VoY?`UBN1z&SJUB>P8nYjzQAEwe_ zE9i=TMxz$dn93Z-mr8^{mr3aER*^(L`jYJnG8t#dC+ydL*I!VB;19mUU~;?~2^+63 zC@)zl)P%qj1@-*b`1LO@&E!P>HN!emXhlEG2LRN2O!#fmE(G&?~h4johRpe@IyF(hdMsm(_GaoDta1+C$CmnPH6c=PtZsmT*6JR$lPjEP1s ztJ@=q6_Mn%i!px&hAGTp{qDc1WMRwPZ3u!VQmb|9GE<}(5<5lBhEZFbAR^Lq6ob9_ z!iY-ELk(v1i+|$2?3M{f!$%UMOxw_W^S1y8} z$FYVdgj)*$e1qRKUwqpUw*Tj;X?RJ}J{MFYsZZru(^KTko$*PX^?#OQK+Vu%(ynL$ z;*RB-JI>li2m*QI#*P2?#n ziEM5~fS$s#N3{DFoswtVP2ON&=t~A#U$4{GITA6;O)!H8Pf(hv zLaWMhP}(pwge)4K0xh}NGNCX-evIN8&4+E~*afhj*-loammv-epy1Ku&XGB(&OWv# zq2P@b>ec!uHp&Tl*z452?ef|lF4)jjYc(Prh8eVZ^-X+ZdYr8|!`gGZogf5)h*+<5 zi9IY~!eDlg!2Q{qy!)bk+~QDdbX#(D6%}$^%~O0b5t`P>{tjUqo_D7kh8|a;FPSbT zLQ<{fLguIr>oB5=Gv6dVmzI{48MFMS9keb?r}Kr^jr?yG_dsC|fCW}QK0F#lIl%z* z#)HDTd`zev8`w0nZF*u)X2Ah6n9IRl`k6_>QDbB-QJ!wa3shu6Fp>-onXM^*UKELz!E5TDX^6v#~xd560ed@||f`53-$Get<8 z-lA_`-j!y$)uyH(JsXO!^4=3Nrw(JT$kQ#hOX?~`M6?a5CgL$5<@a0WJ1lsFbRQ<8 zh*W|au~BV6si*;Tp|+DCBun0fJi+P>uM=)=i{D)CtE8S@w8@8usiW|eczi5e6p(uO8K$}h?XX%-aXv&!V7EeDM4u^9bfBuk4 zdHd3p?}mvw8s~Z#PFqrv%ejrC-7sXZeFK){_|y$lCk2L$=3}jjThHq}xa4gQ7((a0 zz8+`cg|4F#61|d8gUCETKTYPxawCLm*Dse~@}$`)cuv?GM>dO5{7yzdLo*@*?|5pz$3 zQTSuOS%I3U-yfaBWZ6@m7#O9pyE9Sy?!*+ARfpEfn_hS6gSql(MpwJx{Sl)(+_ z+a+s)!M`rcIVx<3_!DNftz)Ge$0*zGOkfCF#+WmkE;_r+SDZ;Y0jFFFBsj^`-#_>5 z5HUy??!6Fvwd#%UPJ7Wj+Y#Mg4f=K8FY3Z$v77Y6%|BS%W3xlc8jxIr4BO+KOjzK1IC!=0Lp#Mb)1LzK>gY8s;aA`-FQ5ENiZv8kQbB zbENHB`Bormy#glr!zV$Or;Q$;C6fY8dRwWI@73-Sf1DCi5Gv+g6;gfu_+A}$h0XW& zxVhl3+w#!;$ZxwP31{+ny;&MHOGVM7$0y;D9z6;m3!OYau&@B$P{CNs8q# zNvh($DUci;p^?vpbg}Vd&o;W-+j%QH#Jg-HEw3G_y_bw8`Boi}*T_S$iOd4MKyj=@ zt=kl)GUn1V%M*$(MHqB2^#m-*ZpurHvD-?c1vrUaGwcs1=8f!)kq@azABave_D(cm z=qv_OpNly`CzT(D^&FQ)R_^3~VrRU14e;&Xtn>?7sR>L6iJdytO6kuH?Y*`J(SMnW zLB|n)6oYG;tU}BYZsp#hB3B(>sZoWwoYbo~mbKQ_9e-B}S5n*UcIsh3ldTjf1{6Lm zMokB)^y$AlJWb|0%T~B{1_10Kv4+e6FlOSiOLP5X&g6IIE6R@c@_E31lMcT2PyO#^ z?+m?KUM&T;_G7|-)15UnFwo}alWyy=8fjPASvh20fAR>LaVA71(!7rfEZVr7TtI_W z4v1sQt;7XDyMDoHDq$i$PKWEBn;dd5QPf{dNi4aXf4J{6_y{Gy<;tcRoJ1+rJE;DK z+Cy<4MrH{%m&=$;vhj17xJV*Ho<}gw}Wsn z)px&rJ}OUp`)QN?Y5nS$?k=|{u&a?Vk3ahv<(!j^Hr>jUz#EAHZf1Y}J&4YwczRp@@o2gn$0 zno!CgNZ`5uwtmOi{M}Kz;&ixAYKxc{G+YoSicoAP#v}jAz_~@eatSM}FQ#4eQG`K| zAE;pK@xoB#ycgE?;qout%q0NN;|3!W_6k@ji>VfJ5)@3-o9r6!;R#6Lzr0SJtSbGm zhlp&v5(4B{a=@#t?{O8zZ+cg^nf>5dg&h(1fWq2&o(fPZoxC0o$~~Ja<2+V1{oV}% zv*3hciZUvED3lENRNL)w#E+VzC~A+;D4dxqsxg(>YKkm*H#wsXQAH^z2T^F=Dnw-~ zEiv+EdoSN$*PcC)WJCOrD4{6Gd9-{d%P7e=e4Wxa_Oxjy9meU!MS#)Q?7L-y7Lx&i z)E^92rzltJ1cH2gK$hLhNV;Bw5~G7>%$E@nJK@!&*Gup4b$779-eTjSh$ET`p%&?14&ndvIl-wwj0V#?9@@+~WQ~ zH6SAeq_)o=-}z%*2HVM!nc#bV*_xsh3>4pEG1TN0j&xSXqxwKdZ!_a*8tP3vlo(3g z{5^Mf?kebpyCkYBCTsx|KkrMgA&T$AEGD$Q8r|_zcI>oVPc}xc7Lo8>FjMKF^X(Py zU8{cU>ETqznevBt^B*u82#jJZVO?c<$kBjLi~ca?@RPd3|7rogt|y9KNKu(hrb*9X z2)YGdA*Z0s;h^NHoVGF!@w=AjSQ_*oGRoefD$V^9VOEj9?8{o7tpZLgy#~|ppZdll zt4=)*<52$ReTbIR*`k5nD=J7+C8*ngOjpS{df&ecx-lTIEuXjJ`j!9gt3I|aO7yz= zo4C9x5<=~_+(#4_|2WSS^xU#P+@R;~i+Cq{u$k!bpGfl8lJ8UNSg7oO+V}E12%+;6 z3^3*1VZH<9P6beDfe;)pNe4`uc{5DY*kd%3>s`j{x`?$d5*`HpQ81)DlqVF9<@}wved#OH??~7c7j^GfP2FdL>kw}Ww8VNG@OhjTOBz?#>X8_&{ zNYxjbsu=&sHMA`^U~(VB`Yi5)ZJzy!|n2vkzrD*NZx?ZlkI*e_Y{ z)Q}?YApYQEQDZ>i%+=L4YP8u_6C4|1(3bMmAZQarzPFYM3jiTi>v~>)W&_zjMIZ5L zny!_+{)FQ%SczN_N)k})WpO5S}9Gc>qfY zlY`4?0w@aF2kXo0lxKI72Ov2CGx+q4{p!K$#6-=?hO@Ba`#-P&pU@~BY-QHq}nL4=V)Kw?Nf>~LZw zvjIhU1EYRrVBqy~gYC)TB4P1&PUzx{eW5tMfR5sf6XdPtI?w4m;=sI_e}9$^Yi$h_ z=>4v6w?xYH92g8)aAQeI<~?b=DRb=D4{~4Xqy4^Db9z|)+~grK4)?e=u?t`6&TZn# z{rZui;c2j8@HdyRYRo>@Bz|0_-K7D67>wj7u0%jR*}-Jyhr_J)(dSR#`Cb+~jrT7j z)2L?ORa3h@gCJHlZAL^ZR)<$XIJ!|t!;y1fe*rmT>fKK~UAE_H-#XYKhkjHDvM(q$P@_4AM9-+@sM}hWaETwrgRu0u@Tr-N(uDZzb^N!_&m(f7Q>qElvVpf zl4qNASUEQcUOgTb+r$Q`y0)Axzw8XJz>s96g#?)weu?5k$UM5l^rcIUw-!~j48nA+ zJpN&tu7)C6HK#atCGI1Xx1#JU1D@K~*R zXN0!a!;?5u)+QjU+mTqdb7IyjIU8cou-xAoLeNq<3x7oMQR&{aVCITQMX78wogH(2 z)@USMALsgf`((Fp;Gch2TBr3v%022=!_3~yp9nPaT3d7yRkM+Jos?O+4s(mYVv=HM zI0Q`~i~`VDi6+HoXjh4&31%fFCETGj>0T^UZ&M(5z03H&o^?+>8O1~j7K_H5sQ1y5 zm^o!?Wjd_iB|#P2#BkqodWeF&L^i}gqjoYc+`=lDD(-#~bp8Hj_gtf=Ahcx`yKso2?ME6EQJ$4WJlt%X8_2Z$A4A$ z^^3*!)zI^iHcrSi7+XGrSpR9?c|&a!9{Oh%Bkx!Mt~v*6#)L+QPTOl?0OJw4dWfAs z?cUBg7PTe@j`@7{5L>3$c^+Ax28)j|+kCh$CU>Z~`TIMSw}e+)MK$~^YJ$tbjPC2w z){sfJB6D`RDtcX1b&QX-@fqQvGp+ES7b2v>RpI)RPAp*r<-rerjd&D{<^z#mpug0e zi57C$6o--y7y4YzI|lr#&G`7zV3qT)M&Yvs?vR%;+|d-eIyEaD4bu;2(U~?sZh-7% z7uQlg(Ih2DlWE57J14-uJJA#moG6oe_ehc)7zg{4SH`8GxP6>3j@RSelucvQwqr^Z zjta?O0;nGK3#5Uq0_yLux&>nzRbSFOlflqy&!pkGluDKo*aFWI(!R+Sdp-{S zb~k8Ww9>MH+Zdc2^KRu?$R@3=;7gqq!mMvkn9^uwu1*v0M zj7-|SRxyij%p*wEB9|iB=XU>q+vCSLX=O}I4N{~7xf8dYW#67?oyA{TYF1&_KN3ZQ zM#TX$+v4z}@ZHAz&Y+SPCcJf{0{U&s$J&|JF##U8^G20kF?&rL!umjn2)D%{7w*T@ zLH<7~A2Wo5>;(U&^8YXxLzuu;Fb+j8NHD}!)^2X<7RRF?ddz6IP zx~#VlP!h+?!Dy&5iZqX|$T^7zSZ-z{tjYE_F0FF_T!!!+ev-O3WKm|Mz{M z)Do9y?kO*HE+LG0Cu;6jpG5hOr1=D9-6;IxZ!7UqYT{1tQs8xR zHivuFgW>#L*=xuchyq2613xaVb^JoUSK*tFeYiM`&N;-T)~uOK!nxibeIjs4w18Aq z*Jd}zb4oj_1nMYg^dl0rP2(5{Q`MrptjzNAUx>13!0W@_TNA_H>5tMi@mm;T zmG|%;jv@9!NVWt@qY-@cH0a)P2+<3zIl_p%o$888C||ikD8%Zew1ob;!_n!Y#KGs_ zAEfet0HCbHdYalNYwXYP@+Dt8-di|=E|2{e=1iV&dQ#e!lu`n5odkD z9ApexLrxX0+)*Ro&l>;33Z^g*e#w^d8gIg+yzG8)+9liu-L=ZOe@{W~gIsPx3{*0y z<&cP3=a#v>S!mku(-aut`k>CqbA`M)nx%5NLVqA5_%XMq1xNn`V^geX$LD7Kx{e;B zDQ>l2Fnid@3!4riEjk~l&+Sp*Q4l_-h}jk_ zX$&h7oSm4xz9AgAWo&M_=F7H&7An*Z!|{#o$BtK;c!gfB=LO&S=O=(hu~ND~<=f#F z?BD&H#1>TYW{X&Z)KHOYOD!hzz#48uN=KI{VAC} zob>GG=kb*^B4TK^+;@D1&O&kvj0prT)+<1?%bgm@&fKry ztMpASmqQ#eE35w2^mqafk}To}Of|JBa=~o&O(R&BUiq<>&F4K{6t%Ju%9W+F_gkGK zD$e6)_&A;epo_(Yg#`lHJhX!$5O20+{(GvNv$XV5_KHlk9bGP0Iy2}Lj(5=Na#Upt zNs}!xI3(CXUEphz8CS34HW$5oUJD9*z36bZeiQIi9v$^o18czSXoI3pEzdoMIq6Oa zrYIG}>#XtB{*8)v3lByY>BCgyrcG^V&xwe^vDLbtVYq)>qXKUnnZ>S22x!L6(ur^? z&*1SU!sL2?_VCE~?eVtVZSQtA5hYy6N|tR0Y0RjeSLliV-eosS4`c=A&}OMO+2ezMNlMMu#Fcd4V#}0Q-f&`3I<6oNg18ET?eH zL?SAs<{H0D%9mKLL(`9KwKGB`~&M#I@;1iR|h!T+T$O z`H`62mOqwZq?wa!hYS&tQ8v3a&(z(d6kyzl$IwT)LbS!jWg)|2;M`w?CXOM!v=Icu zCy}gpkKQlGyF+zk_$)Dz#rNw~?iT7Ozi`ZSTt-2%0lm>?Cr*-YT$tfKmPU*ik5rd- zhxk3MsQO#2%6f73N7ug54iXN+ANCtH0NO8iS*Hy#36&($+hY-8EOi=_AMU7iY(z*^ zS84^b-S3ShG~tbC;=`58XVN|5X?v4Rs7&bFlp?#oZm2Z#VwK^*<9$3AYI4PE8*VpWx&jpp z0nUJk3`6AL9##xeJcz%fFlo=tL&+4?nf3Q~-ARJKyKSNWjwJuq&)|(>Y7o#9jM^=h zmKM2TyEqs9SlTz+SIHN5mFDI#(gtJ}igV!3JK@V_0ibd+qC7Dd?pd_g*9t{S!d%Mqk-j*Vv6KuNu-nnIb366@0#t1#HbloQ+#?VP(KN%S6e zB?V(^xi$Jd1$w{+&Lx7JrOanM@gGw;_23e6*gNi;tS?oNci4Eq_Sp{B%I0%Vm|q_W zNV&f3U)s;3$jA_ob=~yE9PKh#7+t;TGl*Fs>mbLeoBza$(w!l1#NF!f7bx^*U5z6k z$?(8WgD1%$?O0|S`gy(GjlOP852-!rt9`wZewS(ZVa;8Qyw9sTkvs=J(KRGZDkYLx zZS4Qibd~{8MQazPL%KVLM!E--?rxC=8M<4#OS&7R1!)8c0qGf}8)@m5ZupM(-fw=* z|8w>}d%tU~XL;?_-t@NE#Kn2EG>I+Hv=wl>ff}%{+O(#Uk0Lj_AM(k|cQaMF>pAZN zh4C;OPh-ZCm1$5YM*3Vg2L%pXzpxPY?4m_dN?eC>Piqceg$G2AhR$cNv#6IoqR|uS z>7aFwx*mB*BHi_bp(@K&svyTuf;u^;0e`Nv5~`x;8@JmeGG|OuO{>$alb!GXdAMQH zwwt$Pn3^?)o?2DT-H<+_O}wXa{X<1_+hbDp!E9T~kJNV)9$kw0B0h9Qb+U{!;CF>| zV39IRd|IN_*?lhR)*CH1jOD0BvDUSkZWs2i6^Civl$bB-BgJm`!-Ccb@J&k$ZxMu4(MoJ0# zM}Cu_mZ(QT?~5T|CZ8h8CL-CuGVk$^%fZ7XDJ3MBXX$*a4c{AarZ5i`#(WHv-&YN# zQEU9g3$P+$3&f8wNdiJQ=9Zjp{J7BcKR1p*{$Bq82>Vq_r$45do4A;*Io~sMH0Fq0 zym2hEhZUF~){OAY$-H)^-}QZGimFfIPomHL8NaaR28-7bhekw4&^_wx`%tiOe{1P4 z&JiU4h3EGN9AC?5V<+%1_5Y(|GWdarVt`BixgOMX$H&_eHM(}vJ zOwyUfXiO8zQrs2Etn2g~qdi|TO11g}r6I*9-z_*CC=nUzi8ZA_*(SEFNWWYS?5}`Ls?~GvZ7*X$Z(Fs?J=ry98OZ3 zPvu669=RgTuS?^<%Jj$&oLO3?vYY|gPBqF+*3^ho5Zcd~ZjMZ`l657|h_}_=#=1%2 zmNMKfPhN@4JIMCTri+n}f4*NXv!KD&(IVN;X6pj43d7<@fhqsFvtkXEg8(zS{czqf z9VVharUS9psDvQG!p;W*OwIAaY7F93QL*dYM%E}oB#Lg9A94$a-RgF-@DsG>(A*9%@q30@Au`$WuY zwp~MQO8u@pN7Y~`YHhY_2FjdP4%Dk9lg&1%hL5>0MOlK^7mWe(cAzDb#W{0D<6{>7 zr0+5Y(Ehs?CV^>xJJP)`ous~qH%FCDb{nrES>Y-L3<%gt_}%18{^$)0gkiNUYR-l3 zYZ94rnRR^{kwZn`bIP+NfAbY7=5uv-Nix>M*RQH|lO3mbX_G5Zk?l2nn_nelp`g!U zpt|2$rzti8wg)5aatY@`?KV~Ai)dR)f+GEjJx^WKCUfjLAzei-#o4* zRTx(dlz`kUGAd{IznQ!6TGH@H>Z}L0;_k*Kl189lG#DwH`8nQ=#CsDDmhc%VwX}_= z=>2CF=(SIpQdQ1nIU0p{F^WduBAn&sDAQNzgE9m0yxWT=_aD1egnchCvNFNb`P~Z3 zz!k@b`Ld$a+y6H5rJW{0O~bNt=Q3`efgr_Ei{9s)ZXG@{ zy;)52oo$&6Mr*;lcxt3ck9k5Q3$BGqHJ}(EHQptDjMyAePNMUJj2Jtw?90&977#6YUkY*Dw17_d^Q$Zlz9{*=;v!#K~}wgk6Jt?S_#f(Kim zAFzGpe(3gg!uXV6b}hxZg^;Vs?I$Vm4SQIAIbMF@D0C68TuwiDk40{C2k4Q++cjr9 ze58QKy6cs~;QKJeIwxs#K3&R6GhynSATtP30pV6nVTzujqq~kq`YBWf$fsA?|AnIR zQZpR(P)O^!!TvL{>j4EN=__7K$?k3)!Si7LLN8CQnTuzntErp&HQe*}(B>!TwPw1Y zQ~N&CG*`&co`X`D3?ogsT7FfF!(vLy2-0;3e|Udj^b~!Fg2fSS-aciR`!4wHaJ&MX z5r!ay5CQ%?_%Px3&(@OQ2H1C7{&RMgux#-U&hDlzM=pgfZZQ`;x^r35C+AfYScNgq zSc3jL?{9f~@A+kr7vDX4fq1z?{kV2xjDU*ZcfYl~k$R?_L+)~%*Qi|Ey^+>$Vsj>Y zyQYB=uWrQC!Ouq5rDixN9S|)s3FqM` z1{G8QFORf{0l%I?S-st!A$$(2 zKZNmY@uKi>QCkB+@4=iFJ#9^`?~(3OxL8)wup~4<5Vq=>x_Pm0b;_00zJemrO-f3Ajg-m4Q^Qp;iHTq#ulPP8*FC28lSXnsgv$!4GDkx98 zwN402&9i*u6Al7L8ZQ+*D9C_s2%~UL-A`X_-?Dl`4tmT=YRJXt^`LQ|{#YpboIE{{ zq?zH8^`5Hd@Uw32-W)Gk54vbz-XmX#7V>IsBTWy{BJhkFrL=`!(8#yX`xW(G5cyO~ zGKBVwnSei=47~ zK^blz2oG8hoQ6mVe@22GQaG!@Vz6q?X?^8+hZZ(#A$gD_X-_!M*Pv8X1m&!rI?+8m zgogxsNz=nwAz~@BX6FeE(1iSHY`Vd70%=NtKkXq%308)YIh|=#HFG^)?K)Puy}rJ# zVZ;9LzS3Aenh77dPM2v3sp0#$t#Hj6&BA;#4)#FLwX}iHynAg~X!~xBoQS3YDSg>d zsr;JAX@zA6ufjI!z2n3@M;0hp8jFfLC1mGw+XCFagbWwnw=|^>T{91w88WPEA2;KZ z9q@~th2=e7>QTx`mqwHm2nIkpd+T34WJ1B}3{dv87v4AS} z9gTVi8b7J7QaCb?5oG^f=wRrw(061@Ic`6YN}Gy2Kh%D?Uj@t2<(hyh4d;-m9r~J$ zV7RJ&!{PmmDhFYsZWmsE9>anco{v z4Zp~i+1YWN_jvPPO+7%bF3m_YOks=(x_)D9Z5}7Z@?xcKc5Nxj|Fo*RjZN~hccAgB zx!LcTT7a6b^z;;~Bw*s`IIq3YSrd4TlRs-n)BL3d)o_NVGa~Qp8orX)LfIMR-FgyN zLg8677XsD&^XhQx+sJXoaaY{ydlfqP zACT0|yEZz`le(vYAWeX}vCMgBpgaN19xauNP_(PF-2SNztXxhac z76q6HeN|>|QkDD*F@0PRxAfw0`_p?nz4`=zNVhogkKDFu$#hM^nY zLkX2I?ee|mb!)B(Z%J_>0iSG)(Ra2CJCU#!mSoKL{_Z9(F`wo-HGYZ0{(h>Go?wo1 zNa8c#B0C}od3wlHKTR}S>@rd~qAlgu0^Q(!mzITF#PC`y_ZYlj}7LjI1dReUs88<<<5JO`>{3aKZXf;=Ky&%N^I)@s@FE$xJ8j61Hka5{ZLbT zWRtgEamYG;f}xdOhNHzgYiB4>{oCgi+Oiav7RzBcXu3Zz#SLY3MOsX%bb#A^Z*1&H zNdS?wZmg{Dte0#>u@iI0+P6!w#&Dp3lFaoZufZQghfg61`f=U_`;qDeI5bQTSOE_( z@~Z5VOh#~Xyxp=c8K3sCgM(b`f_lqJYzuCU@ekNER8m2uk%J{QA6rWecxwoMdnOM(6=nP_7=&@ zy(zQP?DR7dwnvi^ZVO{64$?)MK>i*@5sfN@>_9*O{2_>-k&}@PX>qYhUOixi!v}Wv zfzIhp&6eTBwTPm+!SPCMA`VqCGm7+Tr^a;6FhcmQjvln~-;W;@D+xo$Hv9GrzRZhK%kH|G_27Bj-vG#* z>Ew%e4zm3C1Fnw`tn`W3jmqr{YNAON*&c?kjwVdiPm= zV!6$593n3l5U?U35bs())BLfV(3b|1#g9Yygepz%bPi9S{rrlw@iDM&wbS@w$_wcP zu$P#7AtnSVVQSVHDluBddi2A)lUJZH)q>}WsTBmjVd0fTd09N9qfX1r;)AtpZA!ch< z&pe!7W}lF-xZed_-C0fP>*rp&tY@EIlFs$vV*2CUX*l`0h&>Rv$tckikpn~ZV8v7> zW4RbLd1@KW6wQw%PIgoMm;?N?a!G7wKX+mgA%FT~cGgsQ1#6`EB|ag9Q&G^E<@JRd zvhwTxA}TX*+xL%5QLask0#={=&lC;=^I5}*{As`w7SA%rdC(pBZ1m?z*u7Sj1MIs+ z&>Zw)ex-P9D=o&)ZzPB$Gl7mPC-(N~sU(J_gZq3V%30{^Q@3`_R$mJwrL{L1hl&_O z&&NG@XRHqus|9mWd2k)=&~id3qQ_=xLot1REjHHQ%tSi}AwT{U5SEV#WRMC((%S>i zF88P7Q(rIqqQ!p7Z$pNckU9OAD{YB`W2O;AzK(N`1*^P|1 zSb5QT1Z22>-v9BOgZCoYT!)6AyRL8LL5$3aG?}32WJFF!Q5!?7A}l*nu)-az zp4`T8QL^v(xNk;Hj;vX7%&fMPldBUGkhTac^x~?8B_WemA%!z5_0h&yD+WZMS)?b}iKNPpv( zy>pA%EM;rkqBHc6YIL&h4qoI+2ewVvNg9Yo z>~5l%LvUUa6Z~ z(}P=mMdhIcTsiRX^8}41dK4PGEt7r=acihofJjSq@W)=~nngD;BPREPkHh=d9}K@c z3Ao=xQaD9ZPFNNasA0X~O)9{@^#5#>;#eZVl(a$1Xgoj$NkykB>iXyxA=9xN+EUNc z2SsspDmMM5XMMt0!`3kN-o09!;O;2Zujc^&txJ95;ID>%&+9LR`Ev?4L>oWG1aE|5 zN3&=b+<Bh3jdh6;M(ZLsA^w}gVz-NN8Lq)P2ed@c${ z6f79c6^d#+bQQ8CD8eWibEanrMF8t{)=}creHbd< znu=-Kz^>^MHG(k$W4UugH}@If`#AGalQRiJIkQ&ReOG1rRZwAGp!?Jo&kml<%AK$0 z(E_@(n9iwq^;Kvj!}-6I=#IG%|KX;5sWlzVbE5cO^*cvkfVY`aw86PszRC3Oa)u8e1@6CM_SsjzeAVXhLMK8M>ThfzA$1|QpFQT zS!UaM8~GMPd$FvN#IP2hO$aR{;2O+ws%=0yqYdZq;V9MOyFmCgT_J>1p0Hy}tK8zh zC)RDWMv`yT&Jfa1cjJNAb-yQm*8=zV8m#`*s)n=B_J>*@0}w?D-=bOAT2{ZsIjQHa zF|4^yI~fOwESUBVjx01#f|xdP>*Xerqrxy6Q!0qgCd z9dZg$afe6^!HwM-*&Ai1I1mo;V$01{<FSJOt9kCXvZV3>|B5dGuKe z-{_P|3Nj|6@yiB5#I}AffehDQ_R&;fWyzjt_UXJzgKdF*ERLCbZLdX%5XL#k3fWY= zHe4LJ_yvrwpvV`kf6`^A60PhVT?)J+h+s0?KQ30jHzDgc;_^;4Mfm!>KCaf5Rr4lg@N(BLIuySjVq*Zs4S&2aN zHVWqF!bl!UU;}18P+|@P0TMi{O!rNv1L}V!HAOlN$HAG~$e@R{m;KzG=5#h88{?9% z@2b^Fd3}LcH2$ZT?_F1=cMsO$hNVuefvw~s9vU{~Qk>CJVwB*II#l9;y-7IW4sM1; z^{_3(c6=odL16E_dyH^7hhM7j_RcJu%K!%s{<7+>qCtH9faUqZico<+A4a9Z zB+lZUvQfSEO@N?*w*It2Ms!!Zk)_Ot-354n-X0z6ZOYPjUl@~Ju1QK5Qm{Pc6KLg2 z1RDok)#_g7u;=p18h4Q5OOQ26D1r3HLsArbto=>kc)z9_wc71;-`H@(_jkig_D-!4 z6eai>Ta(DZ+c4Z}b~@P4RkkN>$Wvqat#{Q~+PO_O)OdeMYvWhs*t38Vu~QrE5+;g& zf!0a)mj^XgoMP%EViaCu6iE>qP)F=8P9oZ1=lyBB+g?P|b9+rayXQSYa;A9hOVSQ8W+3ijhTgmC_j-%YUParA_D|NJdOP zEN?jyZ=zuTr!~&nGC2oY4^ukDz|2c9A!yBF%-oUZX!GCTd_cIk@Wk9w}SHNNr$@9dh^L{ch(D8cMap|k>W_iBB z*-3?I_h*0!Q4AF2mQ_`uRLawIa?M?QgGJE-34x=UNt8n}X|X)e@#ISM|M=8r<$0vTduJ9D$u0nmqKIr~Z)i8*C&f6WcZTYE6?S zB98@`o7k;D^9s*F63XdOT6|hkCX!U4URe7xNj_MuP)u}t*G$^-14`i)9na+%P(MG) z=ehG!J?MTK>4CsMLq}x46Sr*ArHTSeo2q(0n?nIr#P`z1Bscle&FsUf$Fyq9e1%H( z2SM`U*e}V$eWR+)kv1v`dw1wx$;E0qQ0Cd5>@t zpqYFaH0DdYzdNs$OAXpDGyUr9zlo!oy5mh;$Nz~%&d6fZve|Z8ZFWGf|Fruhuo)*3OQB zSny*-oBQ_ySO^m!=8)ws34;k=K@;kIHzg<7$sS_kjvVroH6M6shw8uY>GC-m1oooj zs^&PpqP0{nv$Z>(=)#pRv05UVnKPrwyrK)hs2~5evY7h`=od74f5~@`t^YnEdcEQi zKVg!4iU5_nE7^Z|++{59jeFb|&w_t$!0R`Tn)s{^)GhP)invO*1+8)?L1{nDvNQJ< z`=U&(M=c7?>z@UWb5+^?4RP(g5HCX3$f|ZJ?J3A0(J0;gTFSJ3Ava~-nMXcHo{d(t z$CF&@`#x`>bjuj+%8b^Pmq zD4FUkgB2Sqn{HP!T)NKPhReXRZcZ`WA43q&7h+E>>if-yV@=1b@&@V(V*8XH$ZQEP z;Qkr+M7Tugl*+bJ0@#af`ttNeJO2B5Uo6^atkCd#O5m*WUe&L3>NsX9sZSv{(stK) zSy2qwW=pIjF?~$u8Cmr^6*VP0g(!rb2AnbsMmsM zqC*J=@`EfO+-iI1dvyEIDDfX1slR>e2a<5C4-99<`iKlnzLRQKR?N8;K7PyfUNqZy zJw8&}cJWs-jKkt7h3sYZ_$~QFkw-|88k`PODEu3^3i1{dh%_bIZ<7UHTuksp|GVKb zq*T}l+U1u%yv1Z*QiiYbPZGuYWpkZrwYWnWaXb&;=h?}}fH`68< zhzN|D!|9M{tre-^7>#SjTOZruJat&H&d<{x=hLO{Tt({WP|D9T$+rEuB|$P{R5a?W znKF%Oa>89`R6x{iy5BEeCZ*7S{ak;u?)Jp-lhKi zcj+qt^eatYW-8hHfV&)U^Fzi8p>!w-l#cvwziGP`1<_zrf~#&W_#*w+jeI^w#c(o3 zqRvP60_5d7@gHWC+Ql>i4|1cTd~7pQH5>;)os~1wIBj<%L`SxO=;5I@XKb@IkC($J zlE#^o&#w}P&{&blX>7+!t+l^*cL|aBUh(+V_%*8?N;uXQS%{M0Z~C6#x7OVopyXOD z!H7mxgaA7joRFz|KRESN|4%G5e#er3FNtD*e)F+F8k z>7*pyjhT!$8RL%%1pCu8|Ix)%S{ttB2>6*5kBXRqLcY)1pB?wdEv!G20BOv=N{9Be zw)^>Bu+thEeVyXUTIScvv_*HLdBVfsJ#)C#0e(Q$c}I@_xmV2y4fdgR$GNVf3HHq@ zKQWiPXWYa_YgBbK=3K$*#PFi<;?#K@CJ_lIspB7Y$cCan%rkZTvaf(W)}$@bRfcG9 z+&Ht>r@@INEf_%ZyOBTTGeb=(5YxTMfFV&t2Xhi%qpvX7iPs#=9GR4tAh)*p3$;%D-2JoNPR|7lL}ijdM@!@bs|`$e(5S1k6^&Th;YP zBLch($>zWFr{u^lnca_Niyc5pucW~L{6^(n7%8<$+O({|LF5Jy`qZlgY;wyi;Q)w7 zi-0+fw=8GX*RPG|(cXT%3LpVhItLuGUaXu3y>w&l^Vn#V30Ht8mBfq;?U2sRU!MC8 zQh!fJ`UBol2h8`>lIN0nT5kz{)LW@z+0~IxRLDN9tCn@0C`87+-#?B2A3bB*#*9Li zX&b>qItJ4kOU5>MPviGb!6GmIK?lO9SC;xQr4evw7}u}}Tr`no7n{?ChQ1jQ^(dX8 z4<_YqU$(TXS{8m16CwmhLFg970wH`iAqq<-fp=&}j@OiEAW$-+wj}knePhe<5z3oi zlFx%`sS3skAkXFqm-QauwBcJNnh2vYWl=e`s?k!Fbpw8@=?YSXl_sm z#Ag4{w=Mx|N)mMtcr%$M3@(W(&9Er<}jZzThd9 za@RhjpYTJXjb-dpp+#!yOvsYIUHAk_jc*c1R{ZI=KL)Rlt6O+fdqvpD$SM8$cIbx@ z3X-&rs3M&0aJ%!bqn?zRG_jku@fwmreUWT}bo}psaYA)kz&X@0ctqCZ}^PQNwr&Avv7Li z%RNP+e~NO`eH~Tpk2Mt{07GFVV1bxFvNgAi2l^Fj$SLZW(gp6PE5w|AL2%@fo3{Y{ z;bq~{{csays~z>^;{DzSMLM ze&Mj>UW@Ty9>z2t<)3FO!l%P-3lmn@`F=d1z8#&pQwn)wxx@x~eHSb$QOS@e(FSh1 z#hxc%ccg31QI0WFNROZuBx&K>{q-EG8r4L=?3T1Fspj74A2d~}xFd!f6S3YMVw;g2 zYE-X?LQQGNOPmCcPo;b!fXAMvTGj#lMTKPZP3 zD3?`P%dTiMK!4OI4y4eNW^MVpFfD2RorMT#}u=+6ynKHU)h zxn#m@$yY6D)YgBB-*(&~%4^SQaG9WBs zUYr!u1lm0+H91VXR*z_U8s)yPh$vHlq%rR#`mFzsIzJ~H+)NGu*4fbmwxD~T3vx*B zCnAcOe{<*U4=N4mVniwvX9umT*nJk%9`dnvvJuHfS5J?E!lHg{ znU?~w8+VMufjZ9+yglGbm=O{DG%tj)2$wA-2ycPBPcIp;kA~uEvbb5u8rIWNvF&_9 zv?NS zv;;}cVOKvSzSG!v6lD;WO6~9}0#`lWS(Y|BFP^-gedsg8Y}v0&l?i25%Us!r%MA2{Z1kPUn^wZmTIB?@ zk3h(z0)?3uAxk#5cG0~n_zX+?eG?-I!>4dwX;;LuDX1@A^%o?Gr}XG8<`iqtF7 z37j-!GaTa)n93Lh~+((THOqJbrC@=}MiQCY7kW?LMTDvi6;#aVrC3k)mJY z#Wb+hXk9t4r$r8ZYPz*A^op0p?Mga>D8SfMe~{hwfIy!{4%(X!C(CU+UCt}*y1-gn zhN{2W`!oVa=Lnln+TDT@K_wwvGEw;vxL4mBDw3{}FhAfZs)tI2HunV5iDEJw=r!WK zzgWmv2)_F*&MPL-NX)Pqvg@IbkxeOUPKJ5ycfBTQXo!aT)2Mgu@}AUFaNfAu=E(n^ zh1;oYrb(JtVJbv4(r@r1->!1ADac-Gu2Ikaxe7E_`YjvR1;Ip`8bXIkMzcf47}2|> zC6>gilH>#7SfKqH689Ahi}zRJB$^7+R_iBv=I~D#p*S&~5yopa`pjW^e|1`DBf{u2 z`u|>lzy2JRpLsJB>7v7q=+$@b14yK{oZBzxHG)S_=0Y;jSAIboP{be7)^U|YJj;=? z1Bs_NYY!OW+(kYxrN6c89?57;IrrW!mj5NZ4wxd-~D`bY|emy zQJgedV15AjeP?A7qy&F@D79-ZTZVjLjMj=?x8QlD{i#Wm#?lO+99uOks@iFVjN=`r zIL=9lZJJwiNLX!YJ+rE0q0^J!1h}za0~ZbSKO0T%bdtA*?+f15q`YCgE3;+1 zTpVfDyPDsnz_{9y@@bEoLhwX`gwupK;W^VZaN0i;Wja0mX*RR)BiPl%^x=2r$OTXh z(;ONkx#BZ#q;0h?RM%CP{)aQB9hOEHdbEBvNa1V~_7JL>^Kf}$c`uPP8$A|mE{V=U zF4q(kbQWvMuc`At7^LRKj+#(>ej?SI%J!pL9?N{7dcI zyMm;$tzfHFWvJ(P>!~hC2xRewi#6$z-S#T>%9AiIW0TVSOso@9s#cXLq&Q=X{6TUj zRk~l}0=NMhWw@iqX1q|&GusdEwSXH&;n`>%`9KsZr@L!&+=(!3)OO$!lei(ECt~K6Vv$-rL_zzQhUYC5pm;{3l1Nyz8^6(e&_JfO5-%~}s zcGJ7R*L%CfSJV4p!`8gkl2z7ovaNBkT*tXs`v~XULj)8m8Rq=kE^d$sT=tF^fkC;G0Cu1@=Vf>MX7xD!}k~5VimohloDLqz~tIl1YK-<2M zn{4_c;ZZ(Nxg7W5UH%#+wf>O7K4sqztY2C-P>rr=_oJM$7i}mN!Q)hSP=~(7tzvf2 zqE#fX>0lyFH>($!u~JxHDYAKJ{=5PYTbcyA^nz8oBDxh18bQj9z$*5~I z1jam&wTDYd?J%JU4Q+uMNc51PsueX6bGG3t9;5un6e6vY4?9eM3SV`Qh3Kf-kL}Okq@3 zDS=Qv9oYlGSUx`^&*piCdmwx;BezG^B&7XX@m>_|`JAhedpwQWuGM4FAB8TM9VJ0D zaG5mqdI<(rsLeTgb*DG&wVkSc&+3iTn&;*slGDe-s{{Hw`jY z{maKo+}$x;`nymVpa|g(x`N#sea{9=Z39X>Y$LJm{_d6Bw8an-5Z9hxM-8(1I++N8 z6}$UM_l!}R8)Mx1&@5{-#`dcVot*9J>`Ri);h3Kc8nCw$byU+q1W94anVh;e%kJub zJR8XY-nbRygN`2^MQAXZ*cK&YZZUYjFVGJdG?$ykUGBa)eWTkLk|rc2xD=mJ_9Hos z{|_afK-ZWM>8oAb1eL%j`@VP0ipaS(xS=3+3J^Q*J2C6|XC`vWU6OIBw`IdNP!Fz! zu#bNY7mAS4DSp15hTw|iu@|=a^f&>|7f4o&`>hXv9f1w`fmH~WabHubM zxX#NdWo>QQKYTHZe=#PHvSsl{OrQ})NhrG6;Wi65C9mOSJ8Lx1J^(EPDD(sLW~Hn%A|ZWocSw74OcN3Ha!d=M1W*L}}(( zJh#IC)s%V2%u>EBUJY>8oqBHc*vAL(w+l%)eAWqCv1`W;dDkC~q{#hW9$qXdnT{%D zV1fdkyx332OE=lkf_CY^Nny!u;QVT^=%s|_>9@b0mIaO9QQ*_cM)?sQWI(#G;~@uS zp)WKhHX?HF?B zW*>mc&hNOk?<=Wj8w1=j`=< z7Xa;Y*k^qudiV~7b!D*9_v`~*d)lQhT3v&|xR~#4w4hrDMIR9rX33N#cN%l+c#;A* zae5J)gtI_-*`Dm?4o4CBWfhE&p(R}A8i+(8XpPAGbI&#`FG1@o88gx52TIcC-R!l6 zmL#;hG@)VUjxeY#1dNS#B2U_Yd(@3f{N$J^f!`}r;QFQMyF_i%i7T3U-&rmt&4a+m zn3}h7&yCC2xmn@{NHt*7tJ-Cp+|A*cRda7dd`D=kp~bEh*3iTO>b=GH*MK(8+=U7= zlQC8L^Gj`6YS(@`jKCd@yp4P1&++J$_4dzNQcwi6z{WoB1`$i?YWbXz7>Vw%`1W)7 z4jB#Ml3zC&X^d;^gkJOPcseqbDh$)-Ni!7X){{7VynT#RTBKM>&X9Etha}6i*V78nsNYSQ zK-=mtLc`7T)7p#o)!)8myDeyt3hutuX@?7t<6)ubHBm+BZNFNYso#)}$A608^6x3- zbY5za<o<;iv zz^0n5*2=6z27mo%o1WPj?HF+d$-fPQK8S6h4U*zeDk=GFL7AR>FfGyW1BXuTXp?Io zfp7onCw96v9vW0%q93!V8g$|OBdgk&q06$A@qcTcRIUnSwi`OU^VcoB+2gSoc|0-| zmY}-uE5P&d8soa!)-bWb1d&WF%I}>Uwm2xJQ6hj(VWs6DKF0W|MbWlUEqU-|J=H)4 zbm!&{8(RQF%I{XXzzbM!1OZ%Iou)Z(*J0U(ydQ z5vY*m;$zU6J-R}|TG5m)Z&}Wxga=m5A#u-jy@fd(AJ+W{=IAJ2|A@p0Vf9}fr`+4V zQB{C&@%wE_DgUg?sG(f<)v|m6T`U@wuCaHiD{R%iyOtEBEeVTzSI4|8y(0kADfzCw zaBq2foZDxR+-4I^R#+Ooz``8b!=$?q<<1(nc}=3C>IMIepsM?Wm$MuSOWX=kDia?Sv>Tcr`%R7*_wXL{proPUZRz04^mbf zNJJ+__VywkDrr(M#(H1tgB0b}@=Ya9VemJisbm~*g1GQf^#KKEWlj$LLEG-fE3#ij zlZuXujru^#f}F12OBjfzsw(meAoIP`?oucg1d+aeE%J5ADc_P@sp+L;xz4!b-Dsis zuQWB^je&^4Y}ebr%yu^?hz6#l<;y(ew* zH_aT~OW_vc0K6lStxMa5dUNR%V-h_Yl%LLj>cjfi-?u%A>0c}qXo<+>a5WLTmYdaS zJTtJ9R^gVpHNj`ogFmnYSqr&g(-W6^OT3l}@dJ>0yer{^yZ13JmYAg`LSyb@HlPv~{wb=Caqrs|D_P=>e7qBLyPuKH<>l}Y+nTO27*Z`=SN zji~lpRLPEh*nTXw0!62Gb2Ji@_DNZDAf3`{dT~IwjXVJg_+k;D`u{v;#n1RRQjeOF ztFj5W7d?8jlZ;bw$XThH>s=LJzLFs?_T&D5u9M4)XSDoA&snc8@^r>;yM}2Ao>3nG z9_sbE$YXPxO^)RABtKrC-_41Zb7%7ienu*r;RgrOsI40?Y-tliw ziL1Ryj!7eOjX$W;Ho{I2deRc+3uDQ>4<2B#<~IFkSE!GZtOi4vPGbA9m0bfCo639Mw>2o zZHRO6n{8@?CfeWO?{{u_3`(z)IC@>7yynMcbVLqrJxqij2OGlpzO8nj8i}hhQ`VW2 zJy3Efa7G`Gi5BqNYRz4Hrrp2@*L&_#M&UM6)fvDEU;X(=L*t`BTeM_6n%;Z8^_)+GFI{0IhO$f(Rd zUkE0D^2P4>R}+IkrS6DV$}<4zGeY$Hfa`jY39kX{JvSMq*d*=|Td>JkLCUB%Hz?=K&Q(-oy;0v7#{CFKB!d z8TuIJ7Pj&dN z&o`t?9F&`Ep;7ums+!&_0(zZiI|ddC|G@Zx`IE1%X0#J4|Ea^k>t-3S(Hj8_h0g5m zFVO)q<<-Ic;m{YKi?_%HTJot(iJIeL4_Y4z2k$PoQoF66%g1{sio)>AvQn@To9;jI z-&D`u4>3+(gskF_PMb*YTU{l-Tm}e~cBk@~zyJ1*cZ)5BlAd3IxI(WIQ53%`T!lrO9CRZ>G8%BYYxv1OX=GDYA{47G5yq%P%$zJ6QPEn-s|0}s_37N`AEQQ1F zR6&w%U(1+Mt4tsw;Yo6yLlnemp-Dg;6Q*kTDc#uaBOx~Jj=-EUb249OVj^oqOEXTh=2iz4h4vJUVDLVp(Q$Z3Z+3EclAQ5KHqu4CY80BA zmmlU#U*(kZWDZ1DE#wXJB9W0vYErxI7$ zunFy#Xg~565($wl!@&Y->}vE&_`y$pgU@|!66Z}qu6ag&q6_EQn1Qnp0EIXX8;>NjrCNOs{1l8qik5{$`Y^+-mCTWxM$k3V>|Q78zH@V z>+mK4j}LwUhH{Bg@Yk3}CRuJV$e){vH}ffkFOwIqD{p?VDm z*)YznyCevrUB720Os&t*^W_+<#JE_P>ORC|#eVxn57oLhc}vTSeh-N` zH&TE$BxQh>tWosEh+LWkMk2dpr9&Dy(r!b@u&PugJ_@OYBw>oWw2(DcdwngpfkOrwcjj?q87ou@yS5y`8&cl{-`O)>W|5eeddpj68@b%+DMrm zUhs2^;Q!Hdm48w8Uz6@eI;2~=OJeDe?q+F_Sh~Ao>F$yi5Tv^s1Qw(_r9(jES?}NH zdBY#DhjV@BoS8H8*99;7Ceor$Dn2EmZ{OlJ{%0<=YH<=yoQMM~eRli&F*??}aCvl` z{sR^|p>JG@Rr?w(pWM~lPKNZM6N3`Fr2E~ko&SItqMkGM3}(=$92IGC`Q{VCgJf)| zRX+c-WD?~@OQ%OiQ2J{0(%mZaML)6pph;_^*6*je5Sxe6P{cQn}Q5S+4<){Gj>i?dh^=_Tz(Y zwNfR+Keo<~C^9qC*RAC`w&y#fMRpbUH*Ti7HU{rY%gKD*Fv$?eOG!@l@~-5vqlzK3 zU+t!dox6j#!&iL9j7A{_JgOfh9cc?_+;gce?%jLWsgT%+S$zznHLMU+$9oY^`TJAt8cP4K>d^0pll|?XvGo=ME0~F)?l7kS+h)ca zmJphV*E=4%^4&Sp_p*D*ey&KdSACbHWqaQF3;WNJrwN<&ZiNUCQTI8bc5*F#{zotV zn!ATqq!Fe>KAIuGd%l*KDuLR<`5*fr;-A0DXWab|9#Pyvj)NTY{PPBm|ANy6XXuo2 z;;Sh{JhK*%%{IGy?4g2Zg;wKrET2S`U`?>u7%!G7DM&nAs^W6j2rweyxFa|_0#Qqr z1G4VLf%vrNXpV-Pd09U|jY?Vj`}i{5!j8T;#Q2##+C#~YUMVa5t2LYk$wEZ8SiW56 z)wWhyLtby|&F1>Hw|LgTdMTTIz)7#!WK98rk$lxyyckhekOJYLes4G~eMZ;Q#`@1i zAx=ol!e#p4@2GSMno?Mwh40F~Ayz4~@%q|JoB_s+6BU4zDXVDQP?Q^3ZcP2RyC0t} znTFb1h5ErNK6GSEJWoxX>r_A7*^|yAZUZU4X-I0(%Pfqx4kP>x(N6qkS)gd~6a7nynK~*V|K{k4szZ zC-%AQmuss|=jARnX9FLJ4D>H6bZYg?F?J6RRZnMoZomdz-sJ{RCidy!xO#Dw5NorI z%<@mHhW20zrik6X?q}N@+QGSEsCQFI$1@3LCc6nQQpz3h_z)#>p)2UwL_O{aN)${T zv&HNJ2T&7!4Ac|FhbX@jdw}7mz}{s1$s6mG8MpV|h9c6#!=pv$bI*fe@pu%|D{mp{*|aD<~6+v<1;@5z<@B5^QGLwRaH_0d6GjWUsL_i=!!?G&Fql| zR8qid8S`fv(O)-56!`^fVry5B{oQz9`w?FE6mhyQlC-eAr?e3r>LX(4H=LQkz+7eZ z34>30f?OwJ-0f6Y*E|H1pYR1@H@34Ih0ko(QM2`q*wQ)9!M$V7{&mWA30 z$N929%vrKDl@Fip&Ee_2brC^+D_zM8O-AaNhI{oUl8XaTvfQYN!P3VHPZRuqDyG(; zsdEJJJ`SKz>a`nrxOWKTQ|6d%P3lDlo$b&ZL1i@gST|UFMf)!YlYuf3yh+xQ_*H2f zFA4^HkYGH?_F6{;27K)!Uv@!vm^8=na?ptqdjk3H81%rzVlUBdr{O;!`okl0v0_?e zX+%Y22^wvvMy9f%oK3eD(zHFlRPCoL#|9W~C9R8hc!Frm>nGVbFc(9|Us+S;CEt~* zJdv38?b#@5ZE2Om0qx!gaY)!j!sivr_@xJ=_)pwK=M^KXE3*Aezl}RRNxDB~og`c& zzJB|>A?$IK@0A1jiYvdy$O_#FCHn|TYlPeen-%#33VE%F(Gd-&;zN5B!T=*rHA~f0+U(*Wp-5jWg7L_?YypT>l za6T<-?Anc~jCp97*NC<7m%>L?Z>nm#HR}3U- zo?R)1fpk}P0gNxTTDpH^_YYu5-u!dZOKJV@YfN8LrP5^azCjz)3EG&B!C(x}?wMNl z%}>|6BU~%MUn#3VxuuC6MitszmZB4GxjL z)o@)yPS0n?Zm$!KFfKZ%%fw@7gA(6UHzAcG)b+ah!7hN}6_XZ~(Nk{9gwrG8?5z8F zoZh}qihcVl77dwA!=GFfBXZ@mT~yXy=|y(j--3bVA$QQcqN&FlYT^Z04S130b5un% zneGZYIW^p8ZlEyIK3pNS6hTTPAANb!*bGXBc# zlZbK3oS?NJZImdGrw^UdVT3~VTVc0XT;rMGrI_w5i(=VuEFLvjf~v5ak@2{>GV z$vP$|6pV==7%hgKIyKoiGBQQ?6?cDUYO-r;YLLp33Z9%SV^p4;d{EWJKcz9L4CJVX zL;oWdU{JzrLYIE3Hxshg7hIK6wem6FAHd31EW+JS%cm(irZ`V;4>Q`GFLg~I8t;#)qi3#Y)ccC zV#h|TwhXzBjNVF{Af4!V{SovhY5arN)~|F?fXQHGIMs^~{|o%B26m22V9JM~_O%O} zIRu38)_w@ppwEnqwov_HKNj^p(~R+vJ56)E195tkGFl!=vs~`phdHv3JaS&hL*M>i z3y@LaX2Ec|Rbk@X`2t1~^@Mvb8*C9Kc=^6}%>jP(j5ArK<_M##Jko>!77t z0-JMpRxD)jxp3#(vfUlPcILeV--)T6%|}G?CLQK!&r50-Ef)ig%!;1f}jJCd*u7GXI=Lc45acS5QD4E74^9#888l!|Vw=ZiM4j!`!Z+xFH!s)xC=NYmvBoS^Q95axqK`H@$7taQKWkJT9lc*k1JT$jk$bK5BCK+G zQZK8oim9bh2)K zq4{b&@k8FOt_NT_p74&6|yynsy`z_grVm)A3*0cqeO3& zS_^aJ7}Orbc860?M}X5F@S{H(;t%oKI5(RETQMCG+@VNq!khC3mkd^o4Lez%po(n} z5#}U6!FU(<*X8O9J`geX7a@P05%vuwA}k5)^gv-13Qw1sq>q1pL!jC~Z~8kvuTwKy z4N8Sz2oB;RU&??7`~Yig3S<<84!6ruqo}SHF}o`s^T=IcPf{{&%p}j7xFQTf5 z#N@s$I{GhFhEZ&EbTsGaV*v$83a^(*(CB?mHJIo)^ZT7>aQOtW6t+>usS9xjLQL(r z!-!PVtZhr^5xh$^a1Z=bv@7}|%JEnleztbU)LssERb?(s3DExR?s2BG=TKCJ zoqR1-Uk$Cv#HTj!GuRUW;A%3#%_o%cDOYnweP1hhdvScU!}8fpq6;dTB(Xa#o&NwT zuzjsQ!#;5g{?gw+^jm8E-Rcdx7@)NYEBsxGGSaKT($S!3*`2m#J5};pYk1n-*a?{) zdY2yZ7*oAEIr@8_?$<=~mMBUo0Pm5zMse!GC1N-*p-*Ir~NuTxH zP>-aw$ICrfCv!Jt0RRB+a5j4Bc?8hn^CINMMisl`BdqU}etdRS)l{QI4BcIQEl|$h zb}R4nmD+*k5ff(!2F|qam4`BZ-f?dfD|lwQnMS@Qe(XCnXnv2nxcn%`E(jKdnC6E1 zh5oBNsklJG@p40myqTk5%yMg$2t@}k9vusUWxi&Al(7S-dtp1n;aYOV{N)zIotqEP zUe?qrt!0UB5o9rY<{y5i?t-|dwAjQPLO+9aC=8-BT=A&QUSq#aKKrFfVzJcN=W#s+ z<`5*H9Al;1*82?&cP>S_&i$OTVJMX@hRdjo(quZpnQSbbk$}d{8>z*@d?tXiEgZ4O zeZolE(a&=>RhAM{J4}BS*_@4xuT!3aGNYF!LbUjJ+g|`uq3QKML$d-aC(<0zB_>b$ zylGWYN=355G8qf=ptAKSR{e=J5wf&$&J&Vus8}w^5MGnX$&k|siAtMZS?({&lyAy5 zb97-)=W_}(aCaPXvi=~?Oj}~$ILq1su);qsG51_1wuhmdijH=b-cn@WSr_zq=qQ!W z!`?k^W8P@`Y)YcUE(0ylAbLAFt)KbE^O67#agE4agn#I<5IH)+TM@)qK0(>tgV|5W zw6A%nZTakv^s$nqWuS%2_xwhv{W?Emg2%>M#N2Rjgl#a2p@t?)@iB2c>Zteql5Q%L z#I?ChUhVtMJ8gZ~CP-K|ga%S44V5Z*LD2wth<{~Zx~~x?h^~Lsj_V!2m)gHpj#;rz z{7qL!b?D6w)gZO>h(p-OUO_9@S1>ZTCn_1P0=&Gl}?*aH@=(L2vL82=ABnA=6{6yX0 zscsTkCC@P5i!f@mMS)RFD$2tE{6ZC{JR2&)kYFa# z%RoIfpd8n-cAM>R+{ym3$};x8iN<+?B2Z9{jyC?%R3(Up%qOYI+8Du+W30iZL(=k$ z-=l?LhWH_6*8h;l^lfES+_R_7;bN+PyHqpq`j)W)zMwL{fmS-|og z9$}TzAU6aPp*$Y6@a}Vr)vp%ld6gAf*d--;i&R8(xlcyHdt5HwENhx=|0^B0Dj31{ zCIPp;Nh`nL|Yp9)sr_d!ura*p_o-XpE?ljAbxD zc)*mu8#}PWr#dq=zX+MGSfG?gDb+ksqq2RvV$+CBAD$)o7b!El`ga7<4|Zx%PZyn+ z6|m;AC6X1m!;>pl1wXG=7iIgaity6copF=nKa`5oZtZ7@d+ut1j~!iEv}A6-FExid zgozGUq{;S+vtS(uiw;+nSYNFOV;MCQ9gbDGt7`FGYEP1{26OFovI7J_`HqwjCZDR+ zU)-NE-Sy;*QGm(GKvxNv&wf|^wIMue6zDivPz#9cWACX=IHbCbd6`rd zX`{cdecP|vH|h?SnpCtIo0D>b-@y|EEOTq)!0 z=%CLGZ)?gi@eT%*s2lkDW1lWmd=IHglUdL8S>9qwB|e;4hO~2XVTEn)OxgP(&k1Y&9drlRFfPMHAmOG!XT~Rgghi)!8#(kE6GzYjo<{} zzhZ9s}#85&Ra zKr-v*u^FCsIMbtuTN6wb$@U=yzb7A4yRg5J%BpCwohBX2h^#^}9U)bm)A8VyK1RAV}Z`K>T zbQqEkAkjo)EtZ%CSE$$5G}|vbW|_6%t&aBi_3)a;@l&*P8EP=fA7S~oh=V8ZJeEFK1x!?pW!Cs6R}c2gxc zMIez}VdhAmQ3eEeBo3MOT65A$nS+C1Kr z`&m)^t{B_Lt_=MtUZoP>++&o9=XBhnub+y(jH;Nrvyoa0In38FrY&>K2}NI%JCDy> zn4`u5Zq1Jdj|4B$!7|S=4~?C(TYRIc&j{!rCoej}9Ud0KMld2bjmOmS7iR|PzIlq| zB44OXq_mBnD0}Kve!o%puLhRFtG>I+pM+~qX6V$xN9I1Ci{pmdKH5!#oq3>Q;Y5Mn z6r`v#s9e->Dr`6XhX6VIGQe?W#|>& zXRE}Cb(DFG9*#b)%v05$u7h-9sA|24CxVyz zgp|qGNGUfVue=cpEs58K2k`*xqPh*XWt}Y1TA}qPFsGSDrlp}7Aqrq?cmM0=0d*>1 zO#zOIHSTKwh6F>V5OYL0OoTIe1-&lL^MqS*2N6evW}6a$$-ZkajPO9QNM9z#Fy7ek zp-0J|79hzy=MDS90$r;`={(%-xG>nc)SXqE!s#*05oJfb7JZ%voC6-CVB@1wyP9=; ze$o*!NMu64sM>fRgFdB7-@U|smLP%Fl~=U*7N&LiA0$ZGN0CBRM0_|@n)qWQa(%ZC zQ>>X96E_<*n3MN7@uSU69v5wCk*-b{PTg`EK4v<%A}`d{ znWm>OUH)+93>8>sgF@n`!hBG9#=*7lqgIzz6a@F)C}O%VSecX<=Sx1z`>)1EAV#dn z$^ze0hm+8k>dQU6os!CSoe&x4PE^-F!XbF1Y@YRN-^LTL)m{=&RZ&^UBpWiMX$-1o zN6Y|#p+A5^MfPMX*FRHV_7}3zX^#dyXe`pK8hwYq>}#Aq;^1WcmL$+6m6im&!G_40KDVO1b|Yi;mnsG+B&tT66ucC_6{^wXk_I+I!|a0=YP{@u&~=y#F4__9^DWDuc+ugP&BJS-Qm( z81)IoD#gNtg4jlAmm4{onSz90Sgs2L?@Fh}Cv2D?8eZ?m6vgBGaq4N_#mYMrU?+lc z%2W1NWcr&0*`CPGnm!Rw`=>FaaIa7KK$KAqb>w>zeRRB>#$d*cngwsjE5p*TCYP-X z`oTffS2_Nt;94>LpySH*$)!6FY7Xq-*Jj2)o0qR9H>rhx=+IFlGIxYypI5a)gxH#9 zfEzCZZAirUI9E_rrEP%j>$-5VyifIy9j#!;Ym$IjS6oGYbta516#!DKtZsq_op!v; z3ZXv7bSdrvRDQwpmy+zmi8={1ug*>Lv!I}+9 z#nrK((d$FQ@NTiHPJ?)t1z(x>hT3k+Zi#z=$il zS~-Yvg>YK(vS_K=zjDCY*42jyX^QT|euHj%Ih5D;B5y1#= zL`3SFX5L4x(yyZLx?>|2RGqqvLGy7wkLUbeoej*mPT}THv9d+KNOdho9$Lt#Zl;QY zraW{(gv-;ec@VinF8wb+g?^PaP31hv65ZxH zJE>5!>*}31xE2xet+jRjn~Cwi&XR@#mOe&Bar}Qn1qS@5%W>39R)wa|ucu^V`AhI~ znKacQnlN}{vX2MNcvG}PcTjD3)}K?|-j3pvT6AtaGyBs>s$zz6>$zLhQw`KlTM5Y| zaudrg>_XU zC|n*4R2R`CEVapGM#RBs5f#f3>sp%~JOJ}5L z=G~H=*xL*_29ydeFrR-?W!}^CZcvH%kopKT>1@Da%WFN`qtR2VAgO^?=HH2~eW~}; zL8hUT@Gm&AYC0%%9AM1JFfveN7^wTJ#NPe>UxD0_xbrf~3?A>M27o6EXB~9&n#YF5 z<=k?=VPz?VMd-jz2*PxD2sA^v!CU|0(WWG~4IYAzJ?hV(qeFRYjG21P(SM$^i8F))wwDBRE#`n~v!?G-$qjMp4IJbg?`yIy~ za@H}Qn)LcyrQ<(72qO?Q984HNMi-Yno1Y4RT$~jvf9gpvaOT}MX+}f;Z0-MKI+<#d zx0WF&n{P+oQd^2&lEqRKVsD9`xLo%+A|D<26m)~{FdDkPmF@mP5tTbcv{DVTAmST4 z=qj8o9l_2}hb6|=wdC*1u9;b$V>|Z==AhA4assUBky0UEHa55p=QQ4nLO`~a;>EM| zaOsJOyU4bIDcQJr6_4OH=YHg;J^GP`{&d0AX8a5Y+8ILhNV$FGa`ik&1IRhTlUWUE zvZoz|hLtjFi4-EOz#kPVnmveIVfHMJxIaZPeyBLf#Kq~7u2T(3$&DNzeRJAZ4#!nQ zm>AC?jv#^}LRWZ4MfUE1uKW}wpuSeRkwL-F+{XaUe>0qI=vD#gDwn3NU4g)N|A}%X zB11lmT$m;@ZV7qv98k%N0-Beueop{QIS!MJ`sdLMvL-;brP>+E%JI%I1bv~=gZhn$ zk7~Y%UB%`8v9XRS&C!#re*7^()4k16K4 z(nRA*TGv(nDr_`XB{?GQj)rq#U;UgIoc>w7Ty(VE2q9dzt)ml)<@toaX!e4D zA5X^V{ZwxdvY@j^bAuAaCS9ZYW(7^7kr*OC@2MU%MUI0xVyJNoiu3ogD+?x2%qB)_ zTc*OzHwvd|b3IHDR^Q<!7cv-3AK(>NZ)c8sTQ3vX`fu4z-_CUc3@3CGfc>FD>dTFBdfkBNqRKu~(i zQPiJr$(o(BG8aKNi;6WwAQ%Jb2cAML?Y?tnd9w9UP$uIR)NPFbY5IFfXz&2Y_J?7y zs(!lGm)0DXX7v&YemfUSbUR9?A7docVZr9fZu!z)&?RpdyX+No%k?c@Jl#k*!$uz} z>)7}~dlY8i7Q+@tAdsNQJ{*XRi+lfj{-e_N&mr>s3wO%$mTyO|M4aDdj{v!8(`CHy zzOCzFI2Je&(ym#*;Q*vaMGiuwBUl0NH%#gEIll>20K9(UplDdYXl(L36dwl^@TqU$ z_$e8%4EK3R+_=3#bNW=puVX#|E#Z<+{H7(q^0FfPDQTp;qM~6q4+%~c=(q5@G8144 zUu~flDTxxL01@ILPhHeIaC!1+;-qgRinFiyec-7gz4pd?2yHfjwqz85yHmEIqt*es z0t=9;*W3kou#qc2#+v?G6JU`%+}2Zjq&oCdFXMH98$EKT8kj4SlVM8-Ld=Xp4FWQu zTG#e^SXZ{Mn`KjZGq2fqUSs4KnH*$Skvsyvgl_ua`{tt45nD5*q`sq{Y>x?h;Wi^V zU}gBN+r;Z>@AY7;NM&*CGJr<@kF53)Zx3Tqy9eLSp5RQ=K%b}4kAJU0J&e!Y z5=T1w@(IwyR=~1bO%B!Qt@~5!1ct(`?Z^%kbbPsfT-jfdSXKUMFZ|0Pc?3@Z+HBI2 zYxJ3?O>B25O3gD-{}%iuL(vKzNsE6CJI)Cc@`Q5T^Cuk37z;!)Pke9;kK;JH?=&iS zpvE!XBwR>Uq3T#qN+eOa3x!U{Qvoot{0UgOr{`As7=SBj4epDIa)39X5+MgWeY+7k z7Qj7q*jR@#=o@l)qZ9Om%yu`Jx|BN2sn3Vb_H;(%(lJ2%#4=7gM2K3wUHpZGH@otP zjGyBJ92T$Rc8UBsj;G-gSN2(aKYCYw#D)Aa;MD)6T)ckW^; z$F2-rSmbStA)Xv z($W4SW8cZmF;|YY&l?0U7AZyluirj-{3}juzWw2?F)83&G_>z~ z35^Gh3aMwKK1IU`RU#OC=uq5eO}96v!w`((9ezBLK$g%OWoABasgzn_#-ar1>^LReC8kM?}$Oob2n17rLl9sdOgT+k+)JR^H0@u(!h(6QD~rW z$-7`UpWd>MO#kc!Q>IeizTQ)78iv^RwV~V>kPjWUJ-uI#(>U% z)9$arjEWTPkRfnpQ5hLOhQswfWN1?GV3RMz_x`Z#zY5~{b;+4pA5-Bcqw{$};;>YX-LAhsI5mN5 zuqycPBhP$q76ZNJX6Ir^D8mo?l3L6|``u8Ri`{AI&57z|16AQhn`}kbOgF$E&iLJNpk#>p&ld;#pN63d%7<`~Nb`=~^O=t; zg6so=LI5bXpoyJZOHs1}YA`LOH>4?u z9qQwbP<+Pxk4sY%pHwwxI|5-^C3LPtsb2k&ezvDfU7-m2lo`c-$imimZ`_^Op`oCy zQj}d|g@yFv*q(ynAPB4gt}(&~ftF5}R#zN1TI&`Yzq)BRM~eYT=2y=pJv?6ZCuJ}T z0)&Z`4^)md6v#W1%2SjT@B7HOqNKEYILAxoDA0}2v#I}>Ja!58j6Zjz6of%lORoJW zM7J&cB1v+o?JmD!Ytb;Dl{Y}MV)|fIRpP_!h8_}`ZJ)32XKbjHY7TioLfGW(Jin=nj!nTBg&VN^b z_Uc0qHzUUl#eWuE>bh<*J?MDP_>+YyW_sb znG-|zvCWx49|hos4+yP~Qjh760)-Tj*Y}PQN8!j+%9@hfa54y*QB?%UcJKt^Ov`le z(Y=MhBR45WY9qEh&f3pJRCE(jnSCYlPX+Qr$`Z?Y{jKAvRvpPPR1~n(`AZ92$}A~e&oC^^Y%f?df`VWx&6_&O=7Kq z^Re9k1<^2{EuA;SnZe($&ye1kCe-YpVxCiQ=UDqwdhEqH`z{=FM|7 zR%;YKemaGdgO0T;X3HdM!L3T{6!NoPbhAy~Z@XXCQ=ll~_JbieOFN)9D&KJLHtzVn z9<7o_x}~qRd3CCZfa2D)pVPf|)WDa$pHy&EV{;VL*i;;I#?(H13!rVAQ!K2> zMqdB;dHl^3f!m)@gxBUf;!!a&MjnghvQ9A9O*|#rcZ^ztSPm^K&aV}}U!eY=b-ib6 z9*>cB0lP7bSb+zurq>0Z$M2Y?marc>(XT1o*;1a17w zhzBD&M8FaZSU|(_J-n@(qam_13K^Eh3cs7NDG>vGv=cWm45;FZd$b*`1;v=pMY>Il z^nty}X2eTHCf3a{Ew)%%?JTMTIl2qH{~_V*{!`53=Hx|x1qaP9npVoM{9r8Z| z*c5v|T7LDE7I>I$;`{L;$!J!$S8Es6iLg#~gyqvJF5uInGd~&T0rgRCqz~x2*tC6h z)F|`*^9yRB?G;d=+6beXFPtu8xo0HO_-gHq9B4fT97Mo5+|`Ld{Ceq#5XM3C&PbdW4| zBrsHKKuusNP6$f{tc#fjs3WB%gPY3eqY^=&=&GKDp<76%m20w2x#@1&TkXN74*P4G zUT)!5t2QFSk7`+(GH1kbsW2o6O6w&M8vNN~B4!Bt(vXm|S`0gn>2tb9xbF>=%K~DB zV_{iRN@{eZ)$MlLV&kb+Smr$d!@ylm%_Bfb+lOr<;7`*$E z&oC(Xret5BWyl0b!I(#{oNjhP})d-|DAe@gIj3K+Zuq{VqJRXX-4&el(-2@u!xL}7)>p|+;ljx zf(I@D2V;x>HiI4Axo`n5$csPYhg03U`g8J6shsnsgY9zaw$FS=nGK6E*0JYn>kr~t zAbQYjZVDMIlb=(9N2^@Div}wd2fxaq!Y0YJ@-bvC8>2WMmt3Rbo9M~zN9N)M{D%uN zO;wl6K!p00!i1ky4tkxXQm@5Q3sU`9_9&|Rnzw&SO`}7ma6IzewOLR}7GL^ z|9ZIL`CO6xo?QQ(_UM5#6Ax1uO<6O8Kjk|q>gP4Kn4wpi#rFYs>U)>PUz?fD^t2L| zpz&jPJE1V0f&>c5|B5nqY&c%NXOIzL;&#H&#HKR>C8Vr>Z#I{x!%jDnP37YS$7e;h?!{|N!?cXulTvOkECoP zl3-z8>XE_SRK$AZ;I@#oHEQw1Wxa~xJqD6k4eU`NknGD=BmLJnnpu6hEa|E~0<4@iyWWlX$O(*SB@a>+X9OX`$uEPFC zr#O@a% z8dk40JxNMpt-{Fg5>(eh@B9>?$74=}A)^)Rk16twQYbj7Iqq!ht+~i8jkZt%iH4>_ zhLJuqW%suG`S3nPDfQBpK68P{5QRST`0?vr!N2KL0EV4z9M7>hrk%eJDxY~2P9W>n z#jqV?X*pr^HBJ7^gu8z{E0axf+=?Hg1!b+4`NiA(yqSS^|e72a0 zG((~3L&7^eD@c4k+%;Qy*VnTSc1Y|r-^D6agHo~I)13CTyK&w{Es|JipAZzoWJZ1A z^I@XYWLRHq7&iKRkAB9oeHe!=DS2#O=sNFCiBaN)M-`p^+rsxBHtit%r%BNR6YWj(N_0yNBHl9) zB@W-Gp*I!GyooW~R1KSoLI*f^0aqGYj^uGCn^Ky>EK@72NYF_O7nV_G+T%NARaI+< z|AzoiptT!D!R$#@)tRSd5(S2^3ro-;PvMiVsS+)!?~$3=pmIdtjuwpbHFL1KIIgdU ziBXr~%j4xN19x1N!eWf$L=QqPDxGHN7^NmM%wvq3?Wq&g63aDoeYQNS9|yWDm{;Ou zX-|vKgXO2s{QdG?)F`m06zWUPMEpIs^JQ5ne=)8BS-s4HDh)fw!3o|XO6 zp86Yu&w;)AEfYb&$ee)PJw5S@Y(FdV8sD=vDMfnMe3qj{ohrJ+!t+}vSCeY2P)nI# zad-c4>)C91GKgdabVk}U%kTY}(^UB=x4}n0vMMj!hP>VR(1|FqkA*^`DKqwvAEW_f zSY;Jd(xY7;9M%#ymA{lr+|qS<-G#~Mq51f-I@`1Cm0y&JsJ;cwsD1gNurG$4G7JlA zn#sUGv5=c4hgY&yX;u?zfM*AF%N(Ip>FV^Kt>8d_tC+nHQwjbWLxKS<5AI$F6ftXC z=|h?ITQb4cjIy8icT?-~4PLj7%RL$B3rbdI-{KOr%CIe0N=5$uy?hJwEF_kCyTX10 z%ivbaHvDlS@9&l**5;#k(m;ydD|J5WCf;xV?Rbu%pV(-kJy81Va7^NZP`H@3TuQoe zX~S9WEVNsSfJmT4fwCdjR7z}|*EBroNG|9am_YdeuB;0f6k{3YGsx${(fX*V#f`cO z^Mvfe+cxEzIx@GOlr!zZ^%|7wh%^!!kFw0IO80)Rt{$}XbPC@SZIsyGHK=~-_gA5c z?l+@}42m{O%wDWNmT{~?1aEQ$Z<;~t5j5}p%A_R5BlNIcy#3n`1p+7=Y+uuf3OitbxifKN%sFRqUm) zM-pmGLk2TZ*4Hk)osV{f#>_(hvb?Vu*imtOaNOW#Q)my4*MkEaZy7F*u+ zL7|Z3BS3(MQT(AXiQsSkZ3N0^Z-LoehnmqZzP(c$a+E$molnUr^8Av`6=q4isA+1= z@kYUWKlg>Q1M5+QW?qG@#K z4980XTv38F6KHI|T;CAm<@sLUhau5Yh-pHis4qE1%iAfDz`UX|pYk|xH}K~5GKaS< zw9v{zY72(@+8c$+fRfOEQBqAsyD~Ldx9rV2xLpF8LLV8e5(6aWZ@8vNBZo$t$9QXv z(@2@paC>kkN4YB^g_(_Qj(VO5WV$6!F~1#4V}mh?-Z+kI+ z+LKCKl|548hlhLu9ZsHjsf=a?fCH?d?E0pH*a*DTqQLmC91@Kx^m@ZgE9)nw^r2>= z%D;oyv)Y_hLfAW$EX~39Gf%nvpIQ;2Mr58B>q0M^&`6&=u{X6utknDT`$GB0ItEpC zQh{9F=n(~?rvB!;RP)3E2gRgib~XNjWAx(+nc0Z;@s6eZtdzRpO&5AE$_Kt0z5UzO zu2F)d{#RPd0I=HrHS*^#<6lHsZSx@YP zp{c05iA~(vA?^WQY{y^^)@~VM0YNlPKNBbA=>XbP;}?-O!JhWO5&b3-aG1xRU;tSZ zI28;A{C?haFrpC9-u9lFttd|czmdZuL$8lTIggy7S7TFu31eMGuhD*1FT=WUH|bvG z?erj|0o+h??!~a%kjN2K;1rr9u)~gq4bZAIO(vR=+bJ*P$T5wB&zPpBlt;}}LI&T< z;e*N@vBBIYZs%o3&&-fm%@i@3{Fg8)4x;;~-Hs^>v(%{Q?+TB=(&1b}Qh-P_oDDR3 zC{kbnrXwbpVsz{qVp(oVzYCu==YKzbTIqC((l$Ol7Fzc{-qC?S^k)}~% z<=T8{I5UjRg}poLD*X@pguWF3r_%&Xu1&!EwAnAJNKc7^#J>Y9;wRM<3E=@y8C}PM z-lQKFPO>72E=(05Z4*=Wy9`5En(RQxyk{x!5PP34M2Yxmg%?k4S^I}IiqN?@wS%ks z-G?u+HVi7^?W!gkEK&_(4YJk~mtdKAf&Dn=&{!Mdk{OX(Q&OHY;v7rKsGNBipNa0A zj2ZL%E1xmmg6>~NP6mJFnn<>lX3AzM0?Qo>_nxSm^=@%Cspb9JD53?o+*rb;!}&tP zHe0k(ey;1y7OZu8IWxSM0urJ?vt4gD7Q4{~0#aH6q4$zJq-8V2`C8K$6Kx)f0KXAE-X6ti3u~O*}!*Ae9j;d z?_ZHmLOs-BkuD7@X6~4=*aq?IV=(b4|Hk2CLS&~;=9FmqR_6}Oe|@1Cmd@{R9w8OY zp!V-+#=RwCcqQs!X}=3(Ykxr?FDXd{{BL1o#O{3jR>iEJTF@u9yo!UfAMlY>nmO17DGSyBnS+ixEzDF_d zZ*kwSN#qKp0@lUgODgJ&iS2QMHyQsJm82hTH``aV`kUIv>?z}3i3uUi03Z_FB|n7f zlNLBwyeU_H;mB!}ppg~$?es(*>&;Pj!8+u4p!zt_D0y4g(q}3om_oO}GI%PpEwwCJ zA4MxuZDxRw$>#Mo*HXy!UYm@^&)fk%o*`?KwFlzl9^|x~g_pyw-@9=F=UY8}Jdu0$ z&F|W3JzOisx~Oe4@GPC~1HlE1+QBxt9saA?@f@I%Q}EP0*le>Ind?!=H2RcH!x}%^ zyc4NH(-_@n^zSHFn@&0;ckG2VE%4*(`BPU=!e!5g9;zGV2T>wMH(kBONAz=P!Y~zH zq|GO&2qd16|1(3Tib5IG9Z#$?@csRx-k-gna~KUg1BV96X8)$Y=&N{P8wn!%OhHq& z_I+fiKm!xdM6|pmF6TAL{SjUc!ne%z!$GSwUt3yN0N7s1vZqs0g}7JH&uPFzo01vb zMPo5K`buQQRg`L3DY1~5Ok;H^?YNpDYcKU+DUI`O_)lLItk7ZDoohGcm^O+-H0lUp zZbJ=*(|Kp@lT*jV5H(}@FqQe&r>}+{B|plGzyGD2h2O-o;;lT6^ts=7u`*n4oA2#kiyiFtek0!patP2jh6qHS) z+k(``>c8Ia!N(JXH#>(j+^}e54#T!i9pdLgowD63-?P15fT0u75-=#O0CTZ!n8GIV)8z zJ37H!9d3Ytea(8Yyv5+7I#USJ6Q2m*GC0nYuuF7$u6)^T~SL>dAF+q z5rA->>{y6_x(!>4$=f%SAc8g3fTYI$hcrk0F{(qda2E<(#r7D>(L|rwL-Tqm<;j-g z-AJZ4X{|tY_+z^Wa?74ZBq%weH&|`Crpti@p(Lm<^LM#w zoH^yLENj1JgwoYQmr6WGYUQEc1?NOA=1$gVF+2y**o|=@-{V*y#1jdTKva1d@=YqZ zv+wSuBB98b`e4o#?q*&3xIyD4>WO6r>Fk>2xO_siidDBkg!maPU=x#B&jyF|qdvw7 zgZuRNIo@dt3EXev&~FxsrKwbYLX^trVtb#L+J&01KfjZuWTH|kPd8v8lq;$Jzfuqr zb}+T41yuCGs_VGfEkA)XjY_r#qnry(=`*3bUEd)UW0m_}ZBQ5|yKzSrTLaVE0ulIg zz3i9qON7Z|T+L%ut8nz^>d!Fd2oK$WG;Dc7`2XYSE5o9S*0$-88bTUm=uYYG?hue> z2nmUyL+S4BZV(AULOO>AX+)6j4(V@u&UwH6i(g#Vti9J-&vQR_ltidPN>v4^MWX}v z9P?0R>Jqkqce1ui5+1Wiw4!)a#D`u;ZFZ{Y{k3_N>fF!SL1Mm+vIOjiYd+an<;wnd z*s#Jk-dhe*Armg;3Vi}e##qk%<@)LjCqeb#vy;@+okbPpy)Tl$kR&Jtqa|mtx@E&g zAlhKkxqI`Mbcg=|Rc#@4U&JCFcc?MpU>Mx-Swedyuhq_QyN95VCdWWoWRtsA@t$&B zVzJZzA*V|bcq3clhZMc7$Lk@-bO~+da=llky5YD&gWt@(n@w`*t zxWkJy(P)3>exD?00nZ zb}mY$!Xt5jDsKgq(yO3Btn!sed(MLAE3#W2?C7Q$fs%b?htYq%H|{hPfDmUMh~&4^ zcC=xoL^y@wB`E6LTtjD~{s%fY&S~2K7->KJ zn07Y}6WN5G_VaKJ^2#k$VJWUa93nZdOytF<=^vIk(WD9O%lTsrJ3iT}Ru2eFnY1Dy zYPC`bN{u$}Ls(z>I^`2+ka*Qlvcx%bypZCCTg*H^eE9|ng69j;WdOb7ldL!C|#kIvq+xP=1Nj3c; z)6Z1Q&b2EM_XVoku^cH=eOxL96j8X{=~`o&iC_Iaa13@MvT6Gyd#bMaeuMAIw9yKL zD=yiM!ym#LoUr6JaWV%2G!lHuWSwCa60K4sw$w(rlqI2=7C?6ElBe|BAK(M)9BMg` z#zI+n@_$bz7bz!Y_FR(5B;|M7x)z#th^)qZ?@on0PaNuY5()z~gC#kp=b@P4v)%IH zNu=jhfni)#X)_MV1^b9oE5;4PHJIPs9tGneToMv^MmjQ51c8ih;QFh{mZTTr-bIm= zr#~&A9;*@=GS%#QgOaYGl%F4pF_V@T0LOXcxXFJ``X^bD$#H z|FS8z`8n+V#*8)LO$`~-3!N@&RF+`ZKSud8xkbMD_#a{m4tt)T$~yug^MI9E<89vO z=R1eEhnnF(+?4Kz%07f|*^G5ocEO%-A+PQ`a&807KGx@DB)gA)G45{bZ4HR4(Icq8 z>x2pHCv+?|IjLrAC{w$v?vr}?Gy2Y(kz+!*>TvHr7C2-LbPFyaslKK|LPCK&W#FEb1Mgtyono3C85D;) z2imx!`XJOIM5xkbf0;M>AmTJE56Ok_nzbv@=v6kJZkQ!V2+yl$Pyh5sIm~Hdu^Q45 zT#*@UmaMDX&P#aj%yC9LhP8tu5~CUqtKv%Hwx#CCl3`TmcUZQ^_z-}#5c)GM{r4Ej z)KDIFKU;>2skHTV$i{;K+oTYcY9+b0RIPy>@N8Kru%CcdX=z<)o{#0-lQ1w-+mKVZ7%_TkA@brRm8E?LIL!M1IMb1RA=I%-f}3- zVfovKs%TaeLIi|0deY#xMuZjn8#KsC1B3MT2V8QMR+iXHXJLmnxDOLid&>!(^PAr) z{<{~Nr^=I*QD-hG?mmzFyQQs^<>=DqOLtdVo7!E3p6ahc7I5RvcIZZ%D$w_NRX z??Jsg^&2V1x0(jB^b!!|P3s1pmb|HMgFa;kk>m?ydJ+WPd`BMpo|KFMzLc5n7*r@i z5=b6#vV=WAJsfHII#B+ciV6~#*#&{a35Hvn=9{E7A)xFMN3ETe zX7T5tQwa(W47$lA!W04k$&1_G6jqK(Mbq@$GXAsuXc}AQuYVpw4c;V0)ZrNYE=J|j zu;y2C1c51PRT0n}ZI=1*GQ4CB=gzuson zr*mzz{k-N9OzE)Gzz)+f{~^T@rUP<3S1bz$x(Q)-6Ekvh71!)f7+-Zc1|>&P@#jb|JeYzjsG`qmEC0luntqDRwF@`I|5CXc5m>AogmY?=?UnSq|kK%fz#uW+>P32-N(P#+q z-uZBGo`~S1nWS#%DOwz1=GovsL~d5gbWWmtVejtjl?#OH#kMQX35T%2F%jwP8htp> zXY}o2V+cV{z!*d4zKy38&HDFg&7Yeo;VCI*+?n82zN$(N+|#R{G$zNKfw+4|XL@Lz zC}!m~T4%nQ5&6MHjI)0@^{umQ_>`|l-x)`X#UxxH%}<&e&F}WC25~a?X$v6Q0(#?; zHH6C|^=*4Q<%Ck`7nqoMuGl*oR75DZnI7dO#!`UT&}5a02vcc4<=Ck*0%~%F5ya!< z6{@tRH3GMML&rqEaJpb9;dREE4v&aFem1|87;lQdowM=6-awu8c$PgFDf|OrFq+xV zSc1|n)@VtsX$?$JZCQ8wie4X?NQU$m8V9eTNmC$Jws1WQKwK<2J6~v{>j)55}H#d@Ka|PksHku*QTewv2 zzW3u6j5KXoAUqLNHzUKk8?1YDej?7&S$h9 z{LY~{>L2C|5?K7ZDm$p;Ce~2pC~Vqb((>tss0DLA*>L9zte&n9(2(vLA8m?6^X1FG zvsVwY|8Rq`_Z{wT#i|RLVvH`?zwLt{8#yYyT5k=m8`W?1k+&`!pcP%$K+z2QJI}R8 zPZ<8oPUI4Iq$8rd(X@9WgU~ycIDCT@e~z`vn_=^sbPiLojGg*mDCZPV4DJ1};aV2~ z#sS?hvjZ~;G|qF}-#(C7ujp2spKc}-{=h_BkL)*7c&E52=e??JK zMpBoG%=pcHRq^3^dn_1W3^u?N!8!0G;24SWo3fwzG#&xj##*2U$r*~_OwZ$94|H6xE-^NQMmh|yLp|idh&eIeG-n7 zh1Il_K|;rFYGDtVkcmE>n=AjW#6!#Rl3PLwOz`>5iql&DN3q}4OBvQ&1&m7&E{$~j zQsT)>uOd(l8e59Hws{m{NNj;BJS#70I(9``UE_LIxTeQ{4;;rLC%W`F`&}NU)~k&| z9h(d)UvmpJjgfurV$7YweHE!9vzYUs^}q@g;tvb2W^U&^SZmL@H}O3+_;E~rGcpR}>i%sC#EJh+N+rq>nH`odAOy4{g81^0{Y zm8K7GnT=h~-~tpGV5yhvdrD_9J*rYxD(p%kSFtR3YFs+**u&$yHYD$q?TmRXg!skqRF+m#VRTZEz+x&rJCd8|0gxQ$`la?KDjDm!p- zMmFCg++_ZBzxoym?p7gBkj~j-=@#h%`(>!D^NtGsCsYIE^q(m-TFNOg_>f~R(`CP% z85z-tBi^RVB9Gcll7H!^EffLyb}N*YKk0U6(4->7+9c z0hRi#cDf#`d!k1Cmibv8LwVx_rmpe`-{VYGQPaRZG4;-c%V}9R~kX90e=QQ z7mWfWtws7Zi&QS5_fpVTk`6Nq!bMEtx_=Jt8Rl$xd4AxT0Tq!;nHfBgL0%KiMfCCdlT-N{zY8EanO@kd6DQBD7b@>$*V^@4rRhrpvt zI@2NagJt`ltyEaQra2hTpGHle8+bmBqR?A4WDLE-^kpRInRO{ho&cY`UR52T)m_EG z_R7KS^j@UavFeV@YhunFHHsFHzd2eJp6Qygk>4**MHa$XSbMiu+A8+6ul|xRox~HI znuRv_9~$62|L05owQG{QfFjGJfo^N|@l=(-nUVU;zmGNc&0&(gyUsptfahq1W6^wA z5bH6^{~&7_Oj5^mBkE`imnu1g)lUBQ^M;N1Zj!452S|LdT4V-HW z#_p8bLxG?@FgVTw?WD@VNGVg1P{%fI=38L%-a8*0B7e38LDqY?rnf})y8zB}2TOpA z7pyj{Jpx&ECoqQm$J*tU?)1cg-pXaj(y(UQ0XZ%(&_AP?`9vogyIkfo!WCQp*C_oJ zao9+U>~&+StErEw=%+V9-T&bmMMPA{S0pJ{yu$d210pHKbAA;2wll%ZX*3CNzRR$@h0c}da(}P5G1#Kf`_EoB@hDo)^W3VOBL~9 zM?_FC^W0S0@I?+gEUcufa&w*emu>+S@}KU%Ofvqu9~eiB>aABQTzh{{L)Z=iDOBSZ zP-bV09`oXEg{71DgFQGOw@sh7cjtbibO!Xo06rkH1VJ>K64{xziGzs@0)>bdXZB+b z#I zv|Q{-T0wcK9HU(K6q(cpRUjxJC9I$@20rn()(*aC6>F91!FKW-F5u??46HaEbS)Rk z6RWMc%#_ImT}$}1mj^U<@1)HvSa@5Xn<+42VwV}0%M5t?iElev*t3o%J^{ z{ek$PoUhYw?R?M@FoT*OypnK()xJS@C$>`GnZS1D6Xv@<5RRsXl}6iw95)2aa@o;K z-lOm5<@VKyJG`fx^|$$GG=ADNdH9}fe1K=E!D@7?;HC(SG1hfo-F4qJ*B~v1Oc-U8 z8ywhmPSW9$%G6?VK2~jjg|;a+TOz$!SC8{rgeV7%RfUjgB+8+Nk(;MpM(e+87!m|n z1&6OuTJaaqNLEz0^-rOryV1E#0Rf&5us1K~Zy0dIADu6HF*qQa=X=#N#VYY)DRQ;H zKD)910zy%#+Vtt3s*85MV6_FYq7+?^9-%L^G8= zed|$16cSaKrg(s`X!N5lwHOL!O&A}xAn&uXH*NT9^$D$hc)2V{%60?P@P3ylA<<5e z2JqV(n_b8Q3|_Wvuar=wLyyKC`LxpLX9TQZMvFkg57j-}9;Z9Ev9kDr%qebO6?V*@ zB8kARchGX0+h6><%evC2G3QX#p={q{D2R8`a0}wd z0Y+!7B1jE|PvXt4G|XC>*KulgaEsFL70U=ZB{cGzv|?|8ndO&@<@jK{{}x}kxF`_O zDJmbKuVpPqJK4$ZhYJjc+D{wJD^72IJxK`Vh^57n$e`S1-j6~2zEs&RRZY7Ty3fFJV)k+TTbJGZ#d$qk4z z{Na3RabiszIQWUAA;Z6rZ5Lq@v>H&LmV<%Bc!v4V>$o(bn=IH(Y=b0_KQ89P@8m#^ zTBzVsD@pF+6a1&PFwGIL8kHktHL}gAoJIx?fZ;t!s(35)hDX?|%H| z^`UH=D!mdlN#cv^@q<>WzpSH*4~wA+N^F`b0PUy`BTYd`jJ4i!(eD0^e*lEbjOQ(r zu}*3G1?CkiO8Rdc_uX#2z?RKLcRIUF28Ijzg+d-eDjh+h5TqL_z+`KO4vAtd-Qh+o zRoc~i?K+dce$tC_ICc?QXk5q6bQ?1^J!CTCw72B>_yQQsOpuQh26ULn9J$0oWM7}N z{)i{9KV}FH4usPo`lRqBQ0%Sqv4HEe^0Gq-t7-|%!SY9G=4DnO3S|bQzHU%oIC`#? zo9iK-9ikks&A&hkM@zszl#|Fh%a^6N()~RcJc_Mw`n4+3{SAPpUjF^(d}YG?ogu7u z9DBa!O#S6beWjF(NFt#A!<`!^$WgMRrHx*iu?{VR*OH($6n=U4tsWtnrW>&U+AE|+ zLxf6n#$b(kV(xzg4dAh;=xz;A!+>FdC35XzY|%crvBU^oeNdpF?&PxlEew#`O1$3m zYD6$~dfHd93^gc(c_4=@w4YiF-88_()_Jpo{sR1hY@j{l>W5xi6)30h^oZmXA1yix z5juM*2D>OI%vo1M({z?dYGZS&pXd2^r7Fx=2IF^wjOXPx*CWV!47>H_DKNFvVr@9= zC5{KWqfbK_lQAPJFZdB^!!Hje;C}DEICHUM9o~sOqu0sS{tmv>KEH7_)pGVn=+S@o35YQ1XJGzd)D0Q*+9Ttn zieRKR*0K{QdTfkbX2fwI<_ZS?ZwIO@3TyX2Xb)%%|3R{gipZ1rm77Cz?Q3 zfVi0<2vT`4qRZZu@Y*lX+dH+h`3{6l+!Qc*+4{mi<(3Uz2xp>nf@upsIgn%Iyx-9n z)>6pH&N@#h9NPrI_k}2(YGz#7b>an6g6&1UOxo<*ZKvj2%8{@X(j$9|rEe2;+@8-> z+j+7#3ZO!<(>ula04FhI1@sbbUkdipiYroR!~+%2D4{bFsJslzckX(6m-N`mSHzVl zbFB;-C>WX-P_yevPA<||Xv3B%fK9kX%L{2DkZ)j0qRm8Cj1B%{*C#h4!R((h?&-pL z;cI#&wBl~x)=UCx9tm5L^5o?FJ~a)v+}3aZQ$4nUYjP#6Ik%cB#J;f9py@P8Cg3=; z#wiwmV@4(^Z2SE3T(6-Z6LDRtNB;`_6{_ko$jj@zsF(DA``lbk#7NP-;^Cy7<7e>{ z;7lsWO_n3sFFZ&WhjeA~p#@zN#GU2d3EykM%u6X*!HObbfSJdnMw{1q%8Jt6#KVw5 z_6uXkiNz8g6-83+7Y=lhuAz0}Bp`&5*=lacA*`*d)vp$v>KoXm^qY>1XMquxq<0dD z#_LRuI20ue@Pq#-=1p!@1MQi>aB|gyGgE56AUa`_yBKyQSg^rFppK6x%$b(EeD6Ee zgGx45sdR5YOr|ooGHEii1+kXIn%)TN@FT|L_ETFK;3IBXxXU)CTyfqmAbh`NW|n_z z@Jah5v1w*uOsMH?x?%0B+Pi-}sFSw8ebMc9Zdl9uPgN)L>24{Z;#p1-e{2ylHYI3o z!;iP|N~CR4?(AR3SLpOLN;WQ8;e*Jwi(<#0R~!HTMc#iFSdUN{iyb#5`cVj;@29u_??PF(8>|FB5!514@YzY*VXfJ2Pz}u{5lz;bciil|Tl5BE zDx}CPtYdw%=R{qJI^1otJr>*%NyHCjs0P<__3N9bVm%_#dEZDRDKxPmorZFT3^>vE zoD#i~){=V$hSGlK=V(X8nYVUke88~x z2YgguC#&s^cla~)zxY&gR4^_DHIz99m0Px+1t5;kd{D2DHULQ821Oi1U17za?|F9nXdFr^|n^)FNME0}$G ztM?J{$XLLa16Rn*!@uk{R0mjwq#uos1D5T8}x!G{+1 z%FW3>b@J>MbN_Egb2&^+kyzpuBU$28U~GmuAV;7->&d?=z>%Vr;2WREh;#NK#OoMs zDL%B=It-E1HHCW*I!1|vqXG?QG16!mO)84x?1UQbuA=tW2RH`Q$65w@A8lq;2VjNs zsENuid8Njd9zQhiRtV)C+xWp>MD3Q?NHxWZ$(MPc?|e&nt}=YN_zbg1=tLKD@J~L# zOV~oPPYZl{CAB(lAaSEN=i*KYLF+CYYN94u*>DVL?9rTPTx_y`cPRR1IbfeW!&YC( zR?eMMMQ7AidnpVGFHfGsc!`iiX_6wbAB>7)ZI8N<)sbxz@rypWP#wtj*sE3+nQ&}y zfeGzHBf&11Fp=4Xn;k&${MB!p1+`>E`3)Das5qbh_H}VC$@m9_kM_}j`SD5yz1}uF zXP~?PV|5SDD<&zNz_0?E`^wlX+f5BJ&i~#tMgC)$AvQyBfsoF$^6q2`r7iw0>E?{I zE85{O%fItqb}?vqGHk%KfH_4*8lAg~*e`&!yac6D(rh4BQRK^pZm{;;^e{~k$i^Wb zA+9YLA)$jTJ8=Z<3r~o_4ua$fGk@DLt~!on7Xn&_H2uDm%|^AE{AHb-M@&M}RadWvu&%pX}4L2$g0c&IbOr+Ah7tz)Mj zZ>~Lk4uO3yfN^DciT&^r+w(@^ABI{uR+o;@w(I(E1&9ff`dO1Hcu3?^V2Zqf$!!=A zu8O-RX({@5g!k0fVESkV+xX+lqT#7-{w$8#kjd4od@(>Fd`q?n(jJg0XqN15RE(^T znmWw7N^gVi0wGhtb4mHNBbW9oxoVPfdNmS*>cq^Gi)_-bW^P3>@6Y7lBO*HYphc#U zP&f)y<1{pxEB&7p@>e`F4MZ{sljsl*5LQi6=c5{l25=zmWiQKF`LGQQQU*a1SW(_| zyqSec2}p86^MJZThyrIQC`EoC4r4mM$SwyiF}Eh2TRw1{%l~uvi4%MNC7n%O>q_0G zN~B2rF7*zAT1ZUUe$Ze8w+Z*)1|);eLFzqn4gn~w>@wIsp=?$*z^G4CsnIjLlY5vx z*#y%c8_%i(+y|yu86)k+oq$3xnZEb&ep|gPRLu~|tmQYYJuK3ou7;U$vdTlG?}_#a z8q%VJBBoEh1_em|E`>`N&9^woo6`R@tev$$G``uROF}|2E`Vw>?*mxVMNjAI&^kG0 zrE@lCCcy?~o#UQ1vLe2XG!0$_W;UOr(#`2wz9WKvZnrL(0-1?2Ij4*pE?r15*qY#9 z@8}kv|3)ck;j^^Pcui^giRCu7dxY}M(q_5M%)2D=zwXbxCi{8~B6HDtr9LM&v4F{r zF8NwSM6)xPLlHb(uxDsd0a8_B0{VYr%+B|uNq;V}b}wi0+o13gAW1LD#dU`>tchUD zK)K&Z184vE2b0sDIEYu?6M@Cu^caSotWz-!j+|a9@n@BOG@Cr353RpYBCW+7aB#SmO}^Ort(#R zkMHxW8ouka=H!e!+KjPE-ZjVA61og(l`trSdhZXo?0lR`Jh%rXSbcvx7v0dx4Ng`CJ=xK+!I?@#b?P1REhSlz+{&5sE`jP%>JH5T1DRJaFZ1PM;}KJF=W{4dQYr zXg0b8Es@~Wh%2Bm0Uj$1BR`lizGEhA5&Ly!pTzQ%5WMb>Q6i`aIHPeD3kjC&u9t>z z?d=9Ua*taCp#2eQb7QRtaMK-?BM_}_yZz56&6kf3KP)#~KSifyH2k~jH09}wE&25% z_NrP)d-qLRUbyUSnGM%siY`lXFy93hiPg+4o_E+7xMDU%nQ9Zh{G%>tuSqc0^8tPk z@dUl&N37NivrXS+apq;7sIRrJ7-Z|dJIK~CAWvKV5yPqf7fTjfXp$6ECZVUU+Y+TO zwX$+%w^uZE-2SA=ssBM|prb`hd*P`h+I#3}VSjlz$nB*gZKBU)br$%pf!M1fJ?$Rm ziGZrN!bHxjMUGXqhyzbe3nrs{A?&2D+k;|hwyuj}5I)R?&CGlkvLz}n(j*5w5I>*g zzHpD|7bK>|la3IFTjACmMZUWblXW-1@%)`eyCO!OuPzh9HeugG23o{J9$03H`V>Mu zSO70eixQRxVU;lY2zL{C8hTl( zlNNBb7qDiLB%^%AQ`EnR^K7Yf4oZzKYr2vJpacIZNe;TwrR0^ZlywK~-jQ{+&`7*e3$@tZwNDO@Ka7c=r*f10(@-~o^d0dwi zuaZnCx?CBx&ux+h^iMq|6-bG(=Hs(vBvJUGSkiJH#J)xzDhK!n%$Svxm4adDZE;mA`<||r)z{F%H%p=`|fsYw!dDPChDu6 z_pd(e81`H4L6wv?TdcVVtdugul#^LecBpbNT?YsfT>Z+A{`!xYB{V>t)g1+i)~(ka zsH$K_UVlP~8t$ks+9pMr{Z7{0Wxi$gOexG)u5n~|TB%O1Der~}h2N1cXn*_dW&QXi zuI>bb10W;&3EgvFd^+DSvH5MJdoP`Va;Z>RB4$;9IiUp9B?~XM+WdrpF-3>M$#8U} z+dryMD6=U|cH3N){NZ1DL|`>lfi)Gv!>YM`nf?Rc#|U=57$yDqY`&!*uy`u;ligZW zCI*r7>>hL%kyt^RDdnbpBEerfr8)iC<7hE)f0TGG|8C4C$tKUc?CjG>%qrTr#C!wM zNDfB8j0k|vwBi_ZT*LE52imR`v4*wL57V!kWY{DPXr$GzW2k=3JYN^8KMYG~nsT2N z;mciYD$I%HyHtIuc^1vytk^WvBdlchHMh0$@cuNM-BzD~=gZ!-WN_)X5Q_Nc2k4N# ztrDUJmY!oRVV(*`DE~Npt~$KU7m%Fq629m(TF;S#b&m*N*zR%MR=6u|>Z|kj_q&7P zRYB~qhVv;O_P;)IHb4DSFFDk2b;z+;X1rN(@2xy^=6I5AnDft<`sNisE4kyZ*(dmx z*vRFRCG+IV$TLh0y*_$~F2hNE<52n!gqq#m>I|)dU=@a#F7aA;#i*7TCrn1uk0EuGMoy@F~n*!?fcXM6<9_M>qI>& zOfdYxUo&|Y-N0_BL_Ky&pPTN;e_M)`TVuSm3FCm_$^w$h-X07mhJXC*?ee zI_qLF=IBzAu9SuT3uDgJ)?8>o?o&i&FSnwPUf^4C>yLG6E@`;}-rVhJ4HpXOEIBwu z7&n!y`e~tu^&&|%_7K^89%3C-#EZ#qrlin6*9)fQGm~wT{wL5=w@#0+Z&N>GoePyM zg~(Qgw_{Mg0&@B1f;$a#k)TO<@(A~B>H%YvW` z*T%c0IbXx+$$i#Zlyay~4Lc%5Kk+r=xt0GoBcD@#sy>)y4gv&@TtgU-Px4-&tK zqpe5qL-wB8sic#&3RTsb-{tsB9*#dvvGg%6aH7Q zRIlXlNaY?gdL*vzbWU)b)>1NuL<~W3io?mn4bS;gKHcp0Cp91o!pi>&_pIn3&uZl~ zMoSTZBX&P$kMu;=KCEDmC@lh4hanLvBFH8{9ThQ~6~WupwSgNUVmTC0sGf?f4nxlG z?EYHMBt(SH_E($-F8)KsEX3fGC_<4D98^u9KIG;}*Um0>LYX3zjg-`b7-KGToN0sO zRgyJHuP!K3>o$>lG)rg(=qIoHLm(U(LPT3Hi;O;*voMOi4LdM`iR%qdf z;Ixe>I;ylTlMM;cmYk+(9(P@{(J0Ni@q~Rg9U@pgQ@r8ZJn6xAkc&>1#)Gs+YLAAl zmeAF5SYyxrn4j5aGY)1b{q+}gk9Yc0Q|Ruh(_gDdMXDiPNdCji>jnwOy_aUcM|>t~ zIVR;&*Q#@@_X28Mn9_fzyrHSfIvm`$8SPNw`=Tx?2}E0`-^@^87KN__VAkq<7fu;T zRQs|ZDM$?bs8)GZ?KQUuo^DTicrs!#d=#V9OGK+|tgqu(eR|V;=kr;wUL%>!?a(6p zOqcE(m6J@7`xg7p+LvJMc`|b_$w+bA-}JUF8;5D^@Nd`qpO#s+*$8x7CU2QaEhZMa&Do7gm+HDJbNJ|HJ7=4b9kR zul@G4@sB`M+M|Q}t=;rq`ui|vU50Z(lh~SWIrEQEl!KQDM{6}?4#GLz5Hhav#rGwX zdb&Eo9ym)VQYZZGoORz_Kiy#OWW)ye4S!C$!2|J{N$*1c!HwCh{$JjQ2V9uHrIvAKuM^Z2B-$dm z`hsn!N4;~?TWTmmo;Gz`U)fFTcT`pSB%b`jmdnUy3 zddR)jG`jta#*KNI&`sH!2p?hCUpQUP#p-*9FsYDLUbV{#oTY~~ZQ*UcTO|07u}{e6 z;m09AQNyLz&_3*-_LraTWYA9_GcD;|HSQ~mhEoa}ZVfX&I85I=if)5mC(~ipGmvD7fxT z6{^rnYRs=b2;6>^p={*O5YQ%yFskrcWyDNMq>(gH)cQ>&G{jq4$tSKWifxi;6DS?n zRsR`o9;cbofC;jHJ~r#1_xeIiyi`PAyEa8k{pIHK{dcvsZA1T4-glQKB>o@IYOGN& zS&c@?H3h@96pe3`$y87f$yTe;2D*~4wvf#G+$L~VTS&oik4LEJH%KV z%l=r#hZV_g%Nx`#;h^`=!2HeG^2$QC(9r$wx~6@CfV}g6Xe1 zG@6qRW+zGzJ6zfg<%NNvRQ)q}n2E-a@|&)<7i~`wnZc%4k#h7FuMrTmiYCJLquKP! zCRYN+pd`V~jfDEiDU#;?idO=Y~b#wqq|^Yr=T^gjiBUL(^G-$Z82QRtqcfZxGAYDS7eRg&C>fW|1z zYsCnAr8~YW0pqWhZ_J-AjG_=SrxpKxGDzTgz)}@}I0~GD_Yj<6pJoeI= zQrwJwlN=}E67|`l0M`PY7cIi(SIG#*nsL`Bf1A=IK#8jbFYt0-#ON&4PdN!}63dWu?DAK?i*WDeY_{zp%tS^T zDANXO!t48Gl57yKiHl4td5y2RGm;QY^`a1r4d#CKSHyNyk0=s}`bxgE@4rOmrOcof zcDpOha(5|j`RyGAYFIk?tb(}SU2+FH+OSC&N*=-c=qSKYz=U^-34~j4aVTOdrQ;Eg z6=QM;G_7#Wj*c~|qi1A^1F!>|i{zW~6k zwwHERuOLC!{TgIr&VqmSgq|C>+jBTCLRQJBT{v=MncJ<&-o9UU^kCO$vmkf_q_U2U zz-71M6^SGbvu2syb`aHyl$Ui(@Hs37bk>Cj}khR?#(Mrc|1ge2JWcx-z@M9Zg@PE7?xZXJP&f$wYAAW(U;N-4sMge{Q zG^z?q<#pzashLqKiID)YPKQR$>-rujm-BiR2^_m9F%rl-VOnPSpQpisB4#|*Q=ZMg z97Twg5v(q3mOiU9W|5KZoe$ZHeY}FRlC`bXr&%A?Tg+r2<4f- z!)P-McOw4FPJ52yQck5Sn$FYP%xJ3)!l>u3Hf$+Y92r+;jBP_=LPzUz`ed@rKa9Q# z^e)uBf&NB0wijYP!6vF9DwHE; z`w20Dz}y)EQ0tdY$K*fIAHS+RL2&ph>o%Xd&vSO~pzT|I>Jx=@7V*nmjBk~JG4*Pg zCO$`b$gSu&rdU#dIL~V%Qr!Cj#?WP-wWG&iq;9p!CwpvC*2?M_&EJX$s}WQ0Iq&6xV*ZbvI#=85p3Xex@#U7lJhI5G*Wv~5_s zH+aExEwRL|)xyO$nJb#jw3uF2mJHkEY0Sj22xe7r@6XnLeFSFo04k8!ZLl5>ULC#y7H8$qdfm-Nx#;T=RHCm&m5XQjn5|Zx^t0dxR#k_ zAUj3iLX%Pv*yFrO#Bz>LYmH`GQr{2Y z4v6+_gC7oV*n^_pMSLpx?6DJOx>Ng-ly9}Bu|Rbh`V_+3`yfz#_hi)Op`R`DvgtfU zfw?hkEn3k8xEg*h8Cq`vJWpp>#ch`DOI7k-oT6pSDKM!@1XuL{SSiRrr>e++|`p7!ur=RB23Wn&sN> z#zVQCv9~S(l}OUVX_q*S0TrR242ZwARwJNd!7*OL0Ar)2CzDkTK9$izoYxUDdRuSm z&6iMG+ngR78{UV>-GF7F`)))b_aD>{)$n@OMmuf5EUTyB`AcQY3C7gY)XxO?Hhg6Y zoE;NgH)t}Re8PHdtZMZ%1z($#9oZ zvw-ByJV-w82a7Kwv1BDNw6wF^yaGpoqd!H1wZ!*6o_UUG|4w%AQ%4vXnHM-ro?KTD zN&XziJN{(WSMQOX)|>4Miyq8G z94*zmWCKly74!tY9i7he!C-$509&#E5-VEH%9>y^EH=6Efk8pNQNO~x+7imMFFLd4 z(G6TrJ8rFgS$vTi@}7_{R55i3j8YiIx@bK`fO5j8#afhADcs{SJZUTWc8DuS9b^%A zttW?qdmTpkDug(lXboIs%s-PxhF5fnmDDlS->MvI&mOJT{5WCf z2+e*%x7yCPNbPuc->qTXuXFT9%1Zpmz9QVgu1wDAHI8qrG6(4Zvy!pSf^`13=s&(3 z7IK=iqh0RZw;?Ff7-K!h7QjuYcJW`6_P2hwnatCaleV)w_ulEeYEB#jQmyQv*gAki zOoFY?73qQ<%`iIIikgpFXvN3gOObraHF>%mjj7f}`b^b5l#M;Qvuyy2eR#LOVrqZ+ z$%lbLzs9XY?e#adnLQ=6n1(Bv6;#GbPhxck0ab!q>R>E{yp#gfY`)Y_CxNJx3jc-^ zqJL{czo|A-o(J)t``KtZQ~cr~V^!)9%hy?lWK6tJ{;S#{elM+wzkPxtzM-ICO>vG`KRQ7X~8W=!I-(fB(zOzy;mXIz`b zRn?&0*fmgMKl;#*dPtZ)O)b;j1&438#0t~)YVe-XHkt4mWr!zWd#?H49<}*jj`KI3 zRu0CcNJmd}Bdl_#e(<>o!r2WXe)z$-WR8z+D_No^k)!w?-9p|IBTj(tIQtgl5F zAo+O7;eGkwdm^-=J+kH+d*nW2Q+U(}2axt#t72#AToL`e|G2faqGYhvUUd znJ--zkCQR_=l90AWUh*E;ms+5r|k~b6Oj|KIj%4SZ3>JHnJsK;oO8H{Bc$nyIRT5oWr zo7grKw7Sm*qvT0tbBLIN76z#{{zVEDq1kYhJWP+!+EX7P+?eEG9BKvctB8vyNxoW(nt=vt!gtIZtek9cXn&et{B7ELuO6R+^|FJr zK^)6c5|gP^c7dO(FxMqxYUNl&q^Q(n(v@BzKW}=}qru7$8N);O#c_nTuuCZ{&_sBN z!P(^TpEoOn6NwmF#DXfl`lFWGyD9*)fA1!@$(fhId2yGD<8Ux`ci1yaC`P99ax8-Z zWF_#Ny=VhUShVfTHISWDa%X=#Zo-+#Up5g60BZDVDA)I42M*omp<;Ud7!{VPh0j_G|^ z?em{6ow0vWb`;AeBZ($0j@wL1(hK|7c;nx@$3;v>7QTmYm0`G%-tnNG9FtC^5Xo zAiqaLmOJQv{r&fk<3+!zOm#BXJhdvTw(xFyA2}MEjB+u^(|HFjxg4oSp;xWyiJBA9 zn|Z^L1|wrFi*`p%i;9H}W2)pB?BltIJE5`A9^T->gS_x92Z_AbxY1C%2|!tpl_D_G z*={{anrw}D{I)+7P#in_dEpbL)^(vGj};NHiN^txq0FP-9m2jIojzhQ z$|#6G(sX#IcQX{@Be}ibS~7rqdFfx0CbGZ(ybg>FeR3}=Ne^~XfKx^@D!iI%uu{xt zlZG{by1!@bp>61!)ux>{ii|q0H0L@!bDa)gZ6dotxL4!$k++4pLtz`V^;J zt{=|Cgo^Bs^c1KcP}kKrob#(zYa@F`JZzgZ(3jl#{V}8yE@pjwXE-UE1)RpXs%Q7Y z_Q}Zj47n*zDQT6zdQN$=bh(K}wpt*fpuo_=5*uz1vIpP{F%I)7Aed^^$*Z;!hr9uh zEhzZIeYsZY^WXhZSn?z->{JXyCLNE_;GTUTi8p{!^1)nF9A#eawKug|WXq>lgY>DQ z!_>N6Z1<~MFZaG6!5=a=TDKyAhgc?F(m+6RYy~;V;s3rY#Sic6OciK+xrt1G z`Op$oP(&*ia1U09%8mafCJ8p>J?4O&(VDob^|J* zdaxSdekM4`AADxp55+m=hJ& zbo>yjAI8a_2z4;t;cZ7o`hPrq1AARv7j0}Ojcwbu-85~i6Qgk&+qSKyv2$WOIkDBo zwsp_@J@?+fu%ET(8f(mf@tvpp(s;bUBy#-P{~QtS4iPrkoSo5OQ)T3WSQwf1&Qsr{ z*?F-+0q-HcvQvf}!0%2Q;dXhGf|fmd`YG+EaZ9iW;vo&wQs?*J?xJKcH*YarHkh=< z)!XFRs5C~M%z+=340&UaRf8KS5W`vq)j!c(E3fhH)<&U71GGTb+9W#V2Y}BLmbb%v z(p<|Mk~bWu4_NCub_)^%_bAI)5TSHRV>KiK$90))WvAa4S5NUp5{aBH^3^T=c%`^g%HwG`0ocGl0{a@3hJzyQtSbkcfB;>;0z4ENO*b-pur%;X;Hbt9mzVhC z98i)iunFwmo2=;N0*EdmV&z5Kp)ukPB6NZMQXIXuKbf4TG!LSDIx{}bls50dNTw$J zorI>E`4n;l`Zb8Zq!iLwV+ne^CPna!XhjMLI_|V!SnlRrG?-9Ud4xu5nq31QaN!?8{0)8AdyYOQpAui?fuL__ND~reA}ZwOc>slzTlN0YamUy z{{x{krT3>mr`h2m^Us z4Fz_jLfH+Ckomuz=B}LC=U+|nZR`7hWp&EOu{j1`w1|wUQxUyMakDFastJq>_E#|u zAzX42Nf`)~Vi=p?sc6yiW3PHZ+k9m+z$}4D;?KcnBIc7mN)TjK(NHczZi{oW*2DqN zR;S>=Vi;EDX61Nk2E7!*goPRa`l--(3d;kE;Tgdh2?mST60|H8TxQ;Vz-=JhGC7r4 z$%baTe_>D4H`Xu_!XZsg9CpuNlrvd;<&RfF$ETl4ZdMCce@eR@eP~aqnjWAlobtMB zN?InCI_8$cllOYp6`Y^=<_Vsa?|2@mWV`OHe$g!k=J|Nh3KGDf9q_ed_Te4LU@#;| zCQbEr@<9%wg|#W+F7QJKCvc=WX%Sg}UuC16h6@l0*qHsgp6IrMER)#Z?W#+x!EYmW zlNb+p;l8Dp26z)q!$*itQ|%|}H{dQf%U97Yd#8FW*{3RvJ$&3fYj}`CCA|iKrR-Hn z&69K(K`~X%tQp+DF2;cc`SWsL4-0vGWtUB+ahxctV0m_ueI*q&*Cf03WRGg(myu6F z+}^!7S46Du_zAIY8wmb#4lT3Zf%PURH25jDb{&TU>b>2Jr=1MjymGk5&Nl9|ppUOt zBatyg(s=pz40~~K?|SwYV)fIGtd6QnTQO2gl~WrAgmpe@Oa2rh-FfzleB??p<+~n; z#*S{x2pLBIf!*%SA(7@2B!n5v)wTvK;xuH z;}?N-9~`ddgpUuUIZ=$LG*!Ej}3x<&K5NmJ&zB z#!Ty0%E5^UMovkI&%>WmDNctOXVqoq~TbtSqW)VTHLWO~ckBj@!YWArcj@rqzYp1?$t<;N^-)H-1~LXER7!>$-}Wxpx}R zNGru!NR?^`1$Upm$3*pt4v7vBo1sx)*VX%^Z)oNsf_Gqv94drD-v#iLz1c>AcAU6b z7QA;la+2_Kk4Rn1^NXGO#mLqZ9E0Zse@~$G+VwEVWhG(@5((+M(Q1I?|q1{jSfE!ed&iIel^^ zgPM=mMEn-D^%(B|6h7wBeVYpaS0s%6T{e0I`z)tT{0%S@o-FgR!R0yi>#+Fn2Ux1G ze*dWLz@XFqx#P0CBl#|NM;kge$BC8P%03sFK*9N;>ibZW>eY?-^Tu%}cMvExYwRoR z_&Ynn%H(>$nxl^JHvN2I4zgx#y&c+>M-0AZ5I%HFkQ|vWx93^?h(#{4-2z+ZmE-}8 zDV1B7c3%C3ovB2=YW#n`Dh^j>LwS~|Q>2*Ym`U@0KEe1oXDs*)_+c247*Z*##@oHW zsjML0Lnft9et+=t_}Jg2R#`aMEX)}{!^A~#Sz3^6g=D|Uyu29AE%&GyeL@jPg^{pv zD*d{)`;{0Oj>RH258D0Oo^^uNSyNK`N%8*XpWgjImZ4aq3ZnME9@0xn-zfh=fw@3}_Ku5`x zct1^;HJ5@t?fGNkI8Ta#A@gmv7t7jvJh+VZ{Z(IPiYk`66=JJSZ#QqpO7bi)A2%(uBrIVm*~%nK*qRkG|o{_l{Ml5Gqe}AH)|Yb zzHxjQ7saoDGrbyE-)7XqehhDRcEc-2;o8squE&6+-OdZ2OB7Caa&Z6@c_Lx}guFDC zf+<=nJ#r@cO}pO3ub#wcpdTH zFCJsY8aJ592|o}Xqx>4Pq?Zu0erefC2tYHqGhs3wr8{RzM>v2p+P!0 z-5{lIiICwb!m^~Rya6fWsHm~%Ap&2iM+x(g8Icze z*!wm`bOEh9xv!;PWRb4VC*Vj|_CL=NmPi>I2j^fYQ# zre4OBb-f$5+WhZOSdPOqx{(NM9b-^K!k>NYJXSDJ>o(Q!cw_BBy<$%r)oJpPBb286 zLK9bRtm7Kb@u>4}8^Ve=)oX5@$S2UV$f!3LHG7z<5LFnyTLEA|v2YDY4GKnBzE#cc~H_9~SKOP!% z7vO~Rx}M}Oin#P>yLZR)ECoeVmYE~CIb6IR^$!D~nic_RCbLJ2NysNYBi6sG&695K zzBB=t&0Fd~$3qxP#jKTnh&o6Bgx#YTWR2zHG$|x1_di`?J_>KqUW^9)8?#npcK4<( z^o1Cc+7XPgIMjG6Lf4R)hlFnhhksW&%cLJ0NCke0?SJ&5&Dc&F!Hx=$l@NsJU};h~ zY=_cY?{%XHE}57o;S~P`mh_?jOOtb!dF3deYor~ib6Y{*#cG|Tay84Lon1RE)U@tb zlx%@&2Y_AW4Hi>`Lggogt_EF5UT8TAPT*}fj*!Ul)}q$9(2=826+Jj<{dhwu2M+WR zU8*_#RgLAk`UGJ)DFrjgzn$%*yPX9MKByDJ1E-`c(=k0EM zlQ2Oqgy+NeMKM&A&Gi3#Jh^8i2i^5!**tJ;^a?OJ+ zVZ8C+MbUnv^2bb%ap5Bxp+TU|Hjq07c2#Ammft^b=$@M_2Z@FGX;bo8v+HfV2B%cC zNVqOZVi+v#gZjrQWD=2Iev(v@0|WBqA5cCBy9vD*R8u;!P$|>~b565zuA!e+YBxD? ztY2BFpS_EbULjrhC*dvM2PvcnLO^ARXJ%V@Jl|gXNM#|E* z_IxM1N>&@g4rIZ+jkR+1q4bxD~e)oyHU3B?`U23+7v|te~NB2FF0(mTVnTHvEpC1M0wDrpKWb=qCB*iMv zGc`K2$JC=qk>bMQy!r70nX?IiL4l>SOr9m9a55c3E=KgvipSdyOOi_!{=D{o;)KTW zH03Em0W@Mg(tGfyN$0spFgQt*0z-)u!GXSC*840bGT$wLt}KCC)suYiu?2itB5z^@ zR5wnyooUvqCFDR1;hbgv0b(ODsUEn*+V`x{pP!|pyU{UJjyizl?BNxz+rAJLktn!f*00el*#F z)y9p`aO%3zhA3bHxmpmZHA(FI`Brh4EICSlcX$Kyk!35f=2FpirCa6c*kSLdSxn=k zZagJ!KSJ2=JfySSNpqHRCECTO2u7&R!}0wI_nb}fh@B0{-eL*Hm)NXrvsg71T&z`8 zhyh)sgo6IIRYV0vDj7`FSZPr!PwwwcX#PLMvfBDB=P!hgs3DrFm{hFHEMDp`APD4| zj=7e#R6QEEGAf#lZjoi$m#*AoikqKcR5lR+d+d9B;%n30U(+YCP`Oh~GCQ;@o~nXutA; zrlz}gONMJrUk~F| zT>`|tM^GS;ud<$>>W7^_5& zS)B_tLe6l93DgPwX+g|l>tc|bmiPIjfwXs+DtTY**t%%{3Sd|_hBSb=8U$uz;@Q+> zI<*#nqdq0vB<8!y>f-OSA9si^Bpc{&U*FXafDZwhxqTqTqSED)Onvoi&RSbQRm|2A zFKx%4j`2TaTsWih-otLU~ zzHCST?eVxY^fvG;L9Wm!4kOwAnj+5#zCFDD6r8A*Ty@dQIri6@pdRs*K#-dun}rUn z+o6nv+g|z3zwL$}JYhHHzlV`=ROld`#K5CJ-m_)x+R_Q%?4b9M-|Y81yl~_QTM}caFThvfSm(-Krc&Yl%JqkD z#3QeAzuYpg!4l?Xe~i?&=lS>(v|N{g7`pqHI_-oWjWn>{NZJ0T~dGs#uJ_coi%V$N#5*yH6NbsyVs{g6xSQcH2yZs z7CCs{SFk&CVae`^R8aDz{Ujnu(eW&lRS>3YWzpR(>4$HTEhW_yVF4eJZJq#H9HPaD zPYk03Ohv%w=t>NuRK%*EfJNSIcb#EXN@^=i==P6X+DqS)%ByObzFYtZVw^Rzt$4rLX3x(+RR;0Yt$rn_jS=RrPvnv zP2^+b+olp_dMql8v0OWM%M4%sWdfV9w(zN>SG>Oa$x&r)9xSk+7TTe#!Zs$sBtR_C zH$UAzep~#2=K~{7^ugBy17+Vw7$%4UA#c|b(gHeU5E8jD$tKU*&=_tv0mqSv&V&GQ zzXA8kx?*>#%}VNaomf2WROph=qV$57#%;_3feL$Ld%}X`DW61Sc*0?(heXh^*Fw6} zb_s27_?HXG$kfO1y@oE$Q7bJC7UR8}6*XrNPw5^B6aw-`GOtkinrtm$ZrsH{E&SPJ zLk_1`%3-aD?Fm45y3s1Zh24omiv$50CbrL8#8G5BBG^W{(KP(X!GBE&-<)Gs|zbRhEA}4-)@I zsB#Nhsd;SaF)DF`F=jKT=saU)n=kf1r0B%htSpPZgX})r!Ay{3ra0@BfzBgW1Xc}^ zS(=4(DrG2mGMM2J$o|}#g55MEj#ZbcO8`GSsH-QrPy7x|YG=9bqmuFUj!f7%*WQT6gAeO)pK|c;A zGtK(y+h)6(v3$_ph`YdDcvr3XWW7DQN=wFm&HbX&!eiqgBr5bGaLXCokHJO?!qjEi zmjcW=i#(E@FQ9}Z`>&RhS6S-eSjZ}KVCan z+L-(Zzy5Wut3gGk12shoY;s%LI#QcHmrLk9G_Clgyx-Xi2lX?+DIy4rUN2NFN&JOE=p)CJwit=UW@GnERw`E^GItDA4voU&tZnw&*$>lp|;!KP`Bm zSvKtX)C~K1kcg^6Q}p*EoU}oNjK0uyU@~7%F0ScTA9AY%U_kYt`b?# z{sTT8MoDTrg-IeWlE1WQ)YuAbUSNs?O^m2KS~NQ2R3|M?jcHQnfCj)EB4u>@vjK;n zK6DVX74YFEHXmpi>I+FR=r?t_2G9OPyoiQOgzWQe7_p(<@L`KyqeukZ#15Cu(5FPt zO*)B>XrKfYnxAc$#x9_N9cr`v)jD*vh@a_G~p^dZ? zSvrOi`jQNyuY{5Y<>k26F}o;=h{R*&moyMS9(H=(iNRP>MoM2l2A_e&$VO z>_DLWKFHBQ+<_|K@k2K&Tu$A~G>;h>k;0I@p;$wxmMD zQs^{MXTqBuXe`#?-jF2Ak~+vAY+@y=xb_@-xvjasrmnv9{`epF;g|GH$NI|^wkuL9 zbJ3{ccL?CDjFX*3Y|Drr0L@X&hs^D;g8%PHL6Ie(Nqml7jNqrd#6w`y3#&t#cskF< zS#lafH@X3$s&(x$ostp~Qvux?^f$HkuUdTHq4zv8d`-lqBgu#P{s5b6KFQ-OxhN+a zdrTg-y)H>IEPJ_L&-+7>JHCu5OXuR3ZVnpvwl4(9Oq>WcNoX}gMGqfj$)=NLEUVFN4=OK88=rI04Fiuh)v}54}=Me3_CQ_cyKG-=*V~c z4p4@$%LTdQ1Xl!RHNi`A>`)_Hi6wHJSX`AJ9bXl^l)zQt+^G%^6rB1=Ap=(}i7l?`MG z!bifr_1&K?>(zxnJ4cgk>fS`gvLOI_Eq|fkH-xt|jq>l}#eot2gZU1=<=b~Jb`-vk z$MXZAYUeJRlJhM=@23h8?`ZpXqg0U&_p~6y33FC%g-d&>H)7ry3=&* z)|~G!mQ%6pCU-nzDyV`cPE(C0X@M=!*wje!(PEX0$C)_i`ic`ji^?0MCAek}C*@M{ z8ARH5xV<$XPs?}2_aun5D4xY(d*4VF)Pmy`X{mV$6P)HhzS}7%yUCz{7}jn1W%7zu>&mhy1EE@`5e~sT{Hn zVxLh??s(bK$pXt%4#<}a492lhSyv%6oOejTMtSes10z17L;E0CNHz|`ZNXKcd_D_F zJ#UUn?_jIoTSW-BtSuCT%qg899-UN|*mgfO%JgfFt8WlUh{S&$auyTN!4+;Fkg_SK zT1{J6{T_@-d5L$BfD7gA%-! zh1njk5a6>|(K%0%w@=3xD_fdiW7E`#g)ICv1tass05}PM#VbU+!#NH*lgpG7F{$Ln zXl~!e`~vI>$|Z?8``$a0WFgK~vV?WEK6io*0*tb9wjIT*6^(xi%oWb{oND}PA*|2A z#fN^o%;x~^q!mkk7N-B1RnT~x_GB2q4%d>Qr$M_2h-0JMQM^kO_ZXspJPow^osOjt z!(y9MHjOY0QMDbou>&!`E#!qujUMZY5$9bZ&)|)Fy76J5|JfU(h4DU&We95 zchhv|K)MTbt#t+dwa+w*cj_fYXr~c>JfRvG!97s7X7(#u~Y7 zUd!dpLXBc3zz@kWYv97iCY&Vla9p1MVdt@JMrk`kznCaUj;{!@>WPIyzsHDa9|>>aZ2sl;7PBVGug8S5XR-cVU}ZD+X*9venpT!k(++eNd6QhuLqvaho05i zcYjCh$>7IR}$alBZmHwO6}b%83PB z+*P!}RcBrSm2YlTaLm2`SoCLTA(5>&MU4vVB>HZ%(N+eQW0qe3_;AJPcNR|>LwSX?GiJMrE0}tJzjmb$^|20m(7lDea zSg6RoC?}~76`~X;hwOWf=Kkf&>Vfw*Z&*#{NAM)WMJD5a3;_iyMGCM_yJK&?jDNcr zD{1CPz6df>cl&Xe$oZATV>BTRSD@~v5yOjYAUrJUNf(?2ZqU5&pXu7f^C(RP4~2bN zkQYS0oi(=SYssjzOR)DARwnlnIP@)XfT7<(z^SJBhcVb&PeCP#N+PAM%0f7e4NK%6chMoIdX5S%e(bm^kbT9oJf2(uZ?fG8rP*D zXA6G8G(TAU_Z_h(8gamtw73)mWYC^M9J}_}gw7<#6f1%STOGU=0li&R>(phydm8tt z@r8a94bvTQiWH%ixhunVH@G#V_* zPm8_4aI&;TwjR4j(L8}nl=(81+bs*>St*8u#5>JGW2sHIK%*j~a3SH*&6txiA&5;=? z1?XzmrY=z)Ltg3RV$0y9Z!>OP@&b0a`ZXKfLtM`JJejr#Efi+oFIVrEUF;;MR+RIE zf$LulutWk$gxr04b5Q~&n1?%0-@dO)QN)KyVj$b$nq)H*p>H2L_(-gRD-<`W8zWA> zOW~R8MgPX9;fjdL6mYRP@@}Hm#5K=vz{1fkMHNpK)af{V^pYOPv@Je=GR1MZ*{n_nyja`(Df z@KWW14^W?0inte!BJHDY*7-9crBwdzC2SwZod8WB{jDMa!<{cKW{Cy}8VmY( z+FAa{o3r&f@-iET9VTZ%vm=J(gQ&os)DKIeo(d~XD&{77;|vzO(3T)4*p|Y!fWku% zoEe8JSIxV6^SJdpFe7!VpG6#aM=tw7I;SoLK5_}Y{;STyEm=V-&H&@733Xz6SGTM8% z_-5n+KsxZ9bq^HC#~o0C>I!XWoEg30?aBDD!Twrnr|o*=cp1U%=rcq^FSG=S$CIhf z1aW;FCL6l%XJxGZwcJ}DAY4UImN%n$C`Y+(Q6I^p>=9Ff^wpR8!=mAqIWM>O@2<## zf3u9nYqmn4dFaDARqy9^Rt>?i=K0_n#We5PwL5$%2DQ+1Sd2uTj6Rs*wlIJr8FN%T zEO?sy0(13MeR)H)Uu~TOF9#xb)`~|%7c0N7*9Qn!lp|=T=r~Gn^=!mSr#=Ij-uHU1 zaaTQ>#?l5PJ)P8Yg3Y!&z`a^mf#^Qsey6Q|6ZkXGdtF?VpSyIFbRaxq@&9;ABS~E7 zE_~i|zAzo5ij`kAIR$do)BIkOR+U_>Ki3(>UXRt3Fd14=h%89{3@N3JzM~7PM|IYl zqp}*c?BmoCt*|+LMEC*7=CSBwDbEl$mP6p$wB1j;uxiH|NjH|CCx$b-?+?0gW_#n! zETitf$$!|Q?qKQRb)Y)(s?E|i*BIc-(3eo)O}}bvdajPfV1MYY!3`Xl-EomGq;UkJJ8t)9=0=W!PQ1!g0eUKz5VgtTLsc;^{o|rJw|`0QyiJyh4bdYa>(^6>LQ;l*tlJnZlQsj(_95(qX{%| z^+>iLf0A>V41Qky`{;61Tr0HeGw*RIGcG4}3^(qYF zx21&9L*HJDkuk7ikL2-n6#ubc$8AmMJji3$IaL-&!Q=n&HVUfJ zYn_Is=Cl$X46Cm22M1JgJ2O{3kdHruL*wgRO0=7QB+CPpap(T5{MH&PhR9g%%(oOC z=A*|%fQR5Z*j4kp!L|i_-mrZ(`20)%h@H$5k^8t_3<7}J2FVk(y!LIEEIl~gP%EmJ zKbR=u;;^G(PO^u)zp(p$?Y_93BG|39X&CaNbqR(hTyjU{asA9=240H3{=B1a*QSz6 z{belnml%TP=zzH|y(;AOWS$(9XNs19(6MJhN%6}H4muxr@XC2-#Q&7H9sc*_z9#HE z)YSe<(xsqFpQd=R4Z<9MkQ(+E7%diHfvWRXm+ciO>BZtmr`JK8OWrh#|2t!S@MmD` zTKglGi45zcv%!q=gckOSSQ7Zk;l;8 zi_Ot)yL;1+&i3Z2FWCKZ8G>~b_5*HZnz-^pwficFCtgTvgFw8D_nFuUyhZj)~(iJ4?|QpP85px9QV8pc7Thielbqom#j-4B`&I z=$e}HRfGu*i7B5-v$B6{DA|C1gepT&2p1{w3&ldvcqBO6?0s!6k3T8*!et+1UPc;( za@SN+njkg1TtrpR%P2$URAl#McHmuUL;acLm+t_u=H2O}qU1nw!dfw=Cx9{j=U{q4 z8*@GS%UnYf!Z<)PcCbM{MR>Ngp9+UqEkJ}SFXo-A%!A0cp5k9Bos~7QS z%PY_(Xymem)x{1mePAvj)s-p8uQYH~YZpOsZnv}6_x@X@(KB)TcdjX%y}DSESkk3p zp~19Fn*vMFw92<00<2AM2`I7pr-zB%Z0*ni6cB4o)KqWBP9yB`S76ygQylx?H(u-CkFBf;RH7z~qjaCz{3kOL`ACdx}?4?IfALGMR$ zoV~(yqivl^GRw*A7RFEtAwbTmakrRh6brT#ro=s@Rp=DwiDK|xJr%q=^|kwPI0^C^ zR65bf_<5#c%*-gP^pL|0r8}Ex>}lPAXE(+URXCf>(39^Xj@0;=HcmY@WuC?j(K0JD zLg0`783!$*2;^YdCi+%(;#Gix1!?~jvpgwqW0R9p>R77-lm5HQ;_h!=D>&kz2E6!P z_@cDQcV6NMYaTB_+KOv{)i?Slj9NX7nXT_iW{iVX+9-_U=wijZzW%u6&o_T)8a%5b z*%VFn(Q)G(C-#%(8eSKA#-uQMLzeTxan<5(c8gyIsD6CWkdzWswj8(_pG?|Sb!H0= zTMxyklw<~m_;CLrUEbH5tBjwL@hlBw5)*>B|1ufhP#MVyhpBrD<|($OmxAaGd{zrLVH z>dWlW^HQNjO%5gj?;b6V;T10#HxhJt+1|Rjslkdg4z{2=5h-qa?-B#2~D6 zeRYg(+@eg_eL{A#5gQljfVQT9Zm9Sdk^Nz+akhD7Ygd0QM9S%Gk0!f0+G(BhM1UMb z6T}a!)KSs2rZ;%;Z@A`^{V%L`>)l;i-OyL0JBA~)48YzG1$RiX)%oIs=(LF)ox4Yc z#ud@_>*ENoa4m?8e?kz&Z5CN#+amsf8*sCD$v+&8fFqO9EZMxPqdF(O9+uGC7b~YT zL{97xRpV3!+^3YPo6d`_I_x(q-uF=z%+(Oup+ITUWvvYI*5|Ohoi^9dy$9iq1fYMk5R;(uFCAp{< zrewV!#oyrrfPm}sx@J+Z#lqFoH+i-K9*r1*MstO(u6`^ZCip z-mA*xGMO3*qWzhA`Ap09u~VPFnMIxCBZgcj)>XQqig0-$Ly&kaZs+iO&g5f6o=enPeeYWa3&X? z^l*I1bd?j*i^o=ny`tst!%cILF+DXIB3LGO?hx=pJdF8-t&$!=z~?} z=}C{VdShcDkO$ZjUr|?{h1SiRs{?WQ=6TF+Ht~4tOC=kVa<11pS|9zY;PTeTb3CAPNy2oyb{=A7Ofb~PTRC^CfmW@cTG{dIv*Xg6l5nQo} z@o8k82?rmP*{Ccj9KH2HkWikW(JzBTl4-P%AS~@aPrpz{P)b2>{?GgA_Pe|WY^RS= z8+?uI82F63jBDyY$o)N_cW9}k8{OJQkk@;ldM)8$lm z7-M-&DBDP4$zL`Gkt{zZY0=^;ss;#bbue;{ZdloNJaRqd=z^b%?~*r(#-7yQAq*O6 z@fQM7g8~%BLh18mUS}5?&d>`8F_#<$IWP-XYB!j8s^?{oc5kmy#?6TbopOMrc`hD2 zP6wXHZtSuF#G5Qn+Qd)2FY4fXdH0-?4-rzMh zZ$B@RmFct*uZ!9{ozH=U#d(7Vx3vI9wai7Z4eR*!Hu~8=0=Fk)JP>04PLU@W0Sxa= zt8z%^=6Y-%x!|%zB~g$4=nSs4?a$=prRwBIvAYD63sc*WWF!fo_lFOWKH`q7x)gCx zAzefoY7I3+oA4vWH>^JZHmx}gjs3)+46IjJL8bF9XM7F)GlgtXsjEV$-d4{wnT`Xr)lB z(MSKWk&CEMIO!o;-iC|^tG)nB$mrY)Wf(;^t#6`T6hE2vTwp?`hA)YJMGaSiWh@kI zyLhEFbGzK?O4IKhwTE$rob5*JlZl3q3}uZAs2}J59cWi<850=Oun5Ovr%n%v)0B1~ z=v?)G&knZD0XW(VxRZ!-#4H~s>*V0HW2cq8iaioX^xcM21yGcxS2T9VD0UU_&L^9lHsq46oXjD?owek5&Jd*ZP!p0akA&_1Xk@vX`G*2#YbH^BzS2te`3c>>JvQ>}Orm9#k(xH&lyL zmf(tml=WL=$>FF?)fF}n?d+*4o8OWmW}-+Y+77_IjBqq8j08>DaMHE&V6f8T-(z6u zk>LgjG^Pso?MXNU!Ld^g;_U&Uj-+55S#7Qw<{bjDc}qe zjlVgMVowEl=61u7l=SBrd`aR*gADM$_YeLU9gA1NI;u92dhRp6T4L1S6XY>pSPAJkZ>LlP8_k4Sp zen#`;YXj*x)Mqd}@Jy@pHJRLSqz`S|c_~z@2BQ~#!z?UE z$K2Ioj{_WoKn6eulwpg@@;En&&^?9|>2w$3dJUa<9dj6~Na}kL#%Ee5LuA1WDm#HR zz+voea4L3CGP#;S-PgrHHL9H8Uc$GoCXEtZzf>1xcEMJm!CDjj@v|cb(>`96hlzU5 z$JJU^c+OubT4ryl8MF6&J(W|2>g38}uy?{R?uuJiiW$lp$l7LW_md4eqEpqv)+r0P=p=^>wjH>`plJrDgcB$in7MzkqU z1WpJHv&p0K5pUg`q*jwh_^}-QF`lvD_vksQcgrQ(62=~`dnF?=c{p|~qi zLUqecqM}(RwmmSd&D<51SLPaL%CU%aDmLj5u`aK(U2aQKL|!ef?73%PaN*~xTvE55>y*NX07VDFq zjc7iG!Q}uh;dG+nR*s+d5A+=C%lNrcS7;7ap`a4{#U-ld#in1%i=G>Pf(eO@LQ!L6 z-r}$Lr9q_7eCFxFq=Pc0TZ+mAG^V{%fy0{0(IMVU?bnZWR5OuPodX6^EO03)~9IF6;&^}#OPS*gV*Y4#F3c3v(G zhJ0*kD*OC3Ro_AS?;j_`BrKHon4w?iUfKD$D>#=XW%`lF z{fa#8g4?w>_h2gSpMS;m5Rp*LQwN_R@5%>){w!In{d@j^I(H+@8ZfY(N_-!H1$$L`+;peAW6%gXvxJSTVE)mO`A&Zz->Y%iOp?tsxroET( zw&-f3Z92`G!-f^lu9y_9a*kCa(V9?a1Kzp)2k3#<1>BnX?gvItXDcM$k0PGylXBU! zR^7HStHlhN^238)!VwT}Uq`ccblF~9!a<}Qk8QpaxOxxt!&Yw3>C5qd+s;SCxdlb^ zlWO+)Y5Y!X$hdcZ)LbIDtl5ud$u>Q_t|X9}^tt7`zV&iKR5h}mPw7(6q%p6x^|f$W zOxF3r{-BG+h|DdwLMLuG)fdXO{Dw+;gk+1eUPS0Srf=&Jl(D-0kDCI0o(iD(_xsF5 zq1v`+T2R86CAGD4VP*d)VLlLeG%G0NQJV_-1M)>x>9=``e``+|ff&?Yq@t9?J z{tRjWLM;d03-_b-|Dov|{38F~uRj@+YqM?JHn!R}YqRZ|xM8zxZJV{(w$063ZEkYi z^ZEWB_y6#o*Id_i&Uv25Ai95axH7F^oNp2|ynQCL+B>bX#6VmaPNtAxxa{B3!Mq0! z(&}|RUxT{A?T8JLqrbE&&xoe?-M;lqd>HC!*tz;kVe%7Nqdp0Op}wQBApW zIKTe)fJvU}89@HkIaF?ru8Hcimw4I%s?M;vf;oCI+JHN+$!&alP8C9K8p7%B`(+i( z_K8%m_(nLVVFdyF1~@S79%O_B)E3ad=!idMBtz^D2Fk5iI?Vk02-!aGtK8 z3+1P4Or3nkCNn(*q4Ak07y~U|HQXuHWPhhCqpPu5Q|T4jYN2YCoXWo)WoyvFwR2l3 zG$T4TW_Cp!R@0L`3WU4(FAUvKJGJ7Wyt|gF)?-U0-Ke{0X2=DZ7ME~G5axrB{a=Z3 z%I54d+Q!68&%Q@7M;7~N%nZK;YtKk%7DEp6x=glWxizF|uA zMDO0@<&FjPZ`lF#X-Do8RUM#!OE2*ed6?Dk^h*U2=Z>K1T z(ok@iPZiz|&`n@AeHr^1*~{6@hO#jAEzdR16l58e-G(4Ba(TXRp1azMv98F>P6q#6 zO6Ft}1leMjO!tT0r{3x>MPAMu_w)R3#z@r-M8K2$0nhFqt*|i3!B7)FK3Qro6=%A0 z-u4o5jAPW1Sv7o(4NNi6>Gtc_bjz^b32Ut#Q4e1y)?0H=fe?`0mMqdXqSqJy zyEwogQp1cGzqJm?TDN>wT8_W@YqN&pQlimD<5A#JyM?7dGM_nbPP6RB4o(b34PKaazpi`mz@eG*BZbPKQhvl9d|u+v%m z$;)*pl7K8tr73FjvRsYUhcO~|ZeZm#ox{-K^{-)nc>xJN&!g?cLR?bO-0(KLu51m) zJ6xSV$u44$B@w3#dyJEu9HW2}vFK~EdPt3&*D&fb)FzzrF;_CJ%CF}aA{D^<+Q9Kt zwze;eJnKou7b$~6rbhbmf!qFz&w+nVHsmb!{&~Tk|Na@c$!z}Y>~LZ@r9qRxuzDu# zhi1;OPDf|&)V`bE!IYk>u2OuwE9$;B2?e(N_t5KWVhG*eBA`+`$Mjfnj;Wh6Ij$e_ zhL>?>^%m2UC(WD!UTJmWMsA={5Fo%MMG*~`zey={miqBM9saLs_CYCnhJwA8-+NEMYMCw_>+pboQ(3lw) zaMI|PeX81xfwzaty&!awFOyN7up32Vg3c>SiTeB$Kd9XPzZam0Kcn2bZlm|N?%GSY zzkoWD67jxmBYs`SKzHN%y!@&1ax`EO;QMc@qXn3OowC*8wc*3Nc&U~w%dKBv)PUO> zUZGijbR+Vp{8$l_3APEH9qTwi0?9S|H9kub3qOD?Mg9N{-Jb=UUZxV;*zWxzUn4%7 zfUL1C#h;Z$9$H7Vki|RcfBOE4OI4Zfg zB!(jbo(=+3PuRq9FGmao?NPRq=8Ink$l8Tc<M+Pt=pNO0yB7X^CW90QsLxJM-0)vclc^HD0jA*(|W)IXvJd4;R1~S+4k>zsiDzM zo10a|xmxiGjJfc@5v!_Zipzl`vHB0m8K}x}{K7DvA^WA7yvBlwpZfnf5*bPg54g~y z&b>9w|EbOt1YBKMKCS(B`+8~m$YXmMTqP50l9Y<@lpxiyxtUVEZ6NgxY5%J;jc3%n z{BdkMZ+#T0w6HzXKQu zBPZYx#t+uVn2nNR9fS%51fMB5VW~&=1Xo`!x63wI@5S_ZuE*QYP}xzO6TtrSH(EF| zIlmp%3o4mwAIrKQHmD*XH(QSS_x-a>cv}+iHOzbOA?m1YVKLKMw>m&&2aX1_)vBTV zk)$BAY!UYq)42= z0H$cp%Wp+lc9TM)58$W_izDUvT>t4#AIO$KTiN303hCaR;zF5#`~vEZa9SgJ6|#^f zZh>cA1^vEM3-E7;Y4VKa@dNH*&o@~%pYU!Yr9_=sk9dzQX5t#l6V)ZcGxgyH-)iz? zdD$;ctP%02?nXlmcKv2y4v$i%g{Cy(m`;>?uWMrSvME(Y>cpn;c0E6aKmoV&xP{M<8ukH;(yq8DW^<)S+6gR#Jc#E$!W#+T3y*_hp)-YX~BWPn8e<|M5$Q9*8~B2LL=|j8m;vG(&%4piP-Iai+iPgJ#5?cgZ^TX+uTdM(9pF`&mEma zWCPn@bvzKzQcOG<&!(1P3HwPc|llq&aped*4IR#lEc|T?TsGGyZp2wqI*i=dIGW zvX7c1;s7YMbujwt*f**pG=lm}yFZY*p0S-PTmXO0*)f^Y* zYm6rDpPnB+HUv^F=;&t|J4~1;K5(v$Ex~d(ldWh|8D{>owTD@>E6LUj0-RQ>nsac& z@2B+#A(JX?&MvduBsmFaS{# z#4m<_%-UB_+FAwuP&_5?gu>fxif!`xxm)`3iu7L>dtlaRRn&heU7Y!=o5eTEk?Ba` z9^HdqPLcD)5)N0XIgKut#N zLAve7v0cqNbUuixTLN4y_QN5%`gCte@~hU|;$;#HCV3958S2#fB9Sb>)DUi{n4h%K z5-)b&p?H^q__6{FHvVix!Z4tkNYQCMO zsq9O`c4gsjeW1`cL#W*{%gdLGETNe^r+vFK7K%u8nc?35w(RB@629pis|x?;#{5Q6 zVvjcC=e20uyPf)gY*c&lM$`Eeh6bx+)$G_}z?Z9ccO&aTk^DlOs8e+#xe?dPl*2-1 z9A4C0t9`rLu_C|A>edP`SkFhAhb=m`uB#Bk7l{xG2lRAboTDIKW$j=c0CyQ|WZDX) zVD|mMD*z}E=#>|gK~rA_PW6Tn)r&a5cAt*}z-wB5~Vz7%-> z1-Vics>ivO6q~B#Qi4M`J+f=9EkoZ$R+Z)Kmg-IaX3ee_wV<$$e*f=%vqA!JS|nqP zhBy03tLAi=Qq8Y^n~Ms_InwW(Cd&%I3c&)3@GL-e98|4|EzTqI`p4OVHxZqoV+&sH zP1V8-IETC1P9&z?U{^2x@Vd4jnXrIa4}UuUglIX7kb0Go%M*Pk-EwsCYObu7Hmgm) z0st! zEaboBY#Q0Rt{+^Y=8{A`UK+X`tz#(~E%!V7oYarl|1Cy3(ybsBdS2deg`7JM)~xav zQom=5Sj90LH0fM)ACtDZ6l)m;I&^i`Tg9JmLd+CgCU@3u^x|bJ{s*%Z`kwp0j5mlh za$*oaxij+jk-HgJK`l|~Q4WEV!n}cTE{GMo;|0N?%)zdGbRE4czTZd!h98^qw~Abc zYokf4u;cTfT30}L>d=Kloi#X_lWq$Tk>LFM&-ysV#DjO#E{O%J7HM_d{(3#5_lfECCk8B2kl`}@1z z^9siDLR2#6-m<<(NMWruxO&S!LTF|wZ?veb!H)07&>Zr(Nho@xCO7qwtM_+9s}FRU zO6ZI~Nj_y%6oRC|+BdoZ>AMx(wx>d45UyXrbF zppaQ2J8CjZiikhZjFATe|4Ch>rpl;moiWW;Nq4E(WH&{#m!4DQT3Y>^uo=5)!rlQw z@$~A?&0*1X{DcS41q>Yfe=p#jL9qSfXv1{i$Kd1X$c)D*&;Ffp_o6KoYC!Ff>}@d_ z6v|v*xj#bp+Opb(SuR+Xj+8y5ZKlOpnMN?QP=PTSx!Lu0bS`>7sWU26NZouMKk=B) z$FG!#BP^E3M!BB$21A@B67ERbc;9*7K)2u=nE=(nv!*VN8$kI>!i5U?R*}j$S&^p; ze^%Wmh~-{~l))Zyy7RJPX;l>xXZ7@N)&)BL4uSUD(t@tY0lb$R(zT=8p#}`cjlT1t zll?Xu?T!hQ;ubR-^U`%SeRMvPiX-4!_U~56d+X!k-PpbDxp6;cU54|Iu)Z>;LSE@~ z-D$A6nSoT;%l2#~5O7&#@*vdD{(0j*i_b$zE?2Fuy=LBCZPfqT^V-n0{RG4t|C?NX zeqTW6jhelGRVc+9+7IWN!fvjjSx#n>?h#3bVqHp38@K}zGf05!$Sr;Jm^Zc6#%vI+ z!KC0&Rqh1-A_;9myC&rrbVsGczP$fBCV3U_Bg;B0-Xyv|orMCPr(g=gk~ZH#jqeTJ zGiQVC5z2^4D2e%u&rs;GO_AH*d(rd~wjGFd6Cwbl?Q2J&+OFJcY%e}YvLu!$ShaEl z+bK$>QsK=*ubr#)9c>*_GXzf>sB@x_l`CbIAcskQZu$U*+3s||y$;x!>;wlK-@!M7 z^K~I>6q|JqjCL!VLlbfHhn0<&EiQu~b`g9R%8_hY&M6qv5+v@)_oHiqv}o!8^ZZ9D zlQ!w)Us2^9SfKk?p1%ckru3(_i10l4@*UA`EP6s!MsP4`FBNcYL3`qb5s5$uwqZPn zqoyN@wBB^}$rM)Qt#>f^=+-G;&up7`YDxC12Wu*r1_WzdK?{|zo{&Q2c ziHCKE1*4hKB(B%Cm2iq`0$mO%1zmeYHOFra?k8V~+P=BlQl;ucd#^dh$YK>2bK>ur zb8yQ@;bo5B;}4Tjsa*#nT;i@>h1XN8|9lEm!V_mZeR}w6bK?-j9ESK!9N%sv%WYj0 z#WHToy32G-$adBixnq4;M8feg(br}INh^7%;F)&f9FF+vC;X3C)*!#tK@l1|C^Dqo zc#k0w4?0r~g)bjva5Y==^3s1dEITcU6HU7Vr@AM7=d1n|4nX{npw~wvUgTU28Krc# zbcimr2(^>_`r!p@RE!YX(vmpTd;Rh;^WhMRLLVLGqzDf!f_qh&;@s-+>cHu^siP#E zBkH5ETx+QRt4oamYxxt@H|d$m%a5ixgZiyk<#^_ra>~3G}-kI04p`n zd%)!OxvlZ|AkDNT%yI9Kli-4V1@XF1FbcWM`fd`wWsd7XG72vbb)N+HWNe4ruV2w< zWXkAdZ$M}z(VV%sf#l8u0ze3Qqn1C=O2+Kfld}4rYK(@xJ-~mHSvMKc*??U%U3tca zVjO*oqN6En%r@VXY_QAYMK(ssX*AJss0Ajx zx@*?0QaKX3IUgtx@#c1ufZNiIGC9ev&zBu0JQV+n5Dh9I#**e+>7OLDzN7aQ_O8BX zoJ3klmto6#D?cu6gmbv2cB&Z;4#qGE9XhEUwjMCq6?Q=k_l-OGh2RQBWdiB5*;;-3^jWYqafaH^L8WxIBH?>C~Z6dpF5c% z#`^@Zla5VbfJbi4=g6eRpXAE6uBEo?_sYbgb0405ZGbq($}Luoh{u7z&ndqtrx@GB zj)dVrk;Cpv7Kvou=wOc=2(k+xr*@_ksumnNV^Eb|^}kNAdmsAHl0z2&%V}YYBqU)( z`=W*f?@ti)%g(Y|{Lv1B9J2^;HR+LVkiqU!)M@s*0`u}PVI}(EbNS>IcInRR*0-}N zs5mH9F0NXo-#C2E6k25*XnAS0)&cS76YVGv%d!mFuokMA@cTA> zG&g#ENoG%C3@O)eL)m(=#02Se2iQeiVb#ZLKZUucQY9R%lbj{=|4u3i_zmAYAJ2rg zan=IA9Q3E6wfSx_wH$bJ&!5VLV~;_PeO5b618}s3Hy;sJkZQ3;Q;a*zDK0e!k^N*1 zkc*rN?O5Fr``P(Cp(NA&E>*8Or4map#ije%{NLeGLc;yRxllXtB-@$)3-|}kevbQ7 zo+R(AdvjI;+i7LV)Hf62+Ol&fOxm2v^_L2|zY4lQAoly^!5uw9x`#KW%Le#VNSLnGkUa>GC))|!N`kuVzKyfrXdgO5HwAmK@cprLDr9RD zT_yzake7i2sa*+*BqqjeW($dQXO1IeVOg&TcMx`)FJl8Zx3Gvv_#C!LF5VD~%JE== zaSj{s2?^ynXJnCxYFmb@4cQ~|&)OO*<;v8X3#FGEn&4PJG!5XY+B zN3{qZ{yuekx}DWIV=RFgkqq(ItQm#v$|cq&0q(H9O&>2Wo*Jiymf|slaj35QBYjRc zaFs?>32Oj8bi0BdnHCkv`z_+F!xuUD`+cpRJBRJy%}0OpsA4*JbW-z&d|9OR*#O03 zKC}NuyslNE*9_^#qIDd5iy#idUmiysKNykVmAV8B?NJ~$Y<3Jkp*Ck0>guW-6GYpT zD6sbIdRxxf-gh@nvpa^TN94qf7*wqU;Qt=ArHM_U&TTaAWY9BGqVZdhm%n$#3e0Yr z#L2-|qCa29?GvU&`K3{zs5`B|!f4|nSE4L5i7gmIZj*e!?yPU(kC5e(_d~g5UZ^vX zzQkq=MFE4)gjYYF*pBe+ltTm8$X$mXiOrzz6CB)}J~AP85zTLQ5keM-2F{bBQgpU8 z6%poK)?IhZK}JPZE}a88M-8fp=+c&nT?L1UzLIYq8#=Ei>Xl|tE$z_;fRdqj$E%tetQ}yw52%L`!6!^bk>Im~eA% zv@leIQvUVjcLb5(?)y|=z>z)MuMoRfU(#6S7!o_APKgQl4#BRR&$I|4QxZtMB^j{Z zvsz+5gvR(~|7BjBO_G4*3V3=Fg13q zcXMCL5pZL@hZid=BS1mK#KY%dkG7HUoW9O8W@<oMP&#Kd8P)l62LH9Ci zHJ>AEONlH8wN%BEyXs+@GyHU>+xsMbKlt9ZJ8Z^k!q= z@{kHlv#`jvSk7%ucA9!Kv%5_0e+ZE6PFd$mcbnvK4boy3!@^2ZvoGtn*wSl1r-;w!q@Imacb*p!HzJ_?pXuzn ztYpJFLR45yLZ?lX0d}d%v-#k>$>Y`?R|`XccrhWc7+8ZJNci(Lw^;6ww?)7y^BnFn zLVG;)%&WFS?q9^wc2i0|@YRMPSFzu}CPE5!x zmrAdQ{WO!aP%s0LVTPYkE{m-sXoy+jZ{&Z8rT9m=v4YX>E+7Vb#TVfcjj#LWoX;_3 z$mA2PSNvWqIhR z`J}>utTH^9X_K$IYO8y(_I4{uwQxD^8%(`bPz|_AcT06I66oZ(Uq-hd#LL|;I-tKm zz>(=uN13EN-G9l+7A@W|QI(pQ3)o5pX}3Wg%9(;HMm~ROo>JLBW7#taKu{ZRhqlL4 z*BzP7sX0+ju1amOo3LqoWh1g5gV4A@0Y4yDGEHS26U&a9|^T?{-hk>yaY9G>%PEkFhE6#x=Shexfr$56vehG{ltNFt)O7BQf z%y@)7d}Le5Qc3UoPf;YQPn&@#L>Kp_1;WHyJT-T>&l)^Wy6FF4ho41b(iB{YRLU{k zMOV;%kNboOo;K`gOGY75-rmyUrF=fxrp>q?ZYtIO+*~?t%kW$7`$FKKO5?ZFfO#eA zwC@d&vIz>^vMU=0=@c7-VP1M=5O1n1`*y0qPZ?cm;tFOX+-X(0b3kXtfUGf z#ESoJZ3&X|NTq)L;}7D(#3B@~uLcnY9e+}F=mio}hLUR%-$G4eVbrIO05No$ zd-;Sjp>E<0G|^k-Q-1u>#Ha)sb+}qh9hq1)NRvc%qGvv!{Nu zA>s+mtTzyF)y>vNEmw3)kbZIoXlcawS>C3ulcY-z$>d9#1iwuKzH`xlVkR}5QPZSW zF&4^wQnPdaWi)(b+M;m@uh7FBb|l;QgCtryh9axGdzb}}d+KH2L&xvhftQOOW6POLyQ573 zpSx?igZ%eDmxpWGtYbg?Ci8ro2Wl*qzhFeyB@VocT8w=aYY;@Ms}`h0x&WMb9ZlMx z2Sr2vr#ZJy@&_W&Xjs>l<@?=cdBVGuZ-{kvI@8C2=0Iv6R)2J;6lD7Jg{8hH>}ABP zm6R&v?))TGh^N2qa4+d(NO27|2N(k{*$HGflqDyi=NjxpzsU9hTLKQ2&*NMN(OwXq z@y>y{r3cWSoClIgb}`Ws-)0((r7fsvp1NHFNZmnpvo;;YS7uPqlV;*{38z+;jqHA_|r z)vAGD82Irg;PF2mPpdj9EK}kouf?vH0kZe2wC%l-!TDXKH0HL!qF}?CG|Vp&e*m40 z3>X$EUmj5s0gz#{^{6vD{!5Zx5|G|$m^#K_R;8OS5h!2Ej2o+Lx|t-a`oH4^&OASs zjIeu}{%OL*ieQ!LnQX00s(!z>IeMWx>M*b0o4i@}EX=p!r@w|^EC9B*Jb{`=w1ruW?9<7=3(IjjqU9NKKGD3aD@LCu8ym}KMz1hi(vHZfVQ*1; zf6>9p0+0{XqYWV9eEj}u4}fR&pX1#(!aDf6-|G3m=Eb%T*(tr=V<;5U*Xyn%OX0;z z>k>~rF;%L@MBL*29g5jLv%p{cy-|GyVtvAkruVLD6 zFxubabbjOxI>UTqM0g1axb_LCZ5M#UdB~V%`S|p|4U3_dZLfu4;;oZ4Kh!EpW+BG2 zpVt?gE&WDzUcN}F*mXd6o@Y8{DRRYGOjglUZb>m_h!LimJ(JfVYYITQPQ+QVo+Raq zo)i6|77{IyBgN_5pWU2XJe7()PiFd%C28 z?z7-8t!oYOkJ`ImkEc5Hmuq~MPBNjEdrpqAQBDeuz%>?0tt&tRb3-)rv8o1(;h_oQ zx;4V16RV^3-kdSGS5)w2qt*229Rb&QcOPg`9zR!~6e-vwL(s!^#v&us&lY;WXN-9r z4M*oII({ikU3R#MIDP7u3S|v1#p*FQ-qnta_R0xw+apN>+0Jq#c&oOjLXUsv#N`Sn zrAq&kr8ML(6I~C}jJ8-@_o_G?*~B^BSz5w^XGr&#d+8W)fvxp44ErLsabs z*n#W_^o<@EP}38yvKPX<`C)+_qfeP?T>g;wpv@*TeD#Bo3IleYp;D+tn)M*Vek$zl zgx%6?w)bl_OnSgDHL657J=jA$s z*h3%sSQrwvh~aU=#`MgUDhgk^8dik&<7MFWF&NZ+ch+MXzy@kL2-!Kv46Ul>1D|7R zIi=p^z^Bw3x6z>a#P(c2(a-W%9gnN*B@-vGWg77TY?^2!sU$zU7rh^lFdYvX^?_1TL`pG4|E5$#aG;AQ^=d#ajN`Z+0G91?0;RwtHFLRow2lRL6cImdC7DZsI){+!_8%G`)}uu>C@;YIYV& z)L^y3dgg4pkRa%I)`50Ou=P9YVw_13wF5uoTw@Y|6-1b`SprBr)3G$XU~r-!#A6S& ztNFfzMJr6@k1K8vQo5G}d=w+%b8LDL7su@WtVV^W_hvb1Q;BE|4uR{PWjQiHHqk)F zXfXYm`H+Av72Y(uT&*7~=3YA$PUjbV9?mKzXfC~ax$XPBp8u*%gsG&4 zz-IQR$e`7E`y%`JO=_a=nz*?_WQEKiUXk$U^cV7t`!^_$R%05=(EWbDr*6eJe0%X= zAM|$bI)X|*@C8Ht2Y9<<(`{wtQOqvd^kuvLEjvN6Z2+rt{Q2hwGJ9esoOu(#Nm;HNL4x6+1oS2>5H zc%#%bc=%*sgBm8JHjHDzfo`&{M6CqLMK9^8fF&iuoZi>9P8+i*jH|e^-X4)6adbqa z2d9%`Lm^L{s-{3Ow$NZ@_<&lbP6U!P*;zSrVBW1#zh?`*x+HGs*5%}#-!WvfE+>L3 z(AL*<(0l#)@tXf}i|3n42C*tbq67yVyjRQ$@EZN>l&a5hJ{oh(;l4>1lz0YaIqSua zGvAj<=V93^tcwQ~vj;@EjHusP4La$y+-Cl7mhz3q82fmngplc}Z~TU3-a-G~ncs_%3&{_oIh(=m@zOeUooK1*x^*=zp6! z%-Ug280E-H)bx#>#6KqhiFtvmXzG0>cM+%Y&|HmRL$il4Egw1e(A`uc017jN%$fsb0ihCuMG@fGJMRwK?8 z=RVTo*t}wResUTF%u1s+(b}jAeaHU$ofQ5*{(Y`|lXm_l7nq-QxCp#^NRg)tBgUa= zMNd}8P48gd@Z*R@aTMvpdX8jHTAuPR75d!}p&Oo2<~Nz_GG~T{vO~h84L*yVJ1Gjv zq-xH?7{Vl=!4Gt*G|~>BZJ2DGh#@YtnvHaR`}mSX!BC%g;2Tk#>QL;8x%_s4|y17`s(*iLRnnWEx^Y8HlLd&;ylL1Bfw|P>!$kfRl#%^z9 z&$AI|U|KRrK7*$;$)tnTLPrta0@*Lk5__IGyzZ>R10BAm$7mFeXOZVed5b0cPd8mv zb_{EyHqe&d)9^|UtCDtA-L2(>#D63Be{=Y%WCcxRMEM2Y)8I=56LW(eqZRAml##p? z_p7q7#vcW@*KPrjN@oM~IRw5(A2;s@A^{5|clj}t{06(GetN`48M*E>HO(;Cw2mcx@?`=0eb`#~ul0B91o3bA~9(%kV zbx~45o|Z!HkF~eA@gKVn4wo6_qW3m!=a#IGBQy~Pb+DnC*arJ1fg-j(^mr-zJdsdG zb`busrhy3xlX`Z@)|jM7(-7i@UjK&a zKba^X0oy&LYJDo)$sAtRKrNN5#<|(yUa`bwHRVH2@a#c>pH->`*rCR!QOI-}MiI}q z8xs9?`Q2YN8%e#oZh3CtZr}9cHn|I#GX2G&$ks@>kc z)nyp7gN8blxES9G70}^C#ztiZ;oTB=M$pS!p8Z&0QtUio&0z=d^;S1wPTkYx<|!?n8*lZZ0@XXo?F+E70irk@Rhe+l$t( za43fDS!yD(Ky8$^fO-CequAnhc*Ox`#t)adu0UQcO2=6t9N;sH`L@7Pc!&4#Z-#mG zaV_xH$4^Y!-|h%{E-wL=@3jgJjppk{z_-3w`lGHYt2?rX`2%d)cE?P)&SACgh!uOP zFSjDEgWAV*-tY)^pTrU`kziJ4mHhM5#G6W!UO6@QhvU;BH-qumWg-iC_#WkykM-HY zmM@cO*4zvT??bV$=*bXMM#{LQR(~*eXz4s=vup@W!g#8@tBev33BU7h*{v2#Rq@7Z z2Y?GA|LCSwTjqwE|6u7-5;Yy(1d8(PVM)fCIQntPhqeR zWIA3}$dVTgs`GVhpL*P*1Aum=+|y@Z=U`SvAkhN-W3f1E0qQRBHkR~Ij$(H8L9m|6 zZ+C_?9`Ai%>Eacj*j z9J~D#m5;)X0#F1`G}$aDPL&$YF(Z!>xZ~`m!(mYnjGD8Lgl#yryt%aB-c~({Ks)P7aX7d*7c$UGLDJJGyIb}4K}#A-4BCIV@-IYkE-p$9$===)|1 zrK}_KPM_H0=%ke7JWxWE(IS4K9_@cKCZn2 zTLu-$_@1AS@uKheUPjBwaGrKGYR8Tb>PfGi|0w$G6>qbzaCPPhj}-r0N_Kw(s6L#)0uU# znEXP{Jt55;UKR%K>ARt@QGZ&CcBxC3^m1HZRG8_%JVfKYhc0A`n#Adle)i+R3$7wi~ z?(f_*Nz8~2M{Ml|9zP(q$2MVb`mRTVtZszQ;*mBMO?@EMUkKB{Za@t-G~G98vs zUGmvB+y)+eCFnwTV$~NKVj_i%W4Wp#4-km77;t zGv$o8+pfmpM;i_|uL3zi|50M}N$fVW7&&2sPRL{}rn90T{Ccm3y!U_i@RqT8-R=7E z*Y}5{&Mz99oCF}}Av zuS&J*{Tu8YqZ|eK*7&`;1O_)llNh!Us}i+oU8I5G@Rdikuu&&f9t+$q8!&bB35y5qnX*5niu4 zYr~_GH*m*mCTr6|KR4XJ1fg%_!>#1OMp}uw?ig65i6Hd)0~RwY55ok2Xz(X_VJXUr z!a;m(7Kx9lGnvgky4VltauT!hN!{bUhDa@m5V1tqk`3olqU89daqjVzvMBo^HeIM}6*l+iO)@NW< zxH!UxCWTc0AQA2L?Ju1)Z49T|!mHnq;gNt5&vC11$}fSLYp$cG%o&GGwuUj{Y;@ma zQCt7B!lNX8c!mGd21Vqpp}VZZN2k4HjClN@*oVwLY^mFI-Evk&V}d%ZIp3EN(xa5Q zJ)esHZa;h{aiha~Q6^mTL}VZGEi9cEwe{lG<7#hrQ;ZovdCahyG8Cr@%1~5Ke!kxr!*g;X)1>ct(%J~)p-1l2b84_WCN(^WZ zCkWIQAOwjJs3)jE1d}u-?b`7Ov1bm<*rpcA&91k(r`m*_;`iUrsoLf%HMuvpWd8G5 zj*wcQ`hrdxyh(pporX*#zRr31+%B^=X!2^COK#|2(VPF?6`oFxl;Vt#Jek4+965pZAHJ#KdUT0PduW z4eikVzRQ5ecP~TN$!s{*W4L_at(m)EJtE}glwk=Duz+ucXJwKz*Q^Uj7Y51`46`Uk zu(Nq@r`E-}nuj810FPaw-uQb307AQb`-Ll+GGKt6D5;hYN{Axpe?yD>2 zAFsqpj|9QyiWtwI?Tc!aAIb>2iLAQ0Jb=z&kB~}W{XRXT8gh9&a|3hO^cqV1of3{t zdZw~O^o_jVeKLhDeyt(EuO2%!;*eXA%xhZ|s0D$qxoZ2vW=v{-zW=#Bq0VEli?Ltp zyvN${*`^DAa^%G8<)pxW{J<=ZpKFf&f~$8VHOo!ko1agW6toh2;u zCVKeAgxY*ToGP3#!XdD;e{!M9I;hP*OHkWpy9sTkbfb%6&StrJ)1vITE69|ilW`>3 zgTft|_9Z|+X7f9yhmw~aX+gP@|M8?L67=i;mX_g9inRX%wawog6F*#34m@wyw~p|c za@%{ToWr^t9iZH1p(Be>HAkX^8w&7ugiG@|N^2Cg8_E;x2iF~bE9^yW0w6eh`$xr{ zzMUomMdBc$-Abc#dwb(v8*yk(_;w|HvtHbwg4UIK2y)*p)a%$|C6xVg(|VM;XctEs zdRII8lFC*$Z)0i|`c9MfazFo3+A7UYGvX;w^Z2r;N9nIuTpa5q_HlrU>&+m?+T%0) z(?PkY!<%_fyAmE-=4FTVF%1EZ9{5BSwhiDNzoQ8L4&Aw)l9{BY2YzsRKXOv+%}e8% zi+m!3P{>Fhou-xGVWCZA+URSNd$gb-Fj7_nk)`eVZ^6Pesef{!P(T|exccy86gVN& zFmBn;dqF-yz9a_PI3U(XmB3dC6^69TfWVS$UR@dh==O@s_!{M{3(OxJs~CUw@L6$6G#H zIZJq~1Ho;;yrZ6vTW^{2MZZpX9#TEVrofh>EcwEa>VDbvU^Mx|1i*Y;h@r3xed-cs z9|EaP)(N4kB}FOeUi!tXfqM|bc)UFy3N@mh{r=_G8h#u5B>eDdjqhKY%2l!VF}1V? z!tR?`-nJo>r~k0u&H)jdmf%({yspS$HsNh*gdJ?%<}NAK9K5HVcd=o^gAO)bzpv{t z67M}me-nI?r>u;zpT4JBnsEk-HL02pdtVC2v*7p~H?0oO6FvCoVoL1wZQ%d^DMQ`j z*Avg;aU(5h}*KunEyfU#Y^$x(BkgyTD(x)-3jhaad&rz z0>z;?#R*W{3B{da!MXX*x%WO~zvOYx{^pxCOVGi5U}Trzv9D+@a6@WJI-j&C7_@6` zX6=dPD@&q6tjv~>#B9{h78! zR3=Z4{OgSZxE1?mVohMT^UrNTV6FTeDP9)8+HTZmaHF$Pgg)2ZlCRZoOJNePwlNq` z%bVc*FP3J-O>B26%5QUxRt5_?is&OCCZj5GL_HzRVuWMkbp7gaUOYz$D5yb#5-A9Ix6-iRKMUD#{H3B5ehv? z1V0pfW=>4~4)FL|LQG3Q-2Tf)9MT4mVYj@|jl?;Wu1CyA6ft5RpW+E&3kP`0%OfGi z=)Pp%o3jGEzQzNy{xe&68vm%>VC{^ud<5zTwf$C^zsPf9O_O$?JgJ-nsyVsbd>(E5CSNp69^ZECM&pH4DW3w7Ysc$m%TxU-{nb(||;53x9BQ>^#__Ebk`45?JHckqI z>csiiFsz<8yWd2858zm}zO}r#Th5|Uc1PT7!d^AL#34fBrj)dps*y&j7A|f>;jBNN zv_=>fcIu`$MIwN*6uK!-Nr^X`B6zU&)-v4#T_2n5=7dhIC+7}bu<@!-tymQpEHy1& z1KcFZzYm9jX`1jFod>P5`!%uA**mxnnmk_MKnI(?7s73_31n(WlHT^~?asVenE&7z z+L?}WkMQr%tray_loj29=Byc`*brb|b8#Oc&9r_HT11SR5qkXj!=at|g%H}CeaSU;Ow4Xkx36CYBF@%j>1bSB?#9`8*m|8y<}5T=_0qcT zKhBP=D+@OT_&k#)&4CReLs3*#IUr`P&-!1!Vi?4iZc=;`C2-a|lU1p3u**^-&g?Z(TTiQQmI4#7 zgNJQ~#aC8*fdclLBdq>~hh#4^Z@O96tOi~8i8f6~))pMtlgu>_R?5uelE2hPm% z?Pr={J}L>=mhMiIfW&>Lny1Th%-DjA#)+obM!8%m(%@(S*4P^Ig3QeAZ9+??hDG^V zw4@Fc5a5)H=SFm)3{byP4pm}&=z7}xMO;`_1%MjsJ88y%@3c7>9H=o8e|4wl^kwVy zrF4G%I~RHK(B(7d^r($huFZ&+dTaO7arTnGKt8@0vMj#zrN2Y(K0q63U5@84hotNo z798R>X`4#@<{$vir@C#aPByFnqvq6`H2CD%%%$OxsF5j@%MK(6T25wSM4Wu2smSG@ zNN29u!^E98JS9!V4(%Jno0 zv96+^Y2n95r0cR%Norzm3pQ{~NoU3!iCX^rBW0zzA)O^KEMwby$9G8CQ{9|@E zTY6L$zn#~xb-&<>LWzV{%V4*#(c+f!XF-2NhEYR`9mqO%K9inP$Ki}kX4j}a1yuVo zc(T>umyowb@@O9mRYEWGRhiAco@cbBEQJ_YY@;j=k%~ot<^6Rnb>mwQA{osTj`uEx z@AIuv676tQ7q^o6xoy;cH5*eKO=t{sl{gu`;|3B`htpe(Qc5_e;en-Te$j#b2<-$H zU1~2BI2PB-&OYA@F(K(Dg{S00>dN76l`IICtm?y?j1Omuh=S1&6vZh+T*JHZ`i0V@ zk2Dry4@a)}bO48`G>m-6EAN}9F=gE~9;3**edGt){uWkY_Fg)P1H_ogJ4#bk_{ zUJJ?Q`8A$r+}R*~#b%xr0qgP=PPbDawnOMR8Hn}!=zguS{)$Cg^^~7dLT2J~)+%=W zW7+_v{|+S<(bqfBAxBN0!k&1lY9<=DJB2!L{(Z(QC~(euw9r=+_N++A$LdXB?MGxt zr^N|!DbDNDml2(`_g8ai7M-&1L-aFnB%3HpY!U?ER2p%3XX<4#ru2WGol@&@hhZ5I z;8`UV|3eevaHso8c@IC7*m~xU4fA}xOb1<1QS{Aij{${k%`^*b=rwQn@$RI4XWVsK zgc{?RSM|->fO8ABZ?9ncRn3;dSn0XM^Yy_J1?iv(Cj6&gPILkVv*&j@Lx3*|(s|vP zze5ftGso^%m=GzxE+}0v6V4GOthPD`Zi6s0N2^9UV7}Q;_1$-?HH0@V7O+DUw#y=d z9GShJ!VOloT33+{L94P(ip6laG58Pc!RA|X~}#Q zOTMvmo^tp<8;I@o-LnEe3Z%|e&lG5SdcmNHwgB-HCI8*jkvwp&CnX!O&Q{8 zf|U2tq%s^es!^$Id`QuveQNZI!;20GY-J_iAkboiYbXp|;cT^Yq}EF~I~i+q@0lXs zImqN`Le4`{p~>t$Sz?b_*uZ}$QvH4OM1At_Fjq$2e)lHn=|!)wW~mYF(*<046scO9 zIb?e%ff_>jUwQt|xymOvPcM{9Ub^uyIWAL+oRFiG0 z(C=}Jnl-yQTViEyS6$tHLVgo|eSxMPhj3hMm>q#VV6Pa{^Uj*Zl@hQ0efeaiz3WGy z$tu_88m_q(A8LihFqxZG;)|FRyV%e^IOl5!+Ii)mlLwgq`bU;yLHqdO&*a0)lfeme zeg?y)n-jmc^UgW*tz0@Lj^#!?2ZLREx>BVPvVj@^-A~i}9d1|fENn7RPBTO^E(mZ* z35kG%-c@Jfw|3-PO>yN|%0%8f8$9#BRyFDsj@!$_e(3Lh`9fK0hGy#Wx}Ilag0Dr1 z)J6+MCbfDVTk08=KG>x{-Vz_)_iz6`Asr1Py;_x{O!nb%%%`Ajr4!vzg{(SXjE@ZQ>FoaO3Kd1}Fk7{Sac}E{p zB_L}fBgw3SfC~Y}M2{m85H3$B#JE+W#<8u;{=CNPC<_fIB8*bi;S22PdU!nHFouXB zHe|~1WOpCggo1$slWm+CI*G=ME}ZN%LJwPL!m#tni1baBdgH-d;+BZ;RW$pc#_a9r zA63RH52alwi+V3lHd;RVQ$TR+;b&L_r^WJPq{(TGnKYnpw8>!=?V+=z!D*_prDLrLT-0wkLWFrV_zj(XjUz6gdJFm44#D*tl0%mr$JDgQu3-e~5y>Zi^kWX;v ze2yF3Sa=Fkn#NA~D%&0h%~*3<+pI-~3gejadxw~Uf^dY5&TJX`a>(xiLDa4_waT7i zIQx`FKr!GK~Go-4;i999&iU>Pa z8_EH5!autKtfjN(n$$r3^GC{aw7z%8?lYW5J#IQCTR$AjS3)S?n69_zD{>pJ8Vq|6 zs)~j2^E)K=vbelJ7GtKy@5{H-5zRqagb~1YP~}JWK}gmYbfiMYjAqr`n4M7QR)!9z z)wuiCLp;^&B(plco^Huc>eE}$I&bC9#K!bvbpdG2g8gCP8#~yo{kiyhZ?)cte#w8Q zhQsgB*v1?wfaDtN;5ed&kC*EBU0?As*(S?K_x88Y0{!fR7J;t5*I8lK=SN({Tdu9&} zQ0V$s5~GjdktL+n5?%c7XrxB5<#ly(oRLA0dm=VtF`3>hcC+vh>8i?HkfN+_E|rxu z5B9*+@<}rDdn^*Y{}yaF1)Kg)S>F;|wru)u`+kOxcWk7seo zx#xUqS;$#200x(|szg7`eS*53#y@~9l-<(Pu~gQFVj0s@NB~g{13ZlIqb!u~ydP&5 zSW6u_B^v<;e=2<#kU@m=2mf%hq@oKtCD@<9AsGEOm%-Tk>b}zAn_<7vsMADvyjW9X z)*XV*Z7Zkb+Roo6jJ(Q00l)KAIv70`K9Wy8A?Qa}am~VXErIP~?YDVNQ$t9_hBjeo zQVfrV+OXI3{r*kFL(bh=xl#_0KbD!5(e&d3V|~}GtwQ2mCYqVJu4Z*9i$SM##kdUl zKrk9!k!g?C93Ah8B_%owMChRKPrB!}lI#zrfMq|TB!T9rXpL+u%0Y^UNp%&Q)bTc_ zE;VGSTxg*GT*h^vTA}I0a-w6to6|{^*a4JGxpE4K`Q~U4jVts7J!2*)2&@ai*!bn4 zMq#pKXhbvBmVy^D$#+FN`LE2VBJ*?|4FnlGk`&77(J=pMQ|_b)(_+?tE;Um~YKri7 zIU`~(Gt_PA4?)->C7$EvJXm!K|3&>V5=dBqepOmVgauw^A#T;puBaIH&0Z11M>3Yl zDF={KxoT?9Y=;G;8%ABklNkpiTc^w1HuZ%%3Ml}{M0DRfkWv3{vwp>w*4K(%;PH)~ zwT>M(tF6}|r$*N`<)1ZI*GT1K_a&soN2T>(=wFFmu5V!N_Xgekk!2iGqp`b%g$12# zr3!kB?(iJqWx;)2$iuU!LR+PDFjJxPh1+x@F+2$oW?oq`Q7sZe2J}CBUz=af6n*LM z59a*wUjH4SBLtE^00Anq6TZ=#ZO)3SmvOhAGJnC?KMu|%ClbNS(3 z@n%vAtUyh94Zl5R;u~8jqlkXQM{foYB~Gup&iDYQtB*)p8U5~~AJ18OYn=f4{zJPM z0&n{1#xL2CF6tbv^vok_RuO1d2qN-J1~4qObh2W##de~wKXk9`pn%uR7oOC~8pr)) zu}MQ-96xl<^j#==Y}>q3&j|4%Ll8>s#;9W`ew1SPt0h>KlTMFmp2is2ghYsATHyTy zTZZ#t?CXDFeprI*OB~)g3)3P`rx@UDZoPLAdUfcyDRM=M(k=rs3_9hc<0$aoaN7YK zlL#v?GpYfoPG4x(+=|Q3Ll3k8$svHb_U}X&?OEXiR5;n&~p74Mw!J3iL1`rbv|oG(ZUG}|$@B;!|?#FJNv!G{PJ z1gc54p1((=)#bh`b+uCocq$09#I4;tWULIz+6ijEzsORHN%^`Cm)wtrn%ZZ9e|~3nxkWs zMENhFO?r5`H4A4X^BQdE*dJYX!W`tR=sEGi>p=*J866eD_p1Ch2*kS93=fLnrTTxD z%;OXESf)1_E?(jn`;f5lMp=;GzoS~1@|9k+f^;{BH?td;0xhW~4e!s`?Mi(EEs>BH zNT!(FGIK0f6vQPvg-zeOswE;bwcn+rtz;WrRPQ0e)*>UT)o$rm)c! zu#>sBX$8(?G0Hs9J>*h!`NUB6jfk$Wrq}}K*1&L(KqEUaj2(7r=?p!}^XQ-pK@|@k z?E8?B-^1Hx?0Xrt+Gj1=z*PMciri`PD*%Gbt;d_AlDBgE=56IXfg^WU=Jniak{fuS z-;rb*3X5^9(#j+FaQX@OLj3HDX$&|lbNpj^xKPtJna?lT>agL_0Py=TlQ>gioqLCK z*PSvPt9E&nRZ*bXZ-q!0qKK3+1Q81dy|}1=6}u($+PEXcAyb5Fa3Ah+d=V#&H!DaE zWzdCu66b65c#k?pn)Bbu)yKoQ|3MObJBfit&O>-}n9vqQLoGKLrTJ7kV*J}Kc3${c zDU)9<7>JF7OjgP%VkK5Z2fHz-ZT5ec1TV+FR}*_l#qA#o%e6DHLy{V4QCJIr_IQUr-@S^CmZ%7QRuO&*napY{T;4yf z$uRr`&gS8BpqD4RYVCMhEjT(?WwYd z*pB+!-5mGm8~z=CG71juw)}x`2&XiA8z^UODKXetOflR$LOZ!HWv)t~1_`FGvhr1k za$96mIbLiGg5y%?eQ2xi8;rq`Ud-~YwlGs^p$)%nPF0(szdbYNW?&KNhY18oSvZ<~ z6aRrqf0VfO!LQ~#oyl2&%|*#Uv07b`SL|z=a+i9qMB6`j*GGtUK-q2Ql_j4eswcZ2|cxH z`iySlyDw63IHcqJdM%Cy9M%wmw_l$cOcrB_j=2Q4f2*OgoUZ91uvMN*h&zKQg;@UD z(>AtnaDcwRLJP|!T;lnmhULCrila%DzU-7Mxz`scM+95BRvxmI#yn2B2T_|*i4@IJ z<->6wso#8WG-q#*E!3ZT@7$-||6o8PS$zS3>DI|yU6m9{pP>^OcEsqRXzRS#4^?6< zeyY^}Vgay4#kc;I$@^5W&y+vGh=0j&99mQ6dL|s8c7-h;uQ~AQ-$=+$3INduX<3fS z#N%!!|ASxIpV@pD6&C{G%qz9p@~6u9ZjWLB7*+WgKJN%|WwKOz(=2bCw1w%gf~s)h z_b;YlF$#aol#{~a;^`3ZNSHs2bn&}3$0u{TRuAfCccPs*sbT%lYs&|<&ru%*&~3qp z`DV-l-|DEkGZn3yO$@sgf0&KL>&CkUA){H-3`ZjnME0p5vdm~xgSL%#9)jIC;J(Sc zgpt0JI%ne({kLqE4fJ@_v08~sCi+Cbl`f`dyJ?$bV43%DQi1ceK7CY6<;$pDeQ(_v zA6d*qDgE5;0`D7RT)Z`%gKkTzCUf=##@2JEvH+Oa+vV0Kzu9Sj%+j?7=PCO6#NR03 zrY&riIH~Fq{DhND$yORs(JS6$B8cm2$)eM+sufi1j)SILxOO?^^!K>yVsSX-BJZS1 z^(J~+%Ci2_Vv~W9@3(%UAURwr#=lpag`n93yFApk~^FCQh66k5pO``Js|y#~*4 z-#Fn1-9hBp+0Md}&i9+PR6{>=>_-uM-xneL)X@X(YqxD4#Va|50>}z|fL>yLou42k zgNv1-QuzN<&MQTZx1s34eqTRhNB&;z`qYiwNI39km{0mjI&F^w3FM~n3D0^t`Fk#> z^D`f%6$xopD)ES>dz|6q?JLdXUTz%RVOSHvji0%9n{8PE#z&4%Ams;(aZNc9d{$k$ z?x&j;$Uu+3G-P1&FGNBcVS#^3!>t+pBMzPkOG$`U90E^0z&xIcel9kqQ@oVLUFDK! zs!by4q;%(~TOMqz&j7%S0FGym%+h&Yub7gLB00dOko7UlWqpCAJb2Np`~>zS zj=BAN<#Nq*7iZE1o1+a_Qk@8bzd+7OI&8s>(|A*j+Wy{AYvrExXe8Dj4Avchb8rV< zlJq6Pa=XNFB7&k|;k_cMS*i$E_`#?q#@i6+ln7KPi`^mn^!{&*gfLQ{Qjo;~L?vwu z;-~Ew4&c^7wiqiec48~1HUxL`q5?~7+FB+%Epi_0mm{%l)_zar37SLe489Pj>nAMq zUphq`AS{OdmoT;PC%PL52#5WD@pfJCwobdGA@4TZn41E}Neb!r#oKQ7fB@-NOhCa< z80<;vJ<2cu2tJ&|WL&#>tcX_;J1BXQp(0)b5tkqIN>} z&P16Jzgla~g@4D60{_{rTBG}#N5=s)FxkUFZz53~-r_gAq+7Dh>`aE0=w+EQv)XYn z)G|h2WPHv($fAI!4aKoPMLj;%T-)2!!*(2X1)59rGW#Av&4rr?jWLGAm-nWYpp-z^E3i}kDOBf&9^Im+T zS3B74akz7IWD2@Nrw9|~kME?>ITsu>t!LJ2nGI^D>MNsj$+EUOsI5LvA7820VC4rA zUe3*^G>+|>K9?GBSXQ`tRKOF1=F_EeGR}oo_?E^{U3Cx$Eu>w8V+H&)I{+NBX%lK( z{2-I$!F4fFmK|N1bo**`y0<^697O73bERH;8To+T?sc(tcQqd~SkM zA`uH;feqv9{7o?l{Q(>n2LGThGoHS8=bsIfh`o1im$(@V#Y4k+Qu<@3TS!MCTtx2! zcp@H~L#(3elOBRSlsiVn0O)1wRgX;2ek(s@RbU{&BWi41>Vz4%7qI8%+;!K} z`7f8Pi}PftXeM2Y>94)}9xC;WNIz(9=K8gwgbcSi(@tSqDae6r)g|+nqHJym2DvI znqbSqCJO*;&DqiqNTw}tf?AlfCYfxpCgRId$uU3X?L2v3{gpC$B-tCI#Tqt$VoBQE zU$vG7u#s#GrKA!2AqoTd$pXNZ2DKaZO>7Ok71=#DcSi*d|1=JL!gMZ#9(u}jvwzJ7 zAfH7T8FW%d3v|hewKSjLz$gJC%8n@4XN6bbsQ;PG?`SdeU(6lGKsKmo^||36fmM!8*@9T;XGuPH|v7C_HWih zP{c3zbOaLj8`;$xY>Psg9eqJ?II8h?5vfwA>juZddbZFFJyMplGqa?GsC-urewt7;N8^OP?>9)7gN5oue?7J%i_KHh`g!mRe@+YCrm}SP`tQVj zj~Ua5Va?~XW=%mmGAGgBiRGM5<=rHs{iP@xYOH6OeF~D7%PT8ds?WQTSG-<@QP|qynB>OVt}5Dg>4W!?nNbfE zB+){d`;VxXzb>JIOIlQDOZ^NnC`j6FM)T5q!!jv@cEvtIX+IZU!29Zvb;o6C$qY5f zud6Qun-_1C7R}$=Gn^R;am=?QS5n<-uGXJa^XXg2C*P5t!h2`eLJ5 zFSt(`_DhF+9LXISSh9?a+I!YsAboxY%s2*aUsP*GFS3Bf9*I?^@MLZxFN0>|U^mqE z9a8ROAjT6k>*Wi81tF>4L>9Y`Lb;;4@>in05Pa_PI`K`LY^o$QtULciavph_0Z-|} zQ@^ly>mcQkJ*rgWgc)D4&4I-~_)EnqE3t6JCc^ui4vKFbu0MkN{?usIOBg>@mc)K*Sdc}5TCLiQDCeP$ zr~s%p2cxDR5gXDvT6>6y3C+kJd$$P4ebG+s#HmJ+7~j1)7@=WZzglPoe9Pu>pi+6e zmT!`=tz2r#Lcitmjk5w1sw-4=IN*m04!BQwa;22&aDwfPpZ_k9c1`ztu4^kpe&ny| zheC9@tc`h$GfCTI3>8TdHxNFW6W=|l@cLTe@n<)1`)7U#mbuvT>tp7m z{=OYPun&QvpGZ=;Ob95K`Bt@{+kVNHG~yILanyzngFY<#E$-MbzyX&RqLEozXmsm0 zaxmV+&P3%a6_&o$xo_Koj##hB8I6(h;mKJ1Mi1~^!X|EpdY~@Fpf5Jcu}%1JgJHg+ z9#i8*&}iglek{N4ZYJ5Cp%qKpt%0%O=(rfI>FS3+Pr0oc<|_hC>|2iXX&-rS%pZKz znBN`mEGkTTcj`GG;XLU$+x5kVyE9!j*qUKqUdkZ|{olL4P8xSc2sys)RLjpcV^^cE z0GxOts$~~Agod8)=}{QAP~*Gwgg)ahRZK+4zB;XJP?{tVx@he&9BV1ArB zLOI44N={>6l?&Mp+{qcEDemlgM34PtvXQM1Pjuh?K7N=VJq-(~y>B_xh>83!xau69 zoH)w|4776pX6Tg4ooVt-%vBm6_iQT|PnAI2WP}j)-FmmIio?>I=bQgfa432_+cN0i zUdBWV?>Ysm&~>bg-K@vSLXFe@_eWF_#?kjAv3B1nLg@))s}FLMJ0mX;q3WCfmUnfC zd_?S5+DBMHl>fl2(Y=lNCuhm2iA4>*m-RjpO0Q=+c@j{Yd`T4jvv zrbzeXaLcrjsmy}FRQGm9hae%#B8R!wa*#lGZa z6<(i(qDa81cvBW=g$5K$3cKXqk{&dve;~~wvO;eSf_uw{S^8>n@eib!`Do7sc~{8# zs&G@lhK(31%bw8Xq?NwYhEzO89tt;yUe>$VT4N0<$}_|{FgE_3i!5-XAY&m<91!p?g-dum<3{1`%Ku!y!m z`K3*O*bScVGhzB#L^#XKwJ2J@L%v;FAS*o2(D%!7FBH8 zMxK-oIG)DznSK>EdvrUpxNC@YdV-QS0O03k_vzd`_(7B)T$|>)hg?Y2v2hS(v-|-% zE81a-{VCiEvBbaO2fg;!uiD-C%MVlv4#Cy7H+I8_yy-gZOL>omIwv^fsQ%O&%V7!d zMqlJbF!!=}U*L_o7BbUVYT&H+bZ|PxHAXASCFF-W#nyr!P}zdn2P`<;j_2uFmlQ4H zkx*fLiFyXR%R~$Dhc7uL$tMWa()+g_XKRd+Vrvx+93m+{g2|&=E3>}(LMvs^#Bn&w zmD7Slk#xkZ@LcW`-UN@_$Nmm6JSzrTZx%;>Nk#{X(%HG(Ntk%RT_D#FozvfoyeyI4 zmmjLb_@f$$rEh(3UvhTIDrn)(3@?v2bJ+c}>+%?4fE)zFT@zjV0HntcJDc?Zw>5$# zcs?_m438l@!*Rc&#&Y09w1&eb|JE|mQHSbP%hA!K=&K1NC6Bm&4Msy3_@*>p&Oo$^ z%QVg)_)C%#Py075bG)`#$9KAVA(i59`Cg~&N7gi#bJGGfpy0e8{{(4h?oVY3{2EDM zpDoA!F1yQ~Rxg9uG{07S14d8A5{|FF5|7#LLr(RrlKofHiobGcT?WZt+wx7+LSP2%?tU$U$ZTh$aA@rD$hg3N>-0pO=xoV>eg14zj{x z6qEKDVy%7h+Ha`EvQ5cNBpxi#CfBkx5y1yxu z)sh=Eu9b*DQS1+aZ=d$tY%5vtvtI90FNDjkVm6Ad-9n|Ky1GF~Dwj>f_-oTDQK3n7 zq1d+a;UJ-T6_YpDq3Ls>?(xzeOChm|W&!EpL7W}?;lcF0VUrDVwNH|TyQ0W41`jKZF zwy_0}unG0HVz*gx`bk^Htlxzd+JylS#OyGi^}D7SiO_1h0Us6v9;^I1ZPQ};&$#fi zTc^9^>S@agd9#U$c{P107U0UKGCe0|H8Cw})QAW+y1ZQ{nZDqlvvfq>n3_xi1Ji5{ zSFT2iMuIYNB5l2bRb>BmF(C}d`Lz!3hdr5ZlkxN+Ciea}ivu{(VU~XyyI;9tTtIcZ zV1gyp{#@gKzZqkWzF!|q{0B)@6nK~0v!P`jSxRbh7Tz$75$0yvTTgGN&c5~BYW^`@ zQ2Ze5dzXAY^%nix%-Q>)j3AB1{^GU!>H?)lVBR@=>;53@m^%068W?v)ew_jYYf#hx zK#=S?VI7l2hik2et7CH``UqvxPaKZvql3J|d)2)AEOD7~CEJZR&Bex4Hee%5}Tj zsvzwBcO$HWybsREcCldv)hN^Xjmy;tgbcI~JZf>2U8f@F)`Qr)hL{i;UnA{DWj|Aa1Y0W@g})cCUw zk#5YK^>0|N&d&b8O2lAGV>3;4a#|W$)F}~(7yypXeTDauSNTn|-0(+3Q^jk*Q*;V) zo5y8!$dpI_G2T;cJK+s1j-$mNlg~%B2&X3TBMPXLLaG9n0fv&7lm-wrjxx^b(;#8D zRKb$#ghc=$BLLty)t9M@G@7wk`n5Jk=5ZfXi@1h^LFaE9c}~q(96SS07Uyw3Q~379 zu&@q&mIKUT{o(vwej%ny5*FWbq33PaUDNJFG&PHTT0i|st4WJ_`W|{e6i3I27BAQ8 zD_5nuxO(OlC;`4)-IpDg^1UzkD4xwL1=&ACd3t?$`<$p@&XILT#J}7X5zGPe=DD9R z1LlU~W`9^=>2!gLgsv(gcEi+Y<(JMkq8q^y^(?EzKR z=T^GP6aSixwHl#FbnulM8XA=#Gwc5?1_YkY!cu5r{HVP2cabhwjXE`2aFsuD${?Go zuDNj;qH8O1{es86x#65j40w60Qk`NS44=5f9<*4##OCnZeFt9D>9S7pyYENl@SGy? z4?JCVoh)wtIhot5d6z9Mnvg{Yivkj)9J#~a;1crG)8EWDp%3!NF3}?{e)Lx|>paMA ze?G1XvlNA7%3g1uny`EC!yEMm`WdN^c@JjbJi=~2TmJD^yP+Lap`G4WXHCL*@s5_A zW7QbxB2@~E_zU^#F7k@yOs&lyjLxrcxd>M#)KO`Ap6&&EzS5FzO{Zuo2`xAP{0NtI z%)RO}>0#7ytp^V8q|y1Ip08XOXWQ}-`}w&7pDZ__Wj}}x0^f@3;{(RAjQ@4J3VWMX zcTXpPoh}}I^v``+iaz27v01b8nH)8RCz+V^!$c@OP0qh6G?Zp2-EDTpj;EOmfh{wUM4 zdb#yV;S*oORtVa0>Q*l+GxvuANqC82$#3Oi{gKsWN)@&-K{V#Gzl>Rf-W?0*iA4%i zUBgeK9=BLJzL8gZa?pV8_o5{_8_^5o!9gNJXC+4`*)}Pk&$xO30qVMWpXNBy%uT94 z(Ou5As6cy4044sr)W0YSbg(e>`?jRSm|cnb+vmTPzozM@=A5GVeGc-pQ~PG$W^_v908PNA8C$`tW-Re;3Cs;1w=UQ|!Bb*xNq z8Ox(}4{HwCX~~bpWpB*6<0&ibx6s4}6x!xjWfcG|K{IvP$YS?Cm)z1HRNsi0`XMz% zd^Bd4;=dq&|CG~X$pZM0%kzmQPf-i7tlcJEs^zOPMMRd;lJg_}_j(!?R`0n&4h=qG z$JK78AKTK>$&@||$DdS`ABZG(1ww>NE;GN!$nMV;oXfPR=73f+6*&MGDIR+qZ-^fI ziV?-t6nfIFUVA+2^cxe)bfC3(c;GXe<1r1T-K0}|2Vq#6!AX|^w=7^PnA3NcJW-yj?oC% zIG*Ephj)rN%P+IMe4W=QFhMUU&eSpQ&p3uHtK-afd%RFHf06RD!MGpju*8Stve0Va zW*y2vwvq2-w$;Zu=Aj~|XR;->R}~K362>n{dgf5&P0_0Z@IyFP)5h; zZdj^j^%PM71xYyht03aMT)+qJ4^u8A>fa2Ov-()>ocN5?iKevA6U3y%-koQ4e>M~6 zd9um%evYRz36K?Km<)S&oa0X;>%R2KxwsXxy|my0qgkM_gO|WMQ+}%ui`~QWn6r;H zs6P1M16k--emVjQ zbID9-@24#V3u0xnee*_rYdvKg&b3ZJ-y>7uPO+0@3If|N)>N>h=*pg0I0a6eVg>$w z#}C7fFP7lUI!qro`{*Eq!(`yhc42SK+b{2!^w|zq;Nj@T6y()1M|8^f|kntlX zbhI6O&*M9c4*sxVa!#)MY4{no<7fA8Hvur>s!`z~<91PzhC>pVbJ|9qJ6zrC7#!l% z7sQc*Xde^xusZwDkYzT!5Axc!oJU9_y748;d~(2jOEJp1lMY&%C1z~i!Helbvq$U= z@26!F;6TCsbVT}@e9pxlknz8|KQLu>;bSZX?7pp(3Zi}zjWjm76iiHIk(ZHl`AE7~ zLHeK8>2^!B=Zr@f>nw5%@l(ciuHO|QKeX%G?cZvtyt>VLbCdw{I&eN14buk6J3KU@ z*&@LA^*g~h(%k;r%?!E4>$A52cHtb`naMCKW#bYa};z$Da#(IUn$`e z7xA{9l^3dyo2^NmN#~_tZxo~dT;EiFdJcTjFnEw7i$CH3=%6A_C+`HRdb{brsNDVoqH)WM7{wVZ?u!$Xt)zi77(B1wvQk-(Uj5e zJtRV1KyrGj1X8{^-_XkwE+dkdni+(|PH?ATPon~9MtMVO>C-nG8 zE=?Ji;fe(0npx^)3KgL?j`@n5Wu;j;_+FsUNC4LwT3KMu;<9SVV@77 zG=qYPLYZ5zvrwwuJl-&^PrWvNseCV05xLdizs_|v@B1TrqK#y*_K|Z02O!AJSFV)L z5c2t$^}QbZPgCR0CFRfnKEI--Ss zx@R%~p}b&-Zp~MzpG=rIax?q_C?~+l+Okl2YBw~>(ULN56jSDv&6$Dv5OEA`4h8>+ zFyTkQ3>8oP`w#^b5m-uj@o}Uy|6o?@BFJiEiN7iTU0chL*_|#k6@e+Wu0nI17VX1T zL|(NCm|$c`O_3e}cZbvjaDJ6d$9d`ni&vb^rXUS9{v9G5!;dP^WgoW(xA9a^jXQ=+cZsyz0iG4g3Zo|IwM?!-i}8Tn(eJl5~MdvZLw zO3)pf3MYD@yhMF4MPAJLm%~!_(g<2X51okD(Hzv$G3=i8D{G0o)5y>8==x8-dMf7F zr|ZmDqjBsH`=Ka^C;+S(DKXr~RZi3FZWT23G`R8ZU+0t@Q&{0cgXPTswVCa=Q z`qU(4n|0#pbT(F?=)ZpF6-=@)t6t(;O0AmyD$&9~rM>>%VRf<-R~bY9w3U3BCwdN|>KH%g=!vn#| ztgC8MF(sq`$~^U4IcX}HiDNFS0&yu4Xp)_k$dok+jno&*00+z`kF_yLD)tw?MjkK!0_i&9S?1gcboSOWBe_$RZWr1(6-=7{X3BPX( zA>=CU-Avwj?|nU?*yy+ngzJ=SirtOSu%uEo}zv84Y;_9e|b^%B>8| z7Y08Ga@QD-m&$*s2&<26kzczzD=Ru;lwL}u5CmuN8hY;)`s_LR)#XZ7O-??Lj)Gf` za1NQ-S|9d%;DiAL*=^R2w`4*_p;CF}SfG$Rj+?>I--NGE!^8qA6fF4;Yc;kzlrId5 z^fpajZ3!kEho%MH4rfS3@Z1RX%G5r6=S4nb7kWG_;fH;rDWWk&_5_YhG?BV;6(g!2 zMgi@87c#MgYNs#qmTY|t>XWqss-M&X(LLJplamU}E#@iZU zicNj2QdL-|thmR2QaxQa14Un&i($JD?gi*cmh?%IEKf4Mt7t}N%ZJ(Syb2u*YgDl@ z&e>C56=IT<-Y&;m!Wn_(&QK=g9RAA@rx6$yU>jPG=@eFsonpC;%w)YbId=gs1K{#| z>&j%(IhjZ&)r9y0!|35sv1zQ|#w6r_J;O_43?mAd-55e671a})C5C|S1xH|!YOMn4FaF<}g z-QD%fyT859Kj^Ek?tXf$s=CXqzFEef15rsjZQGP6(;Ga?c9QWD_s^qMB5?$Ao?M<} zFP5?I|Grd9eaWmch{qZ43vWQnd*}BzoTH{Nj(UBNcg^_62#0TQbW3fY1~>F5#-{MZ z-eR)wNQ(FluH@FPRO^AU6fdsLTZ|KVZekP&-$aK;8@iRSM!=UI6(9MPgl{U|pg~WB za}3!R!V+y=#&*obY;1vVvjpqbm7|HOZ#g4XUsW;8lXxJv3Sz|^I%SLZ-+u4xh>!m0 zgw;;j?$w(HkOp2E|OvL8d;r7hs&{!Porq&(V3 z`scIn?5eDqb^702!n#_=C5`8W zQZc#B_jzKeq@YtU8jHd;CnY2HZ*R=wPB+DsEfV;c zk|gh`iMSrSJp8tWbA1`#&HdCy&uRD40p=8ADJ7AYf%p4AF93p2E}0It#T(EJc1rrA zV|DEw-9YUm>15Y~hJ(5frOE&PPF`dSEU`PB8b{R!*^w71TwtBy0U*o22#PBtfOPa2Er_+D&hw{ogp`u;T#$QLtoVJ$#VW zp3Z7ct!iY5aEyop%~3$1;v1)HbR1*+&?SJPio?xxmo_G?-c_=mkQZe+6gQe3y(Z__ zX{4l1DdC#v7#h2meA3|kq}fk-`zyW%X=5D`gACvOktkZAY~B+2l{wI>8~zvCaY1yp zO@dBJPpw%4K59>dW*hO_E&T8CjoS`^e6k^Lu3Rpi&_i%JDHw~1RNYo#YGiE|WBlCH zW|aUkv?w}Ou2KV2H&-06?{SSKwDn@`{))5@polUh^u_<^pf5Ug+qFGHV`l4yTx65n z!JcE*GDfhopek9abn>5jwJe#DsRv#AwSA7_qS7HRkv2(cq%CdUR!!2x#M6eag7a@C zIa8eWW*HExjbCW$V zRjG7BzB#m93oUVljm1s``nb5N?V{F`Pa|}>hM*Rv2NWkLkd^A{XHecL+e)j%#m9y z#GDtdYOuxL$V&)m{Jm|Yf&(F?c+__fJcM`ns34Cx@P5YLIOF@Gz){CEPLol&e+ERc zO-Hkw#j@Jl3k~LBL|5#!*w0Vk9w6JSM>onXyu(mI2vPI{en^*Fa{u&<6LYj=Av*gk z>H>0lkxp5B{hSl|X|Q*Z=)^z4yX}z`sIfqQGS(iF%vgv@c`vzwP`pc(E*{@OutO69 zqSp=okB#pk^ww*^W}luLUMNW6-&$E1TVOdq45J{weS#k=+#yXryTnfB;7G)lb*KTP zr4K&>OC0@OzK;d^Zr^-R z`*X{EX9WROQv5B6>u0bw^;;)f4Ze!1n!PMFX6M*)?}^@@Yf%Wi4q;N$`can#h4l#B z2~Iu|DGFK3=48tq5S!1hfXnNnKWaX;xY`SN;CfSTP4%`^GRxP!Pbv3#gCR*bFKfc* zArk?P*kc!4$BrlfHBek?YVK?;1e$r)KgJ@WlhQYoYH(fi{epzO z$MhvI#@w|;kQxiD0l<`?5Kp>gn_KZ!K5+u>M}lV{xN z?Q8E_FyBwTlemn{L`1#S{mZY$!Hsxy&gT^_w6jKLt;Vf173qI{%;H6$Uz;y;vUK~` zmc=)dQV*GzI@V^qeeGG0BHwi#jBHHZPQx(i3MS1EL_MQ%PWNohEOq*@K9)u}mgPuh zV)H0})DMl#v!OT_zD4pR6e(~~{V%+year2)PR=w;d9fE{`{E5_>%e$CTxl>(#mMf@ z_Ng7-Wk0?V)mp1m0YCV01w_k1`mYMkKGr_(%NZ7Vn|px#^nUk>{G9R2x_6RZGV3z>O2Ie=>Oj+yK@ei%R)FmwgQfgqm+vPOL^ zU!iZm(x;_6MgGnQz}pMkwKDm<7^#|kty)+gsgq()e6)3jGl$H6C%U+WK0C}J&THO?<+Gf$XF$kL)l}k_v%JU z-2$ek>m6Iu>XGZ)J1K8=Zk;y(&A#6)2X(#JIb+ts>yW=#+r(mUehh%c3wiA)^M4B- z$KEC?@3)APB2-kd?`4Vk)HH9LuCyO@!OoA$E3BR-1{=@q`q)^N(U@60nU)L);?9)C zV45=qU}{@XF$3T|GA+2$s`~Cvwn4*J2OfZRAP#qIiuI%4ImNEV-$ax+E1oOV2;39u znTymmPKVKxK(r%ck{BmZ8nAS8Wcc?8 z#3Z>PJRAyKSD+jkcj!J&;wsFARltINO|XT z?$V8M_W*^Eem&ygi;4S<0s8`gX`5=Q7gZ%CR+G0L{VVGxtK$ZlV&q=0Kg#go_%}9q z40TR06kC`iHN;<7SBY>+OntwbY6(PukLn)Ci2n{4cO%~)xVhM_HXGOp>Gz+8iX<^W zJNQ=S_XBoOd9f#%Ae<;Xw%rktH%^Fut{I@(2piWzfAb9xCTT1n6v>2!)Zxs*;FvCG zQsN9^fcpd=idV{(`PJpzsqH3 z00Y#C+k_%0!b~bP@n-@~+u2h3^Lbc$7$b#|zx&@#lujvUJOK`{+wU<1R6&5g_&vvu z696{cJ*1{DL-wQ#=n#A#RjtAt@85j4{cA>I%=&(>9m;MJBpq0U%159rz>%W za+SX}+-IpwxLvIJ!u6tyN?GIQWv*)k0+=Pd3w+E%*K-@ZVutujZlxb^@Rd@KxXG}4 zLecE0CMN*DRElDTbxAH3aRx_-w|8^4uZl0DQ)dNvIb>`0aD@cvk&w96?Jl2nZ17tz z2t(*g81CO6@Q*z;g(Lem;`4ehBQEMz;n}B=YtmnsmafBHVVT2qIec7_Fdyj0AWJE9 zo>gKZ2t(^T`gQ*EcN(pKF>PhBkZF+oS(_5U;D?c&z&I-G^9Va7YNXdS&snQ+-(6%$ zs(8n2R)s;VVUIC^d1Hhz&6-#Q%(z~fML;7R`K8V_tdxv|IRI2WA``3TTkXs7J=`fg=gI_f|bj-qf+M@y7WNey5DSjnnB3#pMhDO1^DkR?G1Wd=RAWog2&YqME7+ zdfEhp`*FZRyVfWt)y5$|sJ=e#J*g*iR&7A&{Qk`in^3#29Y83Ez#oJXL`Ac+c)O#a zGmYUgRfv!RQ~>u*lc!hKCn@zT+c#qZ@^5m+GeT21$WI@MbtsxX_)%Q82_sp(!mxC+ zXYlEe4WXhuAomvaL|Ie=A9=NL+QYE?k2GD!g8COLPHvjN&vISpdSg{3AV6fk z#-pSahtHAy*5Lh8-iE;N$JoCR5^FaB=Q&kAqDd$H$WM`e5^seu#RgY|42@_=T)x`( zddR-MCp&4Lrj}|+&fcalcDp=j&{sQ+H@j^2Q2`JlIX(0{Wy-9t zk}x#9#yR!KH?PED@@gE+6DJ)k=`z@~yx@yv{T1{5cVJy1(zMLRI;*8qq`vR2j7w2r zEOICa2y-6ft!zf!iUuxlAI!A;G!UOd+fV$+#(>)`6Gti#qcPdTJQfBeF4si2UNE{o z>)bdyPVGGH1Xnq|y@HesQ01vXF@i$WkwR!G8N9q3)r-eNMD5jAPhZ>dh7S@v{G72r zf4QRAdv0jyfB%Psi9Z8L?hVBI?31~(N%t?59bg}O`f95x=zK+xP5l*m=Y{ZS!u)NJ zzk4WT$c5cx3YK5U7FyO}x*Of0#S+g;w2+W^iDi$_pp11a{qt`|o+a!aJ(Ip3(=}!7 z^>gQ`O_AK|)l9nRDULwo=9kehk1zkAh^g4K8rI;%H3~;Q{6Sk{r*N?KiLDtQ z#;eG9nj>Z7B6^NtfICcI{V1l1DQKN-H&q7JrhC~vYz<=={qpR6i>jecY95+q^~-1y zft7XmeE0pI`mM_){I%zQI=?WO^UC?aSce-v6Zh^jbSQqu6!3Wxe&v`hiqppwPjwcEF0lJAw|1V>1k`#VMyN}#j+}^SeTervKN$KN5*&6FK58}eV zf#7|!_)3@mQml+Qh_cOl>?$IDpYHq9f24;f4;#9^soxj~LgXYd_S)e>SOEUJRrQ)_ z5nedHB{^Gqv)*6t8%T&qVg{|(O&xpywQZDC7dk-mbv`&`M%mD(?Zs-7hIgXmf3?)b zuGsZHveZ5KBiZqtpZTo4{xtn^wF}2y#kxh^b0827F@Cm*FGQ8HWqg;{u@OnOt9zTR zx8dQW%aKmP-1+`m&PD*yk`(!%dy#Yz1s%XX>Y?V7aunKC9G|J?ZzehB{Co)$0JvsE z(HV&eECoZ7cb7Vigh+TSKYyA%gfA4ASKx5=>C1KDrv8C_4Sn(dEFIAq&Hs}X3f)`!zF4xge;+&+MqnL6G{oMnlG{MvoDk3{M?OYBJb*F z)dp@aX5C(&6$&$voHGrFsk6@lZl9E$KU+P|saQ=nHI)#DMcTi7SUWT&uf@DgV|=`9 zdcyU-nQ{z`Zf-RBteuwjO$ zEFlM;xc;)KEH7^h_w?=UB_Q-a3FeO#)HWQznjaL}8&ckOD$>jDjDr~>*HA&l&-?DW znHp%`N2XIvD0}CfYaH@@EEb4v*!qs2t*HILvO&)f0L=e#ka@IrbCbTx6*f6LGe*>B zZS8`FPrWH&mGKjdbmMmeit-IWCD+V*8k-uZawss9;m)i=0+V+mj(hcMCe`%#*c38bZDJdvDnKhLLplb0QRKsQz_edmr@ zkF6=6wH>gbXnvPFf(}S2XD>1<1rhU>Flm#PxWk{g1z})^vzAb6DJFZChq(x=>pTd$ zYPZ+bbi503C*|J}03-6g=~d}#E!Zw7*oo!t4G(Mue|du!r9B*R*rlda4NxvaOG&5) z62b+8-u)Vl-@Yn+^bwsbsBa)TuMiGOdB4Sbmil)iXL#-R!c>tS7ee%qp}qC4oDk=VAUVn_U3B1_uc>!s^09hSa0YVud4l- zkB4y9v$YnVWp&$6>|7`5=e)X74pg2KeJ&^2|OFirb#4e12j} z4jf~**ZikPN|C(Bp3+0>H!9#J$pnA~T~P*YBk za*%lO-@UbhAA^5@q5J{g#JWh6&4R|ha)i{)B;VO(pme8PE#oxD<9NK@%%F&Par3L^ zUfZ*=KBIGB=l>xY&^Ig#&5>u6z)stfy0kfVoeCgZ9!sV&!=I^&&S{s2X%*K>*;EQI zc`mU(Wb=4Ko)STN(Vc|1VbAKuoxeIqg(7Nw1GD52fyxC5#dR+cUn=Lx1 zqjks^>5qykeqNpaQQw?uq6GriJ;uPKe;!_+D8l1hXAle1Wp>f5P)S`ooy{IEC)uFd zBwFJ}oXv5ccHW`w=C45*5xN04N*@pbzhg@ZA=u4T-jLsCQw$i28LM zvmR71_Ti^h)`oHuo4%hzwdQ#@7cywCvr&GROV(5D#EqQ!O>hvJcI)>cSr?NnMPt7C z>+7U>V$8MelsH+C*Bi;LFW#g9Ih0R$p?+zB(1Dx_&F8jP=l;r;8ycja905TZ=GdH$4x z1@?WUlp=?7A4!H2TbRbHGnpEWD#iCi&V(DGQ>r2&)6>4VvAAD<~m(x)GMn5 zNNBvM@{z4@9d6O9Q8xRmjkM@T*v8e4AAPv`GZ_R+kPJ=&@SsfUVGj0#H97>>+Khbf zwFTn;7>cyRKw*@gl-v%5*bS!BONS4T7iuf9u?;<`-QoSCEMiVhD9_?>jgb{esbpL zyVr0q@=Lbo4nSD(iByiN4Q0$3oC7wFCc~|Za-Jz2^SsoDuBH(&!4dnyvf!JUUfgyO z2>7ntGgbL(H2>DK#Zb3bG6;={r&n}1Ad9>0Ft}dop!JeI=`6mOJV=g$SgsJdf*(`+R;Ll|Oet`@WYUR+$xUHx)bx#sH@L zW*K5q?1(kkb{|7{x}pR@6}xVi^kS2{#~db{0+RTSMTEY z>FD}=E9rjF9>_Oc_$RXO{ZZEc54!Sasxs=WowMsqK~vBXwKCD2euanORbybHqXJ@5 z9B1p07Oiwo3Jb$DQ(jl!!C3>4*E{}&J0UD_S#1+u1$RP*ku@PaehT?{-7ep-R`=G$?#t}k zVHWn;wdA^PkwHs+m`VMyYP@|NjzrSkdhl$k-v>s{-|-4T%D`aZB{lWCkk?@{JJjFj z{aEjOba42CmDtKdIDqEwW31%ROVNmYo~qsCyNtbng>!mc2gt@|4A*PQD3FpoX4{x} zuTVN4{uI8xo`)3HC9Ru0QB*wixrq0n3t%Hm+@W$<)yBPqdN+*Nzz)(C4W+zW`mK5j zYieo4SG0B0Z+NHXtalnU;1@?!@=A~^2lqPlQkjv6POk5|0hy*ek-`RGJjHY!TAJ|@ z;6_l(Sg?9X7cP`i`++tJxs>4uv+L|FfWiM5<|;-9nmz)U?=wXJ$lz;n_4Addd>Y(? zztY=2dIQ&Mj$@|6TIL7|Mgnz)NSbs&!bBxVlxNz9+YXg6AOEI1>roBVS&R5B3Q{WC zb+?aL{9WPh(eB`}&#wS}Md3C#)vKWFSE@0B#p{T4yUiho7J~BHOPFS{{k&z#Yg5NX zl|F%EB?(gygx(|y@&_L|pv!koG7W(I=Zw3wRyd5eTJd7^Kxu!F=ogya2;p5-Vx_HyqqoqZ(V4K>!Rq$nW9^ zsQ9I!jO4#a%J9E&`I4ru`o%$f@XZo_)609gL4@m&T@-WR*J_s>0v!oN@(T!@)T@Hb z>tkp79FpaNUe=@Y6mpW21}xZLK`n3>^XYe?01O(RGl>qzoGAH=i_@s9@g|&6_9td; z;4|2`L1Q)NV8lR*O_P+p#^=q82j)Anoc(0$QAZgCGS{ z{qO(mm%O@Li(X2>xvU4{pY5suqK(X9|J!32?vZg|vE$RqFBxU}+jk`yMRJy7CI&EZ zGCn)->)r?XUY30b0)S=UEZ3PZ+QX^t%vIgLJMyo97 z-|f9NI}Mukqz*IXonoKv@FGwJyT{_vfh1eClX%SK_cak)zX(Q#>>hCBa{(gv`EhTG zL97jF#Y&^Y_zN}hB9d^g2M+cj7;y>xrBxhX!N%>n=qF^N(yS|3^wavf88onM9Bs(M zRB|L7l#DWEjFESyD7)6$2?Bh-5B9H$%AWBaH3RpCH@y&wlAtdB$`S zp2F|>!u@x-mP7qN@{veI9&;L3a{|N>L=eF`9PrR}`S;&gZq?6V?8z7CNR{`y~tof+~Q8NaWk3EX>JV!YqIZ zv=z+q{|rGy*H4*E~x$TX|bTPpA?aOEM15Q?V z@v1K+%wga6<3kv?UtRiAH9= zHcbA%Ng*LyDOBcjW)NV&UBR7sL`HOW*D<|D@QZ*)ZsrF)a~Eo@%QP}8cTYXE$p6ej z9B=zY5(q-$6dNoU*xkVSz*9Q29+Y~vU_V_|mRx=^i#USrNEwvFvLqn_=KNaMrk@5R zU7bs|u3+h#4RJP6wcFkU*{bA_GoZ$4h$PL6*y1n$gWL3J@g#!DiqtW3X^qX%0>awR z!o!fa+(gpdcHx%^(!+z7Mtkc9yw}%Kg!fUeAy@NmLEiz=vs4rNQ(2pb-AK%>uWzG# z&!Hv$hYrKnS8SGHpM`GJOp+Zg4)#7QWI7rLruoIM$VF!Cg+cpNsF+eDD;ik#rf;CH zm~klJ@E;mi{6(@kyjf0SVeSX1N`f$1;e*a8sPGpdR@cWRWe+weh7G~Z?<=NWt7|Zt z^7WbhKg#ajy?_5pOg(nxS1=>COXFQgv;J;hyG^Q@0rfF?4NUQ`5A z6zvCf3C6;El|p)K*lUCL9;6v$jNCF27Kxo>yr4w{u>Ol`!f5%ToEMb z7vQZkP2R`QnKW~*I5WT(;~IAHQ=Ol3Ix~CcDBCh4$rnT)8>~h11GN}L!r@SuKCMB6 z&;|&eH2}=Q?0g~$oWru#f?L?{RhzyoNkXyun=Ys6Qp>1P2bS**m;3b7$<-8k4 ztzD7B4{NqSi$_xDozXfgoAXH;Qu-Xp!A4k=xm49XL@eOqVb5A4QGOm~xy!!(S7|#M zol(`44J72-U3Vkg2@pd*0G%N_E^CRyig@D6Ie=)(TE+Y>y+S_Azz$Lx4(=dj&`}<2A0&2HU9H8ijjF)3GmX*3Z9&LluH?&+D zmpk9^#K(LAwbVvie>DP2sKS=YC$w_4HO5RB{DZ-0pEFT@(asd^B;`I|*L@CyM>aI` zsz>0RGzQ<9Ka-nz(Lvolsx~MO_ERTsOSSahn7+f}-pRHFhTYjliwmr33)9HF+~|le zHjlt5&)xv9kcp};cdD%9N;#VD0QcXJmu~OIV}`Eqf)194UxVgnn&VxcrQRA^C4D@( z0cw;TlBIX|bNps}0i3)O-YbM?^vD0sGVHe52Bp8lm91Ttlr?HW!~i&*{{m14!F7Kc z5R64Cx(3~^avar(X5L|U5E8KL!AGfp-UmIlafl6gUM)LV%`)B16(;=;s>jA@WbR)b zk|VYuXcO5yx5gt~-a!wc=+xkj!A0MotIlo0ntS?$n7{twUYK}^RAN-m01y=E-V_IHa{xN647IP(^7xM^Q~PRW#HVr9I`d< z-d&Kx27qUTQmrRr5s0mxE>|~>sr!eel|via~%Dy zjL4Evq4}IYc4JFMQsht|t!vQcUv2!RT0V71%#!DqUPgVA-B<8PsR_6s%RKBlY65o> zCTd>>Y1ABUD1{pmc2G&KynEA$`qp*hWL7$kW;5}a`}{L6mFMF>`sRxVg10cuU=y<8 z2!*d5k0pa^6E`;j_f+ENn89d;12s0|cb5>bB#ATd+-k|MUPnM9s_RQ4HCyQZtH4q9 z^0?bcI&u~IRF4`*5(LPDt57s50GB^uh|Q`wzWlge0$o0@O4T8)Kpdy7CVjXZcw34h z1iWeS$&M*gXN78)m8MdX3UW+3MZb7ATq=rvxcXWzK{$X<-g@@4Oh39rHq(#S#i4w6 z(3c%NEWWm8ie^A+V&r$Z|8(1aB=oryDqCUFyDGFus<1M=?b0AUF3w(9jBu$nuuAy1 z>T?O(h5q?0*T&-brY}VLIv`6pZD2V_ zxtR8wF`;s^*8nuks{J_Pkq1RzL+)#YwI!AEjY0S8VO^AgH`~xH(ZwR#535k+itU=H zT8xkf`8zc^ah<3?yTWoS?vmX$r(gEwfQP4x2>9>(E9kcyv*Ew}%W~(u6^=*VNX6XV zd{DME&rvBzz)n(SeD?R8Vbhx;+%%kfdiB1E)!duq7{*br{H57PQfDceEsS)|uAK+t z&i|G0g8E`)ps&9ZAGpW121S*EM(`5&EPlgRGmToX%#vA2PHkRzrLj?G9U5*X4EQ3B z_jw6_qcgC;w2apcW4{gZc~*V%J}Y??y9kM3jg`O_oONLgnjVtg36uR*$Apu%!E^-b zr$MHtk0V|aLE6g{u!^kVIh=FJ=T-dld|@e-BZDGclbb+Z?-J6#y618+mX0}uegA8I zC!$iCwgrZULZmVu_2EO5Q(^`^-s$mX2ADr{rWANszI;dc2J8?qgG;H4By!YH6s=XN zkN5pv({VXmk!IqZvFBp9^=!LfVK8EDPUCgngT%#9^5qLgj>rIY&t(tmPP<|P7kaij zl6@fmicLVetB6S9nx1eG(z@CZ$UD^egyf2=$D%!_yPg-TR7cbz-_uW zS!-7C%aPF2<#?i|jbBtI6We;VQIJPM!Sahga}gBB?*OgAqLR~nYU(!kv9BKP{y5jG z+H-ojkI-7`2?|z=r@>x@a?qY-T3LyXNeKNL(ZNN4Ky|G&3^TisRMAU@ICI|}CIc^a z^$IfWKw(|{-MBcj6MZXzB%))uwAh4a=r{}?sI_PJx*KQ0Y(Bt!oOt{`Y0xNhy$V=N zVx<)e-;$A={O)T%iP>ni)=qnQY**kfVQw2VK~_L+IhV;X`m*Z&L2i|bRGC6&{>Pl5 zJ$px|_CF(nXPZ(L^O6d4sqng*{(x?N z`-o;dtuK)YH5#yEQ&~%ln*H+Y2d!nr2}VRXN$14NJdV`m`4&o)fkv$DA*rf}a=z78jHP1-3Fs(Sc|`G2F`*$c zYJ&vz%M*C~*Y`0a!Q(vO@n__u-MG}hzS%XPM`j(%Iu#_&!zoNI{S@sNVl;jmop5b? z?Db@{l-JC)&9@KnQBY)fw=k1uZ}&)JWet_CTqd&O{DU|VNV6Tie7BF4=yr`@w<_+k zD&EI?FNX8P+L+|g@e!1ZCcXzKJcw7yaSy`$F~S&Aph<$-M*gMlpHiV4R>u0**_bPh z!A8zx8$0@^oL{$Ai)OJy*LMAquP%I0%M3lGQ(Yx^l$d&a!5s?Ux-N;kcbmG(tY4R6 zD2~58tc`SYL2HlxrB~@xdZ`PRR1MSdoSn1chyFGkvlxpd3s!}5S?>-NGx3~~e`%f< z@XIJtzg@6OIC#{|=t)J4PH5hxafB6*YJD}KLDV6_`E%jUVzYQH0IBR5{Zm>j2 z`k>^yG0$gNd5p!8Mm;~!n>8>~Q$>oCC(WE;Y)@NN-vN^@t%;3aeW}H=9JhSas1!a# z4vr$wVs+w`EAhPo$dkpv35$#vi^=OwT6cB*@QRlaQ1Ujf$KG(IuJ=JREj)2YHHj`>Sb6QQY2b zb20g`CVa-n)0Q?9wt*=x9DNVL5weo(|1HlDq;=2IJb7L zRqQFzElFA&4bC8TO?Si)B+4O*N`GaUM6YmoJZI$`S=F&@mj)M1M~kktqVUds*-V29 zCi*=4mI{w8amvx7wu$P2-pPX5-Y7EC8 zo&hMd3^^pWG^lrdODW}sbN1G}DSz34b4>@FeEAV{Qi#KuCo}xRso^h#W6Z#TvkZTQ@2o2II%}EmKpa+0(A}YX^ zf;ndd%AmW^+5vEH`yP%dst7BtWE`OI$(EE&(dD6Ka{D=C`fCyx!5P!rWMeHhbnO=4 z5)7BSOKXsgqBzQfmx_jq1`h&A1hG>|k?Tdtm97l(Gh-T$_Of8UvG1E6*9EG| zZk4!0;w01t4gtAD{kCChB#svYp~kPa{pczHg{|}AeMYQtdt>mSZMqI|07A3}IPv$u z0BqMpBWpbyh4WEzY%MmS(PuM=@kwG{o0QkDZzC;YJa=ocK#ZGlJWuM)@M<)m zKIc2HJh%C=lOW(}fX`}(pG1ko%3Op0(})+hjaBz%wo|mzNVDbRv37~_(S|XJm6?jD zT9zc>Ul!|4&h3OQ>DQ=Q#Zi8yB(P?E&y~=V+3(r?0x)A`PPs?nAq_9HTz^8Q#l(mY4gM}C#?IwHQDzbtUu?IJJSOvT7b$5# z3VpkFH`ms}^Ot1hpWixENUS7(d`{a2aZ#x-(RQ*BXlHhf*2%aZmvjRC{LIVWO+)sx ziAWg0LG^U;_l~o(2F$vwvVy+udkD~D7=Q;Co`wDp9g-arnlHTj0qu|u$8+ld`h3S~ zMt3q)+ijltE92UvTn^E8LgNkt-zo1phbbq^&v4I5wOv!l2TIDEF;!AxkBCUZ{3YWl zmuD?GH$m=ZX}+e#*~`;tw4|DT`r<^w?`1cN^6sVwHb40N2r=0_5y@Z6C+7+3I z8~mbuZ@`L-vvigIuW*T}Rp=Mp?lczExq)QxI6vOBW3{o`Zmi=e9(AXg2sDOVVX%@s zBl`3xvXo%u9*8=B)fHTztdoQS%m6y@xJ2I!=Z_o6S=^4nf?>J$ML&a*1xq*wPxEtH z1>=9h%P}Ms=*SzMIV&NHGbJh&z9fzpUhgxzPeMyMjiO)>lQTMk3kZ#m$c3iq@W`!R zP$5^G8NJ zKh+r#38x|YQt_iHXBHk>79M6smc&o97WI#Pqm#*gzZeMXaanDUYk%xEE>gh+lE&XG z(E#1Rm)18B@m0t9GA&)oxSRx2_kb}`z3>?0%rwIFBX}{)K8g_=HS4^@nw8iBJzV)urVK-R znR+h0EMf?QN*endJ8FEN00F8mSA5ihAw9?nG+{}@%dcGxq+v4P15;vBh&Ha?{^I1) zY0!spRzp-$&Xr~zJ)}q=IZ7U!;STkEB3L;yHlwA&bWO%kBg2wLUSeNi8X{pcC5il+ zR(?i8&I-c&Mla4ksL5E#n4piF)_aarmqH`#9_vtB4)_lZoUctN_i1V%s8zBRj_k!E zsx)B+N>&#Up_s^S1G5FLX~!>Ul`+MzGnbsrgumiW)bjj{9vtuzfD1J5@UqeX>c?hG zv`Zx}qVb^KTED^i%a)dOCUYkwU!~1=0!Jyg8|pqRMOJ|tuYY`K#<@~lip{bCdVn2Y z-*)F|f39x-$d$xZQ6vO%gBU^Bcy1wgj-jOTvdoDVZnL4#+^aP`xmhd#7pTU{$AfCm z>*iXb*h6@HCM13^^vNGpA8$t;Uh*>>MD$XL(<;<4xF94S=V8wi2jNYlooTWPRJhHx zzsn*GVEIjHSw>MMK5?mA5Vn;ab3~tPwc?VCi`p4~N05&wy!Q&c1TOMuy(2^hQx4^! zQGKmU08UF{Q*Mn4yd0?+NuAu``R#Hwn`EBGJ0%Y?B*6PW+w-R=dB}=DJGrnrC7ZVyR4WYU1nHOxX4HzWs*Y3O#wdO~ga%%7KC zoT!m9nkx*(bi&}K;gTH(!%r#X5GAmah`MSg;QA+8#Hj}J{C$=Ab!*HUq$D2|`rADYde1(;Yst94V=MNWj{x2%2+U^)KVY~vmpgveWk zjkb(LLbr&GCjTQ>`ukA2vholV;S?JHp5# zpliuWw9H}!JlyUAo6gzn*zNZoFtDg#qR`Du5jW)`Sx^NbtPF1QK*f2fQ7fOYo_j4U z7IgxqCl$@)wzTp(FY!xYvQngw$W>+qPu1IuRQ-Pd96{s0u&sQ6SuiYKv=fq3*_?yt z6g7`*iG^G<9P$ODom3roRW{@|ZInyEZgKccvTO(XHe>A~(Ym8}A zrpV&Oi?#?*4HB{#!lIvX!L8xuSq+YG7&&6N^!ea@nLTTksT*tFP3_`4n{C+^vw7*m z>7@S(RlrA)6g%<66Bo;NTFMN;;EbIUBi`dP7~+4DZbB4CuJT05226Y(SP18mM$N;= z;xRF+qO6qCA{bmmLADyBS#Ky!U6W4ev=vi!aMOQWN^hox0hNB>^bZsJixLJ-{z%+n zU5C>mHaKpGjr|=K8S6L^JeQv4Oq`QN52Z@6OBZ2O@IfMGg63W<{x?+IQ>A~1(DRBMzm!S-s8p`RNJlWf1 z001BWNklUeV7Ildgx+7b$YzkuuG zXITw@JQ4t~Ary$_hd{XEcu&qg+!|TCh<(1-qob$C1}s;`~l+u^*5US^Y0HrdHIXL)V0W%S)w32&5TC?;Qn=|`g$Dv7=ASMc4|yMiS^E- zm-%`YB~|wHrRSr8+;gEX-!8Vtp>9tzpGQA@|J_7RKh#r_h-`$x<{JOkFHo<6QxCDE z0wl_?X|_G7_wF66#1zEAGuK4q(f0zqF2HnnHSU@EgN#7tiL8Jb^Fc zV95+TEt;76{CK48w~#uWo7+0)+L5=SPV3e5*n(J)^w|waZUCAm%b1oV zdkcI4*aPGW-0SAA#*8R3toO%ER19;8O1v(mh5u-ct{5NQz1wO z#svDws8OR*W=5m~>YZt{BcGA(V&C1OMT@-r9I_!F=g}i>bIov z%lJ95SFc_dZm;XUGC?q~_{32=S)(#BxpdUT4#(ur zvnoovlt%Or6SZ3a=Hq*iNnsM_o{Ad?_)NCxY(%Z3S_E$%0VJD#%I2wNmP3fkYKW6B zvP6To$#lmp{NvLcvLqQYB^xqLGxlPB6HX#3o?zg`#5Q+{S)?_wfNGBpo<@lSuA_5L zHUQxIsF|UBF~J%Hb9qO$7J29Pi0b+S?v9(|$x&@RnbtcZQ|H;p{HH$+G}0e0fk{u= z%?w~Vdik6KKpvn!8UwR$c_Gl~cp~Ki&;h0Ye6lZJPu@f*IM5mpdgZSo(|@r31Y}G6 z<*7h3BgkI(e5~~*_`j>Ilu+eLo_u3IJ90*-@=2#0Vm3SGTK3!BQd7^&zek+ofXQg1)*I0NTAn5)PK8uY<26rlL>u)RXRdu(sK(LyjGAkI^VW#m^uIteG4ND4>5iz} zbh@3Mkl}jb<52w?XiLC<`U}?q$%P*SWX8LH^Yvb6|C8?wZ?x!{gtbLggNJM(R)6(tFQfdh}STCoiILY8sI7Z^KnHpFmlXZKmsTg$V}bPM^Z`Z zy8Uam!D88zI;LKE?YPrUDgpJIITs`#&uB@?3v(`xk7;)W7Q=B_=!KSr+8RYOV@%r? z(u>gn#Elv?%FE;!l7Ygro^K)GmHrDJ#n_*XToQN&coyRhvPj@s7?8(*rqCwNiLyw5 zoq)-J*}0sH_T~BuO)Mn)JKszV=e^*@lx$?XG@D7JpmTRRj7P^NbFE}lQO7@-wpzAy zslH#+tYvoDbywM;dNo;T+Hc(G(K31BMEPdMbeT8zJ0*-DCgQUhRxV#Ivu4he3FF4e z;DH0>i+=rNU@b8Ts5TQa^s{`liBZ?EgV zGC?rJ8#^akSU9FI8OZ?KN{1l*t`LQRhJ|pxrq3k}uxDFJI)i}+lYyE^wxkP02KSPQ z!#m)3Hup`tF>#R166vD5``Q$|ivBEzP%hAkHK z=?sF3o2b%l^omP0Oe7N=$>4|vo;RLVOsB@pw!Q>Mw)Ql0;gx|F+y;;bfURf#_t@pW zW;g)Aj-72I=imE#M1knV%dHent3O5+RR70$zBH*BM#{_`xH^u_>NEh)Ub7AnLQ2i#F?rFjKK6gd*dI8H@Hu5xL zo@@s%CiOGZe3s)Atc1DpJs11B7bF56FuH9MPqP8m#0-nCdnQn_;mpH4OAzd{sr@i` z{(dPLA)@{g5FdP(2>(NydGenteL3zRPcH6e0czT1`7fc$`n+(Rm3iWx7yM+#;rb$1 zoZxFa&^FAmm~S6*pd}0d^&vXA#^KX!9|Jh&UcdPv(CiWJ4?v&$I-;e$mRAOZGV=#( zE=?u{b@}RFeVIN#)O%v@cJ!@LIjN()FATi74@f8^w=lLI^LRwb49<<5k^)85t&G-D zw?x%knhXU95!(5dvuwYlU}*i|yP+&I>p{$}AyUYS*$^|bu2{hykG7m+uCJRp9;6Iy z39vu-!H8yjd^!gCC12kDI*{IfiAc9L_WPZidve_=mgHHv+SB`6w8Hv3K+fRlF=&$M zt6y1f5V9#CVp=w`?_F_%B`_cv&g){0rZGGx;{iz~hzFh>M?CZ{Cmza6c_}aDr3i#& zy`Jehk4-wDaY<$|07kQxOm_}IgOZeMDk}wG+{y5i^}^bpy(B?qM70)zScnI;a`9hq z@<>GzK}lqh;-!%?{onHCmOLpU9byt1@tzLxWp&J;+W9GDQ&yPzjaMg3jlB_(P z-2dWlP$&$EKEs&7e1utZCg-0tX_EFY=K~6c>OWMa5#go_yHt- zU~$@DPM#-Uma`D1&w${CcD&E0lq4g^gW?`c7LfTED;HOYC}M!eBqfu=M3PPP3HP$4 z+0UlMwu=T5XND6*i&D{wQq%PJ=;o7hEMK80DttBHE;m6aiurbxvkM=N1-#ZLyc9z<%wRw*y`e`|ak*cS}TOEwmB%{0=yb zFTz(-LRq-nW(MGk0HHvXIKcM_w@2mvw*&cTqy?D)zyXB&j-&$hSpg6=kPjRi^5h!RF4PxtR5KTN>IFfYemN6|d@9n6Vn%~RJU#!BW}!F96oDr*MD=Yj>5d5J{fFkU}yk)&J=KWG`%yEiLhx z5St1_UM^q==W+WWG6Hz!;(>D)JzktYoa&x$2hu^Q3OI-Eo8#K8r1sIJSqhoCK!N=0 z)2B~^i4!O4Gn)&}l86x@Ma2HLP=Tt9AB-harc6nDeuxO#ooAe^2j_iIQke>g$HMo4 zaR$#3CjpjgT{2#(UVom%K}ky`F&~jFLcxC_Tf&rkWE|&OGWAi)79>wbGPvLAr~B=< zpZ1mYW=vjc`p_aXhW=>Q8f0BTiq8-gMD`#>p7N^-nL$DyubONED!Dw%` zv4~%E$E6T+f6*YS=3LPPgPmw}(`!?I)0!#j(-k7_6-P7_(@#=mGi2k%z`~yMxpqoM zCL|*kxGzWro(ImwVubf-_gh}sQTmSy)Heb7p)>v&Nb^QEDj!LhR*gK(L;y(My`Cp8 zTpy8!wLOjCkNDO|_`AiS$`3WHZKK%%wE?GzIKMmQApmjE>#;!QE(w*$*wq|^2z)-iDWkpZ&N;+PcQ zc!sZrz!(Vs{iQ%N7j~{;Jrpo}22AfWO5}?FSpSKUk3|%$#yj9|=JSBZNHqawH{Z)< zWk68uVy+!IpV{{DgTUT>!$M{-55DRy`7O3$xo*MxBWRvt6X=RcygeIH9k7YPO$Z!p0nP379Np$w% zo)Q_<0q6er2Z6jh#AZCactb?V5=eykKUxW+AAc4#ga&+PKZ-mN5>#!>xu3h%S3d>J zrMX{>zbTLzZ{Fg|i~R$+>O@~N2j~}TynIhBo`hN6(Uw{3E3<9K*fk9 zxfs57imfvssi+g~o2-y0u8OD>7-h~Pn-wy2YN(kWv^ic8v~~aSqQuA_yZbW3>|1uP zW0RH0e1Wt=5(~2IpKsc0hp_1RC>v={?;WG^adWJs*0@>ryLek%*Q@)q-QeJ)+Wwv=fznm;GbeefiXNtV|h5eh%A)ZNozG|L}_lJoR z)#YW|E39c)<7K-UWg`h#RZ_*Rhtq*pMB$dCTvJ&nW!Zm$y$iq|U?8ATNe~MTJkHgB z!GZLAUk#FzNgvsrKt_^Dyd1Gcba|M>{5dg$!Cil~9A&Q9E3nU?uR}8MOw64-SATc+ zR$SyL`;~AzB^X?GMl^05(D%0CaUqQLvqDDb0?5~?Q)fo^?%kKnnKP#nft)T7G~Z}` zNCqcumnm?Zt}vF+-^Y(1pYl357xM%pb2{&XLS!l=9t-k==MtHyMCrC%&&U6nQ}dBN zN{92M`fTFo)Ab*hq2w^1Y$EmDxXE|GM!<`5c`mZeU`QsN#5_ed15#S_8?Ypdpvg{v zaEN~`H1FZ9!2fw8whp+f)*LC9!6OJZ2o*p4a9Tw&uxG z89Q$=@tVeP1B&Z(iHi*e4S@ZH3m58QHWL;q*?<&(Oa^=aRR*O@A3j%jV2SW1g2~D4 zxbtl1&R|qw#|HqY~g6II{Pkmyq|HI)(+xQC5KmU2CnF2^p&0iX-tkKbJt(o)i>7hoR zAAEpF*VewQ+YnWt`o2qix%v4(n(bkMCCrffkBiERRge{-d3hQIK6<983={hJfU^7q zEC+}Oq$hHo-}{aXR00T48X24$pA8l4y{Ma~UJpCh@XdRHk`9m}hc>s;L;%*!E|1Du z-9?Izz@6~%AM!?a_$3x%r*DexrHbF#s+ffvA(%p3o_fwZM=7*;40wp}CbI6Qe)>^rpK@+XK)brQ*=6|93HQarnr(O>bEO;aQ z@M9>4we;l6i8jmPu@7uE2vR-sms#K(GT@WZw!Qywj4!9&6V)t(wWdvPUli(RxfafY z0X4lAVuPsvU3T_lulk|NFYQ##Q-Gh(0rF>I>MdO2`6wyC1I?|WYlwB5LuZf&f=I0OMv&t%h3_}@`&Mf!{grFCOVYCxZInnE}sAkwuw|_dx*Z%+M=ul2MSmf0&L-o#hc|cUg&$gZ# zL#BmF5-eL~y*J2uVf|0W4A*quTQ-}d-cCqWd2;D7p?;3c989pe=XyKaj0^fQKq`cT z%Xol5qwekeYVVC>?TYl*9_4^#dD-^Mpb7T*S-Y`{ZUh0ZzFD-wJXdSwhvhryW@6&^ zJIT+hf7W?y&H7Ns%t2yF%0~6e>u_5l7+BL}yRK$~4gf^tT1iQJ0tj<__5i6scGj~1 zOqoc2ZmaE+%(!=J6AR8~k3B_60}HwOFI0%_N1PXfcJbKOz}mdU?FHa29g`)q$AG~_YO|z#$+W;vuI-in4KC3^~boJEnuE$d%1f{Rv(E4)eWb-!96DWL&PhX zu-+&xAS2T{-CnRv)@Y2urIo!vKkC}G>!aKI+I*{JFz~RaGImZjh$Qo0NMte@tl3Bs z6_L-R82=)biib5>W<+s?bfaWh6@@hH$z`#h&4iJzK%VeWCT@&$u~gvHPR_-^s1ZC_ zlx(~wm@HfbK{7Tui0P9SWiCXcn=%=qo4+=0G(UMoH!4W(WRW5fzV(AxIo&3Vl)N(@wx|qJ zJw)2mt@f-J$|ILYRI&&l6R;FO8Oa$yZldtXP@n+PLM-qCt_H!;G&R4Ao<%rg{F44ZnPk_t_45Bd-zN&{O<7QhB zcha|(TmZnoUM9)V9*%-A3#~2|aw?y3oejnb_ z8e#Ll%Z~Fk!v3bytz^|z-9441`d2Kvp7+lDS5(OjAbyvBP^%!{R246iTcBpJK zFYw6Vm`FO&Hnink7kJXVk@bRb(pC@$MEv7@fgDiGrbG>%*&N?s>KAf|?1ra44wQ_# z;7Cu&3_c6lv$yF#0E1+k%w1}I8ERDZ#2KtPdz(a9liKPC^Hw>>E$mOOk$bbP4fMmJz)j)}sk49KIB(g&28+;z`hgqgws87Cw4A%J% zMy0B$n>D}L>>DJL=x@}?3!ew_-cb9@zCT=~=P{mK_+V6xx_2MIX8A9+ z&2&*{j@R>OU*)^#9~=R>rO9(cCFWioWRL$)FZ=n{O+*GyHplo?v<^G$FIop=KVV!< z#zU*UZN>wA?fV$%;4&Vb`K&zSp}cH+h0L;NP2XMP@2Vas5b8vo5qRR}N+$#8KsJ8w zcGOXF=^rkawgOCgK%dmvgnRYC8#q~)5nW?_w7RtN_6 zazqUSg0WvD%D6P57IX1mVBK95X=}zY>&1{@-W(A}eyxll+< ziuum@8f24!P+SH>;xTf;upo_?i`|%-k315EpZPqWsidxxVLqAQKJI<)334p{MSHtf zvU@Hx*|4=Fm2xeNAElMO;O4StpMCbP5^(Naf1(oImgUJ z+9+9J0)rVO!iYs;wuQ-xi7^w$`I06c3b|l$@=wV!I|?0n!MQkQE?E+8fm7VVG=3qG z%-g`df>@LZnsrh4b7NGGzv-1oIBc|wXg}t?5OEm-EU>FcW2AQv*(!1I}9zu-*}%E8x06*R_t`I*lGjnak~!0`CH zrPeb6iI~MJLY2=ULjgeOsXzNtzow1Uy0*9NLqx3uTmx=n7R_Gdw+)_jY2}&kS-tyZ zD?>T+-lzihX!Cz|Z$w7SwEh7Q834EU_q4!tt!g6kme}*Q-_MdBoELzY8pkgI@R(}= zu!dMbW(Q6Ey&8CO{t=!=eAA@>+mSFr7U-u{R*D1j=$p-T5^etZcuNq}u3-s;5i>%~ zu0Se??*Qm)qqu8V0b78?PEzFq@l=|pudt~@wB;K2o3HZ;t6>rw|}S2ATy9``rNb;86{W$*BXyE zss}me$sOle!UtmQ!FK|4{So!NAUlEgX-6}BDA7YZ_I%W4KlB-4>#k}=Pcuj$8P4tM znLcXemmp)1V5)8Ebl+WV-E?nn`%SaGEK!nlL z19&M;f`bjP+hjpNFbDSU-(Lm{7@+Cm=bd++_H(3^%1hZUxymCY5&$LXgP>Z;u?*Z) z1)?LDAf~cjoPSY*(3qY?pPVteNJee?D#36*Uj3!qDvE|0cr*KT#P zeW$4>uSSg;Gscb`TM#UT@d2}D#tVpsLd*e>tRqH@(0gHj4T0FUZQG3HH0Cr@K z3F>8?lg~L*og30NUeY`h*`wl!giH;elbs_TKu+}T1kcMRDkDfA001BWNklT&Y8*%F@Z2RW}?GJVPc5)K*+bS_-As+)c^=~Iv=gqLXr-JhybB20L}rPOM1b_ z!_T6NRKtAguQ+0b1$|MbkEnW}`?zM5F&1TrBBtuk527N_*eO0Is zQ6Pj@<=88pWXN=KN_NkQ-U{3!3xIfU1xGBn-;qONk;dc;p_6V?l#EEKYU*%@8nuf| zav=kbZ|BKXPec_YM*av%9suHbOE9nXG=t!sAvRlpa^vZq0=($ct8aj5`i=*9^0#w* zB?ZJrBV6C!;K(aM6*Xk?qf3Ya^z9 z+vsU@ItA^1cRL@O&qF9Q+QpLxF7-9D;H|Gk8t)RSAvDqBkPpxNC8CDUM5xonn(pDr zNiltXBE-px02n5Fq2vC(oMf)~<2xfNV?%bv#YCm=>S;9pF}FpPP~df8H%|^QYoSg} zEx1h?Jkb&gNc}wdaa2i^cZYkeIsicuO3SZ2>Tk zxi^N={Jqbv7EtHhWREo6-Db7)8yl*`6vWc-X`!BrEEvcPGE+v*@YHA;5@h}|OA2vK zWX6z5afIoMm@<=@K{mj`<)Qj9@L9Y;&g*LX(wYB^O8uQJc>-~Tcf{Z+)>N7d6EadD zlrXlw+}sD`8h}0ZgrPU`SF{5p5{BL{4+vG(i~fKiG=3qAS3&||Y+!+xF;G4zq!&-G>AQae_Roh@?j8=;y;JXRiy?)-Lb&+`p;*EJV^4tn zcuzS=lf96uxpSe*_DnE1DJ=G88_k#&#(v)(OrG;C5VMTW0|ySgF5TyrE?s)SC6`=s z;pow$a{|nh%?k${aDYCGkdyfq7fC*E-aK7n@Jy9drb6Pe82`Yp2*5>-Dcicp^xW}A z&&6dhq&iNr@1*)W8&EgiYXO`l+qnSzBr(&9;07nPmkW5Fj37vtv5<{wMLHrQQ$W9@ zNQAQFNy{3gG=mLTXFmDllg)k)V|V0^JMJj;lkU9p&QTuhOcyOoE_6sDPZFhK(vbqB zp)ruKxX%}y=NJr9L>Xl((*tnLJs|VLcMCxjCTl(19yvhc7v+>zx~jrpZa^U_OO4G!4QcVJ4@_yWHaE^pa%s6 ziAgYRkv)+CW9^8A_$&o}(sq09xo43S5_RH!2V9vmXO5l&;wY1pb{1X`BJqJo)NdZv}bflN581^4PH7)mrZk~eP-w$W8YeWP&?7~Qd{r^e51ns_o|x&=fr zF#cjfs9-GsKfVs*=U9-KtOtyiA9>$;5&+=7JkWYSELtIQY9~*DRU+A&H1rhcC$b#L zqtH}45#&RrhWc4#ZII)6f2h^a|6jjQUL9!9JMmjl)86slhO$Q;+X=`Lcz0+hoy?Rm zY9?mDp+=_z*doJ(YzM&YC!<5DS>02@0dN|hfggTCo+*^$4zd9KS%>?o?~j}h-2~;7fy@J-r@$8RjhV zOo=5%s@-bfEqw z&$abT9RT9f#%-EdUxe4b3{4$c@&z z=G*bT^%mi8yjtk*t@pNB7D$9a!qJB>F!e!J1cVjD3mGx=CHxhT#Cqu6&>R=pv4|2U zuiO+-Nha$0qN6+|fapsMH5`|E0AJu5c#f)?>!$BPxL~mU+Lw@AR$dBk5AKZ&7P51? zwV^%CcVg2xqz~6If2k!bcwth_Gee)<7+SA~@={(3O)l6uG@`(n^J(J68k4z<4Lxfx zM=Cf&Hy0@206<6xvQAkyl6gA&`_)Q(CKfzuevAdASC8Acu3xuKkC%;4RC&q0tTSs( z+BaLNgJc_I7u{YGg==&g;;BFl)?I)=C3Ov33ml|vN-H`r8MsfxFk=IIAKEz^Q_n&a zfGNh4Y``q)YhBDQ4ML#U2+KskF3snDG2>dTop&zsK1h|h;6Qx{j+$BSc@y_fjJK)k zo&6d2R@^h}K3A5&sX`Ssz&3RR(NGD=T(cjf??$uiH)W|X-qBw9kU~5+;5ZmM*Q!;k zSXqP~J$g*4U%&p_y?gh*%FX@xU@AO+MEny}=>qifDNYfCwFUPECX^UxTSz4fz6YVf zd644E)aNJH^D|CCq*G6fx9Ns9U@$Ml0M7APaHWexN>!Ldn5-D=OKLJH?s(KYo9s*m^;Cc| zgDH!KWCOE17wwgA6trM*lz3g~$c4m=h4|OE-+rqL zrTB~mCQ1ygi1^?c;s2S+A*CyjXfqd7R9TiCtBUH&BVF^^m{6YU7iyF?5!v^?9#u&g zfZuled1`=+L<`aQWH}IxPJ}+PIe?(}I`sc%L_v7~{4)=;*$-qmEchvuTVDv&fSC7@ z^dZ6<(Da@QeYx>;U!%(DB)uWgDGH!M#U;NAZ5V*dqEuRRbOQKd@E0c#1iL+@WPV; zG6c|(I>+D{vZc>RD?tU|-?$;(8ljR?v=MS)ZA_nr0DusxTho&_z6_P<=sVhGDKPv# zd9|-Z6=V_pyZR0`n@2bL=6?AOSvVDAd>+T6?^KEnkF*h4KjTf?UH0#&`fXqk4p{=J zfE*L`j)y~Iv(MPQj;B5!WB@(XE22_OWNp-{Axf(B9c76KyeBXQM_!47EEs(b0%F1( z`+dy1A<=j~@I5(jA5qiuy0LXP&qHFy!*ie8jEAAq%YoAJk|TJxR*EE8SW~6~_F1zq zzc~-0#*G{6hS5d9Gp7=%%jX6S8l*rl8pX(wE&rvwp37=sJ>`Jods){}>OE6Al0ueT{1=c=afAYU4G4jBL_lH&LaGdh zm1fM-J%JLfvW4$Lm}DPT8W||*_Gc9K|Ll{>LN-iE5eyW7O0wN)wMd5M*JZVE?b#Ze zCl;RHUcGu#rxHk5SZdC_i*@VPow2>nV_TJA$i~m0CU|dH`G=+m}S3&8uble-*JCWjdlU+!_drVAmv!1eexdmbYM*)=qtIxkbP%s@LqjPgl zj%?*gts3_8fY^Y&tJjKx;1C%Ar2xd7_w++O1>2E`L81q50(=DqP7r;+el1HV%wOi| zd4KxF)(PM)l1Y!g7bvjIy#Pkn-O*+bd^kK*!)qe{0dW6*p0Bni z0H}Z4i-CMFOl05PJS7yWR`Jwx;fX#rvjGF&GdcqRhtm6#KsvXuQU2}CeM58%oob`d ziReG&uBZ|Y|97>oei=ylAdz(ED}fplA9YJqiJ`emLiw9H@7ad|QhS=AK(sobH7423 zE{`ga@yZ}8iFEeio*F%$)5X{Nd+u6avjs-aiYl;pYY6i-?-^7Loz z7_Do z07wEMoyGBxjiN2_xPV9jlqZ{k=ze@UAdkqxfN=Qofr$EHaF1le(AIc=Y}^>i4wbBo zSKm>#?ICd>I{Mxf(SA>M!XM4C22BjLt`2Kq`#0oK%e|4q@-%w_0*$_hj|jaJ!UQsa z44n`D5z+eK4BS720>s<8*wBW7G;M|F2bn)NpXsR&1~N)2LpId*HL_yxU_ge83?s-3 zJS;jlv;G+lZ-6YT7xQS?-PGaFt3xH=M$fc_->_+(`i?+|ARWbdsmq$xY{t>d`SuyA zT*3NN^k{F7by#zo$pA6Jb2D{r9P#jJIq^_lGB0m_Em=h+vvy(gi|H=ee9XaY4xQOE zYdikWyv>@2eZZu7TOMbp6w4C70BfJERj3Qr*+e-1ymDn$o968Sz-Ar9hI4BgK9fDO zJsCc4ErVyGR(TN!<-FTy*R3J-ldb=P+v{pnd(8Jwf!cHi&KVL8Jkv_T>U&AD7ZS!U z%%!WALi=TseeY!e%JA#}C{pKckG3rtLv#IMOpDat#tDW(fN{)8y?gh5Iot1c@7{e0 zSq}tsl9^u!jHOMRHo8y8B)$-Riv2ik%sq}7GbS&rC)s`Ap~xDhb?ep{t&a*tJ}}Se z^P2GeOpKi~B^HW{=y#tdbAvjL$E;G31?dXGwW;O~`b4hsip3EP$$n--G~_CilnvRC z&FAv{e<2IOBu>!1BF(}9nuAqLl6 zHS`h(S_TsqtN`HIXs@|~{vDGOj9DSBC!5JA*USQ!%Ev~5OpM~rn=iot0mCtJF?G)6 zzL|twq{SARcd=J8Vj=!->gYE>iOpWW6-hH}%4XP<#o&H&0&BF47ei%z?NDt8*~v_R zwalwamo6IlmdqqDkz8>84IGbWjcgmPp;fC^nytV>2BRr98Kext-sT$B#c|Uuv~)AQ zd`FF-u2IF40so4~T^ITaVzO75z0d;eM6$m=7+~DjXzo4gqDOBHk9lE6OJqKT0_4I8 z?JeLBI39_0!AIT;Vto%OB9R-<@D;$smjJ;2PbYaQmo#d6D5Jj#<CiPb1I|ZBC|zmFOYjonr!0KYpdJ5$uo!Ts_iI_$pMc5Nc%Z;Wq`+?6RmdsxNZT zex4kApp}*a5S~6SRQZ|j7KQrvf3J#Y9eg}Was3>N==r@HcyiHE zzO>!Pk}aHs#^&FNy}W zY=r(tcSiI(WDIburlu{BmjYzx+!$NG@I|O~#PR-n)uuX!)VcrdK)patJ;a{l!Cn#V z>yQthjj_zqbN?%s*e=KR+`W1k^FfBG!`A!Jc-FSAWQ zqg`9?ZTs#EH$>DFnrD?v2MFwX8Hv0m1WYDXGQmf%sZ*t@pn?F2io7(%{a&>d!ek53$z#Wg$s6PjRMKQnt|sU60y*pT%40^;uO#vxIjDA&S(!X(3FkPDN&&p!L;z(+p^#|Y>|P9#9FxTh100j> zZoBQSAWN+0B>c>7LMV=~Qty)WM3#ptlLPq4+)j1@U^E2f!1+9>DeWFGB_PDZAGb^+o^`CNdt7nJD&-`-u_-fYzgCSWp~r z9uWD}n|uYx0Zxe`zxqT^t~uG)W1MksAa}oJvk=bi;z{Qgo*dWSM&hsgEtLO!6iD|D z7Erz9;iv-O7%w-dWeF5yo{#`S>wfGvp&AbJ6F-N0F7g$$MKX$>hSBn$PV}W=?NIB3 zsPE%%k4nF>mQZ-=YEJ=Kq>i|cFDF|-jcEBlnd^PAKi~JH;m#IRCIX& zg8tUCtl>3aHDEqb@qpAso&(Td@(A}Oa!6BaO3eMfYp(hIVU~=czUu54$|XmMni>_QN$PaNoOqRK4z7O#H>l(ZcLV0CCs970gc0fcRkJQby z8|^{106q^de_>6QtH$`RN$P)L&5akW@Dyn8b*%kKl>EeRL-jbIzL7a{=jPEL^NsBv z9P6!M%JtgRqluHoOnl6fp-Wb9uIBTsiA`N0O=TXA9J85|NhVd z>-3wuOh4n_BDHgzW&}YQIZXVX9wt$4fEIM1HF!)&G19tZdBjXc0rcwv(ceE z(Z_m(&}N_A6OnW75A?o}9irVE)w5X{v=x2(;r9Y+9`$w?hWCCczT;rY9`o9OfT&^v*8F>u`XhFaMyvSt=63r$@| z^j_#gH=pUtc}Mv2{g0OXdi6`|GxFolHrocmkPH@N!+tb%@yQsQg~4@qYi)^#>rS!f zrJlO9uo)!uWeAdV#KV#mQeJ*1Wz6hNb4+|mM#Lu;z$yp+@qOk}7ihp73c*kWZf)GY z>k$C1l36Q2Dj>~R&#Vy$Zm4h8&HVjy2KBjB2nN%B&Qqh11OV&0k~Dkvj7|34hP@f>kgWJ$iI?vri2RQLpr6NQOcH?fdV)zXFqt&xM#Lm~&i)0TI;kiUrvc zAgp1=jvcG>BC<~TkSV!-muHb@EmPCxeB_dn;eoC&$2!G^#4$Nr(iEH{mCpiWO+J}Y z>4=78KXV1+OWO1~*Q|%qCKo7Ruk?XLtP&z=&6+jds8OS;vyVU$tx(yd92>c}-_tl= zYOBA-jT`@#k3o)Gs1}#OkZNF5IhvR}Q6T_*0NQ*=3rGeQLy7(nnUV#$5D!jkIGba! zU}x}5WP#Hacb;qu6E+iMyctg+N^#c{pDve-WY|I`$&m|=a8RSjpvW*15<#;UHpIw= z7|F0+qXX9$Wi>c|1~$q{HY5-YkPPkx(Qx`1XGmMKXkg%D^5i&*-!umCqC1^y2J@_^R+ z>}rAOArD97-1`I7uLt0S$N(5dDl;82FdEXtGdIk+kzqpq=$_Xs zs1JcN?um#r+e2jNGz+?)b6=o!esmjK-+wlB&9RWuf@HY*M0?+4Pw+nXO$H8a$u)6p z7j&bpJ^6a7C0O3R)z|OxKQc2o_aV)!#1jMopMfBuy^&vnaHGA+p1{2Om$lZP;hLud zdGJ!(dSvaqI3Seg`-l1rKyn}*MTQLD{dBDTNnh*K%=QoDoBE9jRRXNBdA{B;{hxd1 z+*8f7HFkEW8AW6zkO6exCDz=UzC^o2)=hmnqMwH}7&a}``h@_XuDM2=Jz>84Rv_1$ zY)Lqt5wd;Ac-Xa0C`}sjj9F5MWB>4@txHIj$376vz@d&u%_KWSv`;~-aSqn+m`}Tm zhl`K0CesyTCf5)TACA~WJUrX4oOsxt%f7J~1P45^fM?^7$wtqCk4~ePIhMJUIhuLi z1;Uhe^mS<#)*wXo)~Q=pGZ%=QXVVqG-a#H^N3*f!b7d|1m%xr(*P7`HYno*1@X))*uESiU*$Y7+zvluDKsy#9(s$UfVf7dbkf&yhz;7@cusjW( zrF&}j;)NiBnG?8101ZL%zRt-SX6n?bS>ryCGLt4v(qkd#ln;535BcD-wVb?LNn|jj zBNyD7j`l`|D%o6-jVZGuIMb~K8CSAhGo+J5$|Qp!(`} zF?LSY3DYr~#l6p<=N1=z(m>e*>sw!=?Wb@o5?9(;(4W4oxyYBdyY`BSq#ylzc*zwKrC#~h5CAkh4q$Xh$k9~yc?8g zh;H&}h-C(_A=qJuY6^((B6{MCGtZQhPC8j9aQZU(fZQW(!~z2uBsNpZ&_*h3p+A`G zMu}8Yhy^C^YFTK?a$O&ft}M5ojh6uRZ6m&k#D-+pr=iuH2f!s8Vf-9`M+>k6^kOE9 zPe6xjqVm;bk++9fDI)-OKv97Gr#}s(s@Xpt)6Qzs19GqU)st%Gct^#EjCT7XI}}wj z-^(8l6tpI)9O7cvSQPG3h0$yw%<|JA(6K^b4rzKxU%W0oMV9=|zwg z555zq#{bfvE$EH61KtEp_q3Yy6hLplak3-+`*EP>g(QIdz;A)bcK~!e42C@tQE--S zy5H{B0|1$wbGv$S+u5E1t$_N-%WzDH0RUb=+e;q{6qr4@nWuHhy%3y+*Ts870+~G5 zg3Hu51OoR!TYR(7O7HxzER-5m0Df(j0FTUib59RkYDpA8=RuR~J*(``tWXJ_o6qv) z!ME*u0D?s5AF#WvqXso?8}sVi+!7#=H5NRwo(Lx$Y|Xl>Rr}92??*{zZF}adLPoPd@rbM9DBR z7%<7^TKOzeO*~g*fZ#=OcneG5+b0EOJ1wqKbfZV87Ig~1uJ@x;fuaiYY zovP{dMw>-J-SV73ObnS8Dyi}8XO{H4=?q`51J1 z*^CG3BOUQTrcgQYu)! zuc0*Br!)+ndACUKuGHST_WL-+Su6@0-4%@UJoG%%G_Zws&@Oj89j@iC_`=Y=>?vH&r&llsn%kbvK^90f0 zq%b%JL`7LC7;hJ4Fl;9!TY_HO#5~WYe-tF$sAtcfU%F^@vYO}L*3G6DK|4luQ*Zy#{L0mWiNB_Wv<|9zfKr_hm%EXYK8B$Moi zWWVbev0_D15`pm~TiL#31ZQGl+{wh}wK$MHpA3dfC6dy8zffdDCdc0zRD4zH;&2ji1-I#u{Y1CKz%xc22e#MCK*cfK%N240r&) zu+A(ti<=NK9e|k-SV+_PvMoeZu)$*^Thj7KiHqLi&P9|u11r~;t8Qtgj31w4;OC() z$qh-W2)uZypG@`b;t2*vG6V^KlaW9c!+O)-ibw|ieG}2Je*Gq*!4V7bWP@FBMs?9q zrAk$eD5_Six>;~nlkPow=!>YA$&)8*YNYeY;J7S&TpDMp1$J)9uUzFVBVtxQQr}j zYQg(p;ZGtBYl~cRj4#LBW{C_Q5y06;FSqAKV&~Qu0zEI+)M77B!ErJa0B)cD#QF&w zdm#U_o&-eX6NOzR7RU#1J9d_6bohO52C{Tzs2Lf^`C#;kDGh}AYWb`WKF%Jp^Y@}(#q5Jz*uZ&8-SkU0<1$W zkX>@(!B&Fmjaz&@_k=mNZs=ct>Ma{tLIK~2HR~)`O*DPCw!Yr45(W!HxvqDh`*%QU zEn{h}NE*aFC~fKL3NfpddR%<_8%H*F0r6rA-=o(z>x} z|KmM5vW=CW;-0v7{1|w)x|%w1CbexETY`&wUlhA{`oeWjN42hLNA5)z(eyXdH@QZ< zGB5_mFq-er_#sqc;oC*l_?!EtO^$6R^8V0JULI(DIH((>!pM|?K=?kE!Ek10OK8y6 z91pW=GA!`Zz|4X)>%A@;dkz21}WmWXC>bZIGSlHGqSeh_$Ch!Trd z=Ui4GKUtsAH(NK}{^|}ra_*0{K{6BGBET}X-l=Wo{8~k_ie;k!n6j=fiA^efh_z5j zWogdbvB?$NgF&`2px;JHCG3)5k_7ZS`N!j`@RET9-ko`=6 zQO0`wDU6+YxoF}_vEyx#y^tu66eC;W>i2iP$F0t#++4d$BJ!&Hyk zYaof#`OrhPZW}dfB<&77P;mj;7r-}DGKV%{{No&Dg=An33**S5-(vxndGg68n-vO( zGsoLM{<(*E0@L{Bn{U*UFkg8fjz_it^8|b4LKH|+o>QI^_VmSF2lx@vN<0sH?X_1% z*idoi$oXbH0PgcVr!#s^M>1qWEW{HE@xSAtl+4)K%@^7BE#_eQOuE9jlZ(G;vTTKP zC>ly z{LV^=6AZZ;J0})E?)WT*WCLQl!ID9R0l-DM(BQcksU;hDAsGPUb1{-;QB2)9&EJxe zM~Z(HHxP0!)D4Svq@Z$Twlm$FQEzU+SCWgj;tYv1NkdD_XhepSShsGyZYnm$B$J|!Y=}FyGlW*6!AxpQY~8wble5k~TTVUoG`&w2%=zv!5hMA<-Zm1}CU+5`d-uo{Rjm~bqm(3g?>)@LoEWioiOVqcL zU1o38<;JKy{YjtzC}hH&7g!0GFDF`n9W8f&eWL&I5O`&vmEi$)efSSHa(z-vRvWMt ziJ2S!7nL_}@#X6&p`3ptGCrQX^K~H4U26#iWNc2jJ*sBC?6r<;?Mc^`o&vgDBLv34 ziJ|R^9p-L4o8_*H)I4*t4DmSjWuvIjN()Un08y za+0SJ@b|oKvoE-Z#=CgZxPhnH9xo0Ewf)aU%dh%UZ^I{0Pkcw zkP!j6trA7Cbrx9zkRe2WlkM@(H!ZM!*>Rpsc{-v|<_%+OH9QdjsB2cUKrlwfm}UcZ z6WI{G+r5%VtZ^1p1+(FDhb4Wk$D11bNXQx7=P&oYw+xVe}d4?`d6TmK>xhR zSAPlWbksLCGsJz4_FrzE0mzKw{uY&k_O;m&J&&?kHAAL|N*lfPb*OSykT{>*9g(N{ z+V-xyqbQ-kx#^RT9>`VUIYO2V-V}o$jL27}kJql@X|@58{}5rc-=yzC%{rjoX*JsR zvg3W(rM9QO7!)L}$WmFc%E}j!Ny9TV@mq^tQ0Lv-d-C}>3;w@;b4330VW1=u{hmGq zk;L^waPW*kT&#`xOF)Q0dbQurW=lXg@yt#5)_OOLon>W~5+T4iUvQb!~0ihkkTe3!CwPk$UxV;$fRAJhuvd zn~kJPi&w)>v-o#LsSpkPAHbLw8(+5;<#WubE@GX}yEOvq#Oc$g>wMCv{`OUGE_(PE zQ(wrhq?C?H@S#GIggP!W1Vc1hVjA)E5jLB-MyzGJ_NN`v1v>#?m84u#NtMztc!pTu z8Rq#-m!<2T>C(uiNCdNT@n3MHjAmr*uqn8!xD17Kgag?}nz0r4T&K!jaCKI-faDPU zfc>2#3wU-JkGpp5iW#qtzW{mcRb0Rs0Hw>!E+Q8?ca|>)50-uR-B;fqHF~rjH<{c; zafRobh;QnA<%+F8vHLNCVSC76$VEs99fWvg*gS3;>I^HB+i|0DUMty&geN6Zk4I&b0NuwtwkiHYJ1kc$>xe= z*$asUKNw__@MmCd&(xoRwGi`N_wL=7{NDCxkvs0Vqr?u5vGaZR-S_WQ4|}!?eiqss zD;Kj99)1?2Oe`$4SkM5XJMtqRAfID#OpeFz*+$B+>19Dhr%j~|S196vI=K7b=naDfX{E2`P4}0k`|l?QcW77i9?(Z386IGQ{Jw0RCr@R2D7(gtcDr}*<-=j2 z0@j%PKKyQ|SsHcC^`hkunSqQF!1&cCMl`yc?*WeDqX2+9Z>gu!L+=d@Re}by+znAr zJ{fJ#HR%3`jGrCKzupQJVBV>krxEm!8W0S4R=o99s9-P=`w$Axeimxx2*g4!b6>ok z{?w8%fZQ{G2$dK(zMajaAe#NU(<0LGnyB1o`1|9;W51MdUyLe9{> zL@5I#Bj411KVSPx#R{Gt3yCDW6UYpJoM^tMC;$7*8aN{XMSbJRLB<4iivc(pB@hc7 zpE@Gy9>ZhWs^3^E-9=`_nwbNj&rnA8zyp^?Oq&I==qF1^ zkOcveQ`cPU8@EJE{aLbR%s19kgNz=en_4vzHS(seZaK?WGK9-U3|2y zOWt3z-qYi^H|?`L0Jz9@s-Gn8fqpeVh6~3> z*lISSId9bxj@-_ttctD8sGn?tI;fZRaRBI6C70Ovi#1p*sSPaadDkCGDz%+sa~`By zk`)3-0Fdab)k;YZzfkM#Y{8st3PDNK2|!kH^}@CA*=%&T3sKn9vERt1-PoTIh@)ed zdDeE^DOvq_Nj=lNV#p52*3Af?6xj>vWnjk2l4v^}d(HTP9MCW3UdiBbk8jXuNg%qOMY zZwpaqKgj4zubuInK8iF_p-9OI6DCx9?z!h~P1cXynt{H@Sdt8!&lYG0!(c3Dymp>W z`4r|^>W_K>0CfQq?tG9V^bgFOnI|#{v@NMDhGdfDM0zu?Q4hss9b{69^IYY3e2rM! zCF^%im1E~DGBIgS>OGUpDCQW>k?XjbDDza@&ur^26W~AJwN$3$!`2`j$ZVl6Cd*#9 z_10TE9DexW8L@*68#df<#~pXvY5Mltrd;KGmYh%U7W))49`x+l^THlIdQ2)O7z$X- zgB;~yE7ang#g}{7GwsOn4j@dST`Ge=>8NOb30ppmj#YsR|JbC1L8EtN<`I#2LJ8A|UwP^L#USMq*?`WhEP$Hf<)2 z_HHcu@3+5Hs!~27HhRd+xEj>|AThff(|Ex}={nu(A{qNN%T}z`djXgPut(n?sTBx^UdQ_i@&dL3LY~mxMy69R!W}dz)W~|kbYx)w zey5nv6X6Xg$*Wr%k?$6ZoOrOW05g(3fb6Gs@}*XF3!-Aa3!#7y#5E`Ta&{MAi3))E z&&GyI9K7>&sCED4{nj9w|KkAwu-T)duV5$uB!KRMWuba306vj%0H{o}MMEodbNO+; zd^94In$*-()&{@DZ_Q)fv|f$dyd|pg>s@f zFW@=%!?h9Z4d8#?5x(4dwl6Oa2vt)b03I^o%)@+nXNavo0C&6+0KbtH0@&ubqrVX) zKo%|+*|8dW^`TsFq^INy(l@I2e|tnT003(tCjeamnx~lep8Auoz68_<=G0`Kpudk1 zbA_0+)d#~v8EM+N%{~}BN946Zp+=z-MNfUxCdk7w_?hB9f<%vF_M(U55 zZM{DrAKo+f2nj+x;N9@kDo@F#4~N?*eh3KeZO%d~;RP9lNjI`TkXaiydfN7bCtFD( z$PWN=NUK>3ElC3zLLZwr#~OJ<43W*j@yR~<@5dG(2jGT``1^UjJpQ454>_T~JQd10 zhnv2?tEZV8FZ2)9kAUML`L$q~_3;3(=ks^G8Yo$X+!6i>^Z^*VvP&~yfiL3+LxY3+h>zLfw}q7ZGG*djdl^~KVIaoXLvGX zs=XI7T>g8NucQ`jgai!)BE%2<3;86-Mx?xuf1>|Gjtq=tA&~Jj$=t^suLQEdv=3Ps zkEz*tAVa5G(hyG-`T-y4+4Sw?) zzrngNUEoi?g?`IgiZxX#k2*k9*5#~SQ*C0)S^>Dr7F^G?P!~L->`^iS@tnj|wz8gu zr~~dl(`U>{nbN1}59|*zufNo!17i};e9ah{SX}nPuQAD>l9ZHkL<3`q^LPR1CHRVc z3468wXYV|~ov6|`er7`N9YMPE-irlMEGP>0UQn=?wXa=t?Yj2f%dW1Xt`)JYq5|R~ zVxuFVC>BtPNWIDY&+q%@TtY~4licJ2|8<@x+;DF)bLO-;=Y7BLeIZ(ym+@Q}Fkpa~ zIk#!u+WcK1{Ty@5F*n)s4oF3aGnYCKBEaxOtST3f-9_#bq?s>b+K~(pmdp>}RroA&^zYw) zvoTOeG9jDK(x&uj_gu@CWJrg_Br}8NdW;v$vXidaY@5*L*?8hGhg1GkSVuMu zoK8j}q%yG1v`(@G_Dd_Bl&cRzSsWpGnKZKnQhV&!u_tHSX1#m&UUKD?S6)4S{P>z* zef8A|G}8gSi-6DJ;2$ZXF4If4OW=W*l4oslXsCzr!TqQsvwn-1$DO5DPUiGcGl z@st$FmC3})!-P%-$-qM)+YZZv1JIp^b2>&kSK@)gMe(`CcKrF#+NVAlgr(ic&{muy z)x({(aHh^>G4N>TRM{mg2wWswe1D3so2(|C1afRB_CAoJcm z72F1>N1g+3iB2s%^QyfkBFF)^k>`QrAcB{S226D!699qF++PWW|JctA?PF}68uRxT zV*=Rk+EslIxIZ-MpBb+@`bZujsdU^P3I-zbH?f$KTkGe)=<&I=Ji zS?DXx8`!q`M6)=kgAuk)&ppsLx4saFHwQ9FpNG=hod4W|d?B&O1Ys&9n?lULZKV-W z&-ehqhy3_sjc2YuL9=`~2j78!!v6#LAI1aU|Jb%MW2&jWFHFF>ZwLd(A(v&su)JlY zFBuAZbk}Sg`YL1wgayPNpgvg|{G{Gn+Oo8=;}3EGFOf;pmAFGn29gSrfy|NS^#iFd zvK1H;5Q6*mHPW{l)b`AaAL-bJl=@@6{Y-n?cfT+~nw@ii9fMOeI|3Or`ak61x%T&d z#4`sD&?ChDx-`2hZ(SWxDVzLu|9L4G%tR~T8s6NBNkj1W5YT|Nas|?wn{Mk z9%>LfkBO|-lt#7LD{ny%PC!_@USsXfePpun&vm^BK*nCf5dhf$6WJW}LpGtDKh^yZ z7(_YB8YIv4a6n5wWr;}#0Ezh`7vjet&jR+O zTWaoRFU4N8!FJopT)Qn349uUjRVHPJEUHtd&a8(Ye)y(*mSMz*5#!j`m-LKqB!eRb zcrKPkS_qX4))Nl!&Iid#J^m5yvB7DW%lh=`lNCWwNHQVW=XhpPuTGsJ9jTD`|75sc zI#8Ww1N9A_l&ZbK}#&Q_S&oDc@;-264cH-ZvS@m|Kk3vAOr)O zw7z}&{*v!S0O#TX%!HMVOr+vYq5uFO07*naRFWHnOm=)Wev!_5CT==HE*=1hlPVJn z=Y#pIlY=Q94<}@USX{YInlE`IzQaSG4xjko=ONGU(f-TFrj2%D(oeQ2W8!8*#bjSr zY2UPasz@|P=p@ssb0B)gd=CY=+`j6u$?3x$FiA4z_PKZ_(1!saMZTnE0{z$iBW^^u3uiXP#NRX054Tudc`= zx#P>PXPDRCd|S@bw0U#sn|MGFWmLn~Y0a9oLwt$Au2(~&-ic~Plm78{ z0`vZtM!-tI%)NVg0&W5#5|Iobdg+l7kzN6$=4iQ{F<&guy%~}95E(>9@6gDISuh61 zkPDOzIj2`92Lea}W)B~rz6rnD@=_LLi2#Ck>7ueg51bV-4~|tLg9vs!A)3|KYzgY@ z=1~zLMv$uk!2a%+Kq9V@BZ6#j5$$+Wd^}Uj2)Nw0ooDWRSsNV5sEPJ(x4sY)@&RD^ z_fV1v0H4eT0DmN;xThT&tLZe7H$;vT4Nmp80=SIv0561*}1HAt4T@f|hE>d6~K%DFa{4yRo+n0!YJ_{HN;R8uC_+s@zAgUa1 z2LO0p*N^Ze!vG){z!{R~FT*3|-Ou%Yh&BhrrMz&XuU`|9C~}A!>I`rfP`E=gJy(-@ zo;hiVk`NWksnio~7Y!rbXM7uo1j~p$A+yx1nd<`R(^oJLuTfP&?U%2Ln9H8j??U<< zw}&slH6T4@nYqX_kGvHa_UjNwPO=K{8b1X-%m48!;5vV-(JU3(g}wve4v9f~645`f zizh_fu>K0@Lw*3z170H?)xN1GBpM_SW2atCC0=MF0DTC9pMLYCUg)3w?RPJILhBKr z+z~SnX3QTu+A+v|a_{pO8zJQ&l{|ZIv?2YNy2U$U%{tFCwvW9RCu+Z=u0ER=h{p;< z7AE4<%kUk2Gw+8$uC-?m46*|un#lM-Dv9hE4AGJ6f>4BLpwH9iDp%C8$^DRt!gzZB z3y2N99+@kr-4l~OOZ$H@UkMW02fql(F8SIMIV$S-rjfo76i6viPR!(IEKvR}qb z&}z8hXl>WjtR0A4 zcYuGP%0WFjb4M4Mm=D>DRQnqG4c8#^CfUJWf;D<3deB?LkuA7h(!rj}fdr}QC>`0s z_X`avr~^o~4I#iz zuoB=Q5-7BPA;=HN4e`ye<8ezwo4Wn^>X5|UVCT9G+bF?6-)BxMNsWQ}W~|t@uAfiR zntpuEHP?*J6da}u?c28(*)0bumqsRt`=;HPvpIJ@h+)n_o$_2_EI5D6LJ*;P20J7E0-}_8fm0l#!fc!MTPch zDC9xVHqVb_>k+aSUV7=Jzm#_FVZKH-Y3R_Qx88HlJ(n_v@VsSyvvW#?+O=zM`^GxC zJjV-h(tH^^Cmt;HnP5vYib*x;(Fx+e?+zwFCI&iNKFpPo{Na4)OXhMg3BtCPWT=;` zlvAR~bA0NZi%u)e{kw@a)uh5kfwnA^K5MeWnS`gR6Uyse=`t7Mf1k|oIr05Q6X+t@ z9Bag+Mon%A|G#0w#`k~|EGpNnTPr}nzBD6X&0702e66v+cP~Ce`)$~;UQD5tz}QGy z6yHOrs^t3`(OIo}HB;NR`9TLCY)%|G%JkoHCsUzfCF9$Pal0nX%uBDnVgC92i{{}c z{$VChnQ9s|+|Kmv-(NOC)vMQ#4Sw;fy8fgOZMR(`JEoeOX3d+M<}F$XApvnlI<(us zps7mgGvG6T8{P;2tktS`0z?ArB3)y9kwnv@;V%opb;jI(rZ2aG#{kBxcsDexrQkA= z%GW#-GXpP-nmu}WBBL|;_K5g4kmUey3_*ds24Lj1&&I^W7S9AgXJl6Ztti83`)L*h zNSN@^bdL#5ih=q~;Xw3sAg32OWGx?5)fYmGhP5opiXXoDJEbqGAuJ5iU?Q=n0xVIzR1#Cb+noW-}rn?41xhZ>9&|P zFZ@XXVgOPAXzCA{7eH75R-&#uwe$oy1#G|bRFxG%!yZxwQlMW4W3E2N7q1IIZuVQ4 z^I{H+F>V!G{yKK}UiYtgOJRxt8=RuMPIVsAn(np@iUr}Fx`H&L;zhoTD zT^yK0u8j(4i(&9PH$=o+f;Psq`{KuAX2}W#efj*b{+_w$(Wrp7ME1XUc|?HO5ql_z zJNS~Qneeq{77+12xSJ=@?%(`m#PFIZdq8vQlrnH_&bx0PH95vVg1)uv_dqfo0MrlJ zNx@<=OeW5to)qw>?@)&vkW~;cm@H#1eS^LB?WcGGh9iw6;EOHu+t)|rdIwz-HD`oi zINk;wo2o|w*(4l4ED6jr;{(&I0c4v3o6m$&VdFlv&#nfZIekCRy!^2dlWwvQXcGYO z?yZe^ZFEGWqi7?rIPL{GvHl&@4}!Y8?Ik5U0Oq+52s^$%&h~G}FT7A7)Q}sZPro=( zi66!mvR`ByaX^9~QAQtvBsz6p&pdvfZ|c?XgW`siu<>A8@YqRlur?XzS#86g|Zr5_%Le}<8^MS|?lBl&@B70=UnQ^8C( z1w4-&=Hs|177U-A!E@e-CEL#hd?%PChdqNM5z882%>|?e zl%VfPzq9>2V?*aO2YcR4#!4Enhqd|EAj8GHOr{bB(6s-+fdkF#*|XDT`Q!^@_#@$Y zP?n_1|JuQPHf73`YWcqRg$oy!&*q%$PiM@SAyQnFY3kIeS>Z0p<~u-U&c{4J22L)< z*U6p}l$G;g@SH8^Unnvm+2@_?w0j<8iqj>FFxj~mq(V_B&me?@BNsLlg|7`}{f6~s-THNAtt~ST zyG>tfHhD3Lt_ev9enL>JU%$abi=vtdLB>S!c4Z^spcxJkkx**dw3!(;`~Wj@)F{bh z8Ghiw=8!`VGe;hElsWXU!^F2?-kdq+i_bnYpMN&hEVOk7xgn-Xb}><-MonS+g=~;%s_85fWa@x;R?v&kyZERRoTtB(Ec|BeZO_<>zR0aA)_v#-GYu3bHI z!w6q837R)F=DY`^5_t^3c;q0BPM5okVVWD5oiB)*`9B3BX@Ukl2a(+X`$SJeAbk6? z5r7>~nrL{=g%<$Vq#PF<;)~&~^p|j*f@Bd{07T#;B?M4NnR>KR;$qKBqe3JQd5zZr zei6@nU_?(IUj#r`BAgw#&UuMWzxXgu?$?nivPmpbF#NU2F>}(LF)@z@1O+%HlLKHL zkoN7*l#mgS#7=dWALR>B%Kf}_Wkd)C>a$U8jS~OcGcj|At?M@1Z>*bowX}>6j*Xe6 z%LDV#SAiI0-#W?{l7YVwElw7~g@>xXJ)r*S_r}c3MS*Et*O;46^vyB5d-5G3;{ovj z^~c{Fkv8Kv_o0{o^hng4caU%E-4oCoIiUTnib}lz@IuUxkpcjW?*#z-nZtaudv{NO zXueMrJJ|sM;z%W7%FOxjsDSuEVoEm9YZX*K@wTYB=+T%+DN#lUF4`Ki>xbWr$+ZFb zUzlLz+K>@*7kfgW+;)mD=EVYhh0<5lAz2zo0v*1q-pAXYDUm{?Jni|#H-P}!C*K)0 zLoSbs)DRgDz1w-xhX43aAbsTDAFDhO-xT`XC@XYimd*%6G}*F(G_tCkO*F1t7CNn;V!1#s=nsM`AKB+-~m^P#*as zz<-RSt5;FdgbWUd3*?(Fe==tF?;rZ4T&(g=v>U_)q{YhBnwNNP z_Js7JPmv+Py;C>zcg6_U=b-H4zf@T>GBU_?V7_3yoN`x8d^q~H*Zu`T$k-;^2>Mm_XsZN%UmGjn9FI<<%+ z9#(8lJUsUHpTvVZ$iSh0LKI|5GO*@hEs(f*+pTM0cI>!y5(~dBT`B+|l7y^d*)Ri! z@p}hKrag!KZX^Ufa|P*S4HX)ZmKD&*{Q=UjMt7S=C%;&zBQYa}bqWWY#zGyezX>c# zb+CS-9tufxkqTx3Qn2P_I z1o)x8%9mlLM@m3&*)r3wZ(oTh@7S@U`S8OJrSBIyD2+ZQbYLWw!hk><(#1=5|PBm%-^{A7|Xmn~Vq8iPKN%Y4JSfvlBWj+DNhaX(8^ zZ%Ktql|(=kLMCZTk_(P}N)_x5HoM<``~6&q>z;b*sWa>v)q`yKUw#hconWw=fc1sc z31#rQMSi9k4DNH3E1D+yszr+yvaz63mKMn8XxXx*EL3=~WP7lgU{H_+kuP~9Ud|Mc z_e{D-6>*(xQpYm6e`lN(fAFAT;gOAgYQ71EWD$QXMA)Fm6AYP>3~myQ&t3@PvKQhd zkm55MHqT<%pzn(|NG5{(f4yci@N<2r$GOgt4Qn>OoaaIO&-fR=Teo(doD1oq;&$in`sgDwYsPf5 z$WGd;eqSZw^pza(P_u?eDOI)OuWB{-swNNoy0+i#V9&SkXV0{5WXx{ejk)?*1;sHb zX1D_40U84)KRZ5V4*FY6OkSJR_XM==({>}^%HO3;eKHI*ikjQy+^g4lW|vMHp$v!z zh>QU-(aV21z>`S%$Igq0ai}|t&%S+(IsKlP$Ta~h z0}fvq0{diE0EQmCvoF_00&3yUftV}1{NOCVy_cM!y3}0&4!_y_h-wp_qV~ z$g#9<=82Is=Zb_H^<0ODa*UAyP&p6xJK^sUbHuJ1MNZbi{#QkXP(aRyXlqCl0Cs9@ z_V-GdKq$1`Uds$H4H$d=L7tEs`}S4oDGor_L$8mS*FKI(*1#j@_@a$Z1UtYyzOo#-|M`i=})x(yV>bSu=4)`oUJ7WWY zn=t_xzV8)LbN2nVe>PT0B<>GV?e)nj%RrX>!3qp0vYD6E_mnvxH;Co*fAqTlWbxB`h z4&b`f9plz{R5Yli@86xKJ{1Emhzht*#tsr`)I;Tj^(cLsG6@-A>l0GTjjivN>ewW6 zs9sH-10b7*^`l>Sk{v`HeKB99mcCv{28?=-{2J~zG3Uk$29l_eo%i~*R{Ur90R4%1 zHf0~wMTrMTlBOaakV*SrI+!;gD*-o4+T4*D%5ykglbyCD2eYPXLi1NO+mFq(iDPya~`+!rVl^ueyaz+}DIA^mFIVl|VH50dSV00}2YtkR=w|wiPva)}$ME0PW20@4ffld4;(C!w*0FRJNWg4h-j6GI;P{ zA(bagn6Me4n@i9oBpDI*E*mQ!2j^p)j2}O~I54)XGZ{+yEYD2tHxrC58M%<`obd+% zt4>8B9a+G5%H|mYX_2cu9rv6`z(=;gd}=A~Am=q_I^rRhOoS~>C?w7?w0o*xcQU66 z8GP`+n31*_wwlkAVeCw$<`QX=>A^z-P~2(bC)3DJ_W*H|RkH7hzI@ZB!fdg?%jG^2 zJ8a{|jb#!fGAYxjeI`US<9+DEm)S+7l=Wv0!Gi7D<)&&LGpyZRq7k*Yyn1Yng2@tej3=9NhbFr)v@`S2CM;1-D( zNCzZG_UMV>b4)<}bsGY6!*hWEwI79<5rDOT(Ko*km>CZl0j>e~0Pn~Ym@+#Mkd|zM zRclqMW#u1%`QR%p3p(^;r)YFPU^;{XQRo*PrbGtvPk{gXkB&-N0d`N=%M&tydgFU% z+{^d4Mj)~_L_uSAi^LN^=8)c=`DnU&Fc2LL&<^;#dv{|_-p3coA7nj{e1iPw&@5sO z{##Tcwy!$cH}}60lY7P(naJ}=GXsebM}h``cG*e=^&kF=Z;rcFH#UHE9hxbj@Xg|w zfYz5h5i_&D3j{n}_Pb|J9^#pE9#k0{KN1LeL%jjca<6CJ7nM37!vV5_NPEh(cxfQ_ z$Gx>`q<}M|2_Q0U*`Ekgm;4N3q zGuJ<-1P)mzPhIGn1Fnt=NZ!0bAb>JbMtk-&B6D=gzMhyQ(;n#HQ@?=HWR!5VMbsUOx6B>;|UmJ$An;LSX;|O+aQZ`(mqNwL1Y1pLmqGt@&54)BZkUk zKak0C`H>MJG+w;iHz(SD$@-*Yb5BU2zU?6xJafdZzIp4@sE`BQcTfXr`q&0rhvy&c zo4G%z#MP=WQ)764`~d>9VwI7o{F%1>KAxd{h&GwANZbC?xeBZ!$#urPQB$*uN;z@w zfb+u!coOxGVe^;|W8yVXsl08o4Jr#oUC}3H zC)*d1vO+%XvA3c!chKi)2g=dC6&V-4c!`kZ^6yE;Jo`b+yl|N>f1`dGZ~KpqN&W28 zN69dgod1uDPGcR((W)WO ziLLj(xEIzYQCsdhVI+P0n#6f2EM2lh$c9wXq&V6-#3>TgrPD9eR5| zi5o=L70Civ@_BIX#CimHg`8rYQ>Y*rKvV*fSTCpAe?WW`vJCkE7fTCLvuC0W*pHRw z$TpLpGzUPMBRARWWg`(xIh~ga^;bP97`8ddV3K4f6#psQOA^czBoGtHhz3X8ZE0Wx z-!{Ng`arw3ZOzPCvrM5B5mI3cj6e2%e}Y809VKNjP`_xC7qSf5l9J55U_S(PBF)vi zcW*Ou=1d8!BU_+dyLM@DmUQ>acOc1`7w62GQ|xzH+Jke1I`5)*L77wGLaEA^ct4qb zE|Yr(Y^Pj_cwM~TLZT#fvcDzzVsbcA1p+$V!8$KnvVgfT8-h3yXX1K14_xMBwrh_} z>MOBblhsi!BtRx)L#6~oHu!A54@ja^!S1$wJ}gA$)SpK}J?G2hxlqQ=$$(%cRJXX! zw(~OCh{0@VMw|Ge>?|rE1l$I-G*MDqix=nPyp>BZ*5g6O!iwvnXP?bNJyVvMYdFJe z9(wu6kVrMa0hd{Hv!GzIt+a(UtnQ(a%6JX%!MVTZV?s=Oj$%)QP1D|r4W6CMQr!Dk zEc_V+#ga#x7(j^Q6r%o zib)91EB?Q1O6&s_Z-xd98k&}Nan`X@N7JoaHz6hJ)vssD*}oG_^^4sY&$o-AZx=2s zHgPK#nyT@AWRogXu4g9Ct84ga?w%8SQqK0*Cs2l3*fu(7nNNCESz*(#Fjxp`$y09%_Wbk z3=~p9|N0;h&=J6tYz?CRF&{?S1&|i-kf?pS3X({l-xo1Aj|l|qMr!4fBYe}mfy%M~ zTB7%U=gTnxB#+unWt#v(F}o$YyLMHLWaqrMoovhUL|~2{?1_=|rS@EyJ!7EEy}pWp z^`bz)=SFosbNE0{qRjy>sWZT9%83jVhQb&~0|w(?@a6pxvwwfzJoA2FdbTFII*@h( zh=vHcI8mNx{ zIS<-=dmpqSm=*&c$95sV#gu=qI!t z1PcVoT-*LHT@evEAV>@P17rXaKgbHvN6EN3XlLK-*3~mly{lB*SKk@|qmSKP0d4#W zh{C5Y;0ba6S-!dNb?rC!eNdKD?$-9}(A+b}+qS{{oa>PxgGqTbrgBh#;Qas8p}v$E zqw@oI^v&d%f$7{r``^@gfdJjq(_N?8I{PZHeZ&*6`-KUbt>PrX#2aF&l4#{2X-4?w z=M{Rd)ZIJNc(48oWWOULiF8^M&>;SPnF3tx;+$R9jbZhJ}n9mwK<+~FE` zy`n_Tp|_SkqSvC|KzxzC5{-Fc0u31jIrq(C%_RA0 znI~iNNBfh{L)aa)nO`wW^YVq$Fpy2hR}djU(RVc|(|K zSS1f8&zuXNBGx2DapZ!754|`bv7B9FvbN!Qnrw|pkihy-5(+{h-G&=UBA)47Z>3$s z5mD=;m5^B~Z{HUZw1rq8FoE@NGU)>V3)aVlinLB=&}4m`}&;F)`8|3m-G2Z2Ia=qH6V#^xHdhj^QW-g4|SvoZRlPqF?Lk1{)7 zRnJulC+-Eo!b0c*?U(WymLH@pnUO2j_jsIu85wefq8zf^WVti|yu;2Q!33E!!5= zYc(|MqrRzFsj6w)wymjT$Ir?&zUk3&jR2T{wOkijln38bQ2w)T6tIH?nEzuS03v`B zpf%Dv0KVw_kGaejQ)o2f0T{11$`?)h&*!ToOy`!K0Jr=1Gv?NlBjz9PDKXHrzGtpE z&X;olh$CwfpW>**YRC1j#3S0RXE3cZn1yQl6-Lycf7G06D-h&0eXzCv``b z1mpqH>0>@J=H@XmGq}5vY!B`c;1e(y8LIy6J@e$dN~++k03k%S0P;1EMz4ONU_Y`k z0MSPc^5rvtvdBM?(Qv|^p0xMqV|{63oiHP5Iw1jFIQDz+aY`AvX{He%mAZvg0f2x01I-YCl%uae=y2Yt zcSlU$_P%61@cAPKc|ztu3XzqAeA7c?ArCae>4RG$;yZB9tD22M))0o!kR@c!h~&}5 zQ6Vmd_fvlb?iI-~GJ^17Amaew8}OXEq&>x$-1Z4FK4$-5%+4K^oPhwNuahP4)^!mf zp76r>ZB-y`kB7*$wrzIlY|Qp{j6QjR)-?oJWqW?el4}d~Cnp$qBnIEmU)3)Zk zoC^sns*%1wtiLb)kc^gFM*5PS1xZPpFwaz}q=XIg4xgu=K^QWwe_8GcIYj%AQFYcZ zPmHB^?4TYH`}EfA1qf976J8nh>=hl&siR4*E8IWJ8fk%VCaA zeRppalli7e{XmGAPNgt&E(?NzY(SoY$aU0BmHq10C-zk(%_bUh-#x=ik}!otK-!S| z;01Z%)`bFqfI`;_Booc=6yvqs&{BdubpSn+1 z1|lT4Ht>;pV{evAxmcUCSD;->3+}`NMeN}U5s6Oy^Mbr%j|ccj+j0MyjI;Ru#*6Vw z^nRjzTh9Ardro9m#n3%rpOLEmE2r6?7W!cBx^8ax|w^Jd%>1yd*)fr)4FwQAsH4f zTxgm%Z(b?@-YI1;cknFZn)wLIYwocHbO99?0nvN=Z!6^lwBszT(cO66k+lxi3nlRr;{cl88QXr z6E_W9mj?<9hQ!H^2N&1t(xr=BGo9XKX~2I-3>L&J+HzSuWpix?I*V2otXsm=IT^v= zvMLe}9s+D`=ofr0({!_ZP2^^ihiY=Np*Vvfj%0`@8=|q~Sq%^n(bz_Ep(wg3(U3?y zy!Of~@_^iZ@ZeBVA}aC>MNyTPh=wu~N^Hc6Ws{tLgBQvy759w<;sI$VK#H0*lz70? zL5YVRrfs|SrnYT^3Ki@Fdc|_HUc%o*>r(&<7ZfZn^p__~x&V#^mn+z=!PO3+X_FK7b|w{TrVIqI(X|iFP{Q0~r77 zp}sj~UyVK|O8^iK(gMwOH1+#;@I=QS(24JzvA-{1E0OE~pA)ACB6ZZbu4gVd*cSrh z=iiKgkIfo-=JR<ynw2J zzi8j%-vGe-&-Vh6a^d>O-2jB*3vt9i)tLuS2E4^{fpX$S@Wk7J`Q|4DNx5f;59$q| z^QYySp#b4QzX8}h$=3U=FKCoIfFYR#pM3*p7>KM4(f035)pp}PkKEN4vui#J>2ua_ zU$QyKrhvd8!v6UWl@!2Z11)}}h?cIDA@KvDhlZ($^yATc`;1}WIxmPX^e^SE+LzU?4ZBDr1DOToiq2>EEHzTcRvqA z;s{cMD0@5-cIo2Dc_C~dL#{Z|mwO^opZdZpU6{&Y9tM@LVZHGP@j-_WI6o44kR#G4g+u~%3lPZKHdh&i5;tbH zehCDEWJy-n)DLS}%34UzyR1R&G+DwWfdae$b#jrFNJn<0BC1MDEHKu&Pxp%7W3r#f zbPk{&aW24pvItU{Qf7OwHYVF>vvZ}`hpbK!d{tHlglgx`oz1u3eJ6(QL_QZf`y?Ge zNZ+Xx7YSZg1Ve2*x6wkeZJc0WA00mi7?0o|NF&)XSum4{efQn>L)&Kcav`93rZ66n zsUwRa9s|HrlR0X}j2W`;C+H}F8d=L zV4ewHg2WWh#7rcnn5S8fWfS;JS!s*XuHm>YeW^4=MXn@6Nq;MpOj0&wD8%9B7}`7W zxj{L|LK-`E>_EH5i2e!xZzBYQooJ&BqOwZYrQ^61%4Do(NrRq6FpJodCP(gxMH;|! zCL}{i4;3~eOgL;D-1#UA=Wpy684wS3>eQ7n0Pz6fhRhQBmyAbh zolV$JKmI7MNGQETo7Sse-xT>ZO~op8<;pGWg3v@NnT1O#n7z8KmgwuYO%yZ(FhuVk zz>Em}e_gEJ4SV!N!bG*tpT5vHuTIho3BXj$rI8#tb`RflYVMgCivj`pE_x(pjvC~N z1kr9?jR2Em8aNMyyHAS<=uQMXpl|(JoH)Ez! zMFp;rvLREVPBryo0MrDeCSn;77}=XzRTK~e2n1~Admr5z5kleK*AY6EC)U(c9^b}xm&@uDRfUA=u>Pom+uE?_iR zOS>lOnE*+_d!oeuJ4-W9Aai!=pkzi6nw^k&08qw zgzIr{U(VO_69G@%6M?>SXM4V3zSQ}$P#N;;2O{D}LEGRb(zJo<|C3QeL_hLPWVggZ z`78*v<*U^go#A!rP)~>`%1vLq=2#^NUie7syIV_70CO@=s#fwO)1#{`|Lgx%atawM z>V|#=piVm@J$2Zw_E}chlePiu<{pU3hbUPX%7V49Wu*_&CXjcKSNJO+!9@QfJB5A^ zN!PD~F{j%xga66)^*oUeLV9Z7KE54OF&R5TjxSTd9&)C~4j7Nyx?G_B;-}vf6jy=? zKMUX1b6}3y-51koG9OME8c|uTm=ca;_)vd*57MP^9Z%Ya%o>OhvLjZn)%K&UxHrK3 zdNn;EfJP1R&F^bf8jSj8{(9|WC3GN)AO^|4q5t1$=KzQk$g?Vyw7h59{)6P!&YiSv z@sQa2(x}dhcHGd}+u56O+Xzu}FjkPKNCz~)5 zm%&g7K>N4Q_>xG`lE@T50|I1{NhjoMjaU*uj06Si+j0exi{hNrKkM~W!8z<93Rui0df&At`ySTa`2v|sRf*0Ho9Yun0I zs}_&9()4c5RV4%*i}w;iYGSA;lz7?_hm&xlE~q!!jo;;qY|0hvFKd}3u30&31D++( zG?`Re^T8ZSy*W&Xd5ZBkYSgHLNh7)AqKhuNC!2`%WcU*0XU~}k@UkyutS(rvK;{C6 z)#NHW#N5vLoRN7xWd9gH%uC=sl#^!_^HDwshFt!}^ZfhozZW^~M4&vGUu8PXgy$i1 zRi?qrE<+@ndCkcamNtNawq!nYGU@pw8S;%uWm^AR`@uXzT_-*_T-|i+*zxWQF1XR@rt>?Apj6sii7xDnq^*W`i8LOfk2#+Ep!2aaS992OR|O|tatbPvUR zOz4}D42eHYkn}s6;jk&G5KSN)qV8uXr4)_2-$yt3?6TjMnMI4fGkyE^QxoPm(m>^u z;-!@m$cOmshGg%_j*yIt@IJiUh=(Rko0`^bTAR*Yx|p6ldz$9WTgdp)^8Y5;4n&^- z=(1s9ae=(Vcgt&=4Mk|{d!}9c_NFL6`#fSQMb?Q?Es?^I4oD46|JF!!G_oaq+99do znSSj&0h$FEou$4BPrne8~a;=;qo0vVgD$?xZp< zkOE&VP>G$Qm?uWv0J=n76J3wT1g6l`4*)O#dh>?%o);+K44BF1#B4n3nTN;4%%E<@ zELrK9|K1rf?|-hk`bglARRO3AsD8RF@27JDbIYiRWMb5=?wRBF@T7dyJ#Edkkz>L< zy1Bh)z-0hg+77TEfEND@BEa#UzzYNNhpYm~pkG(2tPTDUcugQbM799G`^2^v5&M{C zLpWT0tZ#Pf=G(Fc0@%MeArMcHL0z@2FE~j3F_44$Y9a07Nq<`SQ(&IDFk<_s5#odP z2K-0&AD|q=Y$UuOOYVJD4Tf($$(QUHY@)E&gj$FpK`ZxAZurfPpjZi#zp+r$&8 zEHwWC^~t_?KQvoL*6Nlp%LMQp5@1kQ9YdU(_9Rn*_UHO|HE?a}fw3}i2AMEQK#)N} zU0wHV%(UKK2{Q;TNIl53@0TbsNZ+?gp3mA#}FYG91=0d-VzgH4gj9d zLl8i8P|x%k!26>HsZl#V6HmOWWZb{6j7Vm|?WbrPF>CGE!L#SF^G6fSDj;Ktdw?LQ zQPq<^36M|yQ*U^dknu!ccgYe&?0eXcGS2D8jJ+Bqw56BfxLTd` zTtP}Q0x7gDMO1Npq-WUEBZZ303;Wb9X|hZmLe^H!axQ1yq?Xgk-VnJ?#ujsOJovZ? z!C;>wu`CJZt>pkS0qAyP#1Te?ltyy(dj0j+k1kEt662d^FwYsX3=(kw&dvBI!-iKj zm`$?3F?U0*vTvo{^3~qVd#oeyw4q)YPbHB7xsnU%{!Skth?Zxndyb{bWJq?d_-8*J z6Wm9pfIagG_&}x-R3g!6`)R(i-dsR)X`eyaW-ny3Cdwt7VQVBET((Lg`Q++?@ik$> zgq>_#1m@3U>n9lKU>G|y7z=6omTK|M`{D*S?()4?TMH3}qIo2|0mm1m@BbnP|rV z*Q{(8Jq>LCtW)1UjQogf3fi>mXcqleS?ah-`LzP{0YYMyi@7V(DR=^OXyyr+iqsN- z+o*kf0fR9U=64khO8c7Y&0kB%ViYI_106*Ucv~|)u&%PhXbtn8i zVqThnsj(-~_kiCJANXiAv~}OUnUW6>LzMeJH%0`2Mu#5VdD;&tn1gpVlC`i?NAxio)LTc z0;)qAaqVTRJTb|J48q^y?$aYe$nbyUa84Sc83MnqQt|~-i)CBk*K0PfY?Nw zL%@vvG!PAaB!Gxkzxx#h!~wF8v)3m(fs6t1;FzbT-bf}v3f=NTAVdcJj{4rCr*FPq zpmPdl=QrCv4N=9t5AEkkU*|rkFS0slk0$o9*`+yVx=Jo}v3-hq!5;)uZ~9;LN-9@$ zOdsNs3*KEkbpw|X!Jid zTM3emEC)z{L#~a(4K*L|ONYc@+$d--T+ZXbZ zz6(hNDZqFkON74GsE+=wUJcDIYH9n(cRy=CCi7_VQk5YZ(knE_ZfD2X1|tNJGro7k z!_@x=#6uwohTp^J&vfgQbl~IaP)j|2UE;L8IVz_yapg0BoRa+I`QrT)e=lou0Nhd? z)YbA39M3c&k+nPZ5>GJXd$Y@WJXvIV;^Fl6SyL9uaGEwur$bNwV7*Pd6sio_)?KEu zHUM9&Ob5#-R0i8~O$QISIn z?_IMOQjd{8Lg}+Dv0oGK1zTrp!%Sqx6lLGi(qD`{sh14fgZ=!<&;VZgf&DJ`#qSAr z;+~vR0dqX}$KSdCiXjkROfcAUKrrNkAlniLdo6%v#vf!6&qOz-)e2k0aRK0hZ#ho9WZ1OTVodl7zWrG*DL%Y!I%@=lRNvV@y*n=Gw$8 zg0je7aDM|+p-;qTe8giXZf%l^VBndLG*YI%3vT{rPRT|=gJ&)Ep08&q=W&utrJY+d z&1A^ev8`k+xaThQOy)xTxQVZui!Z*o-;g0gzW)>UFT2CfM~7!ZbkQPZT6jAt@$f2X z5>K4$V5rgJ$_AuI6OscawzMPwlP!yk-o1Ovdmg@|hUe4BIsQDP$%W=7dCO2pbzK%@ zOzaHwttD+c{%{-jbPr@ER#KG9CA{cw$zJ)W$M{Koqp|bmKZDK8pMzq52L0Q{pNC=#mKin0yL=UnHrT9JS7qsNt3S@ z1mY1O+Vka&x#Fpq>C#eVM*s=|j?qacQu~#UV?sm#oWAk5h(sq7@r^+&X1+I_xN*wn z_XEz2N(A+wZl1aJI8UOb(OO@%Hjv2rUabR>JNfvwh(v?~rb2?CZ~ww&zK{<9e3&^u z{&q~t$Fc&ge-0#ei2Mh@2Q0NsBA_DK4!6D-lXC+s1Kf6L>4}d2BjaLn{kh)qF8l#{H8^B#&xW&zSJ0I$?7VBm8fYP(@#tcg1p=p>X=WF>}<7Q8k;b7;d zvLj>Gv6)I>y*AkhnMYrsA20YhFqa+fi#%ABP=X9UhK|iVk({D`lSRN7M&^w6BlCrx zNBaN(AOJ~3K~#XYV@v|xJ4y5^6+Iyw80%b%F@d}knJX_`?wc1c*ZRgsToRQrFyU)8q^2woiOdybvOp@4<-_M8 zIUaZ;Ci4Yje9jM^5Q-cJ@1(>X*E{m2m>IE$W~JOP!jt=8AJo~U8DwiPOo3T zPV~TwH{Spsc`|@yovHew~=fLD{(%)=-5ws2|!6a3$5zzJ2?G zmLc2zTT$-h|^z9tI zO@f3MYy1isj#ank*i!p7_7Subb;o!rt!{a~4hK}xk1}dYTW$bF`U!h&z+80VT>z%& zgD+VkBn0~nh$=v8Uh#97o4W}B+maa^rQOFm?-;;%?sxwD`32YCy6v{x{+chTZpsXK zkPJX~|L@hSm+U9!&6_6ydf5^SiNEjHub%{FI&w2#hm#Y3=bd+CZp#EK%O-oFq!(Ep zs7EB?B`#3V{Y-rC{{QvYU&|QEMly}-W!o1v6hJ19a)XiP6Yx)bpU*W=zRy=k62u(@ zo-kfh5kq7eoqO)N|NRs4FWaNk5=n~}FP?8F)&t!_sVo;MEWDXS;w5cL8W_%WCRrL( zNe=@iHwXc)nM+Et^CjTH!KMJoB3L&T7>P!1`62=!7g!)Uf+QD$BGZEf6ihjb!>u)~ zlX@;Gt)2Tu%Pl@?EWSQc^|4Hhi%RogN%nxzhkJD@FTvdTCJ*S zP``m4bFC!fphYd95kez*V;EtX|>jOLknjW$Kjn- z_&t4zNapC&+?Xk|HS(Km1SDrh4N<}bQUYM|(1B|HOF5~ZY4a3p29zW-0zv_EW%hB% z@(>MAmIQ5hj{W;h&&LF$2jIMUlrIuNlplb4*Dk)8C=*FuxxC)X&_15I{|zNC_&?G> zWQhRQ<8eT=H1ClWnmkhh>b-gxbH&qvl%J`XbMN0@BfzOY`~{90uuaA6(~& z3nG%CKvn?vOqLF1hnV?piDypR&o@JQX_ms($M^!;V=@llO@ur5aoH0wGrT|J$}#1nN7p+cqt zQdE-tQA4u>_#MDFZ4AjUq?d2oAP`TF_r5eDr$k)=c0YN(Z{D6}iVd6bZ=i3J9YLR> z3}huBlZN!qvAg?1w0t~E>v!cJY6vfKME3h1-VzZqW7;=?0RNB|NKUogUL~XGAM`ge zdXTrm|6)J~l?g+d?9FQ%u~phanCz< z)T}1@%pTqKK4ku~{cFW49aHfc4~!M@+9-m^-LmV5LS-DfJhL}qqwyU=fLo}w4fK~VGT}XVYbq$tiQ{LWh)5SnPmhz>m}Md zpVAhI2NARY6x4gF4YWwEgoMqOJc!0m2Lb^e0|o&6B$Fb|cUiI_uP7ILGx|IRuk6h@ z2T`+`0$WaVJJSeQiPpE{jWNl%sA$LRCXvfI?jBoHagODCOl($$4FR~<28#JFrEanc>sJM%7W@1o$7?d_dp5+nmz0)XkcNF}+y zQ(ufl@FDtNzA{+I#-RVvCW+Yuh4y9O+Vkhnm%6GPXPjQr`8XhMT&7#52lKeg%F2{v z;PZ^*WEpCu!F0Gj&yo0bV!puoRL0t+B{1^&*<3!KExEw+E18^`TQg3YG^tvXCQUZ{ z3Hfhh1Vg7zoo3#3*IidI0ka@0l<8TrgNdJsgaMpQ>YdY0O_%DL3Vi1~O#Cba+y*RD zK%U79;F_o%HYL30VU!Kanhg;^ln{#+u9xcrH=FB`-9bBSNn@^(4kq}LCVQ8ryJ>oL z>ibW&cqjzX5Kj>8M7+e( z#`j_j9gUMtO5*VlEtXM=msU#hK77TBi3c^8)?F3ZODTD`4ZuA-+hq z0QgZRfP273OXLnO5;E%_z@#s3}iBJ4`doZD10A+!Jpj| zF<&lJSsciggRj-dddLlisk;WX6f{O|1{3O|ck|86MG6|z{ULfF8jz@g+(6O^aCpZ~+CQ$b z=l<4@S)J0lrzeI*`AU9dhdnf!U>#edgM>ym_R` zH_^6$$b-82=FXP`)3TvG*VPd-;_opt|EEB*1MoH=%j2WzfkdQp-Byh}X*2v8Mj!2q zBo-b8Tsz`ZSDtCsKqY+WBY@-d*WJ78oYthCO6Pp=m6AP>7ML^BMz4;xeevFy*{?6= z+eWfJ&O1>3DIlou%>al8*rtAOKLtMsJwF5+ZH+&{^o8oj06-1FMSmkRVqK9ZZ3~gZ z{nPH0opUj^kR^NKotOaYkRgy(ctRlmBLso%+w@PsY|3+#?H3SoTo=&z!>fmog z{*y_x-&Ij_&*{F93SC?Ia&JftVZII7hP)H^w`Wi78;}H;qt9BTJ{XNcIj_&>F$a4x zPRVRIc^|#@sJ%TQAIJ>gzV`3u3t1WELUoxgVL zre^Z=q1PsB|E5kKJ=ZtG`l|^##M4{XM$A+1#)LFMGK%p|+t3D>!b2)Tcz*tkW_(Zw z5G3uIYFVmQ);8$h4jDAfvccnlX?*QEJs;&lqR9~tNWab40>ne12nHbnFjcm%Tq7}8 zhoD$|un%Ar|EGKg_2B!U2 zgwiPaik?lj?n@_?M4hnF-mnFYdI4yhj8Lk!=N_o9O!r=8K@>S+fiVoRz`hbN%y}(j z)7P?*h;k$d>&x z&y&+nKmF=L>YoEbUvtehqw|SBFz-Sd5D=OUz-7)r;u=h6_Uzemzs$+GW;6iElLf>1 z9LALo(uDKSPw8_+byMcDGJZz>i8-09p2WYoOohaA&7C_}=13>)l*xfQ3H^^}IDIfv znMtnW>ONoOg2SAgvO~6#m${M**_3@-B^KP8gSKW}6hA)V@4G{X4tHO6*=4W(3HNV< z1cRNdV)h)PiNa@bn=iewOb-`5#H3YHhjyLLvBUAEH`zq&y9t{6O*R=Nd$C9%HH`%Z z4_(J}yJ&@c7&*tkSTs8l#c2o@QW}Ye6%(mzhpqWo6E57+^-&fK)FEx8ku{s&vnj!o zp^!vFI>I55P)J8E@Q$=y7WCC@Uran-v1xQPTAV?UNHi3`Pnr3UoM?!}Wkf`iWjjRU zyc&u&eV>^1P!va6xJ(Hp9yUr!xwgoZcwn5eNo&-ov1!>#iHGhzdYXxnzc-{d;?PyD<@@Z)4q%Se_b=@`>3f`b&Y`ML{on}1J496 z1VS}hd;fkKfqdHjz5sOq!rv_k%(6c`bJ7qs`hD+4)n_Nl9Z8fsUJ1-YXZs=#gmesK z#AQ#$1RNyt85twMVvK>wbRgOqAfEFBv`(BJ2zf!2a=-SzXvu?_VWbQ&&F298hWAr& zn#_szO)!G>O}i#aNC5BxxPCHQwdVnW-@0B21wd#(O~`>u4)e|IA2h-n!1&(R6$nMc z{iYKmX5No#P>mTfeivkbpw-X!h-8L@0JL_%>h;g5mju!1fVs%t01jh%J#C(v)B*-V z$^c+eU%&pYnHHE!lPv&fdCjp(jNm~4sP4QVYT7CO*^AW+0wUwPr5d3QAnSWdypXj* z-2-;={efLQ)1rYV(pG@W3x4)Q@(3+^qREkcnmSJ-^67qLsUZDCdjaw{tmT>0?v9DM zZr4_xWC{@RPozCS?Vde6X@4Tc`8-+mkT%HpU^EWt^K?l1eE5}-YXOS#d5n;WJm0>a zCj=4X0f0W98?-q(`?OOu8c22mh~`xhAt=N{mhJ6;Y%dI&-Q zZwcg}0N9b|5|eb>ZkUT-cf2nK&=7I>V~~wOU)rO)Cs{4jSIb7~c>+L<9|8u>crb7+ zX6A2xR0C$t%Q*b#)`+>`d5z`=*niZX8xriy`(olNKtC8Y#1~mH4A#l^82^>ZZb49y zDM3~WpQ9h*x$)i?N?i2s=m{x;N+0b-mIi$isWjRX0^ycXzJTZS7wVWy6|xDCaN<1x z{U@`K6N-r^26A1;4fbRlV^)nP2<1ScZSP)MUkB{y%eDA!E!!qj?uw`k+Z6TiXjn(H zj2J@@G_)boW%O;vE~fO-2A}IQgZ5<}BFhRAl6tIJ)idj&YADWmcIo7)#8+iC>E^l+ z8nht{Q&uv(C_nuJvVzYcr6ie7t&A9}Lptnf?`Ji2T7#@CC79NxAs*=8MM3_F zhk_9dcEbeNm`D($3zkU?lmM85q=^5%lh4UDQrStMmPSLH=OfQ<_6oV42e5_pEbFsE ztgBoGNw!g=lm&pIP-e^QsaR_OQUF{fJJ`>#ugF)VWG>_k{V^FiL%UIa%3c=H>9k|2 zvZNvwkUE($V}|Tuv&mXWBp3*`%e4N9kggfFC-s+GwDP8;17jVay4X9Q1ds=Up=4sC zK<#Av1ozCG$(}4#1o4(SmIpQ;RTs9f=J@w9eo*kTr`I|9J zT`#Au=%bhBGmDFPm$`&COa!@;J%7Lpc*cJ7 z%{QCiQn_X{5FAQB0B_1Cf$hNeS+izIJGn8JEs2oLcU<-a&;R(pCzDO$1qiT(`PbsG4&F^ZpxR}0qy3<=X^bzGc|n9=UliokqbQEX>Zyr6)E(m zvGbNaO5M}r%~^={V6i}>r_;I5=ixL^oo-=CI&z5{f|7vqRBScuGT&zc%j5unXArQ6 zL`JAXhYo2|A4@|Bu;6i%Wl4+qd=L+0O7M_MOb^|f4<`F`hf7`MA;-gkHfJHYi7x~H z4}YJHeqkYrhE4q#lKVEqzk*QjS+W<3e;;h}K1ld|H1u^4FeOau#j{~u=-CkO->|8d z!`cM@hIPg7Q~5l&mqY-p+0^4<_3Aa7dpxY!==Bi)es#iouE8b@5<>_iqaF^4eh!JA z50Qv3QJhVhG&MbY_A*0;>|+i&^iXr+$dTsoBaSrv`}LDW;aYo*#de%yFdYpwhtXce zSi08sJx$F9ZO!u46-?_6J(tpFp%U2NB@_tH_ZM^*m*+0{h3_qH;MqclHFN$KVw? zo!?gn=E-+r0(t`Y9=3}SLua1OM0LOPv0e{wxOS-Hf63!90iB8V##kCqmj43^;$wiR zGmipgLPMEoOU9$8`}%KU>b0|6I__y?3F^W)Pwo;l>Yn5hs^UkmQH zS$)r3^Us)or~tP!9*T(f03a=ZC0-Yw&Qp*bS*Sj3R8EJ;X#jOzV!Z1sPhSPt6BQ)#9Z z+MZ+Yz_8?Lp=^ISIg$S>xdi#(W{0;dW%%}mukvjsgrEa>lQsZ#ebAYv< z+BP0=o@z01FE@?!<@@xd8%~Hw{Xud}nWa)ye>={Tx&oYse8E3}zVh!$$bJRV-^i-r zZ-BYQJ|On|WFA0TJp315`s>`qf%q}tg|T}#B@AvjL9fquF(5zex~Tr&-Ure}$aKy8 zE)b(}>KF6rVFNtz3Lu&v<8k~LARF+Cxa%~%KAAihJQ6cC?e*~!fj|O~=RP6JUYe+0 z40oL3ix&j_eX2bd_bQvLDq5zId;8{-S(;^2C&YKSf3kg$eL^1UqDN!W=Wjky>t_Ga zQE8ut#s*@Z{lij~`Qm;bKhGCAEKHv{A7s)qfAyt(CQU~kEf9|hK1+l?ehidpfbA2U z^Nf4!d=#ijJl|oQTyFoq=cQ4}fNI}Vvufx+pUu;AGESDPP$@P@uzIyNK6n0W#}1h- z)H#_`fcM<*9sjoDuz`Mt>vDRjd z=)lB69DqQq?ExiI9RPTl?n&}}uuepYZ zqmN|Ynu*s!D!_vym;O^a|BOH%6yb}pD*JNzfBJ7ae}S@69Y`cLm=jpjQ{U{Tw>B`H zdMRnnq`p)2m!dEzE16Um-=Y2;A>}0ik3onvY^z6n5Fc}Z-A5M`Q;+$?&LC2e(VjGEQo;Ne+zWz+vA|rH zn7NSXyTBaHo*9xiQ&P&23!OW6mV4uQndy3mGV$3&qwahij046pay^9t{0rfokPBH* z$Z{mEE9e`E0T=P@cHMQ?^=sU?an$^IY>}hX84Mg(Uw!pxIurmp1C&9&JWLrZi-QFU zfVztiC`lvV0nB_ZlZ9lm$+AMImC2;WdD4*uu-SZ;NsI}Wv@{1wXM2=H2C$GPiV090 z!Y9`wQ_=xu-5H>5D+h}@x2R2bu-N5+z#@@Fpkv`TGbr-aY&cziOQkPZ=p!*BA@Mzn zdN$QH?4~{0-&18mZ1O(zdDuuoL_>q=^b$+CW@&7*(;l7Jovty6YS!)PMx}v@zA`b=#U>R+clr{9eUG%qjs{0dtAUCOR6R4mlX2gAd=;GZ!Bok%(fV z|A}C~_%HxNPck2#yCh;p-VqfrRKV*%0dk~jh-e0cBLbg@X2AH9hWH{QgSPziMHnwf zMD7Pb6aaVnw}F7@WD1-)%oo5E&=4JXp4h?I2 z5`j)#k%_Qd7yI{5R6+*BTmaZHmqpCcH^n59oHl@18Pdm-NO7_&ASFJYsdb3KFm3SX(R3b4~}C_iPQ-XM-3ukJt77myvm7cztBbBwLY z6d`kk-(%{0$ICI(75{+x>c@a&5q*k1bKU9?PJs{#|F|e(Ce6}owP~zUOMux(?zG%a z$r=0?$Q(g_>ge4))6=#)eIIa}_8_C;uz{XySBom$9*LA74JpHTWIn2fU^~ z)vV^3Vg2;`WOzV4K!AwXL8Wjk*t&qYB8vsD2K*oXJ4Z7xAP$b&-4|IgGI$^*kgp<3 zi25b6pR69P`{-Nh=|Ovu&47FoQe77x7Lk4opnuKr5izoUa|(o=`Zt_w`yz(k+&>1% z@7@?OL;LzF6SYC_iR=opaG0f@zm#kxy+`~P0R1t=hGd~{@cWl1=~#i-s%_f?GJ1%0D zuF&yJX4H+(>F4+E4WSV+_rIY;Cf8vuq94%zgupDXM&7iUkPFL|h=V{uPKmx|5yXm`YZNox}Tdp50jB5=J(D61svVY>z_pG2zEZKAU+n+qhUo&)I0y--#* z*F-Lsn#@_UM1p1twSi?l#Pc|pNKuFnK&3)?(K){d_ByG&1z4xD@h)pWyi|1u;o|g> z%M!#+CRG%lu>c6wx^-*$%(Q9KWFM2Q;dtUfq;od%S{e|uM)n!}G#U7#WD4Aq1(iwr zL&OwqAz3Z57s$GCz8%?mW|Rp)5@sox(k8KP1{8g1n^2asJPEV&4am ziDVM(7*C96LM+7p4s4C*C!jlXn@IEKK_!IqP-o1G;8Z+6D0^u$7*hS7@xYt|R+r4^ z+4+=WuFc$#>0HWlhWV6v-QkYTOEVJ#dlzh6NCKR-0pq(63NQKeV#t+P$mR379xjk0 zao&x;XM(!NjvagQmdNJ(^T;E?U>kYN>#x6lhKrWxCl6%?R9Qr2}T9n?GW81k_so z+fvaq#~}FW{{-fxDJ#T*&2tbH@5fQ?G!QX`-GV&|{s=Iapl=cOzMcU_= z6`na^FZFr=$mjFOIT5wrs*#aw1kMZSe&Y!dbIRSSbx)ubnFK@>KlLu!`JQcaPk?*0 z^#KwgFpy?~Pyl#Es^(pLu6L&?I19i|6gPk|T?}Jt09`cQe_!L7*RRoQ<4FK$|MW!> zi3A_qT_tlcbOvY!gok7qeT;7oyIwO70Jpg($N)^V58BZ;|DEA_+HC*;AOJ~3K~$qz z0=J!_06z6b1pP0|10gq1!> zvLAk3p{B!+j8n;|5qtRJlYqn!*M98nKr#-fH_COuj-HSui+)vkA|m4Zw)4zguc*QI zeP{S0kpuuw9|F`S+X3Q;`vzEr9HGn@9HZ+GApi;V)CC%ezi3Gy#Dy~z#9MGPT2vmC(qIh0Qv;&gKQOlM{?VS`5m@3|+)1=^i!0{Y)CF(T77XR(qj zB2~3YrH#mt;Jz47&J*JG$y#1AVUW8*lFE5j96Q*TEF!Km0PsK$zfO$5Rh|g%hOfU3 z%*eew88h?4GGNC2^t&<1=6Lv=h{!)dwCvE>$Tb*a!v^@~$KL`o+t%R;dqe64G9G_e z>Y0!4P(p(Pxh^tO9y~i@o*A!wjQ)e16=v6r4aktbw$2$-cxy0k;K#x5cj~Mp38c>l zwoUN&pzl#9_>PcOKwCg8-uZIOoO6KQ6NFqOqQn!jMT{LtF~%`ZK>DuBZh%Z=+|g(7 zxnPXa?@k%&i*E(fFy;C77ai*|CIg*!nG4Cy<=;A)lLC z*0Yp1SCERb0HzfxxXSrGqyw^9Z?TRjs{pU~x+9vrKA%>TvtBUqh0M zNMMKsM}iQ!3xNh0T3V3Z`3YpIv&|ma$)32epAS+<=7tO5-r&*woqRf;pFO(Ymnc`qFt0G5r6U>QF%obC#@L)WbEF?R(j`{|Xe5~EQ_N}k zmQ11#f>%*q=aWzpX^<_!z?c9}iT8epCl{#WDO09MeP=4A$8(1BLN3JnUhr}meOBaceQ;%62kNmuen=z@&fp;fK=4D%w}2aI;-3lSKL(?=fq$uXq_H zKY@5iMlKXuJ}KP;fkizJ^F-;SY+gZ%_vv1a2ymL!%pV&ime$5eEUA>zx+Jnno60XG zmspB_&%$ZV+D&Da)+9(PrITDrlv!H4X01eaZYbIy_Y(xMIN~WmYRPxM^W{a~sNbNz z-R!n8{Rix5h7BKXjyUQlbJEGDn0<#1HJv(lk+JpLuS?DRdGi!BvV9IBf@`v2>D;}i zsZy(zY2T%n*`ZxWbIe`!O@+#J1aSXJc?!{*fAiD8y!J^TaxA>gJxq(pA$?BNmf$T<=5A3$CO z5SfgGX>%3qeC)i4WDQ_KixKtEE2Bb03?HD`5bSh`90!X)TIH3ie342LQ{sjyVM7@Y z+)05|&J7s(=BM}`cmj?xf-o9h_;XG16*`=(t}Pe5@r=K(n(PXL*zD5QKYd{hYw zwCFE693x*(0B|D7&%8G(*$jZa`}9`OAFcY1p{$koB=DUIWGASc4suNB?N_htNmc>v zvtpG>(clGe=c&F#ec$waOr){^yH~DJQ)cQ7P?kvWcc-aO1P02S9R zCiO)-@_Rf)kes^lMBlvi8TIW+G(QJ*Pk$bGVO09j8T)x65k`OIT8tB}k8~IdE&2%( zUYIw_hQpSZx?c8sAS4Y^V`M_$CqerhIS2_cUksMXR-iwfa%WW9lJih+WGK+)N8K1T zuT56(kD+}$=~I(taE-w1{#U);fDTHAL3$i)%dj9+bK%}EJVfsa4-)VU`Wy#jBmMow zkCZ@}GTV;hw^X`qzkb?3AshJ~K7y7%m9`VHux^JdFEKTBE%@Z4nn=Xu~VC#%M7jJb9qC{?`fty4#yml=bVt5y{U z@nm!GjQu?{TFj?(W-?iTe6NYBmO=^&fP*z(KBX)Y528$2d$VpzcDR6_LY5&_-LV&7 zEk~p+WhhM+b*_io*Fi=RLCn#uTQ}3EPoHAag{WfI^sLt@V?ID!+9MmlPlC?E&olP( z5qa$-k1{0?$-3GSGCYp#WL?g9V|`niaaZWQBKwqNb0ck*3J3)gaB2ss4wtpS=OC8r zg#fvm)wYB$MrjX+1ts>&Lhf(p&!1nu(EDfRRpwN5-Baz`la--YuU=-*pg{sKj~_oi zCohBezjyE6T{0;E&+|FQgHb_XfZ2WU!3Ud_Bbir1D*uF3FS0rqON@Ibhvfdoobbsf zp9on8=8`G7!1)N+OGc*>59iyF$)eV!JkFgvS29E5AB-BArIG6KnGEjl@%{|S>N&CA%93nggTul; zU8Gx984ICQ(&q0o&xF{-Cn6driIkn5Ipd%Hj)x0r2JrJKro>@{4#o z08G)207x^wv)A>M_-btzbo9v$MKSa1@(mIVO}4`Sv3DL|QdQ?0|L&dLr6V0gk={j$ zfCz{JR>UqAGo@f${y~Jo#EFl`pUqz)^C{jh~f(=oMAgBlkJNJKn-??YG zJIw6P?9S{$;(4BZc6N5=mecMz@B4l4%eeu_iHd$>s*Th~DhR0)Kykp($1jP=@IS?s zSQtAS&GtYh{w1bTD1gy`e~(@iQ|T0r0chT&uBXP;y*t?Gb^HyceQNdJi4@1MmEK%G;`&bDcB#Iyz0P@kxe`jW(AS)yaGDa63VUI@yK6UfNCD!!# z$IzDmGJ=Tpw!4UQZ{w+a4WK`WEi_|l9L*)4n>qVpQF~gqsrHvrR zTY@YR+5nSiBKe6N$E+HnBrg`I!8XRvWRC2&2iNb(KQ8s<*$IJO3z6Zso@&XLCEwU~ zu4($r4Nt`t@a0~AH^kRI>ZEzdn!q~%`I|l+Jv}ec{PabL7qTxVFR)oBfc1dL^b6`0 zNu$e-v3=~@?@isdva(v3Aw!~l@}j|*tYJ0xGvm{^_9KXtcjwspBnxNG z!&W{FKz!^+)-M8bkL&`#?6VF*e#y#FA?t(B#7*WL7)L`;@EQ6m_lvK>-_G^r_UA46 zL;rz1B5EFw1Fn&=K_<%!nqlOr?AM$x0?mLSi-7C_+6tp}j{ncge5t>aCnpW^)kGR; zv4i&XbPUv}X62K}M!*oBD1MBZ|7FG@;|jtJ!U=MKV={KQuD@UGE73^y3*!w_=#vN8 zj2EPil)y6mWa-L4_U>d2n7MBHFeC)BVR$&uFCZHEADK;%P|OpZP5=GtIlj&lj8Xb2 z^A^YCk%6BK*&dj~4;$dAR1tFmhTq7Txq2mw0Ro`0xyCNdJtYa5^SBrKLt)(0zD2)< zltgL{sj5>3+i?S-hb&V&({C8RNB0w*w>TbcPkk|O=EveXXU>{FT_%0-fi&G^7xhQT zRPMw@v+`3?M6r`c0?cHi&U4IpM7iVe3`tx=5DY=q0~rbFW?1lSfxO5Bge3R`5}wU{ zwj)Yecxsx?!|BRy}ZJ6@p# zgV`IicXU#QJMd`I)w<2t)K-)UV3!M*6eMV93=uUwGk#4sXBx_W8NYfN@euNUz|tP!i@5^%LL+ zLKw1>Iq{>9J}NR+E^8(L^9;l&n3MA^$ySya&p-M!BrNr*^1fxrWJq=G)C13M)&}l9 z#sP#cb9K5{A;+N}`}Xat<2l*67<;r=N#@Fc){NO~J_}N{3XsnPxhuKTO8^Y&4)nzx$Fzy!vUNuVO4X;{=QUc9(OW9R4(4|T3N8(=?a zb4-j($}Ak2^mzcVC@BrZE-&c-qt4(X{mw0Jvnh>~cswR{B9$s?L70oeh9eVWH6Bhp zc!@wL2=z@}CPUS#Rf;kfTqc7v^>G`#{QQEVzoY&eR#qpy{^~xPt-@kBT{5Z|%bhBF zAxQo@9wiNeAcdK9$(ayJ29WLGG9HQypp%8xuA^^taWabX?1pt)yA2E>cjfmb7l$R$8=fBZYbO%-mE< zK{6tGZ#^|8H#{9z&>6t(!0QS%gW$kx3l#ut6t2IB=mlscQk*OTqSyhPcWD4<9Y~Y< zo=jaJYJA(Qk*5*HfQWpL=w}S93ADTBIA3;eZjFeEM!)}6t0ND1`~20uOj#&$<*}ZE z;nWoo^h9n0LIQGQh6}LEDgv1rXx z0)P^MJ$6K;R6>XwLh0DB5?h(w^jZm#R=)gqsNYh`?p zcp)mBNN@ZXxQ4S2_Vm8d=SLpMMV})>^VH?OMqdNyljU&jlX3MySo4Dg!U4RAW(Q3E z?ni5)Oq*bgi?kL%G9(7zKNXE%!?M*@A_%Y+<6g2v>eUMLJdi15Ta2DAa_C;Bp3VJm zkMEdz{Pz1mWpQpi$=7@Nznf!vJ@>vGm)#nBN?@Ei*i+D&tQLq3OurX=W&I?O%))bI zbD^i?#sj9FA+b0tJ!P^vPj5; zAtQsj-2a+FJwGJW4Z~wLW5N_9yE^XXsq9wm5Fa8lXm%(G2BGxH!#2_%!UCe?;6D_~ zbMFRvY{n$S9Cb|na*g+yI>Pw)l)DP`Jjf{B`ETo)LZ-u^=KAI>1w{AcmqKgUjL|zp zK%1s^oI+@^H=_?TmKf*UC$9nPUwAhzzq`*G%tJJgjX-7*{rwLo#I&Cwtya^tAwC;q zH(=P#Sm@q1%ubkNC8a1324r#2*BQglnYjQT4Eh^&4pG4|AP4{XjwKE79{KIPaXF^H z^>vy1NK68A{I0Dnkv7iEQ3r;ZTI&7M4DS!y){qhOi3=aH_4e4CmOxm)$@)(~Qt_C? z!(s9~oAH2$#o340@qA1_^I0?B_8TxjZu#RM<-7|o)b#=z$}%m=GYAkN0y$a6LbA;? zvPnzL+Ku%{sn=$13?f5;uMCJ1HtWBHYtdYRW4Vf$OBQ)smf}D~_5rynMANbkD#_59 z`Y*5XcqX7?lmMzMEq&^Pz^=rM1qxtX)W|v85%cM2eW&Vo*(w0L>8|NrWN&3?RI{f4 zFpH1CnGWSGWQ5U9B@r{s>vihXS@5f|^M4t^ zaQ4|}pW=*C5=+O99d%Kc>jA~&otQRU(qzCOXCY7;sGIIY(!6xZ+dj}fs?6(QsyK?kc4=!GD}u! zX;V%lmNq%kVdDlR9#m>+!&U+z6PcxCl1rSQd5bv`gKQq%$%uz!(o6XT5D$%|^X|LL zph1J>*kQ-YDW{$$XP$kw4A^&HY2U7$ndCiLwQ_|lT(Cfihwse%wAtKO!v+ncd8<}Z zyI~6{sM}GFxUHJBXw}9{jP>Q~wL2*o|5Z3;S1YiY1GoPxE)C7|oy-J)cmR5UaiYK> z8<0GzSJOs}19~EP1ZaQKKu^Zp9#ildAQi#^nG<{$8isNu0KJ?KDIEaIKJ7)pP(WV5 z)njidl)jf1%F+Eim9|0Wp9pp;3|)Rm5r*{3lSTa_05&_B|G$2--Eb3KO(Z=;0>;y1 z1OS|KAAtCbF8mz;)d7Zo+F$`k2m4DT6(| zcbzBAzVVp;HlxAG=G^#nTBnA|nWex5o-wh17c z@^c6(kDqPtYiJ)&{(YUV=RoG=;R}5AFSzj}3kKsm(8bipF{U1=f57&ukMpE?Lo4M3 zVTA7lU@LWr0dluio`UFr+(d>`Uw545YkRTAy!{1xZIDD<8}$h3187T>JQ*mat0_2* zd=kVB*9<6p-JU79D+<@Z0HQyo9A6YQGD5&GvO9J`VdzJ))Ai=kSzH{t8p8A>~ z1C<}*D_k=q0sR3IjP_|%*PegnI@>oP{JMr}i+?&Zrga1107(^<8lqh=+~zyne}`sv z+)zglQY+R3D%thq+jefH-6r3S44O61#;}|5#WmB`5O`cSa#PQY4RoxXc7P|x@9V24 z!pI3ofQgbu;0ug5#w&ypa%D&N_jG=s|I!y2)3hZAr;n`*6Pjl~6jLcL>Jbxk$cTF3 z(uQlGpB#5vp?tZ*);k8$WE4RVz4(EZV>@p zj1uqD&Pa37%l6&flBK*qc9w1HH>TNkgKXmao#{h)maOX6S!DF^ zd5z_w&{o+3TiFM2tX%GS0MCimbA>eoU+NCK3x2 zOhehb&@TbcvRz!pL|MO^t$vq@-A>r%3>E zt?^`JM7U33AIH4PaZyBYdt=5!CK2_H@X+&RxHsLNip$(^h57pP&p#hf5qtWID9j)9 zS7&XD%=_64bq&qJo1Rnr63tz zef3rI-JdMMP^F-VWI);gUDYUwP((817bh7w7Q_RQg?V}T5_3R7DVmJwWICkN4_Nr+ zDt$g3;vsVqBAylrp~QpwJA@t&N-AvHhGBVA+ae%=7amO#6xk9hs3OhZ89KI zy;kC3Q-pZ18;-Py2j8Z1V=9f8!=S+s55we)v(Az;&$7hBF1zkxGak$W@7ra|)aL;S zjbF??H8%5C%hs)>Nz)e6bFV(qt$PodvAly+sZn3G;Wuu!(f@$8L{F0?fEtw3yho0x znOO&nzSR;6<317v_a1&Du7m=S&H(acC|rD`r_s{@nyngJpbz{AkomN~#--zKqDIx@ z?~JLTH9#!VDuBF1WOv*(kT=YEh+sdche(UYHtHK$p(b@Ka19^}&RFwA^EAEWk+_2U zWA2D)h5`3EAP+PLaUr+mVcdxV$sdMvha@fW}0?1Jbu_ zBq|Za_p9W4nxXL7@<1hY0Q5VCJ`O{Aik$yo++1s1?sy^4?2lvmdrFq<+0GIUfTaNF z+%s}YM5g;<<#6b3X#DfNTku54w=z^0JQSCkpN-4R#n!Bt>*nXg@LnKCkS7AH2SlE_ zAke7&m}fI#sDpFwk1Kh>J@6j==9K+y zJ>P*)q24!{&n#bKGYas1AUYi|9l*X$4NqQpf2$t@rojuB2Bxog8re@f?A6|rw{MRr z*#)S5$etpPn*K_^(Z0C9_1?e_g1%Ze+{-#Y2Ec3p={}bf>b*fwAOm#dO>xaeL4J$# zV|Ywv&z@~X-kuT2$#)jYaktxy6wJ2qbfB)Oe?WG|2m}d)4nRE_7aX4`ex`WHJbsfw zL$p0)*HJeWDnZeH7h6w!9v^~5%L4h$opIUC^nKocW4iTn;QlsjvKa!-kAZ98ypULA z#IUva?IE7}W6&>}*0*U7`fl4@W{q*x1k)Xm+X57+8AtD(QNB0#q zf#x&x7w*w{ad5A+6P_@bc#}N@Y1E*OrzYXLeye6>r#_ftGlo7}ZVjE=>|)2OX4)(j zd1;c(W?}AtTwspr)y~R7wQd4gYBL^adx%rAXUKTKsGVzq+~{KF6WWwIYFf``3|;uJ zC4ZB4wnXJLmDXbmpH)v24aUUfCAUM1dKttq?s)dH7 zTw4^#a)1D9be`LpMAee*;J|}iM*S~-NZTiQQDN{5`7B7%oksp8?=|;p;h&FcM zKAE|BS@J>9sQEPIkv3=XyqOXz?4cNIZjVr{0!*d}`s3Vf+O{dW|Fl4oGRUzdlD;MF z!D8Wj>3jwiV zGp2X%-f80=v{kC01mArn_cK%#H*%V$Mr@12DV*03ZNKL_t)h`clz^LpJ>w za#08zaCMi86n2>~)22E}oJB-rIX&qH^GErqMGz zka#H0n>SA-dr0{M;6>U1l7RoaAI(rm@MiF%uM@t*-xf5^tk2lohRphv(;Kd=2|4jW zmW|gb{UO5FMdU>2->^mf5|Vj2Z0q?@%)cQW&jb=VT|a&WIB-%C6O=LyK> z2(94!&^TJTDT&HyNioj{`dln8CbettWEONyrDdyD(y4PN>DIlwv@;9c#*HzDjLEvS z>tywJt5ipPc^DN4=~KUc1Ier2SgP*SRAp4!wQDDVpD%?$Oq$i(sK6^gDZ1r9ZL$&f zV?GiE@c`!fcJ|e`;ENR^C+vq;fG5{JX`|6k-QT`O;)JO3m#&Y=gRcb|<-g!7q*r`- z{H;J*?`%PP^z{M4=X_y71OWGj7X{f2FT87IgaD$6 zb_ZC-G?;e5kAW;2{1_lR(7?wl0Hf@l?R>3kyfDZJA+jGi91Oi*oM=5pcC9b!mq5k> zUKvkc;mefyfy!wCR)6%Fm6h73v&iWO#q|E^s}NvQ7vkUGYX%5eCIHN|-k$IDjjzC+qbw*5Sbfov*2J8Q9>}v5-&;_ep-V=>tOsIp z!GqM7C8S<3*S?$iJU{q00DMEHy)`3Ha)Q3st)-Pbf;5@^IsMG~Es%Zk%$2^`NO|&a z(>ECh0Q&&#v=8mg_;r2^_;JMYJh}gTU;CjmSO>@_(}nTOSSRCQ=#7>*yCTndhuc)i{dXY2BDF;r{}x#te8AK){MzIcI@FB!}!4Pow0$bHY5{cj`1@6Q(LEM z9&XzF_S1a1?^XMqhC6vuC67!9Pcya1a$wwhp&32(fV3G|K0)Co`D*DhB^dab_Th*6 zoUNJ$fQGc4KL1U{l_s^~qU{s)(^;bdq?HD?Y}sPTcNawm$hrRKpEbjcbx6H5L1~Ub z<^pS|iU>R*N;6j=F<=Ah>2&q$(+Og6+RNG2Tc*v}cyql(auR9kerN|5fW$s4TlbT! zKxVk0qlyIh66=8=D>4@nNe93?`ZMH0F4wvA9YCsd_kK>Ij9?_jebq21sXT>tU_94I zGm?9Kmd=|oc=^*$Ven8;WN=&w7BSZLUwVG$0I&fd@YDkPF11Om~wl8rAXkyP68 z=?5&s9A;31LUJOr1KlO8xrvb0S+ZcI?>3qehLoydtt-qI0{G ziw3}UeIOYY;_wo_!(0{hZ~#~bGlLvnvSf)8Z!Q2J9Y2HU`}85Q2blvn56_;m&iw=# za9!?MQWmd;l0M744Z#5UT`!F+N$!bf4WGs2I+K7)o()J+CG%l$&q(@C^f=iD*MA7J zO{3%4ncIUyRRqDhBNiuR2kuB8U@nekC%QH!6K24G0e4?>%{Bk`Ypwkk5)71^Zn|j% z131-U!D-hMb)QR;fey$7OQ$RiC}yF-1QdA09g*$>5mdcxaAWmiFag!ErwS>@%rv9(=WVNI@3(kOh`Vpp7&;A+{9+j+#Hk z^mnZ2vzBbI#DgOrJTF4%r0`+zJV{HpG5R-)TPNeSJ(VCRyHRvmh=-yqi(o6Eu%$3H z(NI=%=_v6~oOIYyL@pE-7Jt1Z;dNoc>!R=Ty|^VFth2Oi&2C6AlHP`RAmhQz%R7a{ zLz}j3m3Zjdt-D6X>}2{m89G0#TPv%~d`ZRwa#1W2t5vNgb?Vg>uWDoYVLkT~NarqH zq-O1UGV{~8?6KPh`D}$XdPN(4%H1)Ihz77l{)YA5zFj;8Zvo}!eqn*clLq<aPk!J9VlahZeN#-Wu>TQ1BPmA$#(2w%ZohzDd{KKa7-BR)Iz z-dGVifY$;M@W=+?)c}x;!83-&0Q%pU_isBbrWp(X?SR=x(%`#*Iqq2p`Ra{8R5<`I zfGkol3dWjxt6NJHTzMBq07k-#+rkoIcp%k)nJxpJ5< zRSWF7+cdRcG}nzM!apzf^|}C~*ZwSOaQ%sCAENsgd@XX(5uT}2Q33@is2hg+>RkZo zKwY$I;>jKViYo|9wgpk-kU`uJM8Ty;SrC`(ggshX;GQUZ%)gP`IsE{y$dr5ak2bsG zk=Fz1)<)#AqkT2ket&Kt(-(`9B4;0L2?mC~5)G!E$$|j<1vo#nw=avn4rKXSn{`pO ziZvXk4<6eeu-{W+in@kKAw%M+F@b{rNa-}LE&eFeM8@&M2#ljN02fwmic;rVN0^5~m3`k(9{>Ive; z_iSIg*xWO6Ok^*RIm3N@v&K`YAihI;(=Gu0ljhqtpl?BF)Tw1nxdF+kPkd1T^l4AV zrX$JJxu|@x-A49OvcE}P@4@c~6<(=qr+#CPHupHScq|8Q|vHQ1| z?fBsTkb6&FN}soxD0nCE|AJ6HjIqZU{PAZ1`#`-8Hf^zl;co_soPW5l{uY>|^ZALU z{V~#>GT&xYKp4_5?tR7dyFB|~oO!=Bt>(BGkJCSI{*A9@?GPCB7up=tX9xyJg#}+* zqK+&j%;JBuzpvyGSxIs8xp!`lsaZAk&KQk(p3XIg_c49om6g(A6W@Qo z2mmONUDV=bHs*yo~<0mdpq8i$QK&z)R= z=8zX0w=6pPsS3w)*PJa76=0Y>6krQ_-iZa^25=qVD^~y|eTGdv?N5MBWfWHrfK+?z zu}8805gAKR6n(NHyyA#T)(qw}_q2|X;D<4r2ym69l*Qn=yoTmwB^Ou&GuJ2~V#Y;9 z7?H0JO_Kpm$@HPV(*dOc0GZzsGeb6nrsm1&oBQG(OFKUOz_mSu0^e~N4ai+pbo*p$ zEF@womtA(*jky9*`}glZ-Snvjxg=6kJwrqJry{~2ihVe_!)PQw8GbWn%+R#~b>skW z%;=fR2wG%(L=BKL1@c`c8S^uH{7em?xhL9iz<>coZCF-Q=Vb38G0na5I-Se~p35!} zc=z3RPdZPQhL?c{Qm={gGg0pxw>%_kI`cO7Kz~VG12DHBMa6Yh20_0)7y1bG;{sP0 zC+;~L^_t~9=5{j<`~F&M|HTA@nb1C)Hf`EbiF#(yLg$F4Vdsiu-~kW&#pF@a#IQO{ z?JjL0kgcqMY)B-rfnc&Ef;d|l3aPHivEj6-dm#Qd6ecA$Uu^u!x`?ALczE-B!GZRp$;4%{Olw`=$=x`Q~jx+$+wOI@i!Xb=cj1`d&#j_kN8BxkZJtYZI{BtaB z-3ByyAJ{&LhqQ=;V&p{TL`5;;p%|%<9??+N%!g?9LNwDM)$6S!Lz36}xk76w9Srxr{AXgIy82^hTksRmm*{1(7XVs` z%D#TMFT?inG%_7R;6IZB1rvV^B`*P*k-QmYj^DeTr{Lr12YNE^t3Z7N0C54c`Tx+~ zqH;ix0z|V{$@8Q^ZBbyF2x$P-69;;7^*^k+G)A{%T0A|@8by=Az;&SSPeeDeMMw4Z zloa8bcdBkpZ~<%&=wZQ5B$^-_h#=?O=*JU9KkqC1oqnA>S-i|ft|K|~%s2~bk^w=q zIQK%vMB@6?l&kGcc z1`Gz6=l?AmiyC_Er>9ue(0Li4Ve@xz6Vqn1$Qz2eeJ`bNX7=Od`PAq z?eH#$DQN^4&vgOl6CDo#PW}DkQcE~NVvz;IXU{m;SJDI7FRu5^X@Qa>M6~0%fn*QF z5rhlvJ8%zA-k56Z7bzY{pG%L4spkSPY<-SB<#rIn%r z%*OWuF#F_z<~WZ9YGTYileL0G59HF)?<_!0{a35v$-=KJNPgmezGeqJ{JJI981A!8 zdvjjQ%^`=74gw_SItQ3*A9YL~J7T0VBNDd61$ueO) zbIfxO^_39(In02X`>4(0Xkh9B86x~fm=kDE3Yi`lfiL;ijx`7Z45hzX8E8L&ydpDX z>_?VRx%}9e_RZ7(YK_fzYu-|hJ@PQwvwK(R(y4>2HP1xm&sA$TYaK$&9ox@S*|xb~ z+GCLc!#u(~L%lt6VNA27&bvRZ&kf|ICVVhg2JOGUg80m#^XAOa*Cnl=SZm?m#PgwQ z8Ne84@|Z4=D+ z9DWF%0<20bMC|i_K&D*ntynVy-UG_y!p|VndLRfQT0Z{xV+C!vwu*`jrSCvyq}#p( zY#~9$_(5{BMi%trAsEt?8*=BZUcr)9>q9UN;0OsZ#&bmwKn~2~-1FzpFRG_>>WcoJ zj9}Op>Z&Ir4xPkINw@;n1F7uV-en5sg&quCl!*S1>;u{xxjV=K{w^zs&v6JoWu7JoGM%6W zSDc4vr%s)+LMXWRnDfSr8KZq0)s4~=MkwHO)EA#mtlv!Jqn$TVbUg7MV~%HKN!bgj z2#rjhmoBq3@tMs0!#<3VB})oW(fPIJ{)-8Q z&Ye5Yzx(dHuP1V*Bw*8}DmidJn-N2{GE@41M_Vv<#o+zdMULxet?u$@AQh2)C@$*J*C zmRN`EWHMw(LTD6L5y`M6LOf(sVkurEvs66WA&JaVGLoSLnWaLNhO${3n($D}$DuUh z!IvskE%AWQ1Ddu(>UQtmLz=f}t{@G^UTwx1!~-%*ETo9|Vw^Q>*hn@OR+qTMq-wRA zvP<(8vN@3Z2JH-0>A=%LM{-6|HP$M#s?t#l_`PTak?)LycQH0 zD+Bx!kw37TC!L#n3Th&$vvXafi$vP)>M3{(2>QqczM9hVozc@Rae>^@vQ>f1`iux& zPqP&c>m$;*o+r1R>Z_a*fIXW3WKT?*C(^C81)Y)80eIxv0rR;wWP>n)CAu7qeWJwy zy#Y@rF9IVz7BI(1m{_WhD5-hrS zHg$2UxmLj74WXnFq{Bnzc>DM8WbgLYa2G-Y$tHmJMc-KP8Yw6u!SO=i_~_O{x?p;I z@xyUxw38(bh>qu8h(w0~0PIC(2H@8DN^pGo&&0pPWcZ)rdVHeQiQdP*fQWX0^(E%q zkUX60;-h@I_gr6Yd?rw`1Q7c7560!rGh;GxTwH!Bgdm8?Z|{w(_XflgfcfElEFe!b zIwTJDjr0))*!P_mliQz|EE=sQ;Rw z89V+M5K@p!0Q}TFGGvf;kcMQ0kdZ?61N8&J(zlbRv9o)@ILP1c`_IS9EIYK52*TB7P+zjav6!nY58g<0@Lrw}J zkbZa5A8wF!Km4dthnf-EvW0Z%+))XK&%XFl=irY&FI0&p<{Ro29?)x80m@?1rPa}Vs> z*uy36^D1)vPCejr7nO%~l1P9!?B^;{`ZH6n3qH?S-55r?XCwNWj0Ccf(%DaQUe;*U zDmdyJf`PRl9CTVjCGNMX^Bcle)>|nV(9vqolq~-(dbo%<74fRD1^Dd`BGb zxmaV+R|yVJBn^3{uMactsB`-DnP;APiYc>xh4Z(+lGPQMS@3O+n#Pq>SO7A?vMF&< zN!cz=DybwupGnj$b}EZBNcR{lpc!~9j566omi1cDt>Zk=ERb|3)$O^kFpN(05K(2r zwu535AML_oapW`4NHw%?s}UJ!S!L{!G4p6^6z$&oIbtqt|F`w^hR|Hv zzRz)g*@QRAW}EpCT_8t|q__FoH=El$&01*FrmgI~cV9XDh$G~L;lt(ZbIy?=Lk^YB zW}(PpZq4fNWaWw#Y7DB8B`owzU*)@7YVILZ7TNyWx?M-{tJafhwHqnW>mDs<|1GY- zq%(xQ?9sSpGaR~?r;+|h=|CP3T~1~MAU#_9lz&{}%iS-*>(UQve(=xouNVL4DtHGVt{+faUAxN3i4-mQPiMWEIm}KwP&}M4jPf)kIHR46`hD-t88+DzP58^sL zT!0q6l>ov7xN7*QA(9+l12PdH6sSWo2Zr?*m9TaZ6A<{CZse z_PedijRBoS9(lt?+XHq#d6}=I22ta&@MB0h0jwW%U7_CZF}D=T(fvII=`k?gudAm( zGxva*G!f)PkJFA^Hxcjv)xSSHrdbA<_I7S=!EO2n1jUOVi1ci~wVnC=#Cd@{JHZ0T z$QRL=9FI&CGIPjI*mn<4-#cy}Df zt`Rci&VL8;e^afz6y(x_zqfs7v$jE?k@IVQ43xmZ>)^gu*C(a0JSlWjo1 zJ;#iTBTRpTtUAK+heNq;FEpp@2aUC<%5&d`A0AKqv_t~Vb&A{Qi-CA3zDx}OX z6n}DzCCmPDj;$kz0j`tm2*^Opm#McC_Vv{30J4It62>DW64GOwm&}G+pNnf&L5F7e zWcW(<>|EbdBj$oUPYEiV zq$WV%<~;TMpuamKYz3dT*gAV|yv<%<9v}k?vTeI_kSThN=XfWXo8bHE6nR z?>t;8vN&vj^(u2Azbir-$rZa!wrkyVLC%tjlZQ*%u4x#4({G}gY8;DafFB+=n}+ih z_B=>orkks|b>_^OHMWO(0?T4dz4g{x+w6G$7%KP6UkgxNchL4ah^`=P{Q zNrulQ89_tD4jD2;KZ5}@d#;k^c-9bL8R-}{yCBGt-WxY=T#?^Gx}+Xh7vlqyY3J)& z7GlBufWgpDqU$f(%RR?Rlb0?J#=)MNQqtVaJ#sxfU;md2&v)i$`bo0-a>41;69f_S z&7+S#`t+|*{`OgNvJxdFE4m0y^$>QSaU?*t7ls^<$&{4Ys77b>dR+7YpDRrxHPr-@ z$wsHF$6zqI#eFoJpe)yr&b6>ur?hC%q6lP+o+tX?Ogv`v{ZyZ;OmcziaStsQF<4$; z+ubK^L%)9JnP+s7dHNY=*a-8e)QPr(R(2X zzV&yYV0kgHJ@I>S8(kB9Xu4>A`=^)u9&Lke`@f>^mVbQYig-x&Iu%)_ZJFxz)<48^ ze?(u4m4PYt8uCG3N5)BL^z8t8H3{G5wKWHK2F=MnXaDCH%Rcav{IBSDf;?BU*Y?_y zy!OI{V|YAX2ku@2M_ZXb=DAK`-|@&=XxvB%1oz=U!Kp2>_WL!ma^)&nv2ulcAEv{) zXtA~CwMHVE``Ea#hBT`q*3Tp_rk`79eufX+B>#HPk^@0upt3@Mn1H?mx>)1jVYkH< z6#UO*ktNFm1;3wv*P0g(-OHC7o{r1Fu2zER+T(pW=Wm5FdZtLz`hiL*5v>j2`T8v} z1riT8-&y!|Tmk1!yGfDU3jPy^k0?~Y{-8arA@fB<{D<-|PmQ%%7l52z7L26Mq)s5uj2F4|5qph&I+|zXYEK4t_2fPC_xEOh066``rJe%v)$^=; z4bkU-osc7#(ROKRb?*z~_8va_)@B?KK@X^W*QmH^?7wn2l=8Q*B46l(6<2j8;)_?v4{ zXU5v~p8702@PC#7q3+1&fczmt0v;it?=;tdDKP&B1mC^6$k8_!s-FU08PpB$9c8ZVyS0I~1;hxSX9y4OCMump+X23l zslj)K^s;hF$R7b7Ljc@7(n|dd>FvorojsL~f?)V|O`vj2bp9r$?Hks{pFvc5iimdz zj^7{7_=#&40c`}(j=3`A6+Q=jI{I4w^c|#%C{+tQS+&m2!;R{ST= zOkeD!D;ABgL&ntMtxLAXImkeP7RKjP|-z%_rn zn#=%u&t!!_9w3#}e|Ir`#u8}|2(-oIdDaYm!0xu)ZyLEZsAXVRD{J<{&$g}i+rtu5 z?h_wB6w`kHPcs(Zo&lk@Tsn8`Aoo7}cRRP4&+OG}&tl-w@Z*k_4<=8Qc?%Zm{nIZV zdfjHvkPY?3CHB4`#(H-W9S46r-Iq6}$7S4%8M0@uUedyB@=reXRC(;-hjo5S7G(_B z2FaTaIF(qCpex8hCU7PIDRVVP!~2u~03ZNKL_t)N3;=n#B05;3GxukEO~LW1GGxocQ;xGH}zrSX90p0`RCVO7+ z{@#1CgX0YvG^o_)d{6@Jkcd|i+~%?fRgTR3 zk09izIzdVJSZR1yDy$3QfKt+Y>oQd!c)*4#vmaMh0S9J2O_sS3EiPk7RT5UO_T|^I z-IlCMBvJ5Tm^yXpQPBvOlGs4UNM))Mmu?|73UIz8sU-f-gp-(xmdPZZi;M?XScvgZ z;9gQ0S7(!Pk<^PJ zDwP!eO~!%w$&OxqEW5VAk`D%7az zsoW0|Dt$Y9GJHQP*@DJA5%hqP0Kx44H-?FAXB^;bRsm8;L~sM{6TQ!8$$S7L2e^f} z;BRjCsJ^~D{#KyJBm>~Y{Y1L9_Ekm&@D^Yc86bdP%&%)zv!Lq}Z^wn|yXJVtwDn8i z7|29jc(||kL-aYB2FTwKInMbZ03a$}n_?sMk(WUlr;1spef+t|A-ya}i_8x9{^8$Z zYS6pld!ot%H4rAtpjSI91@!nOF_j47_yE2fiyH$}2FTvMg{>z*Re)are6;X+4e`Qf zkm>=1MJ9^-d~bv&85*j^hx16L2ThSk*lKi@Iev5P(aUhO??`|D5i)vTIp;yBXXMQuU8-E%VXyI0RMPo;J?8*V7@`V2x+95pIWIQekR==)9f0&8V=sm`ko+5 zhF?Q0>`#1;a|7Z-jNEvVHD<42`tHi_MOLh{(ocNm=2Lvxt)cA`^jFNl&pOzbo$Fay zuIdGWk}L;a8&_WgvQfyoKvD|d4BCLUpzo3?!Pp>s0WXwY8hDyzGv4$c$ONtn0`SdS zVwwp8(Svz($7Y@qee00K`qpMqsL7xi2S}RXXYu}BG1*Y(7D$9**fpMg<-ap4?)_RP)BR-%Xx6 zR|X6mD0R#Rmu#)C%mzA{Bnr=bBt!s~nB&p~nD`E#uag6LpVEpmI%OU2q=0fIHAG?a z%_cnChSFSfRC*~FB~z&+*5GWq=_^EXCKkXc3`VK@OhMC33Q>hzH&ME|@^vVwI74an zhJE_qKn8 zMfN*fhd@pYo>T3QSp$F_AQeQG7SAbXdYg$ zd8+@F0_Ny4drIpo^bh)~nPa_NuGfAo+abZ=d>CAWcsigugNecJoaM7kGBB{|z=@_# zZUDPYQS_R(7ei+jDQqIBlT=K1Hm`vRo`qkc$3scPLZ&1{WrEE-SeTUDLX!|gN6;X?;;(A%+l)bzSH@N`H}cz##~;l=2B~?h6?&CdDy6xEcm8C z8r58{k=2j|fb#e>V4@6I&1cC1K;s?&n2ZO2*?WE)laud?EBFeKJ9UvLsChsSPyTgn zOi2XRLqv(+dYUhPd)b-}6SoO1JIZ{!l?J^OaLO zL2zs`2IvF$G2H*Ex!?8HuLAvlf*nVk>?`<9lzY>9=KE{x`N{SG7^m++Q0#YQp^k-K z?LEEkMs+RW(zTVnFZ@8BA0Nok{jJ$|LB1z_JBlp+)>A(cB$IADIi^`N5M1MCi#%gK z-@Ub`^-6?2vSIX*Zmq0`2jma;h~EO&3Bl5<1AWkwckhbn_gXg<^(w(I`spwu=Y;({ zx#Z}WJU_uomC+|4kElQT4t3goS5M|I4dlL80tM)=IxeR7F?C^}33*2tUFt>+2j>4bgl7@&_+ z7x-7;Z$UjRo;^y&&D@|s(k|wC*tT^mnYVC}d^mlkoOAlg(xh=C*>#tu^2k4)lJgF= zM%hRu4e5!@Q%tjN=+_WykSP}&9+MX*2I^q~0ptZ+_ zWXRlHo%57aPPzS-TW+}?Ss{E793fR%86eC_Tm!N|B^eXr#egpXpHDW2M?Xsj0GJFU z19Lz1%lFDc1Tc;W9tCU%b7Oq*{N^>+3ki`am>>O{tOal+!25Kw>HyUl>&)el$Yu4M zDCvLH8H5h^>N1(Ai?U*S>0n_hl^n^INQVG*!gJgO38Y)V)V}@p+s_U= z?68l2h4KG~2nL+I%`rzrC#iH7-nk?hSRiohWGQAWw3ytYUIXcZ^|{V=m_L8ME;8D+ zYnQc1@KncPL&L;N9l6C^y5vDB5+T_+E35F(XTnb;zu3$rMqQMZU`TfFJTzE9Fey%) zI8na)Zk2TG)Ol;>LM$&rI&38sqS*{eI4JQ@U^XU}Y|u@1L4FZg5sPFrq{>`~{y=!t zH5*hG!0BW@Bx)!r?U$U-*6_C`FUMIsb4kdD4ipM)spD^XZHDO5swCw?|C)^p66aE<2$YuopFT0VbGOy2!C zkR{74Xo((t{hjQ%xcEq4W`Aa7i;zOX02$8#JPx>SWPkwWAsfgvs9w!e!(Fb2{{bA6 zQSk1ZK#uBbqx2yz(B1#`dwcKrLyVafD1Z)7PPPGOr!J7banb)|KTvs+!H3x2Xwb`M-QBD&5Jn~Ksm&K%@(nwLF=ZT8h3LqMBQUDjR`nyiC+d1 zKV%nR@H}~e^`JmjiMGTW;L2g1G;3hVBZe_v4;cSS=%?`T1-@pM(BmPVAY6!ick)H} zS>QEr$x+tedneNmPc(hcwb>JwS`ZuX9x`Iq12Of(0Ql!#$t2m`)X9CX+6)pv^KVu| zG{luW!s7sGD*9EYW}@B%->$XNNc(paIqMK#)^GAOV*>Jr;m7&$y#T-`L!(+1Pab*Q zX8P>Y#Y$$;9{|?L41%~|Y#^Bh35GWbQbJ@$kWtfeXHSmX$M$K0GU*TW)#?SJCe54= zP=5E8)`x-nMkny>t)|ahxTn%T8z!! z`DdRl`y6<<*8g4|EO}O^hUrUlAWCdsh6tR#$krWw4f2Y9(z&@=yX_Ll^hZO{0rk%fC;Zy^biJE@AA7H{0B-ftCI)`tXx1LwK_ z()uqzJD+udV3pC{0EE<8BEi5lZ4LAkDFh7drv!s( z&$^Y6k(LdDfjJ}Eu4BfG88%|Xh?{bCPKP;Bw+9_`P!U+2uBmaZNCvJ0^#aHN*Vc(% z2FwM3-t1vYE75EQOp_sAAt}n5Z9u@PGk~V=vd28|zyr$+=!35z=fs$0f0gdDl<~k1 z_X3$-mU~I}Iw4gYVaWMP!nV>O7fK@;z?|H^K3#l?d5*S5)up2SgetPo2J}6~26%BM zh3~xg-g`&oa$fnhY=;B`<))i%8WDZSqzf44l4M}AV}Zj21Cfw;4McM@>6ay%Bv-@( z4<{B^iP;3XI6n^<20L}b!lo?JNXgDyo=H2~g$Y|X;|YrnXUdyRnWSW-iX$3Wc)UAd zf-<+5K{syF*gWWCA;}OcE}2x6&5*y9WXQ9`LJ`qWkY5zhXaBb3Lo7T-ERy9AB@JkA zt_OmxBqE~3_d?R4DD|_X1wqQWV8=CDI^}+v~8=zL)Y%zrG5JjN}yqm{=?d}O6;-V`#zM! zqtvh8KsMzyll&^RBn-{VSH z00uvMRZOLmrY#c948SV_^I-t?Coc7s5P(1+YM#h;qSb$Yn9VXkMrq!cfkt%W{cz!t zz8V5^-idRqF)u%uD`U{hYa-5(E<#qSL2XY)-xgDOpK-G-NX)eW<`ZR(yb^$X?HU$5 zhJ+x40Z^6ClHq|#GK2yk`r{YJ6bJ_hCIeyJPk|C5WQjmlAQANHhc@CJj|HT30O`pr zq5dF$knY)|l?9gZdqApb+NTz%AGn9jU;v1||9mUWL&gLEJv|D-0<+=ImIrd%^MOhw zVfu^g&j9mX{20iX04&Eq83~{#$JlHE2pyvD?>#rBl1~_aUwX79M~I|HCI^7|ipS$> zs@$!$r)I~mhJ-?!rXr{A?KpU>m#!SMxtQ(W#m z!#88gdO0Bb#Q5NE`T>NL5=lMq0`attk*$IR!Fc@zQ)gUT19Q$lzZj?-+K6Z3a_&$o z4Tgz1nJTxx5NI7isT&CZ(a!Xf`_7ALW(Y(N;|=3<`r84A43*KZzb-v`_Ecj}qzPxwnx)U`=-Q6gtVKSW zIaBAURGV}KC(QqO?$$2jx+NSlY9j{y+M zM9#)}4`dVQXB?8{oX(yZ@S62vwF=A#P?@1Hl9w??A5J7D6AK_Q*LlYu?@-_}6B(*( z&o`+u+_@Lpk85*&49rRNPsTBA?1&ZqUKe`hBm=(rKmCC^*%W3l>}ZAiqfVmpXh?>R z>e;jBs$8A-!V53F`MT?_yAiKV0R1*?+9+_(xhunOghF4X-;-^{Yd6W1bkJoxmN9M*Af*hIWyLIc9 z5m{1J;(>98UkA^&lCmq(Sy!ZkbwMC;u5{-v$PeZV$aCfcC8JXWBJAko0&UMck&fC; zVxiB{Z}!}C&xhN!Yq$PaDF1(mU}(~$$*5OedFA|)BA8N5WNfH%MKUnJS==#z6R(Z; zco?}!r!uk?qJ>mH7B(=!WsOqG)-ahDpd;X zJr&sB*3%)ch-_H)%`#2NrB1db67mv=gd~{_eiG6l@}4yW_KS#xZAh1*_ayU-hW}#X zAzLH_3+p0cp$N#&9?`H>Vkyi{h-5n?B^(lDmbR24v&4J&Qy>?mH}4f+oTo!P)T>ut zQ!gPNh>q!M7P9Tyx3}rVLTc`hvfM0mzFD@cXd|3w`fyz{KFN5fTfdQ*t)6B~jGW+0 zGqbpFQhlXHg#$_>5!17+$d$ula?yivB^(;t{VG@s*mTr^ST2lVh&haZ3yfFA(< ziFa(oI$${RFaXMc!Wa^hSpYE2J)d!~ji?8Z=J-?p7AuOtr$DFx#IF7U0>hKPUu3~r zhz`C#d_OBy1Cap051>w_0)YAc-95SKWM8F`y0;efLICh40-sC|GCNM$-)0o(f_gIs z%ARIO;Q4T14^QrRA+C|`kSEk%-%h^P4d%=M-)q)eUxs1(i248^qXU?WUje{A@tkQK5^1Ce|F6KI=4cJylJX&v2tj<0?KWVS#8t^C1U{}+MQHw3{QXT;RM zfvlFdZi{Kg2w5p)Wl#@$wDjc8QE{z9%(ux1S-L7vQlft+kq_pINK+Ck8BS9KjP$=k^_)jWGw*V z)5kc@Uth8kWV@5iFq`a@KnM;SyxBi!Wso$WXK8y4GKx!0hlCd9I?-Hb=2ADS5t+CAtLDGx%CF6%< za$S%{c&0$oLA>;6?J2=Wh7sNr=N#-Q**I{}APsJr^uY(xf4~3@93mR%rx-*#swB=L5#EIp!X6k&V1QBsQ|OzI4&i6(y^Y zOe%>DH-IEkK*_+xNs}h&y=EdMP?mKv;6B%fH&SI3_I`}V4jnoa?MDC$Kl$Vnt*gqq zu9EsrCfPcC9#9&PeM^?4e>D0%O)m#NOW;vOg08e@5C+0H{{?=R6gcN(MKFD3E@7Qn z83coi?yg!wc8JS%>xfSaKg%!D;t2BxM+XI7=d)_BiSJpS(rziw*YONh%a$HTpL6| zG)t?r;_i<=20_8v0wOk35Pr&(DMc9+C6UP`?XzEd?KLF>AxJWr2l1((ZjeM`PA@CD zk;y$XM#0viDjnr1r73!VH#$5d9UPCoz#f#b&p2XESQkoQR-|7}F3VaC_WLd?-ce6H z@xxq80qUteOp-y?2IfJCc z0;`>=4qQnOmP{CS76~k%nRq#W_Z~f@W5}zUR&p{;j}ulJ|<FkMjy-8LM7AJPO55~*WyJiEj%gymFTe`g1oK18)T$JUOS1R;-9mxi~g77b6#lp z>|XP}?{EF>{%1*p@VykT?KMTe@2+L*>*5{Ay$llGb3{$?zacZe|9*`w=6Lq3GV?Es zJ;o#pQOu)j)~cz|!t|lf7BALui>A7cUGvkZ#ySNb0onmmU%1AXv;SsEhu-Zxjhg;^ zg~;g#cru_1hP818EQy52bokR{fgIXfvM70tG&pi`Iam}{s}-HgJ+`aAtGih z3KTpBlpp_bTqR{7JpgOTe#nn`(zs5baym%e^lT>@=}$yGWC@_{^QKOZxizlmCIf;x zKoaWNafPPNM7ncr3y4-1`S=US4(m-p-3;8r`Y`}H<0XM9uM#z;ZdQjt`*PDpm<4w_ zr%(ZU2mwHCz5_7?U<^5egwKZ11pJu(Rz9kpX`3!BZT5l^*Hx^{R#)@hRsV=UVkC`?Z6daTKnYAP?wavY~G|9Fp*UK2{+FGQo*#{ygbYKsWe}7;Nk|7k3 zgyMe4EHDc@&FX-F82_i348EpNc57tTKBoWmZ12gO&#gQbq|Hsg@wG3wzSyUer}9B$ zY25R>n5;B)a`Urs^+rG%Y~o*ITF1Y;&yqNpE-zYU`znL!_@_2JS*9RR1ui~v^&yWw>@v`Xp_o?`Eu^Wi z6KFOB88Tc4?LtNbZHufD{VwqGqZb=&e(AC9QNwhuOC0< zlvB3(-|MfxUPPQ$gt2d`xt{*J_uhM3A}JDx_sT1;sJU{g{$0{D4n+hqeCRV6MkA+P z+IP90v17;TbqpOkG-bJ&CD^r znPUR^wQP4KCm9UMd>Ar~F3zP~5}lg`j!QvyhP<$_EFw5pCQ(t@^hV%;%pimfF3l4n z8|Nl-fekAU-Dn0!QXn%6e^*A~f#P&hQ?b@e;G4@CHIgiQA(awgEB<3ZkaZ#buP7M}tZv737E63{ucDk}?w_zLlsdl0k~+##}lv z+rhmqOvrlJQj*M4VKSp>N3L0q2dEa^a3?X6mV^ulKW6oS$#?)PXy2i|>~0pJ-Me>} zX1g{EHIqGAZJtNpn&$)?WyTM4M!p$;jNf>EJ&9FmAgjOsQChd_Ag_E_MdDH*rw;sC zjd79sIc1$d|8Ip@VNh`7c*l=^IFjYfp@+4*(J7T*uN?o<{Q{-$Q?y@UbZIbJ0U_mBISM ziN0Jl%-75lBGlXLY)zE$4mi4>jmAH$kIh_I5@rvKyeg*0Yf>kW1^9F1;n!fv1nwVS z03!V%OaRM?dWUq_yMsMP@AkHS$R?mZA#acsBHLh(mNv73Y!(P4>WAaqIV#Xh3+D;4 zcSma&PF4ejYzNv0Ni4u~`Ul4z)?YM|AG7i0Yix$f(^vR9a;S5%9FVMnB*Bw{zQ%o0 zch~*X8XHsR*BZvU$*`pdzpJhwhLJ;#tt40+K*QR^4RD=P9A9Gn`mbw zjxY-+gM#|Qw*b&1zGb6ab*wq=D4TUdKcN3HH6rn(#Lxy&skN4^+9>$h)T|vFG-#+B z>rQ4<->X+|>D9Zp^zGYE`u6W9JGbQZ-qO593nfG$FOd;A;>e@q-3jCMna=u-IcDPf z?-yxyM~jPyWq$i5)B$&E}(r(W*UW_jl#9N2u0eI z_649z{9#W()N?Mc5AciiCg-Ru5Pw;iMcA)jzak)o2wQ+N_LAxN3siKW&SkMFz zbqdk&*~}!!#LEHF&v`&p7{F@ki8+9_WW7(Fl{P16#J`yn>6^?W%#oFq!B8Fyg8OxQ zu98Rye)wz&aD>dQbu{*9pAOmUuQHUr)afcKF4srJ%*=EDy^RQ&6(!wyT? zFH1V-8*jX!nE=UDFG?zq*e-aMc|Kd-3Z=crd8uFOJTX(GtQb{kzM}-5(a)&obk`}& zbCl@wgnq*u#Q%0wxg_Rt`aT8ngmpL1q4LggtSu)^npFGLQ%`;CS2+KFgkYc~`Y@CQ z6wejO05HU+jf{n;&MBJ~7JrUuEH8MU>35j~VdQvFw$P2KSFXvgv~#n0VS~ej%cR9d z#_6Gzhe#-o7eg)z^~yw4(u2@#hRZX7mqae4`#_{`(*KxviC`rCaq{HJItJL#H)*o7 zl{?x-LMcKxKq%xz<&&H-wDo9kL_^)W^~~{SNy7#W)d#{Yg7XWC6A|t`^?Jz5kC;>Y zY5F$!rAsTtlFKdqYAn4i@lc$E2nm906A$5Q&1~VfGkz{+1f7|=bW%gL(Lk}s9~cb;sKeZZr!?@zjxKSnoaWtvj8NDkVO<@ z7{aDzt=dwjZXKDkw7N!;V?@1b^R5yXUsnHQ`nPOSAQpfW0Q$InERZ~WkSEtZX*~_d zI(X=OYdQ>Y3TO?mdteVMb9C2PzD!+YexDgr4SY>DIK!5xgAV6j=v2{hpfVT5e`~P3eJ-PaUJiw$F z86fTlKL+HLoB=ij0%X+7ldQZE1Q6K}otk^<3qVE&MACu~G$+&L-t%H|?tO9T+0IIM zz4wVFId-idC}0l>!uiRpKw_#^bx$*6=qt4Mck3)!L3=TNxTZ#RtXVqOS+klYAn1?C z7E$M?4ED9oTQ+8j@np;$F*)$sLN!sQU()`ZkH@f*99PHWq(8-VuA`s*XL6wT&1bj{ zNQfoh1WLS+MMFl%9<6-S{)_?B-qY>z$f$svqF+ETkd;K{5i&@SGxS*q5bhcCYkVeJ zG%@wMu4>UZXN?F*0Z8zbSwCVR->lhgYA~M%kskhL4uG()vr`>uWj6cF7d?CSvT}?+ ztdq%Rv%BBm!3s3~vU#&CUbHBw7CX;b&TX@(s_Exr+es9gBR)zB%HUbf`iswGb7Rbg z6+k6hCdW=kzoH8uEA>b{vA?06S^IG<0CoJPFV)DQAuj<<^ljGul>y>ALuu|GxeQm{ zfB*fWtm5qzRB?vB=@MuFt`hELAsBQ`UQUuMQ!fVx_E$7WA6>_~{e4M={>XaJ0aJ{N z%Fxo+K(BCo=Bfa;Q7?HRp)9-8XL&c zG6%{-Jf!+A*TRE=$t5wxEt?q^3pJiE;&P@xW~g*V`&Enr(CGW zf48x8x@OSHy&KB#eTf)L2T6>j(;yl$&U`2=P9j7z843%xq%@sQW;9(GdCjpM@enq6 zQsQA-BEk_5HI;a1*|L=-9=djuZr!^{BeQ9!sZl5E<-3)u%%bso-FQ*gE=!7yMV$ss zRBmO#=ReABtvkx1<<-?>_=|5gYP36%@yk|O!T`fv{0JZ_26eNNL;%o}=Go|P0NQn7 z#5Vvo5;sWqoHWqa2zume?m8>1j=j z$*3Uf0fGX+wQDO+8rAjWKNAC$j^R3x73$l`lWCt?UjpQD-kD)vbN*}1wJkU2!D|A* z`{cpC>irMuYO^(nJO?0G!(*}c0$@+HJW=aoJ__XNvDSdO({6zJzI?UP0_cz@eD8-4 zyWqYs*#;ngZi1EB0iedH8s!=?GTxtK!Di%e^31)iT5CN4oSaYf(3=1t8xjK0nY!VB z$XGr6dtWn5=rI7$vqN%&V-Ts2_rQ|n)*FHM@dbd;AOnMLwsT#Zg@7?LUJY%VTJnVd z0n!7UKR4dCHAc=y?(Ip>HX;+}S;FSfUY@-7iTym+L7UH7Y(aj$1EE0X0+|M62S6lz zVD7m~OX~+Q@h>rX`1L>mcEI_|j`3yp=AO*?BGCKc9>`v3WUjM%RZj_nF*8kns%?oM zvNj-En$)#@jf@3IGW-(AG{F4(H-jw^@y;yUPSnY=HIQ4TuXOhHJ6xO1&f!=#1LxR& zBG(VM5u9XjP#<_NV8T6RzBN1Nr*B8wKe@LP_w(eRm&fFd>2}&Cvxa+zF!^Y)mF8;Q z#F9E>;r#Z{n7s5spoG!4tA5t+&@Yy+v4-4zI@t3<;rbb80rC?E%-bvDq!pUW7Fs zdm9%#5(U(Asl80JE6-PgZz{@vBC+lPklA+tdQqI;LS_0uq+96MnSjB3K0nMjhG1X~ zQQr2=#LK~D9aXPDVAY+IbryY`>vjFTq(T57<8r`&0Xo(z5)4ix7`WE5`tzkz2vBjs zVa@=1M*r;@@eZU4z!#Bq2wGl#lt1~3q0lqe^h za6*}+_K=y1W-Vkw`f{K2>jMrrK!bYAYu21@76UTSWR8+)ny!ppS?WFUI_T%j8`Kk| zK)Tt7E}Jpg*ynxv2A^SG+}<;sAWOh)=_g>S(d*^@5)MA2nMsv}C{ataApivrGJdNGbS$r!SAvwFBlzW)U&xbBJR!fo;6kZYyH@DM z5La{E!ouRd4qM-IAae2dTy(mX*-3aW{GE=UL*~8@C3`#+hvTK}{to5%ZlzB0S@Uto z{QF)qUx#vfIh6dr?D{&m*R~RZ^!yzX-lIQm*}TO(!&WGW$bu6hn`e(B9BP@liHPdz zHEXC|F?zh##I?SezkZU7#L#T58e6>i_fpklvnjYvsv(uUh#WKx~yidONO0$Io9IlSkf&YeoZF z|8$aPuZ+p3-vsi&YjFkhoksy+`Z4`H1<<+HzMX6aLeqNIrvL(D)V029>?3Ey&~p+* zcr*YY*Qn~rf~A4VBXOAfoPn&E6T_CH*fil$urTF(%&=lU^4TYJb86dmmGWmpvBOevk1o z{tjx0Ufs6yp?huZO(03g=gtRWMLS4WmwqH~Kp|J-xZf8TxO z;2}e_UPfGZosttfiZlj*62MqGTHyrp05sK2;x$p$0!dSzwVEre51Eh413>JE1>l8e zW^`{>(cnDKK=y}3?NZS6W;rukx$(8}20yM2m!()J8+ANm@gY(7U9MsQ_(*F~&6z02 z#*ZJbKs^1Ad8Y^;hy;~o>ba1P9|M0gZ#ii{=lPm05d#@f+SqrVqM1BiSz6E9QeY;wUl4-Rcc(Oz-39tU;zM-PF*I}A(H{%SF&Td z@0a#>^n1>rF#6ew24R`(IBz zehnML2q83|VT<`}yLRnE*`$~_Y&`M7*sgsC*~Khwp8DsLa`}~4SuOt1OuFcIJPFYd z5)8@6hbY027Woj5Z)+-@%xF4+IEbhDUM9xUC5=}v1kbnqpFKiZ=Cz6_sZ7`t$$}u& z>mWiLM56t@gkz=pz7`PXZHR}=%%zhO4H5aQ zKk<@!VxU$Vqov>6eyGJh|l2xOPz@y~#+xhk=N0fYVmy|HJq5-CQzUn!l7R$PmO=)ej&1dcTtjp z3<0{uz^#$OB7komPKg$h_B|8&$Xg+<1~BL-Wro2d6XwE~&4 zzyjag8`b&NZB|ML8K9px1?mSe+Prt)yj=e2zuFHb!x1Z+A0oN32R>-Ce zBKN)$SCIRtzR3QF+;EaFH;;^Kmc!cho|*uYwQ$eN_IOoIJzw|FKn8acY2KK+^W~81 z3$nj(Kyg-iEgb;9Y1C2W1Y;!}y{8fdhYmeV$FPzM@xn-^mHpjg&z|!BgbDhrCNtu+GtZRA z9)4H>hsuxw$+S3WpL7bO37gJr5)91i&Xl-3g|*c7D2bTMH8IZ`z|3@f-f{&-(slrA ztxVsi;I}}Z0+iWN%q&??WfFnOT9+~7jM}qNAS=_AP1{lleVuc%mSP@cZlli91?zKZ zYMx2SCAr}G5kX@R%r4VoM=Q=lB3hC?A9&s!cGzLdO@HumA$`U(`|PvNK4s*{kxva9 zHmo#^N`J*+&Cu@i-VVWJt=rW8xT2^|>RCI6|>4 z2rHM-k?t`edf$2H9sSKSHd7BEf;*Y#!TqS?L~JM-UR2t9>3kMa;oW!N)%P&eP9zAD zVKJHFIHm2gxdtbPmFaw&&a;nxL*4Sjxhm^9o~+Hm7}FU?;E!OftVhZ--%-zGLwxqx zXZdC=vH4e6fBPw3MSx#x)~xZ&
From 71735e74b6f11e8bda3fa971bb411634e9faba00 Mon Sep 17 00:00:00 2001 From: Hilary Luo <103377417+hilary-luo@users.noreply.github.com> Date: Mon, 14 Jul 2025 16:28:15 -0400 Subject: [PATCH 13/25] Fix/version table (#438) * Put repos and tags into a table * Make repo text links * Center tables --- .../version-ros2jazzy/ros/changelog.mdx | 105 ++++++++++++------ static/assets/css/changelog.css | 5 + 2 files changed, 74 insertions(+), 36 deletions(-) diff --git a/docs_versioned_docs/version-ros2jazzy/ros/changelog.mdx b/docs_versioned_docs/version-ros2jazzy/ros/changelog.mdx index c05e6f59..22d92e8c 100644 --- a/docs_versioned_docs/version-ros2jazzy/ros/changelog.mdx +++ b/docs_versioned_docs/version-ros2jazzy/ros/changelog.mdx @@ -10,39 +10,72 @@ import Style from '/assets/css/changelog.css'; ## Current versions: -:::note -Nested packages are part of the top repository. -::: - -- clearpath_msgs: ![GitHub Tag](https://img.shields.io/github/v/tag/clearpathrobotics/clearpath_msgs?label=latest) - - clearpath_motor_msgs - - clearpath_msgs - - clearpath_platform_msgs -- clearpath_config: ![GitHub Tag](https://img.shields.io/github/v/tag/clearpathrobotics/clearpath_config?label=latest) -- clearpath_common: ![GitHub Tag](https://img.shields.io/github/v/tag/clearpathrobotics/clearpath_common?label=latest) - - clearpath_bt_joy - - clearpath_common - - clearpath_control - - clearpath_customization - - clearpath_description - - clearpath_diagnostics - - clearpath_generator_common - - clearpath_manipulators - - clearpath_manipulators_description - - clearpath_mounts_description - - clearpath_platform_description - - clearpath_sensors_description -- clearpath_robot: ![GitHub Tag](https://img.shields.io/github/v/tag/clearpathrobotics/clearpath_robot?label=latest) - - clearpath_generator_robot - - clearpath_platform - - lynx_motor_driver - - puma_motor_driver - - clearpath_robot - - clearpath_sensors - - clearpath_tests - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Github RepositoryVersionROS Packages
clearpath_msgsGitHub Tag +
    +
  • clearpath_motor_msgs
  • +
  • clearpath_msgs
  • +
  • clearpath_platform_msgs
  • +
+
clearpath_configGitHub Tag +
    +
  • clearpath_config
  • +
+
clearpath_commonGitHub Tag +
    +
  • clearpath_bt_joy
  • +
  • clearpath_common
  • +
  • clearpath_control
  • +
  • clearpath_customization
  • +
  • clearpath_description
  • +
  • clearpath_diagnostics
  • +
  • clearpath_generator_common
  • +
  • clearpath_manipulators
  • +
  • clearpath_manipulators_description
  • +
  • clearpath_mounts_description
  • +
  • clearpath_platform_description
  • +
  • clearpath_sensors_description
  • +
+
clearpath_robotGitHub Tag +
    +
  • clearpath_generator_robot
  • +
  • clearpath_platform
  • +
  • lynx_motor_driver
  • +
  • puma_motor_driver
  • +
  • clearpath_robot
  • +
  • clearpath_sensors
  • +
  • clearpath_tests
  • +
+
## [2.6] 2025-07-04 @@ -55,15 +88,15 @@ Nested packages are part of the top repository. - Added support for W200 - Enabled foxglove bridge by default - Added A300 AMP attachments, samples -- Added foxglove dependency +- Added foxglove dependency - Enabled dependency on sevcon and valence bms - Updated grab-diagnostics to latest ### Fixed - Fixed W200 Diff Drive Parameters - Re-enable publishing controller input to joy_teleop/cmd_vel -- Dropped A200 controller manager update rate -- Fixed expected diagnostics rates +- Dropped A200 controller manager update rate +- Fixed expected diagnostics rates - Fixed missing dependency lms1xx ## [2.5] 2025-05-30 diff --git a/static/assets/css/changelog.css b/static/assets/css/changelog.css index 19a859f5..8b82f89b 100644 --- a/static/assets/css/changelog.css +++ b/static/assets/css/changelog.css @@ -39,3 +39,8 @@ content: none; counter-increment: none; } + +.changelog table { + display: table; + margin: 0 auto; +} \ No newline at end of file From 39986bd179769ebc6cb5175c46b736063f943bd4 Mon Sep 17 00:00:00 2001 From: jhiggins-cpr <60929523+jhiggins-cpr@users.noreply.github.com> Date: Tue, 15 Jul 2025 10:59:52 -0400 Subject: [PATCH 14/25] Fix relative links that were working inconsistently (#441) --- docs_robots/outdoor_robots/husky/a300/user_manual_husky.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs_robots/outdoor_robots/husky/a300/user_manual_husky.mdx b/docs_robots/outdoor_robots/husky/a300/user_manual_husky.mdx index 8d9e0185..8203054a 100644 --- a/docs_robots/outdoor_robots/husky/a300/user_manual_husky.mdx +++ b/docs_robots/outdoor_robots/husky/a300/user_manual_husky.mdx @@ -1679,7 +1679,7 @@ Husky A300 is compatible with ROS 2 Jazzy. ## Maintenance -See [Husky A300 Maintenance](maintenance_husky) for details on Husky maintenance. +See [Husky A300 Maintenance](maintenance_husky.mdx) for details on Husky maintenance. --- @@ -1697,7 +1697,7 @@ recycling center per appropriate local regulations. ## Troubleshooting -See [Husky A300 Troubleshooting](troubleshooting_husky) for details on Husky troubleshooting. +See [Husky A300 Troubleshooting](troubleshooting_husky.mdx) for details on Husky troubleshooting. --- From 678d6e9aece9c80bef8f85aed2d93f372a2d958d Mon Sep 17 00:00:00 2001 From: jhiggins-cpr <60929523+jhiggins-cpr@users.noreply.github.com> Date: Wed, 16 Jul 2025 08:00:17 -0400 Subject: [PATCH 15/25] Added maintenance notes about A300 motor cable retention when replacing motors. (#443) --- components/husky_a300/husky_a300_motors.mdx | 14 ++++++++++++++ .../husky_a300_pre_operation_inspection.mdx | 15 ++++++++------- .../husky/a300/maintenance_husky.mdx | 3 +++ .../husky_a300_images/husky_a300_motor_5.jpg | Bin 0 -> 885958 bytes 4 files changed, 25 insertions(+), 7 deletions(-) create mode 100644 static/img/robot_images/husky_a300_images/husky_a300_motor_5.jpg diff --git a/components/husky_a300/husky_a300_motors.mdx b/components/husky_a300/husky_a300_motors.mdx index 01cf1ab4..e82195ec 100644 --- a/components/husky_a300/husky_a300_motors.mdx +++ b/components/husky_a300/husky_a300_motors.mdx @@ -52,6 +52,20 @@ When reinstalling the motor and suspension: * Torque the motor's 4 screws to 20 N·m. + * Gently pull both motor cables away from the motor so that the cables are held tightly along the suspension beam. + * Ensure that both cables are routed along the top face of the suspension beam, and are laid out so that the thinner cable sits on top of the thicker cable. + * Insert an 11" black cable tie into the first hole in the suspension beam (the hole closest to the motor) and tie it around the cables as they are being held. + * Ensure that the cable tie is tightened as much as possible by hand, that both cables remain above the suspension beam, and the thinner cable remains on top of the thicker cable. + * Insert another 11" black cable tie into the second hole in the suspension beam (the hole closest to the center) and tie it around the cables. + * Ensure that the cable tie is tightened as much as possible by hand, that both cables remain above the suspension beam, and the thinner cable remains on top of the thicker cable. + * Cut off the extra length of both cable ties. + * Repeat above steps for each of the remaining three motors. +
+ +
* Torque the wheel's 6 screws to 20 N·m. * Torque the suspension beam's nuts to 30 N·m. Torque these slowly, in a star pattern. diff --git a/components/husky_a300/husky_a300_pre_operation_inspection.mdx b/components/husky_a300/husky_a300_pre_operation_inspection.mdx index 5c3d08e8..5c6f720b 100644 --- a/components/husky_a300/husky_a300_pre_operation_inspection.mdx +++ b/components/husky_a300/husky_a300_pre_operation_inspection.mdx @@ -9,10 +9,11 @@ These are our suggested daily checks before sending the Husky on missions: 4. Inspect the tire treads for excessive wear of punctures. 5. Inspect the drivetrain for loose screws. 6. Inspect the drivetrain for any branches or debris lodged in robot's motors or suspension. -7. Inspect the air filter. -8. Clean any optical sensors. -9. Turn the robot on, and check the battery's State-of-charge. -10. Disconnect the battery charger from the robot. -11. Check that all of the Emergency Stop devices are functioning, including the _Rear Charge Port Door_, and the optional _Wireless Emergency Stop Transmitter_. -12. Check that the robot has connected to your worksite's wireless network. -13. Confirm that the robot computer has enough storage for any ROS bags that you plan to acquire during the robot's mission. +7. Inspect the drivetrain for damage to any of the motor cables or to the cable ties that are used to secure the motor cables to the suspension beam. Check that there is clearance between the motor cables and the tires. +8. Inspect the air filter. +9. Clean any optical sensors. +10. Turn the robot on, and check the battery's State-of-charge. +11. Disconnect the battery charger from the robot. +12. Check that all of the Emergency Stop devices are functioning, including the _Rear Charge Port Door_, and the optional _Wireless Emergency Stop Transmitter_. +13. Check that the robot has connected to your worksite's wireless network. +14. Confirm that the robot computer has enough storage for any ROS bags that you plan to acquire during the robot's mission. diff --git a/docs_robots/outdoor_robots/husky/a300/maintenance_husky.mdx b/docs_robots/outdoor_robots/husky/a300/maintenance_husky.mdx index dde3624e..40e46d8b 100644 --- a/docs_robots/outdoor_robots/husky/a300/maintenance_husky.mdx +++ b/docs_robots/outdoor_robots/husky/a300/maintenance_husky.mdx @@ -88,6 +88,9 @@ During this visual inspection, ensure the robot is turned on and verify that: - The Status Lights are functioning correctly by pressing an Emergency Stop button and checking for the Emergency Stop light pattern. - The robot was not damaged during the last operation. +- The cable ties used to secure all four sets of motor cables are not broken (there should be two cable ties on each motor's cables). +- All four sets of the motor cables are not touching the adjacent wheel, and are secured by cable ties in a way that would prevent this from happening. +- The motor cables have not been damaged due to contact with the wheels. :::note diff --git a/static/img/robot_images/husky_a300_images/husky_a300_motor_5.jpg b/static/img/robot_images/husky_a300_images/husky_a300_motor_5.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0650c5af925b4bd0ba6b6ffdb87a4b7f9f950ddd GIT binary patch literal 885958 zcmb5VeOMD`z6Ly#iTS_~CIod-LI{Kg{GJdO5)BYO1Zl&EAFX!l)=7dvcM%Dx0)llS zK@uB-7TcW&i&(oBciU~LJr&e#hcG6h1KLxz#fpl7h8|j3k)>$;ddEH2d!6&od9Ul8 zxsp8049|Q$&-1%~_kBOlhMtW8@JqS*xc~?P0LZMsvmiK>pPjv>cwJF$zG3x$@3;go z3mXN19p!IUuFK1kZ+h*wa_-1~|Ht!vMzgKr`S1U+F!lcO?ep3J;G3oY$1(q3oB1VM zZD!_xd(0=Hk~ukZu~AGps`S6hNzcos|1RsEm#f~ac#}D%_<6Z7OwbcB)5>ONwiOfTmzwp9xbCxE{{QrA-Mgk(<+^&dr2#g0UAd) zI_I0RS5&^!vwr`JUn}3gb8m{NLGtgq|5xqI>t#XgIn1s&(Z5g2Vonc0|9y55vriQn zmz>EKN3DJKJs^NU=1L(EkO7R+S{k9_=i$NaXLu-Eo*5DkhY!LehJc~enFTZlK}9Px z_?hglTO=r3d+8WYuoCYF?dQ-L_R?$i^J=r#z8_S08*Md>i2alp0dTUUz@u!T+6xBL zm3Dh0jf7GXSP`hV6Oi4(XLqH+O}%cP3xZ8jQiHk;x8f9pnigop*{TVS zB$37d6(Ar@-3o&om>9xZ==S`OCE^_ALqV*Zl70jcy0#Jey8Th zPVzIi>+YX+C7#;yuzuz@M;-?rU)FIRuRi$JE6}$KCvnU4*&K($Nb=3_C;0m603Td zJV|W0z^iTm1-&khd|TXA*zC*=sIFJU3rEESXdwzhoc*#;0AvfzW`s=?Cug$NqEyIQnn zoF#HwmQ~mQnP9lH@u9TfJD9`w6rJ5>w+G;b8haP+F+zkv&?srR?dCVK!n^JE;7*BS z2{4(!lbBV%;BmkXrCh4toI6p5^$yRGPllp(run+n5Sp^m5kXk(sLlqMy{Y zlz)Z*HPnl{-CkhnT?%2^`iy)3Tk<5h)tc;XR*jKGx~#On_dGTvgg8?ma>z~R3grvc zs?kYkSjiFZ7)@99;GK#xL6J0*H)bk(37r7RMsyVNvUnRxXwBrx5dqnu7`A^<6sTFFe#}aS8r8r7*SoUcs z7WVAx;9W%lvB3aoal;j%Qpr&X_MA6QfzfAJ9ck~BRT^()jZ#~5deUuJ6~y=|XP`nw zj?$aOgJl(#^`Gn45^F-SYJKJPVx3oslo<*$x?42(s)lM59LeL`XMrPjc*^C{9<0Ty zVTpU|=4n7U${8VR2_8^swz_#Izl@vUP>WE$dM|;5SZyH|3RDRJoLk*+@8l#nSuVG| zhXW+RZ$h0&>oR$xq&^l+u}le7s#qA%Wf{n<-g5SwCigPagGOB?w$N{UWn7sg4P14G z6$+r!P2N9tApW&>FHTcafXt%1CvVi?yRlOGI%wtBIX@)kMr3V21A+8X(z^y~3l02; zRLCVntAR^H*WTuj=sDQ-CUq7^E*)8&sFs;Qihtj{ONG>*focv&OMk6*ldIms25Q|! zA}rFDQd5tXwvq|9xl&&Gh`$hz1)iV@1n%N{{fTp(Uc3l~Qf+TyJH^&i zn_kiE>~;R3H~??Xt&k^{_zF4lA2Wvq%Bj?10wGs91m31<7(G~|YFEGuw5oQP40JbE zm{0@;$GcA@=;h*J(ooyz)^h||=^;AY$s&vp&|8x;{66bq2T5ZyPLY$t@=U( z^pTGpzTz5*(1{&;_5&>vCZM|df?y(v@1->@%t6n9;sO=Erv)vLD_O?0Oz(yq_C7j| z7Z;6s3^%F?eE@ABL*Omr00yBgv<#Eci6Azxk`RzLX_YFS&Ga?AnG<2zsYb#qkf@Wv zAEZqMd$g)eW4;5)=20mx9deE>WFqxtn=C=J=pBR({M~Pq* zmkubmVao&wxg1V;g?yRTv7DBhySR0ic+{r4es3<->$y{}o0d}rPAs|p@cV#e^l?8l z-#iR^@o70LWm1)z1wyft5h}a|$clpnlM~X_Tet~HG9ZBcx@N(poM~+uTDivHmOhz%>IUd;W8pqvV?cmAE9v(EjN{A z2LT;}C)(O$$ZI2#P73BrS2yZ1A+VWGRA5SuBBo%7C`d}XQ=A_Jhka&>Rnr0&v>63*O3{5Hn-hz=P5}Lb8r*kw zhNr=;e20-2j1UXkRo*W#qE2rp@y7%sQ4FG4H~WLUp-Z@0a7#WFcD*6*9M8&2Tk-0o zm`ltt!~?4D){>X-KOr{$MAGCu=U72VCb+hLh=N=f`k_*^G|_1VMtsESpM8Q9%~qh= zspgr#Q}fiWGqk|GjOVPi7f~#YT5*zG{ z=tS5`!ks1123gLcVxjr$RKtt)H@t!BKKgF?y2>}S$vjU^%SQ7T-w)N#NTvKA-&%CE zw(>tCGX8beEfD{L?MV5!Na)-9*7y7E4b6Lg+{xOMzPh>itIPg)Y{9ef7d0QTx1T0j0rhyV7&=9PEXWKdWCn$h%4=MOo}Pg9NqCT{=IUp7Czx36oQ zp4oLy?&^*L(i4x~^v+8~{xt6yAkyymx$s<9W>ST5u_yS@{d#Mb=zw|oeMyV7Kg2DT zyFR!kz5Ge#i3udM_^WfOa`&_%kOqE$ z&oUh>$tN|eY@u+WA!EJpfy2$?N-as!kc_%=OU}x7eDU?535`E;1X`|8)vC^XuJ6{O zsl<@x(m`N4dUtNznhUd%8g%scW51Z%*z&X14K`XkO32~L919{j*vL&h{qd?!PdmR+ zz0e`titI|YGSLDTj{NM$XOpg{tybYZj%9{9T+Z({l&pET=TO&pa(L;J-YEcXCb-3* z%rXT&5WQPhgKs?W>;B&Eu8FeRc17fY?9a)XZOAxsOi$ib>3o$+7Uw4?FCcP}3^uf| zKB4`|O^F?=P`-wFhUOHF-A*f`)~fL66Dd|uY3##a>k20Q;;akCTp+im_eQlT<^!0X z3p0h~bDQTiIWxM#uhUm>3#_Nce0#iIA{)UrT=CY4fkF#(0|)|X{(WkBY#fEY@8ru2YQwefY!sn7`0CS7om^Kf>$# zn4Zdtxdz~~6lx#9irwwabr5yBiyiO|6rm|*;r!)9? zG@H5;e0vy_bG_+zHS7EZdFNJj&;4AV{rJm}Zl4XR=Tu_Jxt*WIy9H#SAslqqD;GY^ z<-9^?WJLu5t-T2rQ##_qdhi|bFjS8wkb%Tsaa(M4Sgy92%Yq=9uEdUkT;MUul{7v_ zf;e$7&SZ<40jHVKA73+K_>Ui|#1S0}?10GC2%+l8+&Cl72D&W=d}=$VLIpnqmXL~W zr@PDH7Gg;y#f&6FM7UmWZb3?JPJ!FyY)dM9VF>BU2QiCcjVsW!7 zHii^~&OOo|H_7B938gNaVw(V+kL%=7TJjNYbt=VR8Nz2O2CSE@oB(37uUeLE{XMzvpWoS8duO9O#zbo(B98b0 zaCN?i-?Q}5Tn%f9>@D-BLDqQ8>PC8r3e52v2a~`t5($=%rl_eHEAUY-4RyQhju>x~ z!a2cmhE)f7wWw^Qj0rNDmcPlNnXo7QUr0?rT8~f}Kv%GXaI&Qw18E(h4@OJ?Y5mAD z&gcSERo`Jt(crISj?sqeYOpy>(teU80R@3sOB~dJEkF+q| zo?wZ%Oi;Vo&z<3o*Z_$=Xi}pT%Mdtyev(y!WJS1e0+Zy53<=Z8e=9614*Nuc&+@T7 z^)N41z1xxjzbR)%ZoWg1-=d7nB$n;#U~Ma8$B^G-x5?oZ>B!x3K8b@e2FX0dT=|-6mhhC4gIrZds<<|DA`2L6Q&ez= zH6$gUBhe8#XCf@y9g9to)%9IOZdeB4Y5W=Iu%*(>O^(@axxp0)N7L6Sd2;AJN5 zcP#-Wiup~_tlargDw;jg+gjizfL@PsKw*xD7ks3D71KJ1VwQ;ZfsfDITb!Mj-sWBJ z3yHx=5hP?&zKwQ{9MBSeh={1*5F{;m?9wV@RkYkF`y}I!SyyY;2{k0TV)F zjDZ1RUwH(f3oJ+I&9>^+S%E?_?^4^HnBPR4dhxv%OK-^jQt*r8pGy5t4_mIa^UB{p{>Q-fbG}|xWu$(|)eE32SwrZz%$i~+W4fLO&z^P8m;EDDB=s_}p5=cd z#4-<2z)gZXyjx~jJSez(m@Of_j^5LmX{-I_3S&UGCW>ZLrdU>SdOMXSMpwD*`)B4l z|KSc9nBMcyDy(=wz$ep9vwf4$JL%Z^f5HNSFQ0-mbM8n5nQd`f{aPBFgH4Xxd16VX zxvh@(_ao>}utxw{QksbOwc}pZJO9bbWR*Kig(`px15#h0)u7z@16U;H99{SfP)SlQ zM@1Ui*Sm?uTi&cvFuVpW{{>4_N1$Pc{Ln4-pD}g<)pK~;?_T;O?P6NMJb}i-$_s7A zG+*ydu@E!+p7cEZF)y6HoLq=49PtTE$tJ1T4xSskXc>3XRY|cT6%ojqzH*n{JxUcAqJ(xcphs-z}imz%30+*W8s@xG85W$x~=A5*Q6mv#v_iz7>&G z11#2Q#Svtd4nvhnFlJiFy|2;-#eGvKeAPCE1V1JeS^6sZD` zRgReyR4zOB894{l9#64yo z3>r$QabM=dFRMk{Ml9~P8xlya&c8ca56|aFv#J{vFi^ZeDX^wmQ~)nbqoc1LiRuMF zzoEBT6%vt0BZslouRL^^yGSOvUmnhYCmT3I7h;$?<(84nZ^tSuT607eW(A8XN|h=^ zWKB{ta*tcM=WrRrcqnC#@ELWhKrd8E87emaD(vP(z)`cVMy}eRwYz8qu}YU0h^>gK zf@DT15}{;}?p(hiEct5!SA|%z(F49v_?I^WT?C#PlJ>iKe{a=iT_rXPX?gBK5uB@HF1o1!y%Sb+Iv`6WCnbsl;CuU>`i31BGWmUCRvgl%!LyH_c2R(_SUzDKW(61_ z08zQ9Ehu^@$g9C4HZ`6A#4A8grJ1M8ihw!EmH--rdhndvL6cAc28QS0!BrJn7vSUv z))zRVsdOza>?2yqbS9`F@Ljy?7z)<}qatAE?zWK$(HWZCjfcdzJVGsT^mehIbFc)z zukl1PuxkO^4F*}v+rQcyQB4dp^oqCJaYqTH=?A%}gFCpW4l&6I>@ zaf(Duq7A{wN~6Ai&|iKh+S|F}Ka;Yws7dBfAb;=o;zwn_9w={w?MLM6;$jM}HR3M< zGwkb1_%oI7YIb#o__^??x&X2|tts-u zVzy3ShzZ7mD3gl!0L_1oa68FkO;tLKtNwgp%roWjt zLNYppGf%CD)FtEUDjpJx;v9=w%uVopz7sZ!5u}w?rw(czuu2_?(KnH>Jo?%Znt5v{ zLq_W6gGLG(4onF8L1iN)HAQV0>-Cs?f6rPG*WU7LgSm$&NRh{?Gnw$_)3%6(BYeA~ z=WE;m_a_YzPZ+91m;m&8Pf-HpH03wWByrG*m{yBmjifOCtW6katWScohIwp(=8(6k zrk=JtZeb36Os+o%)_>ios&z;u`e|On`Td|{@5Koz8O}QZ4u=o>x8>uy-eC!$mj|_y zO&@Ylof&ly_mw~PyGf`XsiSj-efH3{HSz+FysX4hmVJ%7W_Mi(Mlul_69H&Hlq;%n z$K^SrgAnSNKN3MK=ssV65^PdK?>0&^!+d5Zh63KMMkXm!>{g;BS@LapPutxbw!p}Z zXJOK;x9gnU^iEM;gKja?^teP?yEAT#8Q~S;6k9*9AAY`_K^R zdHY@Z_}boDYuM&lh4sl7kweX$nd_nbAKew7e7WO=Kg^2c-F@Oz1=8o04L$DPaa|m7 zWnJF=P)*cZ${V>;hXvohrKB|4lQBk3I3# z9d|^>-mR;ucR7EveZ)1b$m`g`N&d&_SMTC*TK_BWe&5KccAww$IO~h+mwH7iZ6yDz z#moQv6j5gW`fj^a|L1O2$wUh6F|2*}sAXht|CR)?DwLYVeMuaYj$J(YfEaB~8VcBC ziiLg022`Lx-p_;G9Bi9!VF=vfIyenX7I)kr#6R{jS&Z9IjRSOISNk+#gMeUCtxoNBMxc%lq`xytdT9>~LbF;eQeG%S$A4~MQT3|E5rLOeVx1ER~m-bNWhtVLXSk05R&H$6*TXNWY zFjuI6_CE(9Mx{9g6Ax~BDmOaAH13mWt6zDs+w=PGN2;LI9#=Ge;o>A~ROertdd)45 zs$00}OCyAmn+uwrFp1kOdGhh?DqcuBl2yG4La6@X-V453TEIo@I46eWbuGC*l|<^R zJ=LPxu}f%QBjON&b{zginRz6}A7x^pe)-Sjb+YO6hD&&U&@er$rQtBo6gW05$yKN3 zp;5~W*L#91A13c@2G7_RyjgJ}(gZ^0M08Z@SDs*<&H$ z85CCAB3?!(g)i&LhmM#)j3Gyk>6cl_x0}3;_lf&h1llS!SO2V%N56JY0=bkp+gdv$qfdd-*+TaZ2(-`p$}cxs)w0>Pe!#xKCD)_}sv4{lv` zzOmf6dC8pkonkTlyCDr;J5sf%?~Bf6dc!ZR#F7^sbEde&vWEbT zUkN!kuxg02=VkKc>#<&Yiabf`PcvB%4eqf59YNt8v)#^pge|L~-k0Y8Wh@}A#5jqn zoPq1csTHi;9MS}9=yjDC5>f17GqA8t@oj459`8|1uYvh8w$u{}r^|U18=roX8y}}- z$Z79Mj4G$NhS(qY>5MP}&|xpWe!y_mjjf*H{SGGs(yAonifKNmhj)-S8L0+39j0C| zVEATt4PHHI%2gU$%}%6(4QL%HFKi9+<}~RtgBZh0Fgn!_bLSVopA=kqxIVEv>$AHQ zTVM!S2^Xsw4W^)-s15KQus|V(s^HgCN&u7H(eXeA5Fk>?fyzx6-2n{@%u0y6qf#G7 z?#CFSCQmGU+MYHA{#Ev${<1OO-qWzY@}wlW)U$O{hgZw6CvfcgAo_=b) zqsYc%V}fk*Z50Y85O?-o$kF)|e{W(nGjaMEU}Yk;4J0O?wo?is+S3jJ@F;4xLz&}V z7h!`+#nlcX0*$cAf}tbI+R1mC!9Sl_!n9^LVF!(^PSsDg(`nApN- z0Mrn*2*4|`@;m>9O_UF?!-duLc8(Pi@er{^It4UbqS@K!=h~z0$ywFZEv18H2oIW5 z+mr#At*Y}Y8L^U>_0h zSr;f_xutKvm>MS2*R9Hg9oG>YNa*!7b)Plc=X2QU_qB8gyVla{UPdC+u^ntC&ToP3V?HgTkG3Q{$=+|VT#a04ZM&1m1TM|= zBEUhcYDjr}}wP;|dgjQ15_#sUBqd{)ck`C$WG~X)x;-~QpS5^wA7CToR<0L9$ zJ5)S4!YM%Y;!dCr(H<9nCkh4rdRDv>UU5?D6>kGqa;DR zV(XiTickv;2~DtmC=@FeGwO5;{f+(`1f!gQMQTm4NH2dBC+!)Z5W8SL?y;KCr-r=By;$UE`gCOc4n zRjp66rn1VW7U;+XIs%q7D&eBK0=M8HA#u`+g%4Xa`^zjK7qvI1sGjsR13j)2178D( za&jJmXOeg?(@5(n(!y^~Vw%7t(^|qd{vurJbO7QmmAa8FLm z0+JJy=J57Tmz`|vdLaUCYgfc`TErl4a&4!bOW0IFj#?DvZ7(Y+NU0(8z0Te)!7a>u zOIiQq8!?p4{}GXw`Bo7&A!=M``%P__MK;{mb=kXi@K48o={qE=zH{l_cFx~3e@cFB7LmR?R$+N%<~Q&D?au%n zAN@*Gefowir>{<%Ud&kg7f9}1^XsvR+#Pg#p?mP;2ghX@ioZc~$k;)}{TDvMx}E{f z*jN3h(h~HGVxKO3q0aX-chFzBHSdQd+y~9j_k*wGpYn+|JfQ9^jh4Dz|7y`d*M^C!1yiR!I@uAeEWNb^4lvtMK4rp@mMggNo%G=E=z|S~arL zy$6mG8X2#c6~9sif$xrX&2u8|Ti;Mwm>ES&y%&7M4A=Q%>gu)cB|CJy-UoCZL!*bi zFD>zD>ZRlmJ$!)L+EPAQ0AKC^Y{KTU4u6ZYG0su1NmaEDis=o{iDk2D=}V#E?Ek?3>lBQ3Bk^uo&aw zedk0FV3C_l!>cEO_3s^>SZd~|u{OCy%KKo7uVn$+5a$g;VzYClrXkl5{+LN=m0dgH zm%DNmZChh}-?>nmD!M&sLTcqCzjgAgPS`%@pW@Wd4QUKz^~IXQTg&BA2_95!DPu)Q zXQG_?Afx`Uh#^w-`b4T+znS%wt>lQyJw*0Ra@J1sgT`+$?NPYqSc&9-UQo^&r@5!k z_+LbJc~4}(GC9(?>f~T<;g1!m;vh@L9lk#5q=AV=Zqn9}IX&Op7uuQ3x|vs0RcV1A z1UYr3PHsh8DDC;M&+s|LCc)M-5G$u5rD+m$(}4v2Mug)2O;I&`W6e>1w}=c`bW?Kn z*y@a8;)jf#XhM4^J-*}66TNNY8EbO(VQWn5XFI$pBjmh@?eyB~?v?QZELaSLO!_F)Q-eCr(d#V@9k(D`fJpF?fxkePhcf@mGn^c;ShWyA2) zv|lM<=!==T(tFAqxB;>ga|-|Qs97hL&Jb<#IRjS2jjYEFF@(f@vkHCQYEt632tGZy z6T!bVD`LoA)AV)MHzobXVH;>`8#TuReDbK~l>hq5t6ieLH^?@W;6MT91 zZ;L7YHMb`;moejJy1lM|7#zS-xK4N4*Z8c(BsUIjo~FwKqBTAC#`}%w|Fs|6OXhGB zOoplz3PO0gt#0*O_msnVP=^{4QI`R+W!}2nIz8NG3`pL-Za;yz7dYKoysiKkF?@xp zCd%D!(bg*EBG`L{V zpU+K{S!r^_3dn@=cuBkQv8l~C&R9OcytR$7!<$D8>6l8l_u>E(0Wk{*H&d6jxSNR-meIf3v!AT=y z*}{3qG*F5LjlTQZYS6$YkQ&;LK#vXxA31gbRnaFX`JMD& zh*MwojfE5As|hZvG}@WKW~Ixpl8XcXoZ#rD7oeS2VXz*sw^;%z#_YmTuRvu6#uabc z_QFoJK~Qhdstqp+(k=A5e5PHaJ;Of8%!~qJ-Z~5#jyHAb`Wa=fdDvGr4TN~s6al^~ z)lKN=qQ@_(j%~97)s2atz#<+l=p~B8Jfza1wv=635%4IbRT0JQ)h*qfbif&XhU>KW zF)Y845fKkoJ7gm*Vg%~a2g^@zUAa0Qzp;~n|LPQ*N*XLPK^Cy@n3yqm_2Eo16J=@n zWO6$QNy#F#jUAJf>Wl*jJ;gi~){1r7qXHX`v2VmRNZO_S!%ju_dFGzlN1a@ma{uZ` z)5Akl%uC#KJr_mgPxCY-- zua>lz-%-T#@}yZ|GhoZf)QS@+s8uLuY>PboRPyJP`!aWZ0UP2lg5!r1kod@aAHm5fSzEiuGg7ErSUHWo-t2S&d^)uP)#>+M&LJx;-`7x!2g?5Z=en$3^tVNS z%h@Sj^h-wc$+d;E#kN%&UtXI*nX2D@c;>^7R~NCHv@K7&#>Tz{eoa34{n@gX4FcKRp~9_?;ml=dHw-HvCcYfO`9>qOfpd{F;3oi?{metPIub zvZ<$X=)s1YhllHmmi_Br%aT^MoqYNVchNWW;PszwcI}EkQA$V6U*05Y<^6$-pW~GG zdbAGUrs1-6(E@6b5_sr{cvE<=>5Dh<6jRoThNF_m21V;jNpnn|(dF;~Nc0-FroM(7 z;wXV*Mp~ofq%j2gYEkC8?W#7C6a@|L!3q94AY^^oIF~J#4p)Baxq!3s=+zMbw*7C^>&`d(d2CG zk~E=~lw?MCDdwWYmD^(37+}_sLrSTEgQ3vQ;YG<^_;Jy@zJ(7P78`T9mA_ZV{``>0 z;xgi!MWjkHLc5$`Xnh5T)nu9;-t%3Ra`6vDUDoT{zL)<&SS zkNn3cS=FL^S};uXhIOm-#H<`5$PtqiV4Ok-j$G8`O`3bgJHj@8lsmG-zgT}c`F6z+ zYQ{y`GWy$?E7Y7!zv(O0wGmrn@7PPfsasLyFZphq#*!;BlW-;elJ=KAa#7khuMfdT z>ZzsQrIBsA+#gL$teGgjt^+k3U04wu@&`6WZlJpazkap@W{xT1*$)Gd`MyP zdGJ?Ky#{S=!J1sNH4{{k`0P4I)Evzb#Z9{sm@WL)g87ruH5MX>< zeQ4X61p#rX0+v)edzVsguDhMZ`f^gf5H_pGdMB`~Q2vukuTd5uXtcDH(OgGY3HT%} zsD@=HKWkmBkduZ7Q+$q*j|<9SGksa-Js_C|szX~ZNyHgkG1NfKndXT>I$#IH%`-^d zW5a?Qs9%d)?=Gpk@~ZPcCX)p(TZ628WC|FsEj__66X<#HJ6$yY2wnFk+b}&7od`$d zTD10Di;iF$H%=x=v})K49)a|Gn0W(B(mqY(Neet0hd_UsPg4&>Js{u7VD+8`&jR@L z2$iVhj7FBQO^_wjHYWJymyJ5Z414Z zhn$G}-PIXrw`D2@U)!Y0dQSuMo~n1z7Elj$twK4;$=I~Sv7SKgD;aHL7P6FCQNN|< zIXpC6tGCkv(zH`tMF%DTzf$y-^PnNT6*1AmLb>$uYBS>IcY-;Agel~RTfY)lF>e2g zcu%2$yNop=#HNV969zyzfo^*4wIGAb_&Nh-s*))oDSe@pw`trC)+B~9vc<|lcH2k> z${oJO5CO<^>gK$;_Ga-HG;2X0F~u*VekM_wMa|?V6j{jyYbPcA&jPSYpYxZW>AG$=^BI1N=dKH4vs z2D~TUU{E{r65R~2_*5MW8*0=b4MhdY-+y3lgzGtK9z0ii(V?%kcQ)IF!&N+~zq2um zeI-^bRQ9yQq7hED(?-MKv7PE&5VD6@R->+>!re1m>#s;Xyx?>v|DSM>Ge!Ahy6SZ^ z5J>G9npilXq{3Uh=i!EF5aqpg&cV1u>2M->A4QP{yp@j=ynS7Boi}-E`lb`{x`IX? zL<3w2AydRYS^e&&eiuHjOyO37sf@Z9Eb}2#9QAMvVG9eeFpG|-qB_)>17={Ay01 zSu0zlPqJRjCENv|*8Wv@ldhoNg+tBqq2P8`$jnT|&>Yk-R)*)Cm<8pD8dY^!=_hhL zat8}@n5u*PQxw41@2eg6;-3K(9~p)kr3Fdwzv9T(&L0*SIPAE*l8cE-*y=r%&<}wT z6{XJ0rx+#mO@%C@s|(*yqn6n5R+2MM(jsPHIozgfxhirtKnYCsmp=4!f6Si`=NoS_(BugEOC1GMI@zpFiHfq}^tLkt%z zR5r?#3YdL8B-LZ7t_zt$HN?~T;jB*yiNgn3pcU8bJlwDfU(-`hTL4ddn|y_DnUM>t zCR5V7r-5UftMHM48d4uGV^8RcL|@$i=(>XAWfGVVTcmUjh(07B&aB~VS6W!n1SB+bibE) z;nFqh@Q(nzRXoL?U}+l;aEw5N7bk3dMEX+LCv4BifS@G(R_(z&Zxow(+R?J1EL&@C zG3c$epU3ISYJ8gO?0rBYWc?Q*@gShrMz^Q+dn^oTe|&Ol+GTmzrzNF!R&}U2Vmm&I zmhrQin#0;KolibrWj!MOWbNybKziIn7*A?_-LkRBzYDF5q~FO4YZs0~3)4 zixO3rMqTRGY2Y-SF*x_O>b#B_ToEj!KJR4qmzJQpU^0UBD!_4GL7HGGHF!m|~0A>tQJUV3~@fQqwr>1d2 zG#p?&&!4D4s-O21T|r_74KYo(@3w63L?!m4wz*&sGX|vO+MfN%O=xVgAQxNgT(9UV zN}MQG+lQ|*ti`EG&U#Or;>d!NssRum0AY}VUOXw&*pHGm+7{8lJJ_OkHuGO*CSmPf zR_Ci9+{UX{&MhpGDb1fBjt}ZHgMyIEfgCkaZF`7j=O$)6WMpp)w&Q%@4U9EpbbT7jIH!rcaQQ`RN(CBs)}9QWW&8zMfAu!m!1`J6kMB|310>P9 zui`G*Xa6XAV=^`s?&yTbLtvh5xA|4>=^5~8j&p9)n;P~LT4+f0V2hV2zDUW@9f|%- z4s;>JZ1f{X`)J!%ew%Gx_tPIX1HiO+C(3H3Do=ValkyeD3&i{0H-F4JybLH?9bOMa zkyi;vDE(!Lw?dEGi=2Uva>v{}*u3gIzVUlGqvR^hZS7JZ?gqs+OD1;&I_8e6fn>gW zff|JnJfdrAkn7>9nUT!JfwqN=lNlB8Z`WN&Ot2;G&06}KuG|Pn1_3@C({qRpbyn=%p68j^@`78b#r3MPmwi=*WF7(t$N zxu~|m!{kd(M?&*rRfo$niUFy?+}TG?ur63wsjRTU^CdHg;Qk)sYyjr}^T(|5-SKW_ z+8!RkTKBokYiV}VYamL%qqA=hVvG{aVTnlMxp57fTWR#O*|c^N-26bq>+|$CkOwuf z6?{azV@W(bY- zyY-S5Ey}#78%|(`SgafKJr2Swr-U)#*aPb&=WrWE;_1OsYtT%vJ855F_z>1Sr4$;)ic-6PX{%^Rx@s);!sY(m@}|hMDSHX9I+BSJko{3B^$^x!Hfa7!C5SlWzk}+i-nA31=|& zXjLOBROkiOq`mf$qg9Ya6xO11A&hx)JZXCq8?!#3N#JoHu2Vx0A^Y??&9!Z6^{tUs|eqNWwW(h4iA(j{v zO~x{|uztJOMX{hszzRHUkw^=G0`EBn$e_U_iOO{Yh@IfPSFzuWMZe0!(&6q-^^ zfGEKjI^G_>7UXCGa4Fn20ue9FgXp0?D$yg4v^`nPP(3Zutk2_3a+n`tG;9NA927H= z$PwG|Ff4s+uz#4F==^(sP&5d-8MA*$DXVN+6$x0FDq1EW;hCsbU%#JQ%+HOjAerfh zmk^$uzD}KZyVTh=jka{pJ76P<;>-LoFGUHJEU6`R?krfyW|>T~Q;@e&tv1`CeKskfD>(nuSa9h5iLRcJx%I^F>9G!byQuqJI&jAE9!h=}CM8(U{?gwcKc?nHX z8+qwATYVQ7rL~!ftkSYNh$b3ghHHm(TG`6hWwl!Ax}g%NJ8ApQZMLX6bhxi8m$}N8 zZNJZc|N7toDsayG^M1dc&-c6Blao=sq8`&m+y1-wK}z_J#dG7WMp7z6i{jJt7BNPxvLifc3g2LqBct{xP;LtiLc}l%*!C*qxT1n<0uxE^ z3My)D+i$Jl<5}6uJmAW-J*?4dTg+h0oIW|h;M0YSE@L2S3s)rXQ^p&8g`d3C(GN4#n*ifg%__5L z2fWJeG=+lqp3N4;FQ^Zi)?N;sgiPDr_!w1Wpc&>JAfR1`>xJn{q7q3(6O&h$?}&S653aN+E$_a z8M&1`OBTMPr>3s9_zXB0bsxA_6ITcE7_xrA-z?2Oeu{TH-pTi}B=i~@&q{_7xwD#F z_n10Ij9>hTs?ZF#2HsRhb=QDI2rG(UJ0#!-!-W6gngTl%*v>@sF>PryI5Y_U2 zwReF#r@F@@`Ke`m#n(jO{&Wr}C3QTuajKp}RuEaJRMO+#RKW25#1M0LJsLnG#p+^< zRG<+k!5SN7V^XPS32%qs#9_N;$o64odTDs;G~TIYnL_ zfLq8yP6sQvkz;;u`s}Jba0YL&%+S4-lGaJ*5uaF7f5|`vnVjhrZr>Lgq*x0j`-*0b zvQ^R~59mnn>7Vv;$U-+yi{G$yU3c(oG?oQ&lj;oCWz&?k<0Sh8nQZCL`ToY6ON)!@ z>|U>4V$bv(Mq~2-zQPdyZS)Nh59GeJ2;>QQ-r;$NoL4TLv`5&ADEHhsx7sh+!(DtN zCX^(GLK9VVu4!e7dCKWZszn1|U-)8XfW+KV?tnnL{d5Px?+geRP`Se8x{^j@;{kQXNYUvQal7ux<1=2lv> z5Z?_(3K*_t0UHJN4I#Hc3eoU;J^GlCw#1g##I6d)`Fw~mi4ynvNkR_ULyqb_^q|M0 zuZ=d5PPqWxAg%-h*^NE_VM@6!|&^^6i5})4faPK zL}DiZ5mlfAHUi#3zWPU2eDBxODd7lJV!jZ3ESK{Fjx&izkt?h{zochXV-4J@WAuC2 z1f7crdq6nRS$qZhO7B^IlPTXW8L?S=aB?GaSpRi2bizWW_(VVGiOX-vy-#FcpCp5* z8%tk(L1Zt`;_MkjgpQjMp`r9l(00p|#@`HK(C5cTac;DIQSy6^KOHpdtO7Ee%plUh zS;Li=DfLv1U&gdhk++uugmL{!~e1-!yspsJH_4>i$EK2Lds#Kt&(zjs{U#?T@5Lu zG$Cg5%pFBX!PCW6T|(nQ(DdJq8f>ku)Fe`ZWcT&fs?v(BEH(EiY$K?#$#f{M%OvA5 z!$5al)#%~OY!bxNDZvU<>|ypP%c+&P_eFn9QGjbmA?Uepu@PLB(STGY$YsiKR1ZsS z6~*dVH8MVElRYzrBGG4^7S6xm!N&Uo&@THR4ln>G10<9=gu0IV>nt(>D z@!%XZIi0#$R*~d}GEmO5*)igZ`IMl}JAD))tlPj8fI5XYB+cIb52RyQgbk8<@}HlqSkdSde{wX`2azC`7(R zpxMOo37UurwNrCWX6JTNH4n^3HMS6~w8G{cmJ*|ID9I#0ai!8u@hBVRB^3qU7ww(z zuas-p!Jm;uJ7TRzL)e_ORVpwcDo~VlbSF6Fd7f;GZ(DA$=Aie*SYuZp9|jHriT>iV z#lo^)&YuEAGiw~06voSU9gzwRbbRDawG4MmP%yb*48X7Uu5relC}(@cgJeFl1;!Zw z>7wVVqF6RJ!Y3SLs7bjI-G-vz=Zlf!GEMnbBo>#iOa!f#(Kd3Q0Bio}{p327*HwLN zJ(0k@i2j{z+6e+)b;baEt?86mflDPGr1UR9k0wXi7^=u@b4pO7^r4!0{3`2rE=4ML zgwOMTGH5!rbb#Ve2ZOtFEQ-j;BIe0eM#vCrT;HUip}x=11H;A(fza(pDr;bav?ysj z^pCNSF<&G`&_SSjV&tRy|i1$k#v0$VFNuMK)9b3C|$N!TJk6FW+c7t+cuJUF8B4#_QsxR%KnPj``ORg z)wRFA#aE2~J+Wl**J}sHyi~iP=`~RpFAoS8^e=;wHXL&P&idr(yQWQ>|ADN3u9*6% zHn(wfA}R|YdUY>vEH`=C$xp8qexqw{e-zTS%3QH}I;gNnzqd#4sr?2@uyt=dx8!(0 zWWn>0*Gu1RY!7i4js3a#Guj8k<4KMZR+cJO1xYG5hQE(#6ynO1)&$$GDjpFapk>z6 z%D5j|l$7+%ecwc`Xen#GUyRxInrxq5({VtEKxlkPNeO4u0UkGFMnv>Y0lLTGRe8A7xD137F0FIMSjkW)Nixkj895 z*_XVRvWvWHGUfV9fQ@EoV|KUItA9pb>f=0qd4a9j`SSOES^E3%^@p`;0c5dO zN%otS)STnKzXtLMS~PV69V-|iGT($I?QpT0q4%8#DS|fQ8PDAX6SN{qILAZosL(=F z1T@JxxHgk497Wky)1Zgc>Jg4~?(Y$4ajL#YB>86f>SL>Wmi%%FVtV2m>FO#Oddr@T0Z{C98lfVMrT>KM@c?oz!pXiQ1GBDS8UHp=;HF=JFUwbA&0LRKYzW!NZQp#+080!6b)0mM zTEI)4gwMofM7HS;yHr*#z2C%{7!hZHlqYEK`dJ^y=X zW4kQee*7K11=)fBURcbZ$GZ}rgr{v1!Pn~k9SmYh;m5l#Ag1N>ltrpK+&5b|+A4B{ zw?02ClpsOTlA4j`adBaozWoFoz%gZgtr<2#gjXbfZJrP#w2-8XPtkeES}y%YvVivhdZqW+2X zczdJn6D)mhn-%(lRYc1^+YjDfPHu#|5QJ7o$ z-p-oQ2>E)G)c3$3BFaL@|pio2G}3Teb6p?Afzer*=&@0je!L^rnTLmLd4UyB+qp#qMvL@UyHpwKsWWQ_Eh|Oi@7gE+r6!FO|VY32V z^nk&b@`&meZ@14nA17)CLX%{G7{qrn8PGeMO_^)w72gx>jpD3m+`+}xysDupn8dbW z3m8M4>cI+rDK!FsiJI6l$!*w5BKwJEH6$dJtLF||phYzEFTulyK#!^5l|nN@K*Wa5 zB>TL$!l94&Im83{PQ-Li{jXDk(q*YdV#{pN&M`2Ng%QwD1tKk4^~qFM=@@l1x^nw@ zxh(M!^O*W$5@}KU-=8sE7{&SrN%*|B4eraNWvfL|M5K}Ym+7cyu8G$vCq1_4Igs&f zX$`IY_~8BfV-qYK#hLH1V~q>9+kYvavVW^m2crZ5O6%n}i!q zA6tg*ELD*SUCU=ZCJd#MG#CRiYux6 zjf4Hqyg6f}XTqriW&y zbO?CKRHf8pJf?G%>3~|!&LIlqG{AUK20ds9XjMrW-~lt7AUhFSq`7Y%{(?mA@%Ud$ zGbT?4ts-bQL&?FE4a%GOLcRYS@T7kLwP4QylQz~!@4}NkG0}WaDnn;XHWPUqij(7z zhbh>@)nA+MOh6&gpBG$sbO1;dlHOC!h1@8ItwN6GZR20 zXqN3@X!eby%Q#S2*z6R*zd|88j?`8^2iekJT+@EU-)9R;7;*@-mHF9dv}Oi4cop3e z&GKZQ`Yq|Qb;Wfl4XwCu*359^b5ep=-x26axdV73@E_J9Knk~TzmsV#&fC;Ft{E!OwN z|J`?;q33&k(##-QcF^C8RtWxE3Q~24w8qbLB$?_I@9nuv(5Dn5r@i`B;=r_(mCH?~ z7JeO^5it?dFOUSL0ds?eln=C_!dJf~)e1;;&0{l?G?Q( zq5Sj)Yq=ViigN_T^7Dz8&|J2C@M%6h#G`5nDT+wy9~c~t*6W@LIf&$Cg>4sc_iU)$ zCaa$>sY3P^!=7NX;y}}zffA7vILCk@FIVeO{h7z06@8?sct%bg1KmXr6_B87HX`;62%F>ZAe!vdr;FO12PQ8ZMzK7Q&&V_d%*$y@-{iV;-G7atGzDaLsHAWi{Ps zWn_!7_&ao5>k5~bphhVHy9V9r4ijTe7TJ2OqOrpfN<(f}fbT-5fIxh+UjTfAL!83P zQvV)`)gVF?2UN49Dqeb*L+PSwFb$7)XEDjCJ+OX@Ff_=v=o^hf%Wb#IK|QLTq$o=5 zQ7eQTG+8(Xdyf~CV!fKkwwAUB98OUfp5dVb9fN_mOLvE$JLp(eHph87S_D^R57WYc z+pbs0Bf7{Uc}6tsM$!%J%8%-`=be(B9pnIaIp&qv`LxM|AO)sduu5yZ8SCEx%k$Cw%{N zYr*-SL-yVBujidvr9K9g*+`^P5GdPVUr;^kzo+;zUdk7B zK27<{M)5LxB%WcPakR(1?TaUp#>I{3r_zhV_7?i9He+066&fosozQrRSxVnqGcEIp zeP)TMfrUK}G0p(}JBcZ2oI1V;PjOHqt5;`#7#(d0Rq)?aUnR3);R|Ly04i?@=n~9n zs6!(GQ{-5MDdzN`e`?57iM)xwNK=sXtv&w_E9p;V4xXDwQ2lKYr0XfX%lB-iqw4XT zMn&p-KpwzeM1u2sCjxk~pN%I#Q=*Q}S*Le1kG|nV*Od>u^T!pju_#wksJbu;;%m0y zegj#39~5+}r-T_@DmWg`)kgmVMcwJa4EpMeOcC@4P6lZrmMK-;j^&OIO5<&-u!};6 zQukFFq3yMO&=>GvR-a-%9gyDCepb2!(8PaX*phn2EA=VTT$5p5ZlDmF-BB~>NGtmK zB`c|;a)q7fK+qy-B(I^# zS-0vVCZVf*ylq&-R8L_!u?v4Y1y0L{iBJ-si~X{%K zCfOx!>H=dM@lY8gjjXHwnuBi(xC9x>`O3CQZ-k9=cKj(QEVX7)!V2gj!pj4nZej>lAy_n|XlpkPJ#K_z+Nn+xU8Lk4B$VP|!NMUTE0y#(9A z@4j|~O5RT4KQ0tF_O|)RGQ$;m{~a&9BRTqZ(KfDZeD;=hF^1y|Yr~C;U(&Mu|AFS1 z`8kJ8&2bN)V^Z;}t4xj=9}_=Z zeVg;7oVtdp$v$QLaO8EW`jdK?hQDOf`zhqw7A*mzCK9>)?^ z=c|&M2hueouanb6i*j+Mf+Wc43k47sWM*`6U5faZwYB&4f`aQbJZ2Kq6tNR#_$R@d z9sp++1;h^{O-l^p%%_T2Q|EpQ9^gtmsp;;tF^h`?v>7iTo;!dO4x|f669Xy521oHb zHg|YTih}wr#K1XItb6+&Mu50h@2=!wBB>eK@!F<*n4+@NkERx00ugH7c@@8#*cCEs zmo;h3;;NrFI(P(J@RUE!nyL@ESo~`ro z6Om)y{kb()XLsHd5MD}1;*O0(qmURO#H|1y%NL7hHg1C>S!Zp9VeBUU{N1MtHI8qY zyW0?d1wNu}X00hM{Vh2|tskI}1?)QBfpQqGpV^jRPyB9H0}atP4UvF=Yzi|M34S+H z=(!VmcqnNEC_jBSkq|-rHt2J8L{r56LiNOqi{ZgxWFmxDI+7t-pV*Uddz>35Pu}skX*Ja|L;rQ@Tm94-Cm!wR)Lw73hwj81@3>}8kati~C7`GozM_S(IvAwVO0mBCwF9e& z$Ol}1@?jLAr<RQr%;#n6P2O>YFVPA2@`u z$yiPBkdmr2w1QK82us3HwjcIzzF8jbaY7{CDJI1k(NL0NjhD8%OIJ%ukTqq4Kmt3R$P#io-{Uh+=xtG0=tWdnE33P?n+I(-og zxJodRJOcQXD2yTj8HKIc$sn=GT*a z2qMLe1%C#;FpkB1AxxtQR2k7wn&sc#!Xt;~r_kjOhNLu6)B^$-(%5ExWllpgt7f<@ zIoQLqp7bm4jh9ntF1z}b;gS(BCNl9ph__dJ(XqY_<`P{C@1kh1Qfa0@etD#5e!<}( zc^8e%!hNLuK`V?!LWWnQ&A=K^kreX>JIq3q`@T=8Lw?MM=E{^uEuIIuw{Zs^I~4PQ z7#=V#RAxm&Ck?3#dhHay#J~gvfL!*u6-_(M{;+pq=z7x-{R*!!xrCSMkhj`2vqM-I zl;la3KjE)g(D!C?UT0P%hN+ZvuBcRxIbYDTte9!Ni7w@B6Nxw-QeKm)ag)&}pb^*N z(x=LPUh={7DIGP8okp6)amKHS6=?)#n-bjL$gwvF6*d|&UPfQc=SP7Xo$hI6x< z$NZo%5>SikU0{TS`{xm^=2noWpLn6(OPQVE$HsBIBhMDpY~IpoXp|_&W4} zF{zNUk##>X#j0O%({+2PXkK!rg4~ZT`&YA0Vh`K{Wss6@JT8==CXtb*V|tXAJMpGc ztVyv{vMy5n4BJ!u$YJ{c&szDO~umk%vY8Y_DGe_|fEIAzk^}F5K%8xcH zokCrVoEiy0BMDwkRpgJjRj6ha5mC-(dPJMpY&_78n2!x30Z7+9>;+jaaC0b8f;qn& zqfym8{lM-z;eXo13=?%mzW>}J{^Zi@zUP5w!irkEE?C}~{q5K9e7^E^*0HPWPX4)L z=Qqw*o4&bMeyjMymYXhAHn+?}`|rY=EskFTpM9mi_zxuV^t+#hAFKeqQgiJ}!~Ckh z6}x@Mepj3H3%{-@H_a0LI&){^lauJ{<-t4V17}HciBfVa{DYuSMw)2!r`O3%LATr? zYk!9VgkeapbY1MnLm9WiWFMb7>kP7=({9iL>v6l$!}AoHXkYB3*&owL#mB!H)ki69 z{ngbExM>$mcCs7ks-tl2S`a_+u6}(yp2#c`CFkxN8NrU_6<`=)MOW>?&3hOdbz|Ml2 zy9PHjrpg$9t7bKswG&H=WG&xyDGF_TuDtJ12pHe~Xdb#)(v6Wz3{H@H;%TI(AEBET za17?7=Zc5uob$s3fG6*~_wdcR--%w+dAYzjDgI5DP;-luyO-BjKb`K>`l!)AF+W5H!HdY zR1q`IK&aYA?J#{qwcg`*UrynywcjBW@m8$=8Tc-O{-?+QV_H3rhs7B)=F;rlgJIGQ zus{6=Fs0hv3v*1@t1o0BQ6R9zHGjw9dB^@i4Q`u&KEK#A!4%G0$2g{FPrg7(5)8>U zG-a(?GTN2|YopT0qR>&}a@%!Yx`@G(mZgP97uQg09#h4{-~&F{nz=@ZXgOEj8P7fn zZnt-jTzsgW7ey&OI7cO8Y>am(C*ZN1T2g+ZAWCubqEGGxZ3g?uVsav&zSTD0^qmzAtx8 z@Q-l=SEoRWUd%lYiR%hH)a@Ehko3goLo4p$QjRD&I#ZDNgMH>Td$_)iCR3ICg`Ki^ zPY8KkM!4dxn>+v{ST>nVt`OOdbX=C^?rnhh-1l`?Tm9P}ch0W^Q=!3l?6*lUh0Wl}y?y#srWPrFK0t7%TvxR?HYY}fT;8yiGE$5OQ5{N5QlhhaX?NKY}M<<1ngLA$KX?;zn={Pg4 z;lp~IG|8!hW$W5aT~snW4tXEunn&QTG~pzmqXcDwho`d-l7Kw0bWF_QJqr-?G3>rp$GHsobU(3l6c})5&ZW$JP%LPZ3>b` zRBYI;dO?*Cz}#bNV6$mO%rtiyDkqz$xqCz*@}oHlm%G+Y8y zqwRL$ux~cdO87X*BxZ%Hu?wPiH4QaT;kYs&!{!jO9yD+q{g_mGDJtRgnV1|~KE#uIv)vl5;z?UY#l!pp#JyfjV0WFBdv-K9T!+VVS zNBchh`1_O>XaidsVXGubP4jzj_uWL6N(#XKq_h*C9+0JD|Qen;p^UGKa!#s=5A^glgH;IhR*s>8n-&5 z@gl}ltNmsIuzNfPZ5O6Q1rJ5QdY8od4o$$qhOOpsp2q9!)kJ>bKhWvx6F_!ks|XPQ zL*0Q-kHeGjNaxiiB|1!+GY;pBJcA`mS3&Fl!iM9e_om8`(C~!ivr#b~g){Rw#l<`E zi$SsuhYCR133q_3oVg2I4LSDb*fn&XBRykiqorRU%?)zUc4<4Ym}D zEeP0u>3;wl;x$0A?|@2sJVE#VYT*3st|M2dg|)0SZFhHfC8QG$b$BFTpt4U=v-cB( zo>UKWI;_{QqV$@QNnWb5PoX683KqY2GRU^;CBIrM?~PV$Wv?)67h@r9jIu&;%{x>o zQU|ssz_#ZdvF0J{=htCsDxwwELrQc-HMK&TLdtgV@S6fZQWjde4<<-)l^0Uj%b{_h zp#`KsP&Y7W#M5Pb#yM9WoP)ZLDn;P2?ka1l9PgN|9v!nJdSrZ$@Kuw z-ly)UNQSuhlW?Z{!YCRIE)R(90rw(^vJv`iDLc!_pcZh>Ui47^Af4wGC z_#$zWc2)Z>{XbCTxs6+tMd7sX{ce%w`3x2xFKeA{y8aI|6kgji=A6H}xi$QMvp;{y z*Ui{Gr!b>AX6aickGN~5hlc~@D-#_5-8}G7#8>YwUz&M)H921U^04mE$-rAtKL~8} z1L61+;H;BnXSLndb=0jn_vOCmrikAH4^BICu#{Gb>H6&)d;XB^^DC6E8G38qb@%q{ zqlTtmmsJkGvV?!QeCuckD_3XnSt;@{hi0Q1nlZWQ34l%T&x>^PKE7{>S}6hNo#+%U zb~cv2rbuAgiQQOsEkV9hFQZ^;JVg=BkH&o2iqS;=#}Pgguppe2k6iZ3)NxEUF}?$E z>INYft(@fFmU6LTWu$Sn+7FXG^w8pyM>KPvDAX>#jx*B%CX*TbRLG&Uf8g*%Bfm8- zA$|z?h|^<-GUefIfj*lDu50ek_jdsRX&V3;&GDk)wvHqsHEw;gX*x+!yZzWEXXxMdgp)Nw>vhy z*=%|{J)a}`FGJg1sWpey9-1~EevsHoYFqX#`|$0-@5c5DlddHxvty&Wo9C@+I74}o zM$M^323!XKl#<`;R38%TseoE$7|&UkbwC}3Xrf}STe1NhBs}7>Iar0( z0tK2R5nvGz(EoPa*ZFGK zY(_}a9Bz@i&Q3ck<*CQ>C2oaiKn2-=Sf#zjO!_tBN&gb;YZzt_6zh#Sb5*sO7cjNeA z%rl?5yW`Y9P#*?eOem(f)jiR)Zn8iSEfO&rWopcSIg$qyfAvwbufH_L0TrGy$wF>) zp4D3T{U%fLKag`Qz47vC2{}R9RFpDb*n>Ttnh;&d^-g+V578P)K8{y0)n02>3)bJN zj(+L>FzKAJ(B0}G55He+8g+|;u5;S-m&|}Fr38lt^~T~!-@qsr<7vpb)Vz-2;Lz>E zh4y@pmk^5KkHu@)vY~*vUq1Xv2Jl==a;ONue8> zp9Rcv1jXE<=4*0l*9kKuraf+bTQynn(sauySWxvq4;P#tWZZo2CVjR(y8fg+;`Vk% z5uZG*8gBHkn~uM%|4;c}YI9ym5a=jAgM$CClB0&vLYlD0=gSRjYm!5zV6%J}po<5F z;j1J3c2z~R-{JgJb2e$-!*Oa3FM&q*g;vji@!*+CoX{shbV!z#HpEsT1SAOE1 zpSAPf>{Ilq_0AyMTSN2T;p@nL$D@9?!olPD^Fp(Go>C;8EU1*Y<0Q=;B?{k$q3UXD zo0zS(N+)ON239hEds|yg^=bp|IlSsNll!oD-4#G)=XcXXOg;X zUC7}GHAo=Lu=peE$Eai^7|5NT3ByRw=>1R8)?tCh16Z-%b!G}b&n-;EhueI*wo>8P zh)Dun++|kSL$iwf4}rr0kWJU*PQ#?exrg%hWf1%T@e_gCOqnMnw}Pg*T>&9jMm#<7 zBnT83K@?`j79LXxs)Cbhi=D(=Pi~#+XGi&n5TO7rU{Z1&Gp`x3v=b7l-)t9^4_w&@J zFX{DAoxP)^ic@n30$QPhQbV9w?zB83?}%Z9UiWUtVkS8g17J-E4>*cLX(6tadp%Tq z#FTWmLfRWD2tN792FYbv0|hn(?D}p6D1Ze8d4%LZ6UrxTH_=a6yoZwR>D$pKp+Ltq zs)zPf3AM%)NG2ECm0aUULJ4*JRBXH?`q;BBBsU>cLdxlNQ~(f zAS16v!HP))4DX>VqsS77QXB;xP}4~=vR!E>9~2N21#t9sB7!4u_t=u6ll)gl;DpYd zps!tFg#mt`;fv_L1IeZK18*P@mht4QVHV9?uo^0q$EqWrdF`1eV`LrkW9R3GFyyF$AB$5U(m~eSlbuD_% z<41dmX=97@eWhc5C2oZxp%Z)6(00FAgmij~z?!r)^xU7JzrVs6E2@E0I(Fbe`T^tH zn~d?x4zxtJaTv)Q-?lalTG@fUHa$Z?0^LN71Lj5$u+25Lck64}atZ!g`oOU!ycIC- z9)G5Wr0U`&H8S&Ow#{EF+3!;F-#WRg{wL^_(N{G4mA>YX$Y0xoA5tW!5MT=7UBnqi zr}^0WKn<8Ku5tmXg0yhRw8TUHfif>oUcA%5PZmMLh(%9J^U$F~a`DuWS$yBNH%LX| zeGC=iUn;B)2F-angDGif$0}^@Z4O^z-n43@=@**c8Lbd(3F97A+aC&mR%E$JE^(^_ z;3MbFCbnnLG z%oGswUAD;x1uGh5JmX0u#gYH23J>JTHf%BKJS=ju;*rCNEVkz*p*=h)AWT5Q6NeSbv2sgG&T&nYr@>2 z396d{;j0FR?#fD=micWNZ6CXl!kF%lxx2fR8eaYT-=c}HZsPY9?$Y-}2|jxzYnE&~ zao&|4=R17)Q3)BTwcl-*tdcDKeRb?AU*gB+Uyc5IZ?AQ>9+;~6Qs|1Dd}}zU^VY|o z8C`?*^1po(ixN*fo<`5@AeDT2?&WfyUp7+TY(BJX9hXWwp!#y%)nlxEDW82YcE4>K z3#dhZQ;0uS8p5;I*;@;GO%%aaHW?%^MdzYhMEi;H&$j!rqC!Tdh*@IOX zf>zBtq+0yH@1V^pU<*#d^Q!A#87J`m$4j$kZm}3Su)9K#bjeJ)XT3nl=|=;RVUvv!-W+YZ(diT}Qyx>obvww`puyrd$y>UK)SR|% zZdN>Tx0OOr--UiRj>0K%l4{es@_Y{1FE%Cu@k?o%9-24AllAa=ni!x4Bkw@R{X_$N zEgXlMCq1l=>c+-tY0ReZ1Z$Ok#;Y6OzVlM!wY&(jTNW~oEe-0iOp?j^=<{GAjE1+t zpHK^Hk@g-A#-Imo{|<_qs&Ud-hv3uc7rg&$Hn&38i#JuCID7M`W_OG=dC3mX3Ot$Hhdb=0w zJL41k-kSreWhl^!bCw%?chDMg;A1JJ{;REwf*#z%) zWTW^0?oGY;;^6hHxAxu74e_hYAtXKcE)#J=7xhC(NyYh6%c}9w_PYkK?G&&d&*qd2 z7R4PJZ6SL_>|SO};;U3b7d6NF$)P=hKDPOn)?FDW>!mQMq7(xw&2~(Z5Bj?HK;rSx z4U-rXD#ye_ca!L}RidL?9s+ok4C9HZKSpRp!11a}aFio^ut+^l=#|S7W z!OZDX=Ih%6Hb2ZNB9(uOzuNv1`?Nf7)B*#R{>wHmom;LqQZKf#{e3@*0}HZ_bX=f& z-7@WtnYY_{dj7~JLQyO^xN`FM_1Emlvb2HQH`);XFwT$`T%Aq{9`+U6#?WDXlpUk0 zn(@GeHZZDyJyKAw{$;+tNJv}MpB>;=(^9Bv=i2HW?BIMBZT_B6nt-u!=H^osF*`g^~;GC2VyEf>^ zGRQ{x7lxdPiGkWa$VOx|(A+3bqa-NcsXM6>G=^Z{!lskkH}Ol%^pvHj|ECvq7O>v4 zQ-T6FkdP|{y!zqyeTv^ezu7i(zoA+9`^Lg7M9}Fs^~L++7!ta_QXVSMQc7_G+CtD*Wn4fbD46mU@ zTr*D37$=o24=az2g_7$RQr!`g?O*0Ex;oJL1(d=|j-m47=?_Nmn;^ox1*5AGk}ao) z+!_d9kl>Ba{24qO*hK;q;vkmo-Q1{JC<=^IY#m=1tu84i7g71*1MmJZ@{DB$)jatU zy=O?ivnDV|`X*46nZS@7xJfbyn+{J4aRo^oN)&w4Bm$;y5vF|xO4mO5N~ZcFK4_Bu zt5$^V4r=@}gxuU}lO=%VFVz1RAwurxD2HcEP}&gjWGA-nYKWc^3P#o-D6Q--DwaoR zzyhaQJe?dO3f|ia{d=Bcn<;Nz`jhWOp{mnWBF-BHAearhd!bHtNfkoXuz{Ng7;J#2 zFGj$#UZP_e?7a&qeg>b!A%W0mD5M=Hz-0@|@K7Zcji7<)@gLGI4$aswwcnUTB`JTC zD!jlEW1KZGv-+5!^$nGV2Xx&JHUMQ!C&)AxB@XoykY5Q74EJCc zY{80J#Ajh?!iv9tyBAj!rUxQb=?YyCzz65tW0Zsy`r(Y z+K!kqODdQe2!JfaeSYadmF}LQ%{OwaU|PDt&z0t&aPR+EG|a;}SEp^>#Jv~G$lK5n zo0N(u`~X}Lcs;pf9A41GcYF)+JZzud*x;QN2bUO@PM{wLwq@n&jXdxAQbDRx?~P4R z^OtS&ovZ<-e2Tt@E@VgCUSQ#DgDN@1hC{n58lUjTs2~V?&m$Cr729BqPLBPa?UiAi zIth{wQ9XZE*f>+T=>@Zh|L@ysfkxcfz`pPaq6XV;B;aTq6>c7yt0SPtzqiSDMS{|B zN5Ca+TS(Cy5_K%k%gle&>-)YNQc!Y57T>#A`0OD#7D}D4^S|J|m=SA-F9@lwKNZZB zu%Md)dlVZ;-(g5b1L4s~2W9PW>)S$XQG91T8|VgK*zadl6f-HyTzq0zJ?xF_U_^a9 z3{t3o1>=9GQpU=1E*cqy$D2kd!F>C7%wH+VaWxDHmH}RF@m(RZ`VSef(g{Unrp0>w#lP{8H$Htn{XYF z3EV0tjtXDntX%ovfBiO1hk?_vDsL4 z%&MnIfol%PRmo(q>NYrw^+_wNe(dItuTK7KAfHEQt@;s;ES_8K21aWs*K|^DR@0#u z&@cPKhwuAK&p!ep!LwTtf4Qcijd= zLUqt~!A~ICetZsgLPj>miA`W@yg^d&48?jyB0AhraYgP`k=)gd*#_}s32sXk(m4>J zTnTkxZ-08}&i9P<*0I4FR=R!it*P0Jj5F0u;hXpJe)>W3OG*P ziu}Zf5kF4^ltlg=dHtu}#$R$3rP%Lm%GTVFC3^!(z}kWkH+6c;>pZaC_%HvjHlFgk zk9G9gUh1cIbw>)6Q?Gu!-hcMl-9-_ZyB40S?&FvJzzy7N?6Q7$9{Rw09g!7MJoiWe zlA`Xge5X~uI=uB)duw>BuMP$To>{vjr>MQLX7JO^pB_416{lP&43v`#AG}%nAlyzX zYzbG=`@+QhTV*L9e77gXyHi|o-Wv%%`i3K;x{09x zVW=XG3=bDr1-w| zurK-CQse$Dr&k`{4lUdGgk81n=1z7Y4zL*W@APtf%V zX1tU`M1hXu_9o59Hn`@O3-O%+jZ)@%a2Z}3{772DsnkCpWWZU^#4(G?r}-o{~teakc$z5SiwZaOKA6lY=()7W}1z>bhXuri(zYK zA}ckm4yg%7nqhTZW_DTGYNhL@tJP6S(oWizYgSl>4*R-tkt@6J_xb%>kFrEKpU?aK zdOe>ne}3)?S9C=iZ!9++xt;JM5DvTV7KY_t5PritccB)mL<=1reY(7 zZ8#Uit%K4(%2Tabb+kT4)c>Fs!d4!5>K4hZ?m*CYLXl*A;iX!GwBfX!o69)q-QeDWYtX=z>bd^J9TU9OMDeH z0Yr)CNzJnqZ%5VR%(akT*2T zUW>FjBEp!9a%Zzcj>9j2Ii%YZAu-ec-6H@zzZJ$2XdK5cCHMY|fO48Atb!r=qu(rc zO1hIe0{JYM6(9;cIpbBxvPIq^#>#~HwvDkucaP8zNM8M?K_a+-4;9gIRd&Sw-_s`E zZt6-;49Ba^z3#b;P5ATTg1X?Bk{X|jhQW@SUk{p(_&$L~c*CA#&{JQ1ygcorywK?h zIya;eVwIC@Q=%zQBI4d?+A9$OESS;AM-%1Yp+3|Ed zJ2@1ZbFeA|v7;TrZrk1}mj}Ob7ytX+JinS;$zLxW{d9jP+rV4!z8K8q4$V zPsg_&8<}ONEt~#!U1s6?Wx^8OFVu$@wzf8{EJB(t$LNFFOjq~?V1vJXta8yFp@IDIjv z0L!uCP|T1q(S_iKA~pF-qj>+jeM<%+No1u`O{G~k%3>-4pwwzWFG%C6Mhat-wy!KH+)1F&qr`^`Fr$HVT;v5>jcQNe!kQp(4dZrJVml zlv?{_-gF7QJ>O8VYTh%OW*c00dxrP77@>Gf@tN0sNX>dvEe{5e|JYZM#50XZKxS(NdT^TaEoLfV zb_U>sG(7Y9AteRm6BxDcjVD$w#7oGZw$$i&V4DQ^8PEb@mFCH?!k3AQOBT6MA91SasRgA|@>Nojb2=l9d z7W+Pqvh+dt2w5d#Vhu-u9y}S4(ZGny>3T&%LTu(zDdQC4l zoViHkf)!iPxyH}3o^aiqR4dP#6M%V3I97J8a4qMiRjz?aU#;cTDC0bLZp>^mHFt}R zL=mZys^e*R#(0n|s`SeBi1k4HvZ7C!9LQhc#*ZW@3)7K?*E-=0qX?)q$Pwm%@^G^U z8?pLoSP6DABqRI-KqI7x5K*M-h@3dLr(30d=LNkG&-mJ_{z;7C<=n-mX(yuXnlpcB+!XKH z?=EQrPqu?!#`>+F8P#9-`$*QBrX=y4?fz+J+b$@R6t2({KQ%bg#<%N%C`@1d#|r*K z$2V^AU`s&Nw5efI^33Sw|1E>g<{x|8^)YHef9LoO7tMihxyYJaq;kY6^wp+XbE*ZK zgKT+KsUG6Q!P_4|qVM#mSMxF{<~gVA*bFdpC#HtxV+J%(><(2;%Qb|_d02U9K&~*z z^*Lo!9L(mKjoucYg;as~jykwC ziaxq~K9-}SOWCY`p4j;JhsFsNBWid9DW|YC`?STa=wU@@CPOaip-x>1e!PzgPKrU$ z?CgPQ%5O%NJ;Z6mi+?W_yc;fr zJg9z|{%XpFEZ>Z{FAr==mk*9B>2vuGcRfyJ#S2eXDbv53^u@(r^Z!a@pYwZ}uS^1$ zZso7t2`}-UvnS8EWZ!oUy!yOsMRQUik3IT}xAy~@PCj5{B@I~Yiz|u1O0iV200|H0 z%5H|8izF0e)+F+@Au{+5_AKw-CS>YJgIfs?wt0h-nplx%C@7xQ5*k%HO=uU{_NsVYN~J%o)_>y@ zte#mFBE7$xnp8yP}1d}YLu-mbH!NQ?>Np~?m>^tbrT2AtHBBKat%jHm?Y#4kVE z7fcz`lVVz`QVL9;o^?tJl#`$1aMOguRoI!6*`m~PE}MG<;tjULW*j_+UFK4bzPgxp zz67_N+pAGla>{Y=;FztR>XD1wyPDoUtqAr_3Y`stz(a^=hd9fq z|3O)EzCZC0)a7a^&<6B=5L&h*7!lgz_}Xscvs^AR_q^0W zy*Y!GtxWxs(`d0mbb^^<-{gMQX|obJo6oof`zQ#VLCkhRoaY@yN4&GYDH|NT>G59Z zqt@J;Jawu2iXS|I_;`<~f6(*`dXK53@9qf(3M6?dUi4PFa{@0DKXw8#CTX%BKTi44 zJfC~&G;}>O)+&!cH#}@|Gj8)24q{~devrYZXKDp@-G+tF*qc`+D9A6Ps$?~>Qo!X( znG~g5eT;Ke*Q0pfAQYS1)H}9Ux?p6rHucw^^Y>(K80sjq^Hx1E^JWkvGd&)poR|Yf z(oGS$_KASsXoa{?t=e$$Jfkcz0M_V;@1S&S-n?%fi;h1hj!Du1+@}It?_CiZGQlyS zUmbBuq(XIc>yvC*MEVV_Ps4B49G$T)y_2~;+sjNpaX{!T8vlQYmQivZ;BF35$N) z<2D4`XAP`kC?5RkrO3bLqF1fm1nI-~5|uJ|)5z z;`-J>7MNM%Wa@b}FuApnol%XA(s}G1pnTO*9RH7zCzw9B#wHdjw?&jT0ibBOm5hiE z)-&E1P^UHvNEatXzJfHwZzdjokjI{==~*X+7S^HbZnub~Ky{%5gw`{UR3e~4Y;&-Vu<1^KD5S@CutBsxxW1q5KW|H!3T+KF zChJMn6;#NIt9_jW6Y&?+Do5#T#w`J>PL>@}eC;=bJta!X=_m!cWsWgrH@MUX&YD3O z!AD>Gxc0)>Ug|WlEU$z)^zPvKSF_jjh}dTe8BN?6V5G%xJp_iWlikda#zF$j3z7Vq z%7-}JWRt?=lsVYK$Jv7Ddmud^^lY*? zkLqJ1+%1L@Kc@maa-u{thDdV5fR;U&z|&oyuN`;~idX@)Ph>9eih?;IP)-g2&@Bqu zy+ks|DM#Y>r>kH=E5h=hE;h%W$Sv&Z8Q?nQM@CsSe0O(R!q#n@^^xejr}&l-^ar`r66*$GtjuW z_ULOZyFA@ncMve>NZ>{mz#;L(r`zcUY*6v5JWmP|3UrwO54a7LJELzd9P zl`X_l4{{k-iaE25^LeP8FI?zY7dNG)^~NyQ#+FB1jrm-4v&-N8CzHvkKCVZ=ePPq* zz2Iy;U|isugz(~N91zR6Cgv1^Zc`T6e}cRp5rHc1J79aCT$vN)Fc^>#sgq1sw1oo< zaXfXFX}??JK8p?Pr{!Q<;mZ4I8$e7ElIiDSzmQ}_9b;z|cM-N@ZiS267W;lwf7CB?gG(fkwtj+(b7 zsowkqcu^I?ZL6QO+dG4uo8a9|+`C|Pd1rgGol+AZ$%6501P`ORSZ$y=p~*e!8rc z$|UDi>#>4jmh#(d9nI(+)JpRtnTjJT8QzLI&BN-_#axTn$_z(_f@_bWdgF7n$$<5{ z_}vYK*44@(#Jyh+DetK@R6EaWTO-(J-BM7<@pr>={MSJ*mFjFn-8eudCnC>ZJ0U*~ zjuWIj>KA4BR(T7`ADw)&upM%+C8VFjoFc$3g3Nj`?x1!XLSRCg>r@`dPHg?jTBbspI_ zvA#v-DYrLNx_mbJ{ll~TyS^c7HPd-Hxq$n>KKz~ew}OwdTi7q78J|`-*DN}-CL~)Y>x0Dw?w9DnVsv|bqki0Qulwo`QhY?&RhFtthpnu%9yzeDOm!2Y>#v_8k1=>M;+W6vnreBYF=g_E+&Zg; zY5S>DAg}%1k17G#kMJBtSH1&cj|@;}8F3v(i+bX6D-AZ82<26IZIpI#hq<36YfF2^ zhzS%2XK!_0yN=37Y+`7}CMwL5EUr z09)|@7sj$*k}0eTHJ-h-F*&<@+p&F1SJn0_bja=x*X!pX?tZzEiPwK=b4F(jhww7r zpb1v%C{Th+MUW`;ySRA1!z+;u>Rc3h^%Vr~|Jw)(Rl!hA492TP z{8jrnoBN#-&v;?*3M?ZNsl?GH$I|KKL)X;zuJk&*mn;!~8X!sfW17y8!pyZ!=rEfe z?W-X%k~8OhLkb`x67O&UL0TJLHDhaQ;tcXfMe>K6;wVaxbLwci8hJw;d8)9~79ZR$ zaj`z6(`#@LN#eYIo;t?Hr(QA7yh@xThp3Yg@a*9ndJ%SJwXOu66+m(?Y!x4_fA$bf zwXbB~yZTz0iL!*c65cK>j;iES12o`>6|V#=eduqDPH4k%_G}kELZu9ll^Aj_j8#y4 zSS0^po5sHdWydRpB?S2mh&_Z{DMg+Os^hhGj86C<)ca!lnDQ$m0Au!MCnRGjz$Koby)*sSab ztRP1LTK$Kkg6N&g-&bb`re%i@R*SpYFy{(+&h$lyrlMaN=$kG4yB@K&+b)wye3g|a z91S@>RdX!JjxpmYF}*-bU|ppr8HPs0t3$P^M#gj@%byEZG`*!?&lcIJf_;AWj+W{6 z!`$s60AMTkU)$k!EZbW&tyx6<2My#lDC7DrY{g>t>Y-W9E}xdA4}^;^>O;b9 zTp>&6g|(STnNu7gk+;J_m6@YnV;%`3q`g2{VBXX^%Ju#}#T-ISDYyO`IAsVE^Ik*^ zG6lYj{=~HR-9B{py#fD0ZvsdHTg?6r*92;ymK3N9wz|*eUlGI>i{@DJOKW)nsCckgO1>B{yqMu2 zKv6@VFYPw6CrVQZw+Gu)#IaMUCSfx|UoCQZPc#0Qqj$&k6Rub{zdl!J9cGJs9APq0 zMXPNP%I01^lS|@7XHWEXVlJ3Bae}X6llN%9d=WrxRy29Md|R5^!vr^rvN@mzpI@xR z7n95iUeHH5&bWe90=^1CmUHxsRamUthn|uzPS%5y=jC}e2`}oe@t0vyh_~5RtGI7l z#7scUEJdn!mXbN>WNA2Elt*Hc;_fCS+)%6=n-Kri#HgqI-owK)^d zSQKBbrA|PCo{Z}fPFMwU7h!Wa*mLi=6fxu`(ma~HVuzU&RDc$?@<`VCIwQ@7Yzo_^ z{L4HZTW-4K*vJF^DXaQQf)DOtwCYGAk*B|uht|n8mJ8bC5t5(SVwrT!pU)oWt2O{) zLol0)L|_aw$QdSqGt6`EU=U?7oZi+^#2!NE(d5(iL6GZ>~s- zjY8ieKH6E@*|8ADZ*)d(8qA86&-+Jw-fE+`dVr{j&Sr@aMzo6*arCv0SHqNB`{mSp zNr*jv_hBHyE@p-Af}sd;lUVD7&H3e>0;X@!pS4f4kScwdw0fmaE+j~ApVu8VSq=iu zG0;{#*~&u`^uCJ7Y~h|MBOKz9w(6UT#Ti^>tukbFj>hl{sr!{6ibjT>I%Z97@bB8* zw4~qSjJX8f#!ZOl%4<(3YEtTcgGtuv-9K-$%K`Z$^tA^V=i7XhS=b|&bz;vj?qwzn-X$kvgaXOjvoC6dt)XQljws)!MpztYK^~N$|boz58k0Pe;oJGII24E-4QlQ6`S0$J#Ha?DhAq&w<{TF=brHH(zY9rSKB1 zl)|BKBHiI3Yv%_JlWPa=<+b$B>(BK%Wb>gf4qvpjVG~HBldOO?=0qGUv+$!_6%5dR z9VHuV=fF6e4$X>eq2u}DA}uprPyL524*y<|kBz!NJWtd5g7PLErwc{!L;&~eUmA?r z+=0_1*n)%uAd}cJ0X5V3=)x;ICPM(q5t?7N%|9)sU!XWih3%28CX^X34VV(`65j6p ze=X_4kRUy#hu#;zBB^ZLc)w0^hBaWK;0BG&%VoSn<%#Uw4pmsTYLt}NQq0E`QpW_d zP)`YfB5(J!tL$)f)omI!mqX$zlpOmbB`o3bn|1(1J}Ip~j?)aBfn^GW1G5G;838e@ z>5XGT%?LLZ6`0QVqLg%LSxkvC)o862v|70oAqPMU;=#RhfTLsim#D-9U`Uly9_txL zJ_9ClDHR$eIWwIc0upr;kGY@q09}4gf_BnBWIE-AHkII5cB0|qjYJsm9C+_HCoPdf zE_&wlRC?DlkmRz$P4}3*S|!pCa1}D!Dmk>!1M?u0if17tEVn?JF=(ErDdPERLI<@e zJCQ)ncB2zCRdVUlv^hKBK%Wz$t&dZyZpe6)+PqR(jCo-%ngV**dZ31@p8J|5v=Ma? zDKYDZcwp4;`PpC8z00qMUdayH6t_EqBr5+be@*jOUnDGeI}%?pAUQEmAzHh-Xq%4S zmae$I|MZTu&TpbA=T6Mhj+?!r^8AZs?9HZm2~PIx@izOr?*2>Xgnrl%@1>hQ3sCo~c|BDMb|~>-_P=-;3M<0Cw0@ z?8tNmxa@_xsUbh+u=0!_8m+?j>d|WI8f>LK4>iiIbt8cWNtA9P!;Q^!PVogW+vk`- z&?yFeQxgit7izi=VI#8GIH|Q$2OQQuexRmFHWxu$fb`E+%HFrslrWs8B|Nnim@ zAZ?$Od6LS$TJwrLHZE+Ek(4K1X}?o`Y_k}KFQ@^yOmMP+S1h*}ME-12$au`Wc}+y*6}|!{-A32s6N!$^vbeh**LG0&08YdRW|{YVK6{n)_-9`rcusp9`*ev z`)^9z8JFq!%J^Ps=Ozn&>N!*LgXJ%&~&E-@t=vrR=dEq&3?Z@Qf3;f6YKE?~z zf3d(kvL)5j_GTyLt49o?;;*kW>H7{}dSCO^*2FVj0{&InC=}JyAWQn{(w_TocAeEu zXXS@(+DjExE*boo^i!GKwzzuhuj=poKOR-EHv3(6K zoRoMl82ITku;Rha9ptSYB#Q-Redc+8V||(jCmB>|RKerK?T?#|XBb&!t6V)Z_Plws z^VkLaxdnNjRq^Fc_G`iw}*V|xr(-C4>^HCtlMmU#W;VIQAyVZ*3M zI^vm_Svw$gi*rk@Hab*)0@pV`vX8J@Doh6+Xf=cK4ZS>cip+>k3`i}f{zmcui@=!O zCpiaZWl4qD(vikUr{@Q%A2N989BJx;K9sgChfX6MO_X%R@!?aH;DlR|p zz(}W+SFXg!Gk+P~9c4ug!S>0ev)xX8}v- zrjH5ZFJ=eSN=NC7%atsJa!#4e(}8O+U~8RZ>(bg?iCt=XYCeb#g4d85?U?hs~9{N$Z<4u5m?c^i8|m$y+qsD(no26Bo9#>;@qF4Z1vv7($J zV`3lf;_qA@rK+D=(HwiO5GV-J`V}^;6W2RqF!!F25r4{mP|m@avCZlXYKpsR>)mC! zf;_J0%BF9N%q1Sb+G;oLlNUIMs3-M$g3X1(y5odq@-19J}9eNN^C89g2 z+1rTCl(Rvv9d6U0-R zW2=1g%@m-skji4m=>U8F{Xt95czV$(gOfT9l<>|8h3p;>c0N(0Ld+*tNpK!=Kfuo*u@#C7a#4gzE!536n9z<=gHS38e|?6N9Es!3DbjyJlqDt;W>B0o^3+@ z5ry43JvNE$4UP5i-xN`Kl*7I%ekv$T>nq(KHg;p@ROh|T%)A|(E8zca%$`%Fx_OZ6 z2i6mnUugja-iDL}AA#~pQIS#$*cyf!qJZe#;iVNZc8ror7pK>XqCu8J{y=Wm^34wc z43-&EUQjw5G6K+p!%P=p6Rnfeq5@+Mo9Z;owrkoMU=4J__x&z0I#f?KbckcD{0`J+ zJQncH&kC5D|2^0JzSCo|H6jVv$a$Vy%#cs5_ETgG7Q@vthfGHj_+^^CP?<36$y3n4 zGke8)`Bj^Cn=t@y7I6$=dWNCYZY3Zaq7gwf#B6!xjY^Bzw8+*X=DZQH@TD4{TK|rc z&68aS>emoZMw4Lfsq|rE?5P(j=4}h9#Y$^NJ4!hA;A-$=Ze`|SJZy$+?2hHa6_?-0z0ypEEY zK)IzdnTlD*HV3@cXy5=Kn1cq}Q(Mq$YoVJ&&3BRbV!N;bR~z#<_62n#kj_ z{^Dip9Z@;wnQ9o4=*WjLM8UJtBs^M*3EJJlDZJgoyw9C@vsApY2-1Lge?lrgQ2Q6} zTtlJ!r=5PB4m-JH_Qe;z9>R_<_8yf}aw6xF&}S9C37W={Sg|6fr?ycJir9t%*~aVF_d zmH++f4)cYPyOq07q}+0H#IG;+;6tb6K_ld)2cX3ITPCfrq0)U)ui95y)i7%4i4ARq zY+UgG-1O|KPNZa6RnTx~`C6XYRHbL-V~2hc2J@|R&Fu{vgdc9S0}T(G^{MV5W>qPv zH~T?dwYYt5$YSeS9$zwNkWirYH#@4)0d`S;V#QF%k#L)}+YBRvT6n({y^1ARrxtLw zI7zB+brt$G@n|L+pV1C0kqPR6whhbLx`{TN*B<-3YGEj!DjBMSP1pQj@HU zYfq?Z1A2d0PZafi*nDL}Lau!7)=lg0JdSDeF!g_PakAIFKK`F4?rp1nU4$0K`93OL zz2M#K?6#vBM^-HUjhg?}cgIqGIJjd=Xx6*k{;#HP==4||QTFPrqNYoY+^zYPx553L zw!_D%KTIrH=}ixf`5&ip&N@}YY5w4>zy8O#x$onq84G%+^P`^|BcW%Eul|hIcm0Ys z{CKFVpenkuVA{XK3!D8qb$=@FKFFENwck^_RcWRtOKTTaoDUkSe){(-Y5ygOEaGuK zUiICqk(?xraxm{;d{Znl zXYk_n7lf)uF&?PtC{7=ES9;YroZU1E3uwLp4|=8S@FApPz(Sfj`io%gkwE0!IM{9A zX)HqHN;Z6bT|#OXu9Z?l`dcY?7<|(Xg)(2nDwOAhomuJ@Uecv=2b^q@PgYq$#|S&S z7dsXFKth_|!72OelJR&!ql>pTA0i|ADRIyf%`>~i5#pdO=-`(n$U1lSibuU>7NBASxslk+D*~Ekzv@OYElc|!qWPNB=h)zsaTSUX)c(6tRrFStXeJyL0W=cW6D@VDC7O=R(ES(-=gmiC=3+=Il6|X5lp~ z4IuZ2h^G2&9&tuJA-^J-#8-NMs&^GTN^kBggPF?QnC$`kpAo9=^Lyb>?18U6S=X)3=E6e3 zpl&^$K%X$1E4&}9L+`B^zilM_J*NjmOYk;J*d0Z$HT*$T{}ico{}*oO@?{I+UY1J%Q$sm+2tB823&TPjjmXhUB&e ze;;u0*8{EXbHNytHaPyYJus>Yyz>*Q1S&n7c}a7b0a0eAlYRlj88mR&IM~bQj8e;U zOxR$uX{Y7r1@%^jp-bgraHBm@QS|#_^GwZAC2;e(QJ>{b;yWWRk;QC~ZdxQp!gt%o zu+-UMGWjCCIez1M;|=+F^0?Bb>F8EGjbzh{Tl*6hG+Z$sSyB@}t|SOYwjkl%WN5MV zks7ekdNy2@hlR<>Aw0kAfps0#@dbvO7c?wwEve+&Tj{Ud4(;*qWDHs^7It1-{XO%w z`cBv-RqjkX1`G7$Q-Bk^(!e`Z1R%;vPD25vpTy5v8}{5u?tdjHpxMWDbQ>7}w?^&C z$JkNCGUc4=d?)PIN5qPI>V}zb&^oPW@4@=QbUY=T*yL88yf|RU(i8lK=YHFQm!0ki zZfeQvKm{0+F&yHnqE%yNrCc$R8LKlcH!ht$yQi)Wduba7kv;{@n5ySL;r99u9J!xdt7-@Sw*gInKUgFk%DZA0({*ttg+Wr7~c4LvEx1*za z>v1RS>m^^MSy#LxUgs4e!>5kZk^W)tmE%QO6xf*9`C(q<$M`qCLbmk1F%LQahErg; zO3dem^b?b6fT9jT8c6vgGl42^2m?hsKX$$qM&lrQGVH5`MO3IMilWe)G_C!K+f%5s zfz|-UMscus7ds-@)Btt@;$AKR?XS-%Z%RUS7Fba8rpOxQPu>VHMHXu>8px~_0vy!s zi%QtWE;1O{o{FqGH3I6J)*)`Rkq$KE*vw=B{dRd>G7vrp$*B;m-)?oY`LTVE1nas} zlSNdj3MtM}!r(~n17^c8Zo}a7-ZD8QQwQ;8^E|RkMAX$ufL=lkx2|0+f$9NURNIw@ zzCeWPLIqU|vxfqx{XiK)W7pP^IshEZ4Ii1pN7?C4NseYi>!20z;WElaTupQjQ^W;% z3ZBc}8LED%Vb%FcNQ17~JdC$&m}B_7t!Zw0?j*pnFaZ;%U}2BHGD{qm6LkW6p`010 zUMI1@6A6_ym0@Vm14(NAOYO6pVld@IW(ON%@G9AT-mdD>V2mbPXzv@P56fw~(isTE zywPW|(l&RrzVd1X;Ayxz-cOV{h$kLISpOIcGl*1H9QvjkW8NodO|)pPI#apOjN2r$ zWD7x!7upNG-!{s5$kD=TuRbE#AO>7+ zs*3VL*v*cGM%`B_NTa-(YBMC|<}&Y;%%EyGCKQbq(>I(pc+owA$)pa+!dDWdM-%V1 z(O-xydaVLJlL|IUv$%tWoReg6KeF93FX#iNAx}EnuWaIfbLF6g;Dcea9uh78J%c|C z=(OVdu{HAqn0vuaaARgk(LO8+wVZw9^bWFlXjrY`_Rk}GQMKkg zP9iENfS#_EI>3fqKqH-RC}mryfwAs&QTf%z)G=to$@2bi(6kMg<@$M3lXc6Bz-P_d zLHtP|20VLSO9mHK7ti>h58<-vx+r)nIBI7rMXHXH)SiLRJl7nr9X~5#@?hSXU|Jcu!6=3qkL z7tX0*SAGf)AfJ%9m0~n%)NDF;)xPpMWqG_}fTzZNF(yjZR$so)Y5Rzjr$hY#+8k-RR`bi`)OQS zlO=Oo-5bx-8&BlWLOo90ZTx!b5ga$0QN6j_GUwyh=J?leyXfPxW~$?MMf19M2O}f$ zgzA913z*NjPLIKhns$xH&GmG9QdHg6$@`XTBaeFh_CLHup3zlt>rn*1^wY(S^Rk5n zetYiT30Zp_63Zz4YH+p}j!lU%RL=mN-r$Tl)7|ACkA$D;wm$vodS-0RTE!wnAA-)# zMqG6IBiEe&Ni%CtPGmi){$p{5DIrlgWMoaM=Va%ow#6OGvdeus2jI|6khj>rSLL2m z*!~~1(Z1Nc@CwFCgyO70Ll`?9Z)?KkNxy67THskZ`)7J3ez$h|h8E?-Rey@E+d@b1 zr3RtLWj5XMt@nQr?~HViC<4|rVtwg#ws^=?_2fLM_b>A**Em1pq#*_dWQoUN zqer_KYQ>tZw?+o>U`rVFE`NFUE~D3?iH)#wPh4$bJT!nX!o~A%sRcxQINCB74zkrO z_@hH4x|4{IUuYw3OS=+{ZMg^|2+v0h9zOC_ZzNN<5=#ao8I_<8uig?MnHBEh9*u+g zw2>L>UCxj-S%tA%Ah~zWZ}#y`F0nV8SNfRjv20*pzqMg-wD&;NJxg*u-MXmV|C-_*H8O;@`-a_^ybW|+LRJ@FXkB$Vfpdph+Oa`DsWi=JKR++l%_4W=c6mn zfcx)S-uPzIV`TjHv7K8E{GnMVIk5S&NevGYaI|^`Z};i3P!6$iP#99Yi4q0EtWf&) zlrcJ37(e_KRSdY(O*2;9M2*EvY|;$Xo2rYrBHtnhh=vDEI~$+B$4<#^jK54!8=%mD zQ?Ea^(;{y`8$n)|st6P{AGRkLJPPxwroNESzwe^4g*Q9)aO`~xi_CA(OB8B{_+>&Q z7=Vv>v;II&8pfvlaQSW!GBTfeE)s(t2q#K6Z?y0Lv*xqZ13bgND}?QDqX&2PxG`Z! zXtt<}Fjl#=g>y9{dQ;4~YU9ZIcg3@>V7#y%n`Oe5U}DyY2|#w3?clU{Ql^MkkZt1A z^5vos_TUhiws76}xSN|#a=$R2x{zOXa=n9^ES^86_vT9kFie(6NM>N5$v*BPdFj1{ zdD!j--?}L`WeKOmBh@dChO*ZiMC#}N3d3dbqt+95PFw5@<#Xqp_Y;*l`R4vig5KCc zX&uUjHhBq*HUo5$JTp`kbH&or*Jw+by;YIN2D}ZyCMWcdA7_~VP1wj687hJrI2Ltc z{I4#Dzw-+vELF2CH%o~8*M=GuE`Hegpmhw~+YV30k4P0*)99|Wzm z_(_xtElF~a^IUvOF90-e-LM>2${#Nl-%@VkmD74C<17_m@Voh~8G^sF?0sG%pPJMA zeJiY#OD-EB5IGO_!SkV9{sDTFQozK!TifG;v=ihXEUeK(*MuH2x&4yA%%fTOrTl61 z>(@7@_S;s~J7;da!%yU+yupHPpf(3()V$emYv2bKStCq57u0yuX1pF7M&}Pt@tQ#; znh%XL$um~X-w~ROd4J>7o_S_hd5pRpn7E40_+a!bd3l9m%%s1nDDR(=@>#faMU7i{ zBv>`wMEIc>$Bc(`J~_uii_*aH%v#+RzD}}NIU>)ISbT4VViwt$N8tj9$Mv1#T+9>P zSOkfnPt*2_PCv3&FSyh^w&{zqQ#TEfbKk74b6=2tdw08d$Xz(|B@GO(w+)2R$mtP! zTPWEsm=~?Pv}fGstFk`TO~{O;Nj7vFZ9v4zaE^b=<8o?G{6xx<8m^Z)L$buv)XyD> zUgv=xWt=rCkmCq`Ul+xC4-RqRWhX5@?oF+A7Q;BSiR@K1 zZ4WELfZVq9JW3S*?_8ihTS%J>N~d&4nd|cqxBUHnj|NzYK~SY*#JAt;>)YL_eLL;+ zvdG7&tNMY>4ol68W`}g^us1$(%8&sfltP&f@=P3TyTbMrS;;wDN`Z*CR3H=Xf&91RfqweEtL>1 zyi;_ZWU|MLrdbS>%;#y|2I@H9IVFpQmY#?gO{t`V^d_H<0mRVsp|$NBE5&BCL2B5F zrw`&j@&wEVaN6Vn0?)X1?C3w4c{}gG8&=mTn3sF3=6=QhFS5$(W(Kk-YZEayKM}d8 zTq|ua#1*iU1pcOwhq)X!25oKc<`f{WV2wmyaq4_X{e1BKo(F=5Rz`I*zN^Sd0>jo; zfMgqbhc*G9?R>VDM8otL1c2tB>eTnqg*`|ZC74&lrh_+&S#E{oK!2Ac9Hkp}sv_GC zUAM2oB{?>-iU3COY!4T2)QdUBQqn{uh|3rP$76wXnc6zYsF6 zwwbEZoiM9zqk(7bM(9v%Jm@MA_xT8^BtbG40#*2MzZBmA4TAK?<79sx);KIr&aUsU zrs+dwCdAJ4huN2c#+8fwvJDohIHd2D2U!`q?F4u%pgD?69%VZM0giW8c0ec3HR&+& zuY{VvhaIXP7nVe!R5u!zeX0utM`}Z(2NpQ>ZD`$QRWQsxTwfZFYN6N4-FGTizALSl zz+g84WVTEk1Xg$a_5CuTv_BREGG$mNBE;ETdU(-Ug%1X99&ft1{hZnXz zP9aGhq>j?eUNnaDecJ^RUKT@U>L6-&Y-SB1#ac1nfLcXgDM;35W_ zA_JIdvNAP+UDO`b@}@LO>BrtgP+at^^RTZf(CJCdLtnwZ%3{VrHZn4C)ysgQB0;T$ zo@%#oGotOj`Dg(ruCcvix)u_Jz$c{tu+FAjESWnCuPi= zRQ&Z%_kw3(1R~5NKTC+8iQF+8ldsgn{DV~ABi-y`eiyJF0AhZ)lU!NE&y)D7TkGv_ z%i0`FJXt2k+g+H~c4GR~Sl`ND$X7d4pcP>o^HI9FUO@wX;_s#;sbJ@%RiE=)ikWJT z_1=Hr+DV%#6ibVO-j=d`nd8UkSxOmjdX5LUs@)E9)2i0uU!gKbm z!p{A3&ht^-&%d6SOA+K5ocI5O3PEBI=^*>aAD#{r#0R2}J*Pe0KI!NWpLb@?n_hTp z`19{`1ACb-mXAK4r~b9thDHBvJ?yv>neky;&5KEX4#lScQ_FwQN@0%p<85F|Ja
zov`NPXD4K`ux+eEbrbn}&W%3Uw8$gaN*i_mxQTrI->E;wKG`Yn=GtUwf4|81A>%LI zij#dWv;Aqh7K}Fc=NAu}h`x0b~U;DG$>C;3W}A*@^=IhdONYSs_f^ zzDb|}p`yBAWIH$`!J#D@AVQHVBW=NfzQTq1(TmQ?S4Wgl78`k+cuc?&-3wmVOdVBr zWAy+Av0}t$Hoi9g+?$+`i^Vlsm(e(*C00^yw*Ly!QY3>LQT+OCnRg(@Iy+y=VK}^m zyw_lYEPQRoCAI4FYa8;)X~-AFkdU&$DgOFxXx#focp?%U{?;5%S%T+zWqFY%BuyGg zZTQ<3I&H8}{*Xh1s^noL=Go>a{sjZM&XoMM7FfwY{ zqOIB{wvwW#owS*;M$5|3uyM-CoKoB7d%r)suDUL(1MhjC=l8qsZOc5b*s$llODXW~ z{F)`PU5g`I-pJ9Zk!^hag{5GO4{r0|4&2_Sc85OAgF`g;QNVC&tWe{-%&L8xf)L_e z`RzsB_~WQ8%3(T@GH1Dy@4#O#+tACk;z=!HngXSXwBQyu#BbNR7*$=8`D;)3uRQ?u zZ@I5zo;e{~7pLUnBDh63=JfeyWtagMhhtYy8-v$;PmH7q@NT`SN@O*u5$jMouRiYw zar$&gU9VV@eJic6@W@WWs%>i0g=^jet@(oy$@|cw`jvO2bNUp$G0L~Y{;`Qio|r|B z9m%yuG)qtD&1Nl`tQO2@qilGJ%9CBVoTIsI3w?MiS5=xUmYXmrY-aN7T>?z;5IPr0 zbKmcVPg34*Lo%~zag{+4jEapEJGx>(-qrL1om$I}O?|>0!nOQnIkaBxc3+Mzh6%Q* ztr^nUnZDx0;At<|88>Avd$FhTrlIG<9G_U7g_xxzEa)SpV32KzcU~I_mPw0smg9s# zyDx$r7_lYa2hxsjeH}lB5er%O5GV5F&nhiTjq+;Cce|-yk+G7U_6!x07Zo;OOtZ)HtQ1-J#!guZ{}VX*r8DUQz2=m*?zw7Yb+!CL+EcEj1&h8 zaZVYz#9WkPbMOqm6)i>~XJJo2!<4nw85VS(N2j6mV4mHZ6ulgrzkT2#=oR|DZqFRT z;x~R2=jL@x*}CrWDs&H*Jp1!;X^BU<+~w!nbn#}(IO>Wce?!Ww&-qrv*2J**JjLK{2RCWHSH41g*TQ|mpLw_~rf_Xa*wFK`g z4i{9-3RxaSv11kGfEiPB7+6u}k{#1%gnJ;KZ`+DI*l=|^FxK4y{F;Ke3(tk>pu2W;GD z|8#7ZslVF&1=%>}SwW0ySzLnP)=d&;Drn4Coq}juMYU7X&96~bv5l?G419W&S1L}B z(c}gt*6yC|SL3kdjfeZlj9r6HEa*Nt0Kjb=N(z3q%K!cA(Bs+TMbl917SDRfmF(W$ zjkX8P(EK~)!nS0MIL^<6y)MKr7PNgT1Hs6batPH)N#9SC16|+tQU~f#`YjvB<#tS) zJ5k``b^b+xdoBXDrAomk)z@=ljv2sv*`};Ejd>O8g4-8Vpch(*jvV6fkr*cf3%{ds zG8LLAats%|NwR@z)m1^0Zz`vB+&v}5wxosX#8bH|2xhNvMA%)a=uC7vXbq~4%bQCf zxR_AnEQO<;;0^2}wHyoK;NH|tPF0F5vA?%aw78S`!+!ao%EL?GtAKedb!WKHyu9Cl z)~T;hI=d{x;01hI@6!9iWYuJ#$ly}ku396tqIq8ml`I`=oI(LN)h-7>$5|7TAqu;x z6r}!*F*$`v=!W8=;Xl% z=DfVNUs|RMd<0hFt}A{j+#90fEkT+%y2WnZ|EBSb3vkJcqemUn>bsV{Aj33kU}P%@ zOQTma&{KziTTM?zPS)(FprC8}y*7{Q@chOmCQ+)xY$#Mt-+h|)0SH)!P}B}!>c|zpayv17@iv244>jzWtHPHKCMZ;q!cch6tkj|IR+H!* zbgv9xc*gYhfW?UfB5y#aE_tACjxr~*!Q1T&)$AZu$k}V4_ds|;m+-SufGU!fqhujs zL0H@zWLrl+PDTHABN0Du`r=+?oz+%*fj!?DvoQR ziv?ktoYI*&d;M5Pa@&T$Mbt;wJ9}5ucmO*0pr+Xh=M|!o)!3dvCK`0Vz0wFku)7^T zJIo88&jyZ5j(98OiW9wWgazL8LjkGA5rkE!9jRFP_d&gq38kP6+epyY(*)~ITS6S+ zw{`*DPO+FNPEMTO@Nx#~s=MR^z(#+w*=TmRGVO`+(kCoRh6v&f!+ncF0b*Cm@w~Uc zV0fy;E|4)`8?8@}2=N=`-9@?iM6il%09K}MD`nDn0jUz{$|$F-)8&?n&b^NON_YOd(1C?eLD0XDQ=Lm035 z%gw{H$T%_0*qEF5e-=QF_AC|x{~C>T894{Eo%%Rv1i>&NpLvDF6e)}vPQN9@Qv?E@ zmM|L125pfjuxlEJ#4&>wdVyDXV=+*%EzWkA^(J7{k&JR#B82#4dmOg*Md=So1`Rj# zgvf9KCp6dcTnrEDZ-1a>f57G1JOpOFNa!Cfc)G`yj7tEvt3VZSbDboO*HYBV&S zn}0g2Z;?4)z7@R8>thouh0$g?LLb3a(J&!D%>v5&#R^qh0gj04am!da`izv zG_XknR|65$nK{#PMo@e+h?nw|#T=py^~+|rm3PE2hlSAhSf)hN(Fx=zE=R7%xSiwj z5tg0QN%nn=r_wAw=17EL!rIAL;AaU^FDWOc$tPb!?%ff)X7t?5sRUA*c424T?IA9cF?H(82s&*JY8^Vqd0p_7oF`EKQ6YO&O_c;DVqF;;OfSC85&SkkO zFeMP*oLPCvry1LrzgM&l!THEo-?*@URevNj_Gn7^DpGK`?=!u$TDZ<;$s<<}- zf-{A!|7E@&T~ZO5ywW>VJl7LLvdGmWd`M`~E?o z2_lte)X9(BZZfc$Aly!J%u+KQqtYqvj^Cimt1dVSBC zpTi@1T&;hf{k;aO{Nu{Eb4wMbJxJBQ&U?(al@g0|1|Tga&8NY+orUhjoLRpSrfU`3=JMu!&h1G)f8j#u?-L?o23=%t~RRk8;FKD@x%G z2v$!{HBq)C2L(llVXxw=af8n+Vn=RX2Gx98_`9oo^|&n=nVzFO!KI3{wtl329IV=C zcJVf=6v$#>Z+^`3-rlBfZz7FU(z2<3ln6(2k)_rE-i?T%>e=nJ4)KzZmtey)Xlgb& z+ZM_Z#8N`9p`yhvQ4x|WI|QSscXZ}#_k_#>08vFqfK3vC5ewJUemk+N{MAEA)%#>J zBS$(Ab!J-Ox&BO+N1uNA?0yybBJW^Q8*?&P`=&;hU8Kf#Jj4R33cBc?dt7edmlpmQ z4(1L)wCn!#t%h^|z%MgPv9XUL-m$u9ce38`gZkl`e_vdEQH^{PD@7 zEmfO$i;o}C0UXKM^ax4tG&S&vbRSM!2+cYA$mOheTVX=&fLWFZ24t(lg#5;&9~yvc z%6w=|EzX-9+w38dP@^sED`zON!7L_SaC{WSLH<;nzE z2$a@odEA{Ye@71(m`?BiydReVDbcA4R^kbthrmefko)X|R|oNj&$+s`O=9jpoY^;Z zy`4%Xy%d243LxRxTg|?l=^7LhJ0bk#ajPFEY(ro)CVUL_D2utoLFrpXQ9^GlwOPh=*_XPXI0(O!!Ug@N)mmFDSJlRoci8*v!t@c6oONmpX7@>tK=QfW=h`%4q8@|XgdXS zd#N4s4ca7BFo6)OLr2!a(y7*6ac{;Xi}%e(<063D@91B#Ze8irQ8KaTt6*XHd2C2# zkK5a|O%W+y1UD-dM@9s?VhUr!Hi6%<6%{p#TqY6=fAHd#Zh#!fo}FKs!xbzZFaLc+ zW$+lrWg`K+dv@Kwr@U~CJFZ%W%iq&$;}E}hdi15(qNCM0ccmSI=M;rE1fcUehz~s6 zI}K6uh&d|%ay!;|snDqD+sgh|?Dm*1;A$(=2The5beL_)8?|_3YC)K0R)aI5)h zda~M^dkM{i8MQ+Uny=WM{g8aWJjbwl2FFNSFu5gQT+36RYfzKVDjmezB)(HZ<9dKF zRfx|<)6#8l<0Ut+82}5L5lao7I9_Plz&$h-U-M|*lpiQhy&ingN_|sZ(#!VkmIRk! zM_61c8T0ot|K0+I@f0NW{20-5Wt)6t>GNh(r?mtIDa2^I)u?7m`%3Y zD)qU>=B!owwriTmI9nA4f%YKC3rbLs-nHI&66J8_9PL?x9s8U5r;iSAz)7DsG2)l8 znu(LO$AECCLwzVd3g0Kl-ZNfQ#b5>$Gv`J*Oh%=2?n#^n4e|-uIeA}iMf;c)I;0y} zd{}y2U~zC(ib76~!jk7bvEst3+2{@GNB!8Vx)f1dxHm zr>ImMU!|%vrG-nIFywe0(3pAFvB`*-+g64Fk~f6~D+Yz@qKOe`E5ay20ds5raR^#n zJ%rX64nU!o(Ej%`>8teHbKU2AmC66Mp=j`89rRT7O%eMMbTZ4W z&ggicU*$og5^?k(4oSSOFA-$xdsmg2V93tF#hA6G}V{{Xo^l zMK4YanH1i(O-#kJu9vhaZBXErfJ0KL@qv>QM0@apr9{XDEm-f|VoN*UysDU72LeXR zNxk|NuXo*hX!kR@?renDX!MQ+H}YtLHBsBkT9_lyzx1->FrJJWX!Aa~o>o+Db!*bMnhUc0R5XEvOXzC^f4i;nRWo_FEd{|BO*| z9N8s*gPUiAzVHa|2!1*kkvOg)fGA7k9XlST=sq}oX;gYe{8i}Og(w=$IDeqV;*{Ga z^0UNgve0c>X3L9V%%AY_ulLjfBn$u^y)>Cs!x@$T0JlxDZuYJR#;E$GQA{ftz){9v zJH(-h0XSF0gEy4R@Zo|PBlx8d2arO9kWSY%rOupR&hmifn!fW~&l1>ugH|Q9S8P`lL1NpKd6hy>Vinj zVYa`51NJ79YgCq=k=bh+^8@=N#1<=H#4(4YESdy|CzD8c^0e6Uf4VD5*<(vhzo0|bEP`$qAe2nzDB-2_Xsh1O-S@PtcgK;H zuWjg^jveWN+3Y*H`D^M6Rn$Yz7tXtB!wZr%UdMEn!8XLVZk`psc->dB@9>Abpx))X zE;B0iVY*QJv>z2+Cz^PcUPoYCcwDdrcks{#?qxW~lgZ+(>Kux7Ibs8amUFV`x=wh% zC7^E<1Z{BMv{ zBlAzc+m*qpa6hiHq<=m}J-qZ#@``(Q3?#CQ@6U7&DgoP?HRjvRGg>&lcPb}QDHx0E zR|FSJhBdcnapjCWD_isYkI8`s!xbkjoty=!_7NFRooTJ;^2k!DrI4y6t?zdv|if5R(%`q#k=U(Wo|y>WSvq-LTb zd;(26H_eXcP3+zG;55(t?Zh%uR`S}_N>GN;10(qm`S!xUVgn0t-s^|9{JiUAg&|gQ zG+8@>TGRfs@NZsU%&j9`o<4-A8?{hlE;{@uUQpG*Dhb}YIishpMaHE|$fSr$Q4Q@u zx5hj`ATZQa&=KfVpOl9P{*~L&$Fa?|$s=quXZG}mG@lcAv)3rR*Z8bdwzV-{VC5&`5N~kTU~Y;d^rM~4Nw%iY)}{{hLTn)cZ)A&2>o4#r8cZE zuJnTTjUZ1Zin7X+yU^B2?sI-=eu8mjojZSPQ^=Iu5%f=4b*uA!$gGE*N!WGy)3dN* z)H*TdPYUMEJ*AcbK?pW-pJD%zJ@#uTCWxJV93+y=TB-ZZ;noa;@olXSzO<-;y4?01kKD8bw zRGib@tQ1?~@qUKdEAt^M2;j$PpI26}q8%8}&K9Tno$3pRyN}kssh)*6UYhX%w`)Y% zyh^oFqsLERpg>~O85h>8N+R`M{EM0!)O}5FAVD-wg0(0-Qs-MT6_7(X5{5`y^>TDk zEM%$Mc0GCNFtQ@-7u5Oz$D-9Ur7AK=X$r+K&&KZO!B5z=o*pI6#!P>g>vdY2!;}Uk zF|&b&m?_r6D-dgF{A<{O=h4y6LBJkAiYq8 zuzN-b!#E79jOXX3$g@0cXjAD2)s<3x!h0l8o9_@bZEBKlMX$kah}$8aNs?^oZLb;7 zF=KBs6Z;PbMLjNDC3|%;foch8($Ql+UVlB@cah(GkHNy{s>+Ox`}Zs^9k=y1FDaiI^!Qer=GHkh>ylr4Cz|<@10b?PTVmKuaMQs~~ z*z}06&%2#Q-1bzspJ%BFdx|;1{TyCtbq!So_u9~GDYwZe;M#FOYpFPRf|+G$1~%9n zXQnrw(6Q}I?~kCl7$#RIFkm;sfemEmT4(jy7jVyB$UP-1f*!HM!WcK_(n-g0*mu;g z^A3@)q+QRuTW<}3ErWi6?}_peNL*)CH^ckMoGhqxb3eUkW^8W;2(icZG75O5m`)a< zjXa1ZiuWlWtTJ0OAL9B=TSIN}$t%#Py85{-0i01zXunnMDnw19^a`iw4N9(^ZNPbr zkSnr#uVmr?F%wvfF*PxX2XsAZ+-hbb)czwhT~0YVH*=6daor4}2r~mGSgox}+EzNF zq!UNmA$c##=-W)C1uNyBN@vG)8aTbjQ~$mdvxKAf(oS+39~eVTDGRDz9aK#m zq(w9Ir?mf={^@WfW2mj*g6eF_bL6|BT=|ZIvK0X|1(l{TptWszxk=4Rs*nDrn7p&) zwP3r&cMA2h$*sL~eZwJ#efJ@J5X?)H8W#MqG2RYbWWt^D%K(+t(3w~|?M0>s0y_BN zi#k9;O<`eZ?XN)$#Z|$wfx+fazv|IxG7912h#jIu zNdUzLqp*dZ%oSg~y!ygSHT>G>x$21BnB9HTYPUJKv9% z9#xt%hKO!dpF9=-bOMk|V-5@UMkYbw}$=Or^E-!DrEpo%=Hg*(?ye!4G0 z(hyjT{(tq@tt|TkeGRRVL!CuKAe;vtWRB{?WAe!yD!k^4r32fZ)2Uy2>6?(W22lSy zcZmiyvl0nr{nhzqaY`djhNhqf%&@SZHil9iGf_ubW#scbt|o^v3mBv_U{!ZPbeLc- zjzMuejq}{!`&qKYC*NF^QSo$w&}k{DZN+? z{H@*vXa-F$WZ+2leGu9g>tKH!b?ef6+vbD-x9Y_B*K?QL!B)5EPaGZb``{GIpZ7O2 z%;NBG5+R(8y>#(pra1HxqH?0{JNjnfg`$Vs&#uN4E_YjsaXsC#^3h_W{=};p0hHu% zebw|!)ygr{HOFD>wn?uAAwNHyo}fR~;kJ}n)8*gjo!r-g zcmmqOmm5)DJ)mJK$|?>G)Psk#cdsPN{J1c<{eZOKe9_= zp0JoNAr8ZYflGN15M?>gqLOTI2y?ngna4p#+Gqn&9vk$|y6&UCNL^`qn<_>2#{cMFS32Tji0jv%5>AN(r^=GIg;y+Qc|h&el2*-T zf4N$Z;B9WpO$9@nR~I+1x>n%%jxmcYYL{LqQbFZO4k!$_SKzfLv1!JrIR*WQYZh>0WKmQeI!w*Qz}T}d3tQQfnJyN=KOgG- z)EBZRjJs>Bta-Jn=bNc+yVACDA9R0? zVsVcmg`rtLx(z+5c1U?szsWZU-Tk5~qRKr^_4sH8-?;EsA!HfNcIOae6E@G+K7yZO z{<7!x9gA>g10=@XIR1M*L>~;p60``ob?c zh9yt8s`sR;=O*GG!4AI;X7~RzY2)qt6~jBuEQ<2oT8!Wcd5wrvDGa#ki}* zWr*C7TM_jibnuVa8-sKcb4q3{uTEYjc(uE-`m;v*SoCXj*&Ms4IF5CtgW=hzV-o%K z6wB*Bw1Se3=1-oQAHW8w{eC{`Uq}_uv(tvorkQy_7C^`JO1pq?)yw6q@f?camN0D88CC}0$-M_9f+rS6e1?Wp5* z|Di3J*9KbMET}FA^(gJ4JSZ9ZYGyEb5tU8Z?pLKYxX)a;##MqO(>Sm%*4UZ?6;l_wJguB@;947BbVs_*X6@SwCfwUq`x*M>;rWJh>leRc^#1+h z+c)N4{srW;sWW#U=gUzy+(JivvT{e<%6Qf&ba`t&I+nE(*{T$DKpJZr)UWf})z4fU zFkkP|E(#^mvK^_b&?MPz^FA=E0lDo)TWVk9cIp8&DFLLYb?6;8wX69+>p)c=#$l&N z(CKFX9A#5iqEPI~vFvD2sjw8-7QBSo z(m`Kw>%042sNo>DU%^f;)dsl~0M*^nVM*Pxbp8hnszrAGrB<3EZXQOxX+dpQX6~+B zbMEK}S`*GHX3t~QZ! zFH^kckOF1ykD$*@tPI>G5_)SZr*c=R8wswa_NmnSTOkK3Rd2MRf7{d+1aoG=8vlM% z2OMEjC=)WNpUYtCLNOEutLhJn6E417$1|vTtYs;JnQV^!gNCTj&-9nbq3fIvLFJhY zaY>;PAy&=porEz-XfI7=;6jN}pV2Z(^3*5OVe&_8^-^^npjT`P*OQ$vQrI^DWh_>2 z+_T7g_`BOZpAQB5Cm_dnvkLiX690R{IJ{A>d0I9U5$Og2iTKSEce14xab}L8;b#Gl zs-5f!t`AGH{+Qg4MyH!K=gJe7O20|rMhO(MUKw!qNSYtzgzEZ<9h`FWy~{feNs{q- zdhkS!cu#=ClgA}r?}M3(>k8TJ?3+gIJtB!z?qzUi$DR?YK`5T^i{QslcSAB)c2d()A+)HJSC zgk~~6w170Sj` zhcYIIM(u~9lgpE-eyni@3x~yiS-_IoX7*O-SF6~0YL~o+`Vkc;6hPjcG`;4)sL6~W z8Mm?V!CMul)0gq*bNVGbd^lE!uD^j01cMcB=hi7WZaP#wgmpNwY=Sv6{HErR7f-n| zG-8hXb+Uf>FulKoy`#*4V+@)QcICvu+6^$v;%KxkuFKky=b#~4YXrO?z2&8NklzyV zQjw@STjgfd zv)<7m4qMYGOI-6d3Cc=-YuQ2h!+)oFS4A(>G=|%*>0XS)&l?!?d~fBcu5^->P#eD) zLy_w7Jmo0S(g)UFWZxCmVRM zF-KK6NTCz}Dv`l(Iihl^udI#yUd&V7EwS|CEMECjLD6A)79Dvu3noyrXD?#SrJz*0 zULx|N+y7BFP~9_gUUenS+KN#-wUD{Po<3J14~fMMa}%$S@|Ps2D+NJNqbstW{{Rq> z9&q+dC#=*;Cfbxwb}w1}jVgce#b&Pq36AcfZ;3YqM7nD{>G(u`#nP zOQ}YJUfBw$4mta`_d_v=izezM2Ju3m6tj3G&j7ARMLWv4Lmn-zWLKTjC?P=1;!ug0 zn?}bN>cCjg>JVCq4#Se7^YbQq&4pbzlm9XIn~3?0l=o6^%pLoGP@(UHek$yv=g7OP zfp5uMn0O3W!fX5T-{<}UF_^SW*{HXY&g2Vggl{_^mU-!2dIghMb%n15Tr!})c9IDc zij$TtwxC-1QDOGQ1k4P|l?w7~{ZNig)UuAAQOQ>~`6h!;Mb}ga-~n%mgj}~Iqr`1L z(@lebq*z~6-CVLmU?UhO7!`!(ZQvA;@eO;;O~bM_{=7mZ5U#BO3BYmc#DP4G{yWg= zOH{b(y>%9#Nu;23822B=j&>I0%Vc`62x(C`+48_vmGQwtO-^5w2Ux8V7{SU4v>OKY zrQ^wO85M2`K|_o8o4$&0@z`e{y3QVn{@dVDVXaXO>K9@<0^0XUT+y=<-v*WEKV{27 z&QnS<>BVvucQinS&4#`71EWwM0ITi8lCVwT_Z%Yvg%~CWnv_Z%o)(d#tO^uT4;bZG zT#$vp?tNf5cE>+P=@T;)%FZp*nDN#AZ-A5h;Gc!HJ6kXm-{S(u%l7*L5n-S!4hw$?dDBu{HeX*+`L zCl}T)j+cM%x#E!}o@r-5HW!QUMDbPM?FZ_OX7Q^8oag4<(IN?Z1atOLLPA#g249yfmemA)* zSGD|O$#;#YzE+%7en9TTT6McyAB7X4knMA`9_(Y#7A!X?E?&>mi8~2Ig>q1xSk6#Kne+~Wi_*^UH#4pDJLAUzV zzP%6U=FdHy8Jch3weYulW@Eh3IFp!XS;T;{Pae4eM?Q^E358yg3xu?LG{MBA3y+Fy z%*Ue<$KLNLUf{KM`_J}ORlSaJv4l&R`oGra*%J4if0=(d$rZOu@rjgUnRiBE19U*Q zrkq2$|3Rl@7&YnFZ$T#r$P8spX|8ZTuYELdc}Zp;Ee=3?+acV3z(|wK z5fi)}PP(k}l?D^-3&h?0sOnggn&*Z5(yeGcdb@N5f#0rlCI7ST47ax6bJ1!x3DKm) z67O=kTnCGbi*kJ>_f2gHI_DQ${V=QS`!-QE+^~uL0UfE1jt~Cri+&F$muQy}ercLWL>$51Rhq%l2;rPyU0} z>%zd0BH{7=?tzYJ|NaM^P7@ZI4qrMjC1I5=vMg|AWLC}r&Ah*A$94)xFExq~FX8qh zHKc!r=c6xQi#=DN3(^#0T81R*3$X_cCeW#i@-Ws zFI?Bt#L9p{ixYPcmZ~oqi9(kyVj}42;W@tR$(PgkW-&X9DIf7%jTw?;%VTpD;BkW(b8@tMPBOE&@unCWFd!fQx$sSXnFvq=c0E1X}*6*|3}Q~S8p zyoF2zKEcMCK$9%K`qXR#vCd2CQP+vZJ@`tNcx$AvyR2T-j1pTF`~j= zg_?EkxKC6rurMh<=-`2`qJA8Dkhz70K7L)`%H)j^7r+>vGNnNe%$_*Zv?GJ2NVA0~ z<~!m#_po%&S?+T_FZ*iVvsAWi50Xc_zS=Y(XD&Nhy5c&9w*-q3_HRh zMnwj}zCyas$?Ajk0S>z=32D3`?C7vr6Mlvz&qFr5Ye?~cW$OWu1``eu1CB;@QP%GV zp3@iHw&=0(0}GaN)Tl%5?u5j8kg(mqUcOr8l>K#4 za%Up@;C(|~y`l7N(y0Ri^KjaNB(%zHrBAk_AM8OyTBA3!4#=>%OpY(h+gme93`DG0 z(FdQ{n{L&O$AcPRYpyD0m%*BqGN|i4bEY;UT(8Ia>8W=nldHMU)W@^Aol#qovS)Uw zI=);NqbFg>{&>At{2YVHj%t$4(5y8L;o?`bUX)x*`9xc|C+cAS41$%Md(V_Sk#cK zK3`4%CxE+WCevwomgN7q+ZFdpZCI5p?JeC*K&O6f87ET@w#2uLNs|67u!(AvJ4LZ> z%8y^o=NjtJ8-fbA*A`ZQ0?>N5W0*qd*>K=T$@S<=@D6$5%ft|71?2UUx7UHg30>WG zG;045^D`Yp9i%na+A%#pF*d#n)a|pw7xcvVqN|nK9~ZmbZ%3bIh{HnKjy**`*!+2g z$artP$u7MwhkUCbxk25}Fn*XtK^t~cUYBX6H|9ZCP3Zzl3UWAESz&Y|_NYoPg5 z==N3Iw!%$69Beq7dxU#9P~PN z`ITqUA9oGdx>_l+M8;#Xt1-+(@Hw-PuP`zsEJyw*Ju0q@suJ3Z#Vrxy;FogrJB6K< zkfDI6UZorsd&87d9vGbsYH0JBPq0Z)Y3iz@pNbo6V9y3tT}$Ajte#RC8scy54N>7% zn^513S3(P3i5<3n%~_Oo)oif}*1>cv*o(x+WyOgXR$ zv`eD0k|B)VRhoK*tdKE-_(&ce{?3f|mH5)L;*jSYXq%jNsXoXwjW&pc)<=OHS_6VO z7ECspXFMDszvFmaZXs8elvlD{%rxQVVtBi1O)xELV2|FNPi3}b$&@{<1uL0p#Hb5O z@w9hx5X8pcWYRKzqRKst#zqSX52MQaQr5iRu1ONawajtPwcvtg02+SZfH_iz5dFdE zz9<*=rk8Io>JBQrCE_amF&uXe1ZH|@D?dl+I-cJb69lukwp1(_y%XL%U5Z9anPPgP zNZJeK>WO;!_ry#lZ4|}QfetB&^G#xmdQgrn=@8E*4@jW8y?u%<2W1UQ%N)T#Sj=>p z-o2K@1Za(@D*m_ZrGT^BTEV=H1>UxyW;| zyUbao1F0hY`8b%mRsSk!rRiPZpFv;dZ8~OtMkn9d0?4KOZYx^)97_}jL_DY( zo++MX6t*t5W=c0R#V6m3QI?RK+JwcC_ZMuT;{YPx5uppLdVu5tm>=N&)%PfAGO^ef zk&M5TsB~%p8m)u%J2Vo(8UiX8u4n$lQhz5=SkPQZfs(5g791%7jp~r@^#EFJwD?qm zs+c*=U1~(BCVPRxx`>nvuA^$q6-T^{Q=tvZXp+%(#iK2A+?L_=cVgk1>M+=qmz?wXqSJ;#cUay7fo zIYCmrYu8eswuYv%-jR2i+1r)>4>yRU4j)IDO?uL8LA=OY+Z%)U7h1^uhU3u+RQ^zX?dz5MHQP)n{)CBfK%8Q4G|kLp;<7UW!3iC#jKA~ z_(_BE*C@w4wZMjB7%DlF-qC$ew}_k^`B9PNDvTR0C!fULp6|GK@Xm26M+!pk1AU@c zB*^)znJv!1h9j9+3=Lf ze!Rm~pSwAYbOE1r>OdHub7Y|39d z>g;Y;ET?iAhd=8+s|)xkMXuq~`aYGh@)U&f{mBHhI>HCys5LX4;DSBC`l<%+Y3>U=@iwG+&d8)a=v{fC~qmDjp19KuR8kf(P~E z>YOqzudQIq@~g9Ntax??bo)m`rgJU+twnQ>?i4Pybd#rRBR?9tj^fuhm~Z(``K_+C zbZZ_mH|uBFo`wXP0M^8i0S~mLhzL~KKUezN!TcQBQAP%Kli4gN&b3jRziYSng`ZEylT2n0|Ih8#Jt4knVrWYfd+Q zY(eoN;ijR5hjUA36}7x5B*)noXI7RNrcHLWY)#7oN<}BQg)aYxs)}WLP{Elp&rN>x z(?N}9!a(xY4()u~U;XGm$ZP-2V)q)AQBCV0u>LFn?4`fs!bOUkLy+&Q zBj=&J@@;R2i8gXL(vqP`dzlrcj>qk6RCD>GuAgi9mN(Y(-v$w^yn|^En>9@FD28b? zAYT20{yufvueSsTrV<%iY{+cV4mWBal|<;?o$@7e-9oA5+{NeE<6JA!0x#Bv<cmyFW8S!c_jl3d7Py z3HFlI{W<+xI{3<3x+E1K!cym+u*b$e#41^1dZ78r?Ks46L(Zk9Gm zk*ArLO;q>L3>RIO(^My88}6QYlsXM=+jkOlw7E`qWz(Q)PR~9|h{87Q70?cpDE*-l z4(8AlvXY+Q)_&OF6V0zHb*&?)+~>D2?t=8hbOI98i&EWv>P2uyL>n54mlV<5m|^*T zGCrbg4dvxwjk!kxLNuY`6t7IijVy5omAdMEjw&G6QXBK*sD06~%`C%vB>~zI`OCGo zz*fpvOJ;+hsrG)@Wr|;RJLrwy#y&) z5+lcsu5zF+n6qz4WTVkC#bOiJP>aJWX8DY1y;k~1~ zv%0dj(I<*%A-h_SO&9Y5Ym2NdDk^dMGVe0j=dPA-!C>6XPkNL@qdBrkHA9v&en5iC z<6QsZipG6g8~I0+_r{S)ko4}Svasl&0}r z$G>z0Rt;Dzc2aL@tp$PMyb+IV9lgqvUcnZOjsc6phe^#&Ik2O0Z#;nJ8pjW8a?hNC zRkbj`F+=v|0(d*UDy!kJQ&KzJnCAgwsXoLLXE_yH)YopT57#@Fd1FVs%!$x2y7uXx zGXHrRgJ2Fbbe_*0?1{LyeNluJ$SjrFZQHNCW?5Lbw0b(;JDUEMpG}R}p@L0h)JX8; zzzPZ(A3;xkv$lo4#)v%s57ZiIGwH$JdX(>d&-qK)@>W_axpUhN)o;t6vZGraC2w}< z_WXoSA5db6Ru>E5q){K0TE#+LS5w6@23mSnnI--oMQ0w6^!dl}FNc7NisAti6~)l( z0$B=Pp_xaKcV%S_FKneIIikAxyTDEFmIEju*3%radUDoGY;ZLXQpGIY4Pa+x!= zto@$fpZyhbKA-3Fe!pJ)knk}Ep_Ph%Pj@qg!Iii=35Dlw8qZ`F3N(_T5nYd8J%OPb z4GI}}t1>qar8CjBHv!p9Vb#4=WK}xlmqokOgsvM6yQ&i~_Rr}tzWvxN8%>slTNC8` zlgw$?q#eKE|8wy3IXCdUJvOUY*@XRI;2yDCd~5^}>7j0VYd3VO9=#w?5j~SXADhg| zlZYE^Mi1~bRDCiiuJhFH!{~-Vu2Q01Hwg$#kG*QOjjjrBw@*jnEhf3+szWjrl4aaS zQlIe*8>UU{)`J%@c}k7M*e3qdeT{iKZ?ktE|NKL4l@4(`Ia!OnpM0ioc_H1@ZZCQK z5utXP6#zL>|LnQh*#~ax!Fe9M(B?TB$)T$aNq+N|c@s*mmprL0Wi;32cyZ_;wQOtP zO+0x`+qF?hMdksA7g&rZZO9b#m-y`DoZ@36f(kw^Q5aRdoFQ_PfrY z4;Btu;&N}&b~Mr8-uGRn(W>DvoX^Y>xzK~rqJ@1=F}yf13VyB5(fOW;v!H`DA|2wC zz1B!}+e-te9#^;R;jkTWFXu?*cezmYNN`)sW0s{q$gE%Py!=r@9IqmsZgk|WQCYyX zt$k%Syd0f+MhqntSjvC>bH>AZR$>#9NFz9##vCfFI6gKFskkhmcs3! zGr4wd9icaa!95s7VQde2__(-tnm-o&xmkQ_I=QySK~L~ZG`_F8PhGKl z`=?ToF~~nikZ##%uJeKGHe-xy9izFXS$V3U9FiAMkhAbytfC4CvsJ`FY=^y{fnvaK zgo*`SG*?xk!wkw1Ja*a395IuNp+Z8&xWOhWlFkyUz+*a#P9T!n?U0}+By8WyvYmig zke=aOID?$^hM~@K644#q3%ZFVIzgUWg{2fFwuMjtKCH4zHXntYwHn}?3&tm}6hcOK zgESQLQB;Lx704yt6H?flR3abt5#6+XUN9uUkdTgu1xD7I&cto!i%u<&;>xp#%qc`y zDW$OVTa_&gAY&7sO8nM>g;Iy;vG=!0pF_~lD1W2)wtN)wOiaQeSH9(4tma#)GYuND zD3|IwCc)B^HT3k_^-LP`#r2^+g~JRPuEQd^{g3^d?KHX(;cs*%>7UNPtM|RXRTuMh zLLCK%9tD~{O%s-Y!PDRnelL~aDKvGmEbZz3`4L_F%D(HP^E8a(V0yNpU-6bL`zHpwPdx19(C3O8No9a*9pu@ zm>I8fG1T;$bl6YN07@?dLIvm_qlV(zf^HVE zU2brS^#<}@uBxmQsjE9%(J2K3;$^^Q7JJ7E5HVb}Y6byw1({wF#Se*ChDfl}P`0J7 z%&I`G;vPKnXAt;K;r>32aIJHugvO~v zb0}mlfu(b9n8NIB>ih1d!j6>!_K|END>X?@2T-%O0H);z@THTfP(A~we6=3pXDBh@ zc-`+-yQuYc-1 zfJzWU4X!(ZNBlpN`ki^2o^iRNvyE=SAu0Pn;0FQME1eqgkF?DxAB z(*fAHAy@ZnmZtN>#dJ43M;B~Bt3y$g{^>n;0k4{7LR6+bJ<_dIHAI$!ji<##mJF1fomd7uej5xVqf8Bbe z#gDDb{dH`?_(OSkbA+`Q-+FRO&1P_2=Ct+G@N}(o;$Up_j+@sXX{W;m=VK*%HjL2K zR0}x%>~wq;ZN;+TX?g^{QY&*_#t!ql?&fe6})CZlxV==-n5oLS7CmuiKLf!X` zz>EG`3i9$y=L@-4&L>P|(yP|?2T(IH;5tXJtU!E22ydw}rV*@`krzafw_(y$rce2; zK1pMJ6Mg|o+Dqwbh6M@n2Md?|!_rOl>(mopxcxgDi8`?+`R&8Zm_f0PG$GkJYq-y{f` z34jl%MI}2qXfbxoaJ}b;4sgPjfK=zjT}&+HF{O6e^3k6mZvN{=rVK{Q*yLRmQ|a@v zmRf^zz}ql#{1|cb2&;ne0+9|ZBeOUMoN2Nh4QRmh7(YFM`&}nyfHLR#L8mGrwBcpz zZSJ)n2u%Dq?a(irvzEccbz@cyZ}`!-IiNL( zG$jZVsx!~l1(`puU|4n}6rQ{~ZNM0vpS)%YTeV#dYBZGsw9S)lu%T}M41JauYnZxE z$Lf*J{r@y$C=$;cKt0v4(y)L_Mq5e^VW-YZbPi`RPM=QTq3W+JN3eaUZA~`05R%lS zOZDc1Duv@&#pn}xys-;2QHvfqtdH)sO*YTwh|XL`_U3lW9#YLyH0IWU>*d>hl>2p?KXjtwZR0Cy@hUAxzjRo204XQ=wVDl@>Zx#x{$SIVw0F>sn&gZ9i$o-V`(NTJq!07X&{p;;u2wMZ3-)U!8&|vGc75 z#fKK4Ge+$H;F63|t{XRCzQ$L2G*M<(Y%J;@dsb~)13muH>|&&=-R1-aKE5^pUc8bxKpWQKNXi| zj$fXa|J6nQf$x=tD{&5`C?&e*`@yH8E*bL1H4q1zqAP@Iqdb!=Uj`ph&+#CWyVa@ zLCP)dej!omSPG6D_T89CtE&Rq*r@!mu7NVYaPqmx&QI;yh$2x=Kh=rJ>nkLdIpnrv z(6&II*$O(@x&LPzE$`MTp`C}CdOAAPsT_vsAtxyn@%;u8qJn9igfgH1|6!v($7Uc# zd}oeUY}3UA%gcEGF^cMnrYIlLvJ0(kzB%Rp*u!o~1;pj%eLzD~9L7W;b=KOPZ%edP zk>NRQihaeP(U^T=bp0f2ONl0WtHhqa;uvzNUr%p#;;MH6)KwW`?WN*KKLl;-NIz{~ zX$j&owRWAU7!+cP7!w4Wd*$Oj+iW=j{LN1`d^&PEAM#IXRp@Fq;Oo#YYFa<=Xjo8# zFCXPaT9wL#gE0*xleLU_;!=?JP8j9q@kd0)qA*uM(tTdylzoMX>&~Z7fj#=P+IY*d zZDl*hk7tnmRS}V%vPd{C#JHEI)s2P`6rPLSn4(f|uodBO7>X0>Q;w;d@4C$)gktrh zQ*wdpk0w4f#$|ngSwK$+_78ErFMKAgOED+c+-sp_G2AXkz=ogqE{Ht zgJb5?h$HWgie=sJdR^e?XgQFy@KGoOaSpecMBu|?3g$!;+Vc`WJLy2L37uBUjaF%6 zj15~%*v$CDYoZt#Es~bL&+xcXtVRkZGcRZu-t|p6qqzv+b0Go8Wzxetr`k)oB$YB$ z%Qg^y8-yajL-iY`u6yfQy0@Gbjge_h^3n45}s|h2!SdhVx+c$s%5gkmls*xH}1AK&SmW{x!j_gMrwW|Q0*%2%+QB=PGsPFdJk#sd6a@J~n7fEY*mr^9cW zgvY}n$BK!}4MMejAE}HYaME{(Ea>SKjAPz{%y6}9#uUJIC5zQ--JP$~Uug-mRE8s6 zhX!uN5%X8-u6k)3ys6LtL2x8NQKEi@hfTeuZ6-6|uEoDcA>DULjhqzF~)ggE$&`-Sc#fC27njjV=`RKm_9uStQGLi zB2r%o3#E0=r*OC4Vd^|A6wr8(D4}j%wjG6BiC_`6G{m>v4!R`k2CL-ybY9OG%aI1RIr#-tH;!jF@<77a$k97NMaXLG>VJ+NF+3ymH0qM z{svnS5AN|z6AE&*Wq-(;<|8QSv!yFgTO^eEX%krp4W9iKHoom2L>QZjyNXtom{d|` zY!378xVt!qnaXg+dUgn{37MitUpJnF&i&vP+Nd27R`NqLr}Q`Y!sT{^Dx~Soe+aAb z1(QEqPSiEZzVG*gjnb}OY`FiL=-E6?eY5Rj9p}V|#!7}=D?I^3X=h~111;k-{MJf{ zE)<~?kjo77oFk)K)vAJHa;lL&EoOg^h5FL_2U%BzJAdCFieybgl*c5BvCDzpA3TbE z6uTGn!QrP&cpqj%bBO*9QK>uKludrzb^H*EoR^E14<`dA1~R**_WcJH-?5u<|9r=M zxYtiQGJoANyXOIGVDs$KSbv{_pHuSCN9sDiZ0Igg)w8~~-}%O8a-ps*p?C4iKn;kW zO&%LAjYMJo`!tFz0Ia`eQ(v;*r&Ia$-dw2yZGIR>xsHF549ui^fu!C(Hj=$pK)lr zYXv`Sy^worTlQa=CszB0EA*sXlfOe!&TQAtN6tQ^?%6YV(Y~BD71JfCUyMBZ9~6Ij zFz4%w(*51>foR9zS=*k}_4@}L?^Xv)Tnn;{$4YEst8`fhlg7Y$Ru{rExKC|sE&U8? zmy&Haz^HUCATs*hfgzOIxJpAbVpft{<)cWpjEH2ADM2|BqKWg;n*z%jR%$~IM;CVZ zzU`J@MzzgiB$x6f6souE)}SOrTqN<#mfaQbB~HzX-?Ba5H#GZMQ_ zDOr^6tk|obzJlJpojBxpa6)lu$4?KMS7)8iMt|C?nQT25yct3Sq`!Cl`CZ7nTW!gc z*k4yS#a9P<-uhi~zZ-M#;v@TiunT@YTbfY|9H*>+n=hmN@o>k*$4l$oR}X_k;PKb9 zX7QiIA5Bj3J6Ero^8+%=Z=T|pK|;S(pX3)QtuC}ZS6bT@U@&SZQzTBEh%TGx^hVFQ zTrMARTz~D2`va@9f10yg4k>Fce-5kkdnvKqDfD?ZJHsJtaCRvdw|XP;(e0Hu7HVotViN=PI(Ho2q&djn^vbYmBVsFP zniN7C6Ullb5*0SPi7l;_ik}397!#m?mw;Bjj3m!N7Ogi=UI{U5bwHY|r7=``h)F7H z=;biZ^Kq8Pfh}u>NfvY2eTuGrURov>o)MWD9hioJb<#yYhrx9`sLjxiX-#V zz_}FFs%H+|I7-rLQCkX+(A38$=0>ZX-i>t_&zRs1)(8!w#sC3|QJlw^76MM$NO%Gv zRQgTX2SeQDevh~1U1hCaPZ)i8NB18TbNC`6$FKtKQ=6!G0luEl{pSw<0V;?(hb=1dHv)jvla%naA)a9u&&C#Nx+(ZCL|R?zl%T8xLzZW!R1bA%hO%Nr66HXr%~DbABT9 zOO?p$>RX}~&k!0`eaQG-Kz`jZgU}^%XXtj=yZvQ5dfYmRq9M^fIp){CYPS`}OC*j| z)YPs>B$AtM%xwgqH`@o_%fb|#%~t0N2P8(JH{lXV54e@G0e=puoB=C!MYV-q9M+xlp?&6dwQOT|!OO-^w2WaPeL7gnp?# zhNpg)&Wre?OLWN;uRNtHuY?>n?lKA#y^%y=V_8)q_7Tq(XhMm~)D;>`Bc4Ix2n*eE zFy23cvQkbBEk5=NjyZLB%suF#+%I&KiKmNLlA}OMa{8pZQycnv(P^2`48kZSd!Gy* z7|hKon)Kig2e6=ayK1Io0!8`D<*2YB76=$eGfaAnoBMW^?$>(emR0$KsMmz! zG_t7DN%F!gOl#E7w%ppP5#GQualqlyIr1O$B5`M!CN|D9JNcf{ISRNiPnRys09T-q zIl-o#Qh)7}j?p<3XLdW?WBfktxJRc*sKt_^4)Wr7|3L!AXiD!Eo270K2rF)RTwB38 zdTRN{S=;XZJ20rRtOwmI(H{rygl2mkz6|v!OKxJsjVgqluyK3kokY_*!}5mrRIF|>G*IrMX!p!! zQD3;T7nH|AM=accNeVko2$|yhP3Q&oMa&ITB!YFeE|+932&^kz@lKCmEQO{iE4RQM zsAl9?t@gn4_tdWqcu|1fK>rX4hrJZ#)H|I@g&b-q1*DUOpJA z#hq8qON%c~p=uFEI}Pdsrxb3I11H?DFgA)nbxb-lRK4@>@7$V0K>7|fnU%7^cGpB5 zHp>VoNb%X|J-E>zJBm7!hZy=)iVIVfF7=;9amI01pWMWe#z#YH_cc8|{?-CrpjU?vDPeF)e4(38fndao~yQjCpE zH6;|24@v3nBr=0cDAg4xicE|4hwLFAe(6OLZJ-!YaGKo~z@(JCY3Gb$&}frxq#{Q4 zl9GkqvtE2NT%qyfa#7xX#)-}U_F5j&R-{cPYfv3VQ~3dZuBCv(H6xHwX?*~Oq<1&! z>Dhcw0-JgIxJ3#tWxUr|3`(gDX)tN5f>HCH8oc}&&WZ6}K*QiuxM3r?W!i$BE)W6v%G}8c5hB70=39AcEM~hFUe4&2soMXEv;qGmt> z^uu2nODm~~cbb`fa&UOZqQuys%(I|(!}oLQ2qijwQEeVQ@UTC*lBw;Yu1W~Ppxy4` zSWp_w1yG*XGt7BW=^u?q>jT|(bR;&)tFYX!tC)RE6aYTtg0fbKf!)!odfWBoX|3v| zA^BT2@R2r7EmvzXXe85s($W6z;3953vu-YLGX`upCB_Xa?R={(VBukO;LCE-Nz5oN zBuopCpvC;9Q$9_o6}kk(0PMN_^Kn){(lw4&BmZ2ABPnF&7p9=>f>TXqx*?GuS&8Bo zly>%_O)iqlNynFxOKW+&1gjLRI{x695xuoD1as9K)d|w<9CXU>sTA3ZB_=CRQKwDR zL@fz8X}SSSdL`4Og?UW1GwH{9(fTsdj1__P@}#w~mIh|25EO&KDS!L)SxHBrE=gfb z&4vB}-10~kiR%iO5T*=u=O)uRS91$On}EP7G1v1a69*Vq7%VPF{L@M17}@nlYYS+M9?W zP$}JLP!h!O;oAi79f1{aD2o8VZr-y@G%g$TOx=@_e3nVEhE#FvB02|w1n9d6AgO)t z(rqH^0qpgnvaGiTMie?drAN-^$;idy>(|hl?B-Qc9;rK)EIv#{C(-x*5Wp7IN~~T2 zfW9W0s}-st-5lL&Qzyf`KqL}Mk7#HxmGE`wbZsw+o^e;DnkF>Uw?JQlX;=xGs$tkT z`odQD06r3S$}wNlDeWsIk!t4+$zCBWh$Hec*o^AExK3GIe53!m;U&KDharu$RobT2 zvb1>aDH0)#p{Rn+7XN$)=VMm(~5+ z*O_+Waty}VF_y4x-a(81$B<^B47|DhVDa^a%k=IvdF zR;1<^M`YuR>kohTx^LRQH~r>^HRhf<{;VE2baQ>@b~y(9$NBb~_hi0eyMEV#nN^98 zYR4%Cn?Js8h_HEhR8=zF@_AJHd;xVYZ{gJRukWY};(u2^`~BpD*h{l6=er(BH_HDt z(jXI7j$Yc&J@8Fc^s9h1Uv}nf*q>RS)|?n|{M|pqnb))CXRh(1omjBMv|5&F&^4`Ds&DSDb#)aAX0a zD{`xSjt>jJxf3F!NaBu+uC3V1JYw)&Iou|(d?f~IoRSU}?x*&`npiQX<$Hd?ac?+K zRYD_zX8C@u?_mT%(m?5sWH4n^3Xe(|?XlDL0tr>&Ppx3MIXzmLW_#yoT<@igi)n51 z8Q+|zzlhopNf}E&`*r6RpCiu;Di4qwBSQRb24-#k-Injv<21N1ws1N~c7mR`FcSVp zd{F4!Lk<^Ii10PS3jGgvvNsoeH#>s;93fa!*LfIku>&btk}?p@qr9hcz#ifuRJ z)}Lea;6xDy@?2K=QMK4NBvd!_Es^x5yb2_1J#J+evmKK*Ekef~gPZR0Gb;bm-da22 z5|Sa_r-|v$3YGf&2!AXVN~1Ge%CFZ;LtFE0hI2SA2Y|i$DpT9!kyoP735!{-4MQ)d zt*dJ?+$5V?Vzk1+B_>zL98cL;SF_9B{eBm33`N*d)9>SNH2-^){HU}|v9!fWrE0pSc_)Z{z9K@XxBxB@kf<*{k7=8 znhkoha5fW>NYB+Ycj-NzI!r1doOJEZWTi$3^%e`ox%o5H~V>WD+#z6Kd zKi=)l>9By&1dN|nb7*ZW;i*o=q0Pj~gm4HvMKaiu>l;?iy+FTb}U6bBK?}gFa7|Wp>kz1Zoz}SE52;m&!RT>4!f#rS1h^^1Aa)Yrnm&KT;>NNM z+?wXVzRXhNroLle|2bpx8Y_9^-^pNd63xmXcR&}DZ?~Da!H;O|IQ{dTz=6RdNc+zx zZav&1)}d)w#OuBOn>AYeqj=P4uJ!4ox;@K3id@?iP|;<6%W~`mrU9LM#h7w)-4ibZ zWA#Ng>KX&nXL2v}x)3;|p5Z8}tJYwI#J>el=PM$km?F>hg?gjqm(wl7K28s&1}&@@ zBs<_ttmi;1%+z>49)~0XOOO9A?75()H-$)~PGxd`+VI2DQN!9i3!UErgW0zx%KZs9 zp;a{*O>&vgVxa8!Lor)j*hxC2Cy;?6pE=Ue6_Xy-;i8~_#4iI49(P?UzYf@O3{fzbv(v+f}Y(g0dzc7Wrc*^&f44nu`9l(im1*CdApvz1>=p# zlaDd_RFsFQBT~e$CBAZ@)at1W3~C5ECh(?Jk=Xw!e5Xw%Lqrdn?QsNL*fIbt@QR-y zSrz!iXjR4qX3f{c2td09pS2T-xHqFg^WLc|5Hn0s&L%n}g~MnZ6a<#ud|+60~ad)i)i} zm{+~*gbU$EB2+@1sM;n^{w8F&gQBq9_gQxTm%33V!p?1hyvlI!O!iJZQ6;k11zo11 zGYc8x)UgiS43J0H@%RlgxGu-*Eec}3r=xa#2CW(JCE>sg&(x~x3H(-(%DmCbvfynO zm>`yU@rjEEM_u98_tt3~QGQ~UuQ-HRJkMdv^O7n5$%=?1gBSUR&RuL5OAHt&_{cPds{5mg`- zyFQ*WVY=eef!@bPB(zr}HOQ2h1HJyaQ}(r^>x!Us_cCOJ;Li|>1h+;{5ZQWOgu?55 z;BgiB7M#4B@^FO$!5LtxqrAUeAvQ^$pD~A=viSxeAg95a=A#xLANGTm*;73KZjR0f zDH!c8g7J0yL=j)mr-J9i4AR#(YuU^;vF)xvEUdYjG=Y*B1MWdew~q)nuV2RxRZ8De z8M%X00K$WxY-bDvf!{5RA1@p>r>#U7tjpy*kJm`1{lMUmX4Zo+2Zv8HIWV3Aen}hiYkJHR`J1t?H$g zn$m6emFni7YoZ=&!U)KIYoCe5FnnE}h^p<8JT03vAH{JsQjy$P6V31DxjXSDke4#9zL>L@0DjSc}M86mwz zqB*cT+-UIfWI=*Nb2L@~rMV$D-y}OGy+>nuWUB~QkFLC8w;O-cpwnjaqpXxN}M%#$q~iTFjb1vn;QA^hvbn~N&+I*>IdUA(KZZ^h&=4K!vf zQsS#rAkha4WKZvO;2_J7(;z6C@sdCfWr`#db^2wss>VZ0+c1Sko~kiU4DnAJ!)F|} z6PTkaOhmF5{+achMbsE@*P6=a%LN!-qI$&(7F9_mNf(prW|#)d+aMp&>FX0TX^48~ z*!&SJ!={{-OR8Y;lhBL3(bD2>jI(`HP8E(2B%VxskJr@EQ5Yky&j-h)U7p(P!#TAG z6tOm9$BwOipH5@z&b>40wa5zCH~z3(a_MgWmrdJ2mt5$D65>7``uF$C%RK5J{Q=d# z_bij32)91~{Owlt^Y#O`$7UCPNq2LzY^liEuwWCJ3}p3wduP4JS{8r&=h7S1={54} z_TdN9GDdHV_JU#J~C_|QNquzE=BoY@pm~X_TvlU3J%q;IeMVw`@lv&w(K zYW~*KOTXS|{wQ}l-XbwSdMk@gW8uXhbWyqTrARB_ki-Y6n0QR;dKs^Q6ob3ip-yZ? zB&bX)pLJ@%?2cN+&^t6xv_*P?*JzH(oR={yM6|+q)eIhaw>y;3q$-sshHslu_%2JR zP(GDC`FTA!a`#v)+hf6<=(OXctFKQ`RPdyEBX^$`c_EHs3>E$uSfy<`+g&IM3gD+F z?PcNkB)_L#d@q57$1f0Hn8pYg-m~o4bN`?t`Y+NuKC`}QDk(c%FL`FRv&9SFRJ-;B zu`zssb~gQ^tK%Q_N1nG*rTuG+w-bw@uNPN+Ie2+|;_DLZL}kTZq@`fdh@V2>)&B=& zwq!?u@$~P>0<~~Ky->FFKWO6%^L5HpKQ*?RbM+b zjhk!|+G=`akD<7*q4RLT37d5@@;`Q%{I+CMPu5y}-uAY%o8v*w@g6MJg%9>x6a8<) zK33xE^A5&w%xWw*blcNfbNZ%PPwr^Y@_*ap{9K3TbM9f<(JOh1Ii?`T!p{=pgeT}aTXj!dIwB2d$a^v)WPza%uVUK7-)dsa)u#Ma+9qee09FzcpQzJ4d zafMi7tkO1I#3~~ru@y|_TZ~g|)hup{(RY^l{Kqxs3soj&<&2h<+a>L?N_1+*ku1)U z+6SKaMl6x(+v={hYo@OC;@jBE(RoovC6~Ou#gB}@*qW<0q=e9xU2OH1uPFtkR^z|j zR#k6yVeqr*mowca5qrlhL#aT?(7tz0Xz~KW5gJeUZCt!_4E*9Ew=q=R5r>*6Q{;-p z;|QHmbdBiZROlv6mN(Y3Yy@odd-sVW+48Yw#O_7OnQZ)$_Z>$l@781y@|S{S4l@+R zD5tJBEiQLimU@_XzHU;zw%QAX7uj+Q-?Tk7<08R0VU@1xR`KX#g>o6^`?XiY`eaO9 zR^!iFX`j0I56#)wK811b{%$N;e$G;iT%qeqJ#wVCh|cpm)L~Q*ORH^VUQQ};YE z;8EuR<9v#yXQ;v&#U3@!H9Bj`?K@2&;iY&=82Pm>Z`N$jJ!7Ux^^n!AV|UkE+TnBb zET?R-0rDRz6XEUk+?}mE8r`Z{u5XRUI;IR7?4(6l{SRlJAKDv`G^e9pf6M3cy>vOq z+E%S^hdAzIirMpt3hCt?BCA41+F<5B%dNL71E?9NexzFtuGAUD+YeXT^aej!?A=#d z^dm!-HWlR{zL|W6a{8TO5P=wbq#S^ZG0BQq>ms=yuB*WH(e2h7J`A6&q36GZH$2j! zZ;22Cdj|T!*zG* z12*Gg^M-cxs?EPmH2qpxYoK*rug%59aM{}3zX)}|yB5FmmE~sVOe3z{5f1xEJb9OX zzOuD&wT5BrZ((`8Q!Fx}Lu0Th-(E!cz}uO>sBtre91S~j%yuPIVa!q_5I)B|pW#Rq zI0~@K)Y$8MA)P}duM67349WpB*D`UH>lWpf^b0NxAHfN)BGa$?oRI`vl9({v*Gy^c zi_{v0XEnZLWpEyK8q_HJ{kpM>D$`?kKL|FdmM5APTSyY7#?;8d%i*iY+SImV;IcEW zmdo}2R=c%elFb(_KK!GT;kj~(R_m@_E!Ve_MGe9^cig{`j}&fhl2AzX-PhKPX^JI$ zE;G^n!f7s4ScQ0mitHE46{-kkcThuyMdIIj3?xcK#N1hceP9g_5nm+% zAPe;q$^ulfUo>sg_;p{sRG;l-+u8-TOLvdGqiUAi zNRdzMZF;*vU%h9lZ!*d#1+QP$+UvHizd<-SffbI1IV_8d>c!lw>1B)ilCV-aBnrwj zEOW|3^K(?CTSVdGkLhajJCe8wx6bFSdx8d@IGz(Ne;tFwU>&+rgrbAs_T8-m^HcxR zr>g3`!ha+$wrRcob-rS*t3w-^Dk!tJJ50ruF5}ldi|@X_%Pn9NUgVi`=$zR2CwY9{ zsuZooVo>LGRmcmMz~lMe3AjM=r!rA2jL*8{l2-f+@q{8N(vj-vmBWCnct0RwSE!FV zyb}*1jq}Eu;)_)CGV?B3cuk)co4s5(i}2m2%tA0S(xy>qG=mp|PKvHzhHKB<>*!-) zHpNOA#$V6)&Fi_Fdrg9OjwQ<;id3~p7>e}7^@GXg5j<3--IP0+Js=Q~CpKAI{XV35 z)c*pfRGm zG2?6bT~WpA%#C8r+VqAYZ3EsK zx0R^P+6csUU~GDIo8c*|6C{uFdcjRb6yuZf6ujMpJ>^comF7a^Nuo+^rfh?a!Ek^V zsE`5@BOiM2EDCCL10rmG^-88bpia|(msQ2-rh;;fCj&w zN-Q%+p~fJQg`#dW4WaHTEZta_$jd^*^ffsi^D zn|t{xfC;f>mbfNGM`NA7t|4>294Lp8NuWnyhvC7-9JPt> zgqX3@lOGh|oK3a8?lFp2u10@Iq=2UX!G`cSqFU=Er(&f?tvHihgnlVd6n}drrwYN- zAdz^qspR>csdVmI3=^I=AU*jZ3=;EkA-sygi~xjILqbJ*kSCQIL8oB?vY1}M=u)9K ztQMm3=>8jvooO-^PlzDNoYi7q0$&2gSQ6)WaB=b~N(co7vH&E;n4IpwGp8>1P1Jx- z7a+RXQF<8-Xq8GRIhVvy`K{w<5$)+Y-=y=y=o)np`vlE0OnbIKqVeBAaH;f~MfDHH zBoO@$@3kS z)3j5I+x#OEa;N=kvSuqc+bn!Jv3&#o8sWE1Akk=3FBo3GD#o$3ell#=?sM-O387CM zY#NGwI{nQd%`Fks_SbJ4V=MIdTh>boKZ;RLem=;EJ5`(OyX%kQF=@t*j*Tt4jZ2P4 zU3j{o3}wLPeiIY##c;z;{0Fg5e(SR@Y!9wW16oa6zC?UfY%VFIWY)9u@0Gnv(iYJP znw1;8Q+nh4=arGn-a~3M4Sw86wA3!Y$Bj|K=E*pw!h|8cPIqEhmNW7lmx_=j<_v*W z9b{}U*Y7M-7H3j^Fw-O%9%UF3y64j_GiLGCr*e80=|GuI8vxtc+(b6$`Cju^f8X_t< zxnm#aPwxoZ(|IYdw|r#jx#td<4OF((p2f7i`dOR5rk>OaY&IN1Hw|IkCOr>b{6?)y zNBzxeAL#r3#D{Bjv|ko>hrQ)~xC}^x@edx#D*l7^ZY#>GoA?sZcDf&e4~7)4saw;A zQm^^zNhR@K#jMMN(hdqiI2TZPaQ)?JJ}^{Vc@g_peSxcLq5R^%A5VUDxjyw>eAjI1 zk5y7EMd;FAyV87#$m*LUZ%ZExCUxDVIoyfLT6W5&yC8angu$e-%#@2+Re7_+CWFt2(#plb@9W8$kSg>{bB1a(5O z?6BqOb~%+I;wKsFGfFomcA?j&Ed%jK5}ev9G3hq{{f-FN*L9?&d;sLdKPF9N1_M>+ zJM!q-1Bol_3#}4cW$P~(IR4z7fqicGWXtTXn=^Dl@ z>ls^$51xHTJ;1vnmLfbx`W!-IJ0tdke_`^S#E2YnxY-vK*G;0T8q#C3dXYWUwW*7V z!Lb`mdg>Y8b@cIC9>TKaYcOoG#gA8@k{1Gz&MQQf>4fC!`7rgZJRn6~-ei)Qh^oko z7#cN7kk(yyqBUB-DG+f#@FRtErjh79eUpdh5?oQ~RbOS;s}j@ND#Q*suBvnMMd(d8T}bMZU?ZV z6GVkSQa{{}_~yFtr{hUyBB)$I2tPiIIKr{&(Lt4w)S|n+0t9RPVTy{0dnHCx3hNm= z$3!&75G0A!Vw!RWV!F!bEB`t;hUv}_$8^n9SjB69%{q8NVDz3E7?cxj~(&-I;%Y8?#;(dd=;XIRez&u5*Kt z_TPVIyj^49IUW2fW+A-F94U8(N=GAtWQw_U6al{p} z-ZUewWn9Xrc1xnDPc~yDnh2opk?v9_`9u>|OU5@5SkX@lowb|UbAuCG(4KEVg?FPWt}GxFEl zL)TDkR+>>GiRi}#vB(TJCJD+u=3Zz=IG*$WoS|7sFYP}#5qnm$&s!%YOVS=}#cVbbj>F8Xh`n_+oGHJ2lxB%UWBM^)Twj>N zgrPF)Tk!va;K#+5!h-D6ahYxnO;%(H63(k3Cy0J`Qhl*Rz#)u)VdExj?G1T|5aY5O zRxfWnlq2r(G4+s&C(EtG@Hpzu4d6<=O-Cgx$M!MZWpSg$cx(=i?q5du9}xFMe9;Y7 z7%fHR!LweCO}F zo3to1@4ba}LkVHz?=i=VH~ar^4Li~_9p_D9eOdSYLlPhN(-honMQ_eB7m!aQpVyRE zu7Se|wYPi0-nV;_(|cYQfaGSio3+f5PEnb&Hvn8g= z8GAk=q;ZZd7=L(UA;|uCh41SD_d~?pF&L~M0B8>8^TAu;lr9hTI%$$6Xw!p36U?>E z*1I?}3!5+2G{#11Htl)3b>d%0eE8c0-Y?Xyz$gFUTlMqh6R45TF4#58E;S>gV`;0B z>eiAG#O%P(;$tIog~a-_KDO`dEMgSh9f3({Gl`!?)KRfi|21?ME>F(*%J@f|ec5_Xd#hDvXkmT5d zQt1W#v!m8WZb|)-nBHN13b|V6b59y?@uF1EUx+R!%jI)YB@Qmw{-cY^>)$y>hMRrw zitchh|Dr>E!~usI@0VzD)yqW)-Dxh3vZ9t$`LTa2h->eD-X7+@a3__2HF;P8`_X`v z&@>$U>>?GG%McTeqY<=iN(TnwUnTsN zf_+xCuM4*0VqT)5BHaUZ{c16WXAYZ?=S{Y6RzQ-z7l@d`qgT(21-m+h{k6IJmp4U_ zg!(>uV!2tPU#y?mIV|*U$ZwncAGI{zr+A!IFz}3J&YdkD$9+b?c3M zHc;O&c~J@n??<4|Ov@s;Jttv)A{WTuIE0$sajQF*FJ5KEWWn!2O(b}O+-Rpt~Sid5X75UTvX z@>gHR3|K~S(IGK`NPWDXE{`I)1nx`&70?JvO zCMmRP4bBCFnAA`-ztWif{#JWxcUt_Z0WiEwSiuF-zKUPW17ra)U()sy5gu)^L{)7_ zAOsnaB1f^-YCoT|EpuH!Y@lwV49b9~PDUpAdno9V5;fLr=GP#Y@=v;!Q~9|pG>W)~ zpR9z6=FrcALJzUV04~}|ut;8p%vXw#GpP*x#dXe7x{k%- zx$vIpMgUzti2EYDuuIx02N`;yG;UA-geQaa3RD0RiGp?bftG2(yX|`pW*b0tiwTs^ zM+^O0X(=va3gGR>@jN&HQPweo;Rka`rfzc@y~09>%-5{(9kXBq+&}%`A{`3eC5Nam zgFNA|@~GJ1Dmro87~2L+?$V>jyJX7!=Ln`6Y=>mVm&H#dQwI=6LaG{{UsgONm{i8b z`HFDkDLy??EbP935tKAuPruQs4ONOL&rkYXGkX1gc3;gP52eKBsKgV9MBFF1ng$Z( z$y;5fcY&5UPOni+p%QCfF|`ZE`6D#zr{LqScUAw?ib6lr_^VGlex!xod2(~pKl7lK@BR(3Q33Vj;HZt4c1`{aTD!fe1cOdy zOsxCOYr0_13&C0E_ZPCkO4<%n7@ORP&iHkuWo6*E@88Jbhk@y7}`-w zm8X10^B3uzzqz2h!w{LrDWjltJsr1tsW^Oo3Hc}UpWqjy0!dZErq&aLi#3le zM_3kaKbVVFBtO5coU>YE^<{O_+AA+mu19`YCe~J9X|u%rerscAexAc_j@RBwB^|hW zCFh_20ajHtFvNey@HiH9#9S=I?2|kh-tc+Jw`j8|LBF@>XZJ@tLVhe3e79BKc_ zWxu_ncO3FAx$%9*BJ6xd zoYk5C$n?@L)!*;`{W-OgF_y4g?bKfMB={`;Vv0Md>H_C&?iGS-_`U!z@ZR2m;OO4; ztVnd?t6tHwUDx>9(4C}Le=Fj^3|Yv9)`OW;3ENrDJAM3sVdc|lx7}7X_#=fCpXC0m z#pYsqipl-@d^vgVc)hBv#G0#p&X06E*;Bb5J?B~gQb}sku*K*7O`Z-Z7Ml<)e8G+? z3VZo&G0BYhNwUiBh-+IGL>&37)wNsiRS7;xhVIYfFM3FGZASJDh(jmPs-g&Vj;qCH zhOOZ{RA_-E?X(})QHsfW`z{UEgO!%nZ8}I#e(-h`EALXp$Efpfj~(9V{#guJ35J-53O`9B zD5o$8><{|l#4$|*cjM(E0{8y42g53oE;7yfyLA2@DlMwVu)G;5S z(XJPmB_6=C>h^V3<-p|{8__Uco%*}&>%5TEX+Y}mKcE*kZ$L))Yf9?QPzUwe z-c`iCR*jP3kVjxS$9{^4|N5Jt;{)*N#E?j6=RpJsJzx_tR@c7zYa(5Rs?Fvv`+CYs z2A)fMTpLl;>yx+-UN@Rok@_ZsaJNO6cMr`E*Jn+`r^@R*3@EaXdfP97&BqHlM{`Y$ z7DHAC0G#0}o6#@h>XXAT@NJNayYP9{;^Ej1a77w)|6412v8l$Bvxu3cZE&+P|GU0g z@2!|-Z`29PLR6v5K!G0}v(uq@fOS@dF|St7lT`I%nzXH^Dk+|+$Nb8*4>V;2e@Nx@ zkxlxr;5mNp9#QPc~6_iX7}aqhCF^A)B^9QW$)W zTIS){lZdO&V|-HrBFh!h0rWX9GpiRkQb=k2fZeuPl%Yc#w_b8;Ig#QbvKd~2iGS;r zyw+7%E(QUPzokm}}fzH6CAo4eOFyyyhz({LtISthqCWcJQNE-M4m)x!%v}{0(%i;`@sS zkk#x~*t3MYwCV_YPf`w_)!LiZI_);^gTIvL-YJC1j+Fk1H9Ow+Gf@OXw(E%I&xUf8rce=0mSU!~w9b_gJC zhNS<|7Ipkiw1RieG>@O{C7Y-9d#)uUPFiIg_<9t(qozkI18rqzBf|v#ro3H|nc#_YZ4UT93nT z2PJUPP$BX3h9*0ZV8-k8jjMNyW0@vr+O!NmpP6iSK; z$H`l!mGrL%3ni@*z|h-;@@Te+o&r3AxT((DzaEU?gNadNq&x{U z&5t1hAZLHhJ5h~zD^tTKx&zTOA`5IC|89O9SY2< zNKAz?N<){TNo*W;O@ZXrYKh*V$;)bg69YwvoWFsQL!A(ti#>U3#5P6r)qPq#JrlOPETiS`E~kGeS-_-o9RJ=z)Gk~ zfYHisdH8EOWvXdzJ{1?g|I;C9Br>_{D9D?qJW)?C-0v@Ct576Eh-?Lp0{iTUhhR2X zf&fJX^;#oJsxgH9Fu?5oX4D<@I%p#6)#p$%;$EZmm77f10qJd>h=j279&?r-U>;h0 zN1z27LO{w{3pX@Ex~IW-mA!C~IlK^8N~#K6J!~Sg1%mW*l=}Cyg@IkB{iQ^4v@&88 zy|9q^yK*;k3Nz@^A7tS=Cag7h5A=dAw|c^@uR&f8B*z=%-9W#Yslp8q&x0lS^g zL==>g)S853lMSMj0Owc<(Q4WBt~MPYdZpz02;3CIFNAnE38bV_08KB30Wh3%x~=5` zV!cXS4th9-Z-+CUk^=GlIr{@Ize*w@Sr2uRK@>CLbm{2RoHUhWUEn+(E9dcS!J5QL zjb6EezXYW~_eiJuB0HrxOH%X%b9`nPULP|GK%h|B8fbAkq^{n_C5H8<7g1y{kD(Dn z3QQQY2nw9oo@YrU>u?Q?`moV6)u^<#&s`Nf{OE3C;EE`DoeP`qc zNLa4$U4ba)yG&U0~y@h27`ndo%hk=u*XxQWmRcvs^=&)@$XZ{(gzJO1+n8*!6_RC53>QAlfN?zJ~b7d+TR7@ycz z*|Z7uhfWm#ykRI9R-;{CSe z6P&5M{VBDL%^?#xMErnivl_fkN$w^9=Z!( zbNP(_0Z0d6)4XY5+CU;ZCJ-8~z8Ne4*c0wMuZtWwnWiC-+u*ND8yAu*e>=dU5>%)W zSc;YWGSLu5KiNw)Op7zO`cJ#`F_jZAlowc$>&{fmxE6n}lmewFG$DAr?)ivp^Uol9 z3^omj6h545PAN|sRTb@hpTz*Gib+jBjkTqA?|Y!)#(Y){j?Gczd^c_mHz_>inC=&Q zTElr!sRStQbj{YqVvuSmaq%13!K()Et|Qw&-ibg*WFkE2 zl*9Eh)n$i1q}}D6u$|U?RVORm@}fqKX$AcQI*EwagmC*679wR}Jr}C}9u6_JiH^EH z@1zD1ZK<#I1g|wERvBk?cC7MJS8kE%iYK=xn<<8wVY}do?iteU+t8vTYn&N36K(=20lJd?I{=Z9RU2k8wME#+mm{S%Qho{pVhqlg^YZw$7svOqT|j4!LQm z+|VHX{ln+mW@(7R;0qyMhma;W&F`cKEov9OQh_;N&o#WiKG!cn>RkHisw2B-%C~C6 zN*f0cCl^YJko43{n|suS&IqYODVs{?99y4C&%)JPi==Pd!|jzb4o*XArWOPPP7pZ^ zf~3)x#}6ZE<{Le$c%uNB($Xl0bpt zH_4;L=GtJ_R$nJe(t&AA{!#A|E&U>69{h6Bx5dk*ST`A1kD#^ocxtet{VEDVD$nf- zYrJq<>ZWx#r|j+o_L> zL&U!NZ%|^(Ja^^Of}?RLZo|Fh%-l_=0KSg9?!~iG>MR&My;mIDNp}7gmb0Oin7TiG z!QII!;`0#y#4Dou6`Krceb$z{g6_GM_^m3Y4{yfUA}0eQ&81SDD_aI4F+RfY5F6TV zNIvja=Dg^k#1Hzp-gpPgE;zi?GtQm3c4(1f*ruL~ z4O%pejj*X%&tFx4&s4TV@XJz%g>z;(w5VoY0mEh6p0Hixl3U?J-=M~Ijw*-Eh5K-0 zx0LcgNJ{`}&wc-i|H!-ieGHA}G8(j!RPQMru*nHf2t_Bqtyv?))fc^>^mtfe=rVehuk0TBs;EuJ# z(Nk40!pE58`QN9?MBo%i@-OO5ZRjlN8X~qLasrM57%-sR8Z)G7PJ)A>PcpZCK9b>| z!dveyc4Ayl(dBtw=`2J0uWXyZchJFCa3LrjQgHLg_1trBJ6oxi8Pw=K-SH#;wJ@4? z7ES7!meoR3Xl*lc*%O?<#5M84Ly2{@!cmMu3IfQ}hy-hA)lz?t@$UL-LE1~L_bJwE z{(d}N-MTINga3?;{@M0Vq-*LMHv9!qEAKD=5X7zbop{?7_u-pqu7?{TnndH?a+^m%4R5wET1wFu`II@w_=D5h8+2wm>hzN4&MdPn z`#wvMqm|fZ5Z9Z-usMP%(natwU9b0+<*1pDkR>S=JcKOL$9InS;o&@O@6dJQf)epY zrvTOHO)U; zvR9Lo1_`@s@)hH=KKCUG)sPji zdHbSqja%)%3g188y+;#Rh9wCVK()Bw(DgY7G}TlBeLZ5XbWH0ey9qc&mg+0{V`}r% zYe0St$^+J9-DIh?R?>QfgaT*HZCwf!*g^p}dWdv1i&&1gC}e`M!R~|&fvSvlt448d z+IrnWUEDKHAe5HmJ7)XTy~W+WrP0(U{SHrjMl{4!z7fB7No^NStZG8u;1qdIt^Te? zW{nn{Xdm2S;NKEZt%UG<)mh+c3yrnGh>dSpraC2C^6j2m^&}CP&fxr0Sw-a*7!g-y zP)-7^M#CL2i->Q%!$Ux%)ko|*4+2<*4c#6@bhM%Z?2>29mOHFpD$c^U0{CDaqDsls z?YkAyCTpP4pnfg$sKABUMGKW~&AC1B_P;+D^&e!FGU%H&OLX*%KnSbcW7wz5-=;>{ z*PVuWK@))N*P)`kXU z$IiGqV6r)L*P5$nf(6e978tNwk|TIYsmG>~^ZI1CSEBAee6k6N0TB`veVvvK9&S5ih#U3?oYHWlYN?0F;wERq9fK%KT~8bLuK^C%RO-W3zr?O#ff5dc^$oZ!-jLfW)d9*5CV zh*{HYCgNU!{R;`4^tNlhbraj1L&F#z=(Tzwg~9BUa^d%L3w{dXW7nzA;;0uaS;ST> z+iM)k{-k^@@Q|67dEMlecFC=1GNw&-dfgMv+`E3saj9to zEl?R%N(85u$x|fGr%@o;tA_p4uX_+1w}F);gc0mBqVSYifOIPa7HUf^iO@bh&U7Nx zLNBzDl<_%-ClJP;%#9Q_DBcUsGbu_D9vRA`&DPB<4g+ll#!$4mq*rn$i6eWkhHH@xY$A+OTsYs%W)qX;CcKQ{v>XW!T*(PSg^iSTDsJ<^^sZisx z{{p@KRaNP-rwWeO_XjJ!+vn`Hb_zJoo2Or(^dH|EtHCS>LnGNM{oq+RgJF*;RSU!y znh|AETIPe2$EsVs{{wy|20n(`OLT8TPbr&yr+hxiB8-T?bk|SpSV~J{YCN`Fa^ihi z?NoB$(c(Aua1LS~J!tKv7_q=|4V zD>t>cj@F_kGBW<`Ah@)BIuI;qSzvi(G?sF*HmeJ(nLK~%!>x$H7<#zr$m=rS*49$q z6tISgHDXZJM$Y&Qu~d~@cCEqSov)Hdxcbd_u%wOaZb2)xfxT`AGzn0(>8_kl;w{X< z^q;=2wN2KonC6r!ped7$;nG;uP)X4Ft#@5RhbDjUHw}6v9-6Mbe&95BnwCTpUr@sj z7@tO~^=37u;x(oAu<}!Db^Uc03^L&Msp>pPiRr)5Jr*fV{K3RLznkhC%R9}GHMgK1 znL>|WMS;?eF&~9qWXW)}Z_v(x33IjFv^OxyKF9mV8GZ{Rb9_uQ+5!eh#N9KL-5=AD zCYOWLj-GtMZAR~dV!Eo>4xt9z;Mzuz(FnTV3iG~u^?XacaT#0(6*qmtkxBV==!ese=fT~TS*)TH9L3q>+@ymMc-rU9tNKp9XXPV`up^daQ(xG zKxLB;_@_Vq{!O(F)+hLk;(&)n^lqE_w1a&RSC{`)>3B;O+ITfgWip5cAk2_1U2-5m zR_0~JUzkZPI2g?g@%b!!bze%!NvUub(=WQQL9 zif=sT)U183n)NBo9fwXH)@>RU?Tgq|$PdfiX~0>hAjINsFPXSd9%G9+2i}uGUv*LZ%y?n*q$Uv*0C_AWc01atl>Gd`fKF!5sA_2WiXNx_Wy z&SU+5t+c(nqrUsBL3PF9PV18M;a*=G!>vJ|{1Yu4Y1ePuADk++iAJ*0Fp&=2;GK)w zSfTg(`{e;Fm4c^c_m@9Tw3QAJ;Lc;_1QKhgVtbD2p$M!9VMNuM@CP5uMie3?!Evos z+VF9=Plq!6KOJ2mW+LT==565UJG`s#&n-yb9z+?mXCZ}c_HKD>-1u$DP4aCBkKGh?{V_x;UhskFfdOmwHB&-e|x=a z1x4Xj3)*V$&kP4oP>4Wh`VOaV{%Ua?Fuka~!DZX-j-bfA{(oG7b5|vGcZ#;>EGpXW_R)(qs1X(&2LSqIc~%C2JY2AtN_scY1VE>?IO<2H?6?>ed8&P zXI0gEZc>$#rKdn-PSl}ioT^T?UfT%Ww3&l2tGJF?TNVnzGPYXZx!f$~IH6Fueae`4vUIE8G$hvrOy_ zbE@|+`B>1i{nF#=Z)d#|p3N-w{-vKu+F0pD^SajA&}7Ia+R*Pbo!0j_;!FjZEnfcv z6bqjI2ZjBs^Lfp_*)dpl%>5Qbo1M40t#jYeYvef;i}FGd$?ak3+mib=PyAER@VS%Z zneYd9%x%CI;QSR9rf2Py+Nen?Ly?xc<|y{?$3`Er``}3O_1&|GRVNRGAFbBro)*1xTv@thcl|sPe>y-_7Zm2RvE`N)A4!>jubDZ4 zx`T-RDS%aQIN5G7R1M<+CY#5o5=BgJCnhRlxXbjmITEyced*7xDZp?{#yrF#G? zF}5?9CK^P0EH^Ht?dqSv>=>ajKz{A4{@ev^C8mdnE=5%jAqle@AFP6$r#U_9fdY@& zR4G^&*Dih}>{QV1!BkUa1kN?XJE5pmatGTk7AV+>vYOMkr`QOT}vH6oou2^EJ$3uD*AZ;6sn^S)oizZy?X_bsddws z-F(jQOiV$4&W)|ydlC7Y#>iXpHB8j$AVO^Rfh^9qjN$2H+fn_BmMqX(Hsi>Ro%Sky zc39SshR;ncX_qx@qB{xjS_SaoNgEO>3m2TyFl@U5GWo{Q$#p8qgQ zbM}}n9)j@;_Tt537A&DBGhuul$a>Bxts}T|GU=!7rn9kYylmkt9t!hu0=Wu) zA_;#rM7-c>r(g!e@KJ%SWx2_SXII8f+gp1o>w8~sP~tWZDbIfEk-U*(GE(7HV(Z1;jjKzOg!uVB93e!5L zKv~}{^`FR`AeP^0`ZXC7Espnuu@RE}cTo1}V+3B}b7zNt*>ZU($FpA+)<~A0kFQqva>wTo z`?T`2z^o}GvrZETMwK`$v(1=^TP9hzaMSpQKd^2Seolp@I%J!(#4-gaDD(Bba^gcw z>W$brTLesLDplGcf^Pg-TsH*zvUM=0hOX`?&*bL{hBRGf zx%otXC=)jKRiI}qke2GWT~mA)`$3)tLhG>Kc(C9Bf-=;av8(7Uf1(Cs?53 zP)^u%86YhN9=@OoIyIz$h9hWZnc@~P&y$tDR)lhuRYp+n)dh0-`K3hI9Rgvc^gVn! z(Wa3ujXwAXphbFe%4Anvo8b#l87_cXLG;!0dPtu%Xdw-5!(pwYA=Cke%a2C7K3RwG zbqNYVrI3I?9S@-of?&Q7caernPC?A@J)0S5FXK*r908Q2#o(|3<`e4)|hRjTkUh%B^VTl8&nZ-I*(dXf2q_sgg6O zq1E#BxzF#sjk%0jRRXYB%^0%EhKQDQoc3ll$pPFNBVrOUzZ(0)FjQ(nMK z-fAd#BD|CdyTJm8ThH#`c{H&uI4g%YyhG7e{}0%9_g==2j9stqE;vpPYAOxb_Wt>b zhm&89=HLH3I^?G+%;qySRYgUqwZYn?<5N=6Y*JzrEnb<{d%0ABI{!!G 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

wOR2cHtVf&D{_(_J75y&0 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 z

7WTFHcXo1d_)%jz6Fjj#-S_0#TU%V$d^yzS>`jkgNrF$MKz43XhOzMk`)O-27^ z{xfYg6GffwyxWkv6@!w>qLsy z`_^5IUiV22~l zXDbfe;znn0YJbkpy6-ee@$+%gKKJ`sG0;;eZ96wV9DU&Y$n4PDEyxp}gc`>!JUiyc zPrVRG>_cXqH?FN58*ld_J?HcH!ZoI{h^3izqW`^Do^H<>!U4LmZ$*z)+dO=f1OY>m zZr$Hep@Q<9?lpZq^aNXS#C78VZ6S2|z~PbxmzJI^FV}Gcwb%@s!-X~c8lT$a{HCJ{ zvQVRq)a|xz=jn~pfqv;S3;&(3=(^+S)1QYD5zyuFzss7VfwhG~ORvrd(4hsBq_DdA?5ztt{YBPR)I`*G~< zuRxizQIY`6C2J|1{;9ZV=Ttfc`Xwv?-sicei9DPY0ur z$yh#8K7pveYO!(I%=Q7B=a;DM9Z=8;@|Li5ZX42m)$UV zXor6gWN$%iV2dyE>JHws^1Me*5}VqTk>|_T(oEV~i;*PcwQ0u~XRm-uvcf+?w0BY` z3DgRc+1>9NSeLTJTJ@~=g&)_RoHs_{ZmphwN!Qdrz)UecxRgC>gcg~-k*sB(`28D& z9OPFEaACcDoF?oES_wV-NRW&F1D!hl{<^RKT$LlQvw&e|QOv~j7P}YJiB0b?vyjr< zEDBAYrR!DvdAclcCn;L3H8kUw6ZQVI|as>nNJCsi>7OpGmRdeOlaIY%WdSr&?_EZ#8z2E*! zxg30q!5(g#M@wdWYab0z9NTz$JtvxIRRtYkBWZm7c*Dm1ih^oQhUdWFCV<>E&5e_*RPwMt#})67xIaB?1TU!jCWI!Rpw+wo{rz?R$P~(#j{G8hy$JNH#2E@b*iJBHOK}BPmo!p~qS;#AqCYEe8RhhuoMrfI>$L{So4Qqh+JE z5e4upp`4q!YK8J_dL`^DUd=S3Cl@a;%a#2@F{e4&4RN_eA<-Tq1Z{BZN=25$i2=Ij z3nYlkdb2T}6z1dE(!Z<{bCCM_4IT1R_?9=Ab+RJ?7atrDbO^|CzyUP2OxOFbszQ=n zUVP<|QYQE$7x=r028NvV{ukrEfTAy6l-@`U>Zzt$W#ugKHjZ}PXnMWZxuk-j{U$^% zMj*#`BUR}pEW5qHFGa8#tZ?pP0NOn)=(lr*2zJc9TL@6iWEW5+O z8~Ug_6w%qt>HDBw){BSCGu7+SImc~oI7c`t! zN>nU#b+#MF_%4mi)TEWE(U{+__xDc7P`zV@Y4_)&ulUHA= zG|*jH^#-Lct3)Z`qw8!UKN}=GL+jT#xA*NC^)dQg>~cOH%y8fPJD0MP9Sk;$Rn7nL zr=t|P$SmN*nzDmuEMlwo7X}^vvCna7px9)IjX)YogM|86I=$*ZXhi_lHhsdO-NpjA zHmF)2J^Kt*m?+}81eVB0F=n>30B{(uH2tkPK3pGK!fMuMui_S{IF_BvN{2xTD>~4P z0H--}H%PV~lL_MF6coyFoT@R?gA*akgme&L+f(LKlr{E~*uJWwhT0X5F7|iKV}kGr zIw$H#jUYtLoS@#ut+Z4HPvWfGm~6CLo<~CTFbQmc=IaVuNyeG-K$AV2P!K@Mg6sQ% z2A_c17`Z)wZ3l;Ru624ApUT|0@gAfcDscC_USWDm#kP|Fq-{XR@nL>im@OGCbDAr;#TO`{E!asgm}2s*pkT-@ ztG0!*0SD4|1?LhVuz7N*yE;Q;6y?&x4z`;HE2G^A(hN@Rir`cN5z8AxaEen**-7_= z9|wOkwd_A-R!L9Bnu@}OdwRJAGNlYrm+KyM!QKrcyeRoe6+`67g;)*GTKI~EK=n^> zTexYZkZzl?2Wq9qhniEx&Oxwlv!*#5vRZ60c@9$o!REgo1$n zRGCtZMhGC$<)Fz}fOP~CCFO*+qUhiacxz#uT;!d*9;%3RF@X8edA4$6d|C_*U( z*(C5dMJQ0vFkU2l8O&43^+yM7GDvL3ttx#a?L?lmG>}Zm3<0{3g#_Gy2ntD9jT#1l zc|xW@qC-=d$zDhRg^SPz=rgmbKf-5ibU;e@3Fr8Sp--SJ1ZYcN$jsReG0+A*jfX=^ zi74QVNdwmw3o4Elb7QAWf7#`TEkDpJpZ1Cw^dv2x(~c&0KEI zq4%#7%)s4(<4SRN4!N#XW=0BURDOb-4F6`Q+`HbkFAKTMChEd8p78C9-2JEJ+|UCBNmWnL3d+B#Bw_y!;sFcUE9dY#a{{=1eb> z3)uD#+(FB@U|e2NEXl}UjeGfRwQcB6Y6V|p^_QneHnT5OOrB}^_6@OZ6L>-uOs&AG zDhq$@g597Euvo;`bB1@db7Xse)f6pthPd1`GMy~xdeeKMTfGLa+8EBphL~NIU#uwB z{XdS*J)G(P|NlE+!!YN`(ws%KO=)v#&XJtYhnhK+Q&{D!%_%fzYKt6Fl0yzTRx-?a zQ90zWBt)rJ_=ry4zkPpy@4EKKcI~;>^Zt0;Z@0Fy}~*VzVPPE(%h+Ed(!zdVgIh;FYU4d@BQ#w zhIRZly(4ya4bqy?L~}9!peu`+3%q?@#z^{?@zjj1zaIxFCboZ^_t}~(i^J7`u_xs_x zk#&G_{`jKm@J~iV?g!lsD(kIQyQu%&_)y!2SULJvp<WV6~u};;X)HKj+?X05K1xOKIrbF<(+BKI3&C#{2lQvlsOZR%Nslc+L8LVr<4s}WIRi$E=*QhF3RJ92F4MwX;*rJ zYD9Ywa;@YeWN$kaJJTbN%<9z(mB2k?x%VD~2IEG(r2>M&vOIxaU?-WI_1 zY4%$HdYmO`nLA#E)3X2W!Yr6Y_J+{mMm|f9KAKmzGwB2lOrJD@9-0YcZb*b}sEB?HZBUAcSSEWG zmYH~{h`h6G>1Z()%d)ZD)}5{zxFY7r5Wt#mOnbR;P!mdxw|)BTLE>)mOh@6$M&S7k zLZ$0@u^@}N$ofe(*iHMq-60w0a=R#%kr>bo38swPBwDF_Jmy4H&>wK3DaLOh785>b zu7k@L)((2I=@TvlOK+&F&bocf_<=*mzu89rCT#6eDi@iBYJWSr#vZPy2Hh$M{qD@} zzbBA5c!4;=)sB&v^UupPjn>|H%vv^=AxWE19OdW6M`^CeIg|;5p1l!f!c%=38xwM~Z?O?mW zwsK8Xk5pqf$l~PhFo(w%mf}{FE}uBOirdk9;@T4GaG$obtFP5^!S<6u7-5yzclL;vegdb$z2Dw(}d_kzh>RX{nP3#H!e2A%A14eWk^ULuRQs|F}#v4Q`r zd5UO_ea9k>tH>oLPP|F}jKHCxSfow*i=OOCB%L>K-m^#=B_19-eKdVVKWYvQ%DUF1-`ZDY598HsV<4~ zKU)#IFZ{#%e=T1OhVP_n4Yid#>EY-ljGEV2Na{Hk zG@b!a*$%4BQ1kY^-*oQtx3FhFdCLG^TE-sz6k>;80_N+7sCDw2m(QDhr|!M5TV3b- z3}aF`RVHPU)2Dy-Qr1TEhgI{iDGlzqtXc6s7PMME&*Atn>rIo!_Q)3%k&tUWz7xi) zI!q`t+mc-VoY0tlD(5kxlU2iNJd0Z=H-?CQ;K115I$01=>@`z6*)lMkdLEiGgo@Y# zXo8~GC0zbE3GwdkYr9~yH;-rxOvyu^R?f9en36aBMM<99DAJHm(%&A|i5IUO4DtO# zy}ljc&C*O6$iU?v^^aSvW!vaX-zJvKw7#(2X!&;%#|1Qk3T;zw$0$O?>vqGwQ}q#U znFPZz_4}aPsu|Wh@=kvuEFxTME|5Ov+GaV2Q}ayu7bdMO`${n7(*(WBjVD=pu+cV{ zMoykruU*UAAVMjVlxY1sW6`LW6_>JkW{|jZ4Dh&_zQKkycxEEAN~3f6#G>DHnH2i% zT7#A8P!Ap9=)f<%(PcE)nUe`i3euUU;m`$_3W<{x`RINV0(k^ms!Ko-387&EMTOS+ zO~=pkJq72FgO!>KN5M5|I>~8% z1L3@XGffNYETcbV{_7GVnmT3o=z-PL? z=e$cKj2Gj@zdW2yED{{z$=_s<#3&GLW*UvhNPGVBr(&l)J5M=#EjNR!fIljuIO&x| zeO%{TYbO7P(B==*{DUrCU~f?QFZ~B7t`dR>moW*PC{AA{BJBgjXb`tpwzCDG5c?lZ z1_h4TGHkxAlFLyVfsV7*H}iP}OZm=j!D$(y=yo7%&aa$i+Lyo$+3uGi{2Mt`0z1{a z#VC97M;3$|%li+&XK_saF-ln>c^yb*4}(Nm5N|yRKA6J$^*Ql+3)lC-`{LwHg&)n* zu4exDbh^f>8lZeN*IZf1E`eH9vPK*}e!v;cpBpKCqZor(8^PcW%awG4slqyaWrGIx z&kV;z^>z<03RBf8%WWg}k#vAw-=4^o+u<*#60=9SctpPUGY*fYwNUpF zAi{&~*v+uQ_#9sk`7-u|ATLsr9`RxH`26VI!EnCNh~~&B4U(Y+3fxD7AlZOEEdN@W zB@SsZ;>cil(3V%gL}2+!1SgVDJ$;xB-URFD5A(7H3x)Sw@!M#0biyXlkUjv#uOB7x z2r;UYOgith337sXq&VhHkDuq-JM4lnhN3Eb6pZFuq0NQrB9s`Cr?sLB8F$lk#Q;&* za!M(T-sSQQaH0@^W&y)CxyfBbbo8qhCzJ{*2)rvgE8O)16=ssv z%>qaY5u;>P%5BxDY!G}gbD40TrwEy2Uu^=kP^?EL9SwIGHv|6JHnK%h404`@zzxv4 ziA+4T*uRKFO0+PH(G!%T(#zBO?C_;jQ9(I0@P=Wc3Ee7@83@RWaY#tCjXUC?z$fy4 z7tJNbvIa5{MM69}4PPc6t*f`18P!IN(R+2e%Yi!jody0(46GUD@mW96cYr^c1H3BG z8f&9Va5UYaELRQSPp53L-}MW}KsNyx1U!NABHBOY%xb1k8Bb5oVy+%-Zxqh5JTziOQiE=Fepw3Je;PSm9wgiCc&c2s&$r&Lp2IdkLh1 zh%ty>&it^0;PRF%Vh4kU!eEkeDTTT`L(Dr{J4M&y|5G&Ut}b3wvqwWzhO@DJcxnyn zT^W=`Bp?NQ3w~2z{qZc3{(h;>Tr~^1@m+;QYX7}uLa9Hl^bZ|IAd>vf??^@aK?L~G z-oLY^4d^hzOiIl~X3$Y;t1Yp`Z&V4OUUn|m4{?N}Kor*#Binil2n?ZgC5xcErH_kt zfNVRWdlWnZzX{8aG{>vA@ajZkV)UwJ{TyHV@;2&(%F8mg6+B(L{9fT1R!EV`U~?E+ z@|YNAn{;ccKp;$A=RVI?t$$_pB$W~ zfHjj&wou%<0TMIykjTk7+%>$tSUjrFU>jf>y_!Cqk1zsqY5r+%Eb-ARq_&@Gy;@I0Vb3VBXt zppATe$GN*zAwjijSPNoF}Szp`fkPMIX!|^ z!_*(%@0_VGXNftDJ3HT3`LS%TbK}}`o$rx`XX{r{SMh|_9@2vBf*9KPrSon@ZpcaN zuYp6h`@v@Srx&f#4ecA=eo0C?X`B&h!20!m(#2_P7csyL zu}2D=mJx*S7m*#0S0Yu8@^R{(O9Yc2GK5U?MrQtv8NA>6`kNfQjj~s_+o-5EW^_*b+W$~W z98{L|++v)Jn(=CUnw@%mP1m^mohpz3?XfRx&lVYrw6b*S{QKZ@m%%D4^^;{b?PEz4 z@YSW8k(8_*)`5elXO;JV0JVx=XN-3CUmlhFAIoIFhc~cS&pdg(=x_$SV)VfDNrv0$ z73s|{yu7a7=I1P(sGd>w*tW5vc-AZ3R}_{_(@7kWVKLSF%J$`Mw~r%Z3vR{EL~&KvFU;f4*(Z78pNJ)$2M)C}=a1pPuV`_Px50o~p8xuX*(HM+p2>b9 zo(uEX>CIFR$00y|V|prX-7R}6wB8PiRQB$o0n5kY-EdD#bxy6^FhmMnVaV`Eb7U~0?=UY5nM4N9hP z15l}yIQYZm8gqn7^gEWDL3VEC-pNWqkoVVSAg4Wnsyg{UwG+g(vNl(~&aN?_?@!n+ z!-qe-Mdx2b_!`}{H9d0=%AX$`i5$(Df0xzPal7lr0d|3=F?JkI(Y?GKW~b#f_WfvT z9%Iq$UImBiG=8*MZ)S@l8b1)ejtRQ3qI}8IwB+)Z%pYmv<+EgApfV#gat*HZV5U8= zWjd()jOaaxQSJIGF{kBlL{a#r1q}xHqIhsZUo$iVfjyxs$z~izHdW|&$7>0RM zA{?TIg^Aje`Rv_Q*32UNe)gM|z?gyzgx)lso_D#kmr-26T&uuPrYV@?6UrW^YCamt zY57zw?jZHF7L?5v$$W0e)$WPM+Nzv!#}v_n`%P8H_@=M3QeFCaNZr@szn;VXnBO&b z%{RE4oWd_ErsnGOCZ#HMm{oH1ruQc46taMMb2E%cSmAHz*7~VYINvjHMcK#cE0%Ty zEzMjT0k@{A%t{Tt$JTolANz6X^X}J$SOryRS_@9@G{%{{;6j^d8@jdXy)8x;7RtKf z!{7_EsxKOzj{c-MzD?5X`PRKNnR)xw$h`V#hnxIl4^q+#r5@Gdmdji4cYX~TUsy94 zr`gMHG= z?ZU=unm0lLrRZo{yN+r2VNDU%TZTAe`qqXffWuMJR@)aHT3Rd5r4T^6`e+09S~#x` zVW|P&9>;&r98A>%u4tF9NS(RYSPpS2#WD_Obu_vr4V?e!MCLu8FBim5Skbv*&%;Fo$gq4MOc%P#kpX~$VM zQcBx+_N=l&5`q8x>u(6p=2(-1z}hEM{65z$QDH@$UBG(RriG-}Qr{X@yT)nxacHz^ zM{cF9+qY3{mvmkiz@Ryi5cw?+#2?x;ZSeJj`Pm4wZw*(azXr?8R)I7uzG!O%C|~9{ zk@H*r9iz3ZqXx}#J^Hb4Sz09SLL5kh&6PwB9=(Y^U94G3xa{~;LFv}1(;kirtjHG! z_aH*(R*|kpz*vc&=y;~t+h`aTQx@dZdha>((9^-0)^cd3lsXJA{_=rUvt3LVcP)tD zH)9EcRuXW|T^8~Y3~(eY{Rh|rK`|B1v{)Lg>DK-y^XX@v-<3o5vuZ3`o|GMD!4hSFD^Ck< z2I#J`z^*=*o0nr##xu|@A}@*Kk@rx*+(bghU74YmJ?34N&*uMRjkufvEH zS(1xR?A?=}EhvTi5=w2mdK;RCO!Fah%bUt~L#<<9J_wMs^3z`sWfha^#h-o0eD?ju zUAA>~ome7J?mrQWaR%6%Dtnxtd6KX2J_(iAY- z(rsu1ud>fHDxn=$BT|~WwuvF{BF!Ps_bG05QNl-$$+Gx^kIgv(gWT5E#$JSiLzWXq zsolIJ+}fyzJpi03ud+L>36R@4>@K_~K4J?TrHF)WM1?_T(w%SN zv#qsK8QH;ysT$Qwpl>EhV1q3o^NCn&d{#jj)TfMS<{%`DUI&AssLVnvrBsl~%&r8SwUGkF zGKy2PI>`*`=;#(G<-TLj2i*x z?_Q-Mm&pj-g+;3^+R`MEit)VU8o*Q1ycP~e+FBinghr3sf z@+wvc^`dE{Wzg7)R8uZ7fcS7-S6AUbUM$g`%yzOP1OH)V$;c!NwXl|txujd_wS2Ta zQOtCpsU$g4Nq|~4eoAfyWR>+K6F@UHC{+mB0>J2FJXzV8Ai5a@=6g4~8KjI5kMN**=?qJUT5YIiT zcAV}wif60W3J!xVbIqlB^&*F@72s&;BZ8r=KAnvMl9~e_1qXW5s`z`h-0N6n%qFgT?8_Oker` zKl(prAM`18&8@tyDV|BGfJ^22fe-gT1cAX(X!)mf*gzQ!>Quh9j<9?Ek7<{%DF6tj zdu)6%;UFkM8$3{r02z2Qw)8R`N3-t)fsl+8$@lQg4G!9n;9IB91qCU?6_zn!G@$I` zWl<}Tf-N{-?Fc4{jmD_-*H5Ag0ZcAHkeX*GNMTJWK+vM*@AhOR2@w!FR%{Qj9w8%e zct`Z~O5iU#T^@8%7=VJH<>3hPVP4Ec@=NXFBZYUHpWfze zbY~(o*p-CJPWpqG=w{lA!1=he9qd4srGo*@?!z7c*&mC>e_ibkKS_1@H+mrjmW1vn zb5dwY^Yp8XXX3?VFc@A|gxCWU#kwp#d1;luWagpEa8cgp4V7Cbp(JIDOxrYdISN4= zhNfbBq6DM`*N+3UH#B?ANXX$ygbRa)f_9)Q0-JhRB}uvo8lCoH33Dp5HNz;WKNVvy zDfV3g_HNCDf=5f{sx6BKO5%?jHtmX5x;~sUxb%f4VV||#yD5B=N4`XDQx_of72*48 zQkSGQx__(%&lU@VAKnX^awk)l z`@2r74Lkn2dAM8fo8FdDM3JydN(zHgK*@3VQUdZL6FwMU?$D zjC|YQ_~wt(G-=o0^;YVY!3C95hwU1z6_~+qB_5rz_@Ro7FEz5%ot#!X0I2-4Kl3I$ z^5%T`w+lC?KA-U8I{4%&iP5G$KdyVZhO`?$Hu9&u=h+$Mi(uByvDij{04#vXR##d+&JX8vm&7M%y0OuiSQb^Em*=6V)7&hrY?U zEI>}aa@T%!57=+{TJqxjo3Z3`R-cYF#-}A7FiJk*xfiU1-UN#nzozORB|XL!$B#WL zQtwuu_@I5>6Cz<}^p|-$dg7}l1ZhoW;Z>tnz?UXAm^r_Ql6Jl5OCw^L74)##YPJ{> z21=aB9{!57OL~4*IlQWclgjgdogxF-I98=7pJp6um~lH5m>0$Kan_bu5Cxo>#Y_Y$yeqj?E&qh|i=-EN?EJ$wF1J0e30$KZibRL~y_t1_Dcm!y@Wi;h z$MRO4BUp#9p4jtHuz*v;E7~=lvwXD%epPV6=4p=JS$P>@ovLA2(Z=G|p?tIt>qyq@ z-wsrgQjbcmO9lO#D=eCQL-*tG>h8_L!#n?8{`QRw`+oUX!3DGWsn3Jj{cCxWA4djh zhC!Z>-V(R}1FT!N+L_VNT)@>G_(SYtG0AXNt@PXVB*=$tI({X#y-eX@&whhG^{vE; zk#x6jt{ov;e!2~SR;#x&@=ra?l%cd{$9pCQXG)uf^q0E~YqufyR2@Zv$VK3XuF+0& zU?mjs^X75zis@Umex%L4Jo^y3CI0eea9EQ>*w^YHv@vm)z?68D*OtUmp2i{1igX<3 z^QYN8dT=2*Y{s*m zaYp>mYB`^fpJ{|KYVnK6_>eMIqSsN=T@IWn1VM`WamJcyv!V$U(3l@k9!z(AJ3Vk+ zQn~geR1nW@zo^jsN-OxGbNYE8O-tl8Q@8BR#PwUrHBXX4beRQblT2?~PncvhoDA>G ztn1sh*HwQ)^T$@zIlv$Op|vJBG%@Ne8aww6&1luiT!BF=I6R-VOK+EW9yZ-IT&Kpm zCv5bp<dEqNNf~HXz%?&iK5}?` zcILtmM~=llJFvnFBLU)@xUFP%y6WiV^Lw z(A6v<#+{cv3^%LBZn+$(sc9`c`((9FJNEtD%3T4Miv675%*kf4u$7tJ?0RT5=wiuW*i+pH>QXDh0IB|tGK3>2T^Czx(h zb~c}9f#>PCb6)HVbjWJ_u*&R6s4$jgncV&5NE?2l*<+g7lVp;vbncbBa4u?~AV2Nj zFrYnl7%f+ttjC(LQ*v1|9-R$!X((qaDP$S170-PTiYt6P^q^D0Wg^`#_+&XO^{&7x zD|%{dwD4k{pM(otEfxnpK69{?#50dAs{b)}HO@p}Ql+gm@i(unj;u;#J3S~%m363! z@a-9@`F>H}E}2wvJo!5aUiB@s*)xs31-6JA9s~uAHhS z*YJe6qcA1{St8RN&qr4G((l!Kz9&a2x;p{R_Z6QC=S&``z^g<8xI5Yn<~Gi!xtlsQ zt(u}e3jU#<+DYog0K&muI;?E2U=1 zb5py7l18)OC=lOxj90Yn=(#)5!pKz3N~g1X^jmY2MP*R41!;ygT)=%~Kg%q_`KkVN z9nGY`Njn2|Rp9QK>GadAJ$;#{FNx)A?Rs~Z(xSBWw)aOccVAKijn~v1l@~HrS+GAoPHBT^yTI2a-ViwTPmT zN3lPXnLc}25Tm{UF~`m$^n3kzsUz5S{U^G;*mLa-oYOo(X&yCGR`jeSU2FVBALl{w zovB=1O*Nt4Wu#ETkX1Cl{EUKXrh2VFOOL1(#>zWhg89ucmtA`IImrU;YO*2<*%No^ zJmwb>w<#5-I3$!3uux&yP*8NzW~nM{i~rWij_@C<0Shi+w+x|+ygPy$;sU+Cm^>6E zG{}S5@a^hieo;Adi+QFf`dwgo6r>q*w;8!rt=JXh^pzQN@oEK#qZ zzVqbiw!f?wsm^zEN~q1V8jiHM+^=VV(SA-mmcnCGohX3s^G?j=UYrAtV)dNNuK5wV z5L>kPxi)M=S1d-IHil|H;tbf@IocVT^E?mJ(QGJ+3PJ@C5+tud(f8JC-m#=0k@lIl z@ah)}9E5&$SebgYo$Lx)cN7?8BC_A5*u%9F+S9~YA2q$zWTQ=l8D7yE8*~!~f!otx z^ThRjgc(XsC;rhZNH1#s&6bV@IaE8iQ?QBSv)Bj2cnO2kk(#-Q{nX9o53R;1sds+H zGXAu0_8)h37s8V2zd3ShN+t~`aKl*2+?OTUv-ocxGYvM#2Lf7KoKB-ty@-llN zX7&hF%oJJcZzo2mISsiHFeBoEV;hD9QZ>!Ic{$yVH%E+I;cFMCDysos^pe)?Igzco zgA=Q~z+wR#x1aL3E)&foQ5%$%_^iVpP=e?s=QF%qU`S#a-C5(lsK+h@6<9sHzaeL= zc=j`Iar$-;Jc;wt|1h&fWUk(=L;Iun(%WmW+)Fw?Q&@@(`c*Ub&V%KBYQ{o zKvzFno>_6lub-RPWPT9`Jrn(*D3TD^d_(Qz87=vSkN2iaMeVgUwDgL)Ta;=ZpL;;z zRhFqjF>!3gq(#{Se|?vm?YY*Jt97s!OU*S8a zSPH>TxH^-f{ljphxUw%7ANLd35b58cx4-s{BJC*RQ&(^NJ+pRX1>LM>&6hZ)xG;Ya z5|>q0L>IaGGBm0`Grbv?b;%C_VUAEPH6?tU0F>zE%(?!|q~m^Pniw7v31k>X1~meB z>uV2O1PtK=Y541tof2!QWJ5=^TkLjTJHwNMPF&uc<5^L&QuIB`Tx zbmz9A?efO{-Ijcjc_W+KK0DJ@S{!%PNR;;IMrK%d!-rT$mHOM`3aG=&NFe>^6|sYw zme-L|0jy*0MH~V7l4Rric}6e0%RbfsicpdYv4<^P#{F4-ZF+nFDSs79D0CE;UU6|q zKxIDbORYS0y6-w?h=}&DOG)}iAS`yB=eycpM*lhQDIZEOUgKGTwZvM=|&v6Mhv8*9FKOQ~_Fkr)RuJA8LgYt-Hs0?%+aikgJxfDVvD0 zE&o7-0CoU|QIP)t9*8ngqJ#G)#s@~PEJN_OlnFk~Hm-((3;mckkTHOL$_y=l4N+-X zIfW=vA*cid*S=5|wR#$%PpJkE`EkzZVt)J|Bcy^eP_%o5IBCR=w|Ch7;yU;kxft(qFI5WY`O>SuURslZWsU@5rPvpJGa(R8gpmIh|wko8V(5vZ3c~sb%-{Wa)w< zzi+To$pRPF0F5w=aBLD;NX#NokFY;8d* z;#B5yp5>+hX2Zmzc|OERbVCp;P`=v`3YA-}CGc%1sO@Pawup4-2zl$TcI)PY)H8uij9M# zStzm|M$eYVCi01bmg1;2?^cjeY@Zz#xQt-8%7!ziV$(8FVJmRmQ3_AO3mRs5W{utf z0^&+jA$zCbP$vB)kOCt{Dy{g9Qr_hTO{ih^wZIXYb4sLPBOCpdezg_8z5MuM(=(%z z09}MA3Pwic`K3~IB~zhyL%bkkKUGicAK`=o)C+_@?&5DX)Qfc~v`0KE;+tN9cwd^! z>9@W6T#zGwf?}A(8gJu~rbWAN7QLcbnrFATqxv7Q<&;RQTt1<{yTG^Q`!shYjRtA4A8DvL9QR=S$h>thCbwpgK!8)mQT)< zY#)<~xxgMO8}5TsqCmKi(&t%MJ*= zjfJ}zpfk`+KVI{353^@#X+On4HjUpXg5oZesW7dO=NJKJNp|Yy_I#&3NF{@^gV2O7!dzt zo~1Q1eX0C)G&pCT_3Lb1lF>`&6sYcZO~)_Dzmv!Ro!#$s%A1~kp1TDu{qa$N9uAIS zeA1mP{cBk}6YCVK`-vVP0M|d^rWvY59)U1ECkMNK@xAacpK{eONoUgeSY)t&S9?d* zgsOR?d?xl7LAQ~)d}h&Ogrzn7x5u-#xf~uQ8vHuhH|6ulq%Q0ArBdhkSqQJ^^f#z@ zu4dpsz5V{1o!dND;Q#)os;H@8Q2zK)XuZWVN+MywrsEN_Jh|7w``pFD_Rc2HKOgFU z!HF>xA;-t7P5zs?7V{Q?vgJ~Iv8a)jM2;@uwo2-ig3ZvzZpbDbV_8D z9*(j`IQb{+h}z}Ra@o@oCBVP58y{t*xYYIFYk{G|mBZ|8v5U&x@x$Lvq!z;l=2?OT z@`z#q1jW>jv{6wjDry_0UanluC$fswu-bh6JXNbKOA7Esb95D(7k<_J(c=eu;+$W- zBN4ta&z=}J&OQaT$ExfZhwfZI@b(;*xRiU%$!hxNmG`&bIM&!?4FK8OXZ-|!-~Q{q za$`-Jn+(87YVO`xKjGV+g8#del>w%xOa2FV7>cAaFbCyw-!l(C+>TdTS_GE(2IW8g z?r6Sq|W#-4r0SCJs__nU4n3TU?VRBkmj6#m=;dk`4E&39dM^7fiDVg66 z#V^}r%a1m23#v62cUT?ooqBj6PR$dWPsv5obu!zoTLsc|)JXAtZd1jo^o$2wMLx3K zm?h%ghBWiAFtsN+pS^f2$$nK6?>1@o%HY;?!ZiA@T_{1nGw=Yva^(ru1+amsBUEK# zwB6kSWQMQCuCUCi_&ccTfr{Yeujz^Z0iqhFA5h~a46U0(^Ve)cq-U6GV;>?n z2fqF4jrB=a|5}=AI#d@(IxM;;a0@uuvC68OyY-ld zAS!7Wza6EUGyNTias^l^;wg{6sD^;5xjXo!sV{}7D|qQjr#AMdCxS3PHv{GK@^`OLota?rJf3%Xe0--BSp?vCj9kHaME$we74B5L1Wg zn+W7Fk;42_HA^l9HdCy%LGkS#eXUk3DbL7gLh+$W`6UJx_Vasqk8S&9gtKa3%D6C) zwqIP^8jVBKjwbF-pWPMwoM8X_nyOKPk*RmJTARBcNfajh`Kn;}c_2ttMV{C7evpLf zi(B_J;ow*r4{UUTPp`;7?$5_#W1hV}cw@4|f9x1Uxd>|hE>bJ=;!8Q7v5V8H--}i- z8XgqJHao7}A2kP6ZvQT0iVMUK@CFTZ#ax zxi+p)CDpX8RUR;V5E(16^5L@|k&kpzn8vrG9LhIce1uiL9BkA-`hq9G;g-ld00IRk z+1=(L(-N5V=o#m9j=2tk@(9GLHfAYjWoqSf&g5um35cYwJC;`d%aR(+x$obLP57s_ z;2)p5pDO+3*y3NC6t<_eqgoaz*M;`0gySxsa96)H=JTtl3N&7#Hzu)PV0|!cV~FJS z((EWNG0}F{oajP72-ltNn}fsN&TP&~9l>^TA`o^iaRq$KbgOfZZ@OMdEy@}h{~QU_ zl@{&m8^{zX{VKF%P+*H)E9`RIQM(@bZCGM&v-o&TbrzrBCYUB@mVK)dGoR%*{_XI% zK}O;+bEl39HBfdOplFYOX7;%ve&?{M$orZ!5&CuF$^7fPn(V<)ZB1FBTJboH(cI#(4;M*fhM32b z6xnWR5=cWrFMlBSV`qdPt0-L0&&oK^?6VK@L0O_%ZG+IbD2x86FR6CJeF(5;@CJGk#y=-1j)qWMcrK&0GCSQ?a}twl;FRR0~SRb$6! zD&KAyT6$;}?h3^e%@?%^Sz6JvZ^+Ym36CpKdQX9n8SeY1^siu#nuD;yN{AMdF9vic zL7J<2LmYXlnK~O=*mP?F_v@B157HEGeu`lS-Di}B1njLu#}6_z&s+Ny34Ka@ka~qJ zJ`84rhopR}ZpP<-!BIl%qi_4?>r3i=O|j$yZJim|`l0N-c`~761MM%1_<5a9>zn91 z2)cJWkma4*Z<=?d>Ys16qyBcl6yKVH|EsRrHL@C0-b@|AB}}~hXX2aCr*lT4iHkpM zKC$(KPhimR%=v&X%}QwX7Y|zbuXo_f#-u$;4fcyKOuus&p``i>FqJV)7yko%Rt{v3 zX*E3pYnC*4mOVN9+11Yax_eYkaZU0QKhyAUPH25a(U@m0BiNgv2OK&6DZ@d3B#}*TZp05_+ z>n-)R*!Oa=U7su(()^29)zUifEs5VLxa}Ia2(=Uy1wHmHH%y1 z1=TdvJ#n|J1CmU7mJq4x>>020=XCLgYwN7eFv#d6NVqqdk4Ke%g;o)>`97g9KC)WC zXd7=48>Jmg;{7$;eCHHMLRpEid7YQ>dsgnszhESSQ1*~ml)P%}iY_|nogRVL5fsa@~GgI0C)e}hJ?!WO{ca{+=L2D?_QCr2WODJY}F?9 zbB}TBF~FY+{1O23W){2{KdD_PRJrNWPN;=6iC=E>vV2W3B;5I9`I#x4JpnskABc6G6Ibb0krP3?WPFT|iDZx-eGy>ieh0hW8wHG*vGqH)?kqa5Qn zm;yGkaLH#BOaKSh(dUpO6qS$901Q=hAx#ZXzjsD{XT8;kv&L#tCAC+??7$KI4}IJO z??k33LLeMo-k{Rxu6{Ngv4#QbkR`nJ{=MKT$8Yf}UMtrYK4p6p6xJKC_O}5n3Br>;JkTlf^V2 z6@I(?2P+INc=Uh}tl(*(-;0=!P7U3LdM%nhxg}j>vcw#&jA#3RwKB<{rqRdz=Pu{2 z%bN2Je53OjGwx}7mT!1ll&$A8uA>l5BpMyclOtU>5cfD1yvfL^H@!vS{SF9(lM3)! z+w!vwGqx1r-a7r*qhv#B;zbGuXi{0pg!zuM;Xt9wd8X|9ORB)Rq`+-Ky#!g}+nYld z-FSe2O)fF_nvw|y?7lx3to)C7j$^XO|Cy$>&FA~99mFCEJmc##I*zlQ#LW!OcUXW% z8~%+Hjg(wi*q{rO5KXyRRC%tLed(op5F#D{$!ijh*EiDiBC-UGJC@Fi>Xil`>M}C7 zWr0%uWC4jndK)iD1va}x)(!y8j&Ssdc$cDrAVZ=tYrj zMHtGMsfyJt;$0MS09lSK56q|U$omZePoC`v$Ka>mJlzr4Jq0_dQuT6iR6fHIp#38j zN9~Ob;QB$b{02W{n5P03WF=JyuROM1+IXB6XrXz6kaUJkF8pK4X#46M}wh!=JXGAvmz|5d5Ho7KgpMPHkk{@5y|f2tgCeC7XhMM zOr8lLRZVUGa;~b8aFw|jNr@wQPKyt78_yvH2k)->u_1)j0A^pyR61%y!j^Rj?3|Bi zMgZQhRRm~q8!peDxytv2ta6p%8SIyn(Vx}(u!W8!2atenkD76?RGTV=$paTnkCyJv zT0+!l04{O$KCK+a++=Vf zK1{(}2XdL9n1%6YOGtXDL*4oWK2uabO3t(ka4o~5%uOl_!cTs569VAvMY6K%Wlp#` z3kFp!w&LjLC{nW8=rXERXq8u!(I-Hdk&D_GeHF=b*mR2U7jQ0RT9iCo;C?0+;>AT& zUpiJPC)5W}HIa(9WOR-~fjMkpLJ1s2?{t_iLBL+3uCotKrAPX0$bOiGA~V2qH%eo{ zBSyrbKjtZ1h(GYq>l`y;*=$0iFyC2oWcp#TSP*QBBZnao=;L}g(6#p%)$-tjMe>P2 z4*pY2Qg)>XPj0Q`Xa7}x0 zVO#3CMYG-mKM7d6JmJ;?MZYe{Bc8|tGBL!hTac#~ANY6gZXC9hZ3xJzL8UMLAy;nc zJaVs46lR47+N9S$`wt{l*nAOHIv*z%a3u4Z$q`{Ni0e?Ns_1de^`rwYoaQfE9qGSu z-N@zvRL;L;k{67V$*5NNp%5~Qzb(>6b2z6;J@ics2Z{xmx*!*a)ib2HIv___TGy85 zbySGANwlpyQ!P{29BNm4zP)^Hy16)FL)JTe4fT;@354o{;gFq z!ckW$bPw*mDfCOvQ++kJUMhd9dghJck}^Mhu>6!(Bjlz|5SY%!^)DgUKPq+>%L>V z8~Wv3*epnV*>oEIM)$SIj!DVZsbjT2C8wS{>x-M{_{OhZro}Swd3GI>Zf%z5x;Av^ zNpSJ0H=eG~$L9(z&t%YcbIi~Vjplqc&tG331hQ!%#xi~37Dj-HWjYN9edT#tFo-_+ z=Lpn7gf3?sNXoJtv4U8&u%8Mk*$|2@V$-yPOdi==9ILq*vaza;ZGP znr^jvP#bxDOZUK}!a{{})$#D;y5{=6T+VZ=stuww_w`Cl2i5jf=(mxg|Ll}| zR}URagdeEpH%=d`J-zDjs=Pl1?x@qA|8MfRPnCfoQ5K0_FC98t88;-Z@OxOT-j=~l zlBfB0!MnK^y0};V1LgFe>4lB^8)vq?hd%O~_M}zT@*>=Elg^Nu8^Re=?ye2jmN@1+ z{`27B+|?VU07`CoC@qovYuRtv-UoT!k>XXN66@BQYqLBt$KG3Mc*IL|oi>pHdsSU&5zd7)Vzf9+ny!LKS^9vjAn#1VJ&i3YQFN#Fz5!{Z#) z@?^=oFvqyM6;+BxRR2+CQT+@_GC}NBAu&3=*u|5(KrK*gN-FLyw2v>lM;sX4%+mIH z$mH3K6wzjVayyS?@m{7Qq1_>PWVz*i-X&8<^|04Xi3d6p{$VLc0UX9nXf%L ziwvkKPLG_tz^aZV{Rcu>YJ_*4S#+%S2H7&VE~9*`MtnEE-JH_RiJjcN_SD$jFh}S_ z6w(SkXm!!89Hu~?g+NQ~1Hy!a_6Ocn1|O;HT<iuDv##uaf_g!BsE3=$v_}qy zuX_*Ae`JOh2nx1mQqTU}=RjMwH5UDk2n={Zhwn7Kd4t(JQWNns%}Jevxale1Tl~iD z2%{X#^d)*Ut`k`9O;R-}ZCe<*?)RZB+D6FVijPXKgcaSIj#;|s@{8L){7w6wA-^kQ z@lSSgHg2vgzS48_KTr>IxwS_>3Qw^+(bYBjQYYgal%xO7#w0%6W1%u^f&W0uX}bC z;zu?ZNO|#YEf3`4D8W4`#!4vY$?swG=-zglqz1LB9#p@B@$Lt1p_!D9E?nGuY4zEI zN{=`a(2wZyC}?=s(Ibk4BX=p!8>4kYSs$HmkPF?xTZA&FM-+m2Vqy0o`mQ*{^#$&h zz=KCmb6#H$ax z(4Ge?9Wp@ZxbquP-G5cN=dCQL%er)_4F@Yw~zgs9(q*Q#h!%tC02bKcwOv1B<;ih%*^X~VGTk$e2^~5c-gaRL(IsGW_JH*8 zbn?o>=dArpK~_#4?gjW8H8FeXK7Yg-9oO$EKCTH~!~{NC-_ZCREA8S!tf{G+)>U7B zg4rMOd3d-o*mMr z)%U{{W$X>sHwEs_uXcx%glqJ4t8*UQE4<>^`{amYSKjq-{M5Gv z_Iu|qI5W=p^}s1*=H(V>{%n#{7743qImvyM@CZaG)V5!G$HwW`01c)K2B zCYIee?7rCj*+BE7>f5@XKxU1uRbmFxK{Oe{#IjP~-n&UBVpNy>PRtk*81b$}thBzAd3H;zb!~ojb5rKc z`_!KS#|r#n_W3O~yMlnuE++hMcI9h}dM4T6i&`w!e;z(OA0F%wt3i?m>Esjl29O3&9#MT993>F zPuLZgniK@b-HB*GPD`gHQe^y=+W1|El(`^RDTMFdqIuZpK7YP?*CyB;ecKU4ITf!| zOb$Z>ClW}LR~_&_{9k}X~+&b#nEmI@aR=}9V0IHM)Dl+j^rR}3BLBU3tJ zmzmD)E39CY@kq;&mQp+Q(1>n0{q6L_jkuBQA_QH23(Ft`(7~le`0Q9&cEoQ@57?o} zX(5wO#~1k|WccwMgGvOLBn^s1i03#QJ0k~kiaH2Dk>}ecsrr!zRT%Bd6cuSGmfxtK z!}s;9)rygg%*l5AF&!D7Iw5n<17CF;R| zSf>Bg%OD;a>yIqSQpkp5_PW!pD7UOLx_LaBC77jV>-}BsNSqK)mAT=xDl) z_)-3R0f1*gLb*p{){(N!6kv{fgYl9zPo2PG1~GuCh(T89Q^G{U5n$zV(g=?Hr`S=1 z1?eaasls6{k7RWFbqbM^8L*IizT{d8&fISni~~lF)KZ!Q*fukAk5;WB zv@Q;DauyUVPP-kvN=o2}W|N}`^dz9Z#-6taB2y;FC+7j|$+oP<2x`@pYk@qwXah8` zx_8NeL#}Y(Vzk}OAd9g46L2sgep~@~jEJYlvyR>f+0Dw{-{B*{fCNblJXB1T9nVRm z(@Kc~Hby7YeCRez6bCAv14BZNr6@(g*+PJd>?Z5fd8F7?xfl}pFxBYG9)6$- zrGQ4zo3d~MP=uR8Sh1K?932iCm^3;ug0WH-29fplS$wj5!U5{i2iOcHoy*9Z*UJ}G zu{9a7|5M7rATR+xf^o5|I(7w?GT|^sFWtrvSSYflqJ#xT{GXYylQY-^ql&#n#bUx2 z%_W|w)+NZYyeg`oxJ?*r-ys1_TqthIDiloSBZY5*33tyU{}BlQ9i{}`;Ds~Ud|;sW z70*xD;I9l{snQenb4%wZkntOc#2Y}J$#`6tMCn#Rp9HK+tV5-igAU;w$lNOUy#&$G zq2DBU4Vd=Q4;F_Vnie-JWnd{x2>Lb&)pJ(_EAyywLqzl%js>~`tdGa?r+3Mi1RtmC z6w{z|e!BRyLNr^T5D|`|o`pspu@n|UqE;~}i5a~{=5;u9l#XJPY{fjNWtS{RYSbwO z(*^xnAQ@m*-~BO?#qoT;Zju8CtkhdAJL2dDYa_bN2A-vHh!d$WAMj zLxai#H|W5|wdDv)iF%&`uLBo4j><5>RwTVZ2Vvv63<4yQ?0k?vGhe#v14co?p`JXJFM29^rEX~PG6*MNHOopaHXa~J#&XqemkCoGjMzS<044?Ur}c+wV|ir#mT{Op&^M zsb*tHr?HdU>3iGiAD*E$fk>ct>g{nnZ}PQ@pC}ifRBZZ0OfV@WTW-|Wqs{`5trAh9(5K>sJ-Y$*Q)c;Q}BG-EjX zebV)xXs5G}2M#P}p{HGp%S1k`<7e$?T4h54h7$SfzmZ; z)q!M_)FuN-4vDCneiJaWO)#0|$4Ezs^TD3D=vK}>Abc^O)5=UgRrp$Riz;V%8Z-7F zu6VK*ubfZ@ii*apK=bvTe>wU&Be&E}0B-~)O87nw_#>N#i%6-`0k2aE0=bryf9B0g zyq7?Mnin14nntJ3yzKm-s?QaVUz!yTIcd=*By7VuzFcrf=BNqh2yW43+}!wFUa$G* zON(M3l)rFas9G;ISnp@=(TCWh4gZ1M_pfP>6 zx704`Ufg;1k%k@J^!FY1m;9Y&;${}@0|aE4`Ea%mv$0@C>Z2b=s<8;(eJ$bd9fHMs zLZKU`5L2!+vkGz&^YZWK;2Hp|_3$VeSk9U2)`!w8pQu*~TU0eR`LwOy-<42qkQoy`Hl9|LaRBcs(*AJjqRZJ{ zhd>mm#S`-+U(^g*&b+6wmo(`tW0i;?pP7BB`}8sf5ncXC zlsD%e<>yQA>(Ubnsx0*DEw++AwSR7iwK#3KstZ1~n^PNleoB9%lxw~>aJaHAAze~= z9Rz5Ats74TIgE3hfGm8v=Gv=iHP@20u~gL5%qeH~4VEi8*)is0m$ZrB|B7yp_deJy zJAcAeFkWIxguv^1yLTXiPpdom#gW1+86hF+Oi(mM;71I}@w4x&(`T;#=Wlawtnebw zEuB$uEz#M+6S9>BIvF+WWC6WH)p)y!DnBhepDCh znv`9a9pjsTH#RH!M5N7MPezj_46Y@h{prH{M^4-jV9-$hxpH$idPzw#Nxdg{}Ly$n$DixP|UVcP)!3s1tK=c5Ccxk;R<#WTm9{|`hu>X zHwnk51&{Oass?#yHrQS0h(De+=2?2CreKTjtFsrRiE~8m$*S=_MXYRubmmvkqbCvR zA%Do7DcouyzKm;+jRNgt!a5Q^Wzb`^fSxw{kmEc*EYE+|SmQ*(mI04$+cFw;$f>(? zSL|qq;8%)2EmFL^<7&~S`fnKtCHbXkDg9cnIj+0(<13M8m)lEZJUZWGh0Z}Rx zu7aX&a3nlblgi;)lacSHrJa_ttj#wFmk~E){xMLp#ZP3V)xK7@EF#Tdk=*y};?6ENC+KMi-Hz4)oA<_SZkA;DvnvKKn$M#X0 z>Z>}OusrwQgvl@4rrlioTT(Z#-#o&Kb8`kIX1X}fE<`KDO<(1o3fFy?xm-N)Hbir1 z0d!nQ7*Csv8%(%q#@p%@Bjgz#bI;v&us?tL%E-m&RSjrBow3~+q;@?G3{G8`6hHp_ zAfqX#I*mXrMDYJ0$y&Z>B7w;*mpb-tlJT?cMc-(P*~V-L(&_cyz*FEi05t^ z!!KZFX;)k(jI@3lJbG<1K-3&EpSO6`W`_CRJuCP(I-SM;o;DO)3g!r^L3-V{;Tztz zDE#J8v+ah^a3u7hi$S`8pfIgQtMmDMqDg>3_Ny>>R>9qbbqB~==c&JBn(Y+Dnf|1x zn~dfURsT?9witi7QgbJANd8}-jh+vgULY0W-!&|HcCBm3-^{Y*{9>inmQtNoBJ9V# zU`*Liw~E$HHpgX}`SlA7I_XwkKUb0zuMt_*RHOY&bNamufkSj{YFeF*{h|2X$1DG1 z*6W7s8@MIr($bMi11~XF#7M!5k8XTd@*8Eqq-P@9em{ncN=FaBTgY&s9=rS=5m+4f zu=5UHEHw1Q@EGx=q23+k#Da4R$`#mme>+Jz%G<}@nt%qco%d5+s zvSe-iD|acll5@&`gAQq)y*s<8&9pHJ6cnzWm5Mt`r|nfRbh)ULFh&~);iLKx6G{hD%ZEP{>piRF@tx!zItH` zTJ7S;?s&)MCZS{kmWw_9l@zi!bk2YJbE?BVjw3Je_a z@rxaTIM>*}(4nAJ-Z1&Jaas}l?#_Vm2#MSGGYQ!h zW2(h|uJ!-+N5r2{C13&393E#z8#23*U0!1aiBKU{6$sHEdIc|Fi9=tkk54es3?Jb) zWIVMyelPQF!D1;358TJczXUS8BN2W(QTL8wgy>Mi%~DN)(=oLzy#8(74wu0oG*~ig zZ5uNB^8Q#%igMZA6%;4P^}~0B)U38)o-3!092fXjjwPG{wvj0*D!ELKWsrR$LVzXo zf$P&Qp1hpIn=c=cAoy%yE-)v)IUOj6@xNbcZsS4`?6PERXa%U6V4%1D$CSQ!5tp`x zGG?g8JVwk&9GZynmzqRnvx)KHTZfB02paifk3Z954^M_MW=eZ;PWx6e?vauHLfw<* z<{PRWOJ|?An4}T!N4sanP&OsJLL>g(qtR%cZR9l{&UuD$;!Hc%`U=4xS1+aVmHhX`WA+Dq~?M(QCyXJ%d4<_Vf<#>}oqWpwC z${C2TgKu?f0@aBEa+`4AJ>~=jR^qrgS3oyJ^0%e?BVNqW4wdp#RejOb1 z>|RC=209sxUPqhpGkHb=rVTAfiraMLKfsAJs>82T1xT!>qu|le#WY^!5S8HQ97T|W zQWpf_h%Zqh` z^fw!yUJQ){yxqJC6LV%;+NHsuSoSO{9m;1kpp!sec!_>2C@rrej1e!=34c$Ziwnl* zgRO$0ECR-g&wS(JZid2M3G%v*P(E0R!hc52&tHP*#%4P3!RdfDTn@*_)${{r1F2@f zvM@)^2~A}4@tXuhRRi@rAO?!_Bcws&hqAID5Mnxt(l(*Q18rlu;;>jG{W&XEkM#eZ zqyH@smFUsD7IS3V^fsLMC5+qy79t($;DQbxv`VB`I%D-H z$$-2D%BrBkRp}(?j^0(^U&U|Are!X5nNvknA6BhO@Bt6cQ7)Rpn=xKYJ5=1piw!nn z%uU8x@foT>qQSusbhvDv%WZpgkU2xva>7)VUWf@1xlriZdELwGp_=g zj|jYWkE@8zC@dal1O3w_@nA9FSw_$ZM&ns6%sCG4rXHT9!65Gl%(CR2ceEcC1bo0? zZ>48dN}@UbSdv>i%gTXzX1QOFZSDws6A59?vXmZD3qY~xW6_%`vGh@9G^CPbd9arr zt<=Si7z`A!nM7pewsRtBb^Z)t<-u6`KL&{xk2tDY$Bbqv0f;&AHm?rr$`_#?`T+F8 z2-l@iz@!R&rQSU!QT+3NpyO4)J|>4on>>1X=AUEI1s@GkzoOZu@-oCwe0KlrleYto z$#3rbG|de~KaFXloNgekMp=k-Rl83&+Y_9MzxsYXcTWL{o}}+bc3i#`(fo<|)u*Yd z`TqKDX8eUzd0N{OMU60By{Y$6D>0g~Rb!TaBe6nV4&HoIp(Qsy`_{kkq z|1{6GUkzukRGFkKSU#P%CGeNm8eg8TYc^&%{E}+U)}uN%=?N#?xp#9NxXDyIW)@j{ z#oe?@U8+N%lK)Iu7glmMAqPOep=q$7b1KKp4=r!1T}{~3iKj@&`Gtci?DR-JE5od& z)B}Q_cA5|G@z3zu>LHfKSoOo#wK4MIx6?Us^=ehmibV$(ShUz_MzCMu1uINCFYf5g z!J}tMM{k}U&UUW=OxePVKCBzA5z~sfst<$Ewz@YxtIouUAWSH$-sjEJKU5d5960UN zA4v$0HRQ>7v^6h$|8B4A6KK)>;SQD_GqrAC!Id`|22c z7{Bk>lA2E#{zE>{_k7+~v1MHUA4tE3r2Ubdx;K&0ssA5n6`pa)`|Y>XedgiR;l~F7 z`;*m=e?B#y6IQu6`c*b}0}5Svd2m`|0ed{R#36sGj2P&%)x^F;QY(9f0XMWCVs?cu?J-@g{zAX17T1wg8p#oum`dF&Ic;)?Aw%Ee+Fi`s=S5!{__XgSb4j5z^*S6cx|So3kZmYig{n=CSm5yH;oXej;q|z z?D~4a^h`AvWAgl(gu?Q^qusk5?Ku_C4u#&R%hQ#XBj+t5lE(_myiMO%l}`eiWOMaR zu8&j6msxA)hd1p`_ms*bJgSpqrYGBN&)ID2y#v+*yvJ-CN=L5?*oQE(C0g(t+qV~UXYnm6oe#n4r@my%p7j}Rfwm~?*8q$j8wd0=akyK%$>8I~+pmcJY zja^MS5(`n*h=Q|7yScoc=#Rxp>t`Ln!KclJ#Dn4j&|_B;tD{y=n&UGuU9G&A8{szhmojss|Gb zE|ns2PLDn(Oezv_7KHpd9o&$!fY*t1tvZ4Gl1B9U7c~@k)YJ90@@ULky>Nl4(1t-9 zJni?T}KbcTkbPQG|Upb8mqFMGw4-OawLHQtW;fKgPC z+z@q%FKa%(riqeiQPcD=683Y5I}#Xx&$G8TWfWPA78y^(pz{H1lKEemIFe=9#t822 zwNMJW*xi*3?#mF5uXQ^{7*y2_x&xv`7EXWkE*w&2NiBS3)b%d-cXl;VjG4YMZ&wRr6|6g(@xI!y=6`#qo@n{as~x|Rwj3?jBjda; z#D^}NX8FiM*;*l$y?_4qwasyq-xET-@HUzGxzZn5mttl-vNuQKV|6^5hfogbPNyH= zuT-kT8#?-d?Lk+{ZlvU9YMw~W((-@v>`Fw%s`|b47V3|{KDI!5xzhU=hT`WtJL^3C z1Rn^YuL^&9>wfe6WlmUlgv!0QgNsfG=Tz5&r7TJ3mrr$ywd5WGHg<4audi8S55e~i3d7spK6+_Vz1n}_%LkbSzR#XPM|>T>7e8t# zYHk|F)pxHqMxu+2y<0N_1fD)_(+p60+ZGlR_^N1{=Ri3Opv^k0tb$~reDMmvF((n< z+>1BPI$?Puc+D@M?Y5pj@2tQ@n-fUMXoIHqg<8HOIg(iu(fl#5*7?69u1>5mtL+JbT(IWo{iA(<3f$iYJWTF}s8XH_muHaw>t%0y-h;E9l5@?S+REw%MTc*iXQCgAj%D~Zwp?0t3zH&DTAg|ac>usG ztUDkZCDHs3%-zDaUpwx&ep_`(g)8#fIk)OOz=!R|&7^n)GqDlGh0oPq$=1+F9M@9I zJL)pH6*S>+_sdn4k=s>IkcgT` ztj~cDeQRS)FTz zXTCkS;sqYoX|Oq5;*;>{x>!1I{CUnd|)iZm7V>cJ=js~v8% zC)hf0(D-d&bafN-^W{l-JwGc@(UIs|>?&lys`_m+KL1%}?D9)`lfF0$W;j(!4YNwQ zB9=4e51#;$anTvyxQMPZOH7T<@sTNn#0V6RIPK*Fg41kx0!wodt-NTozZg;GR9#$J zriEIGFl6Pu^5l#0>fJtH&GC*LSVLtUSvVH_&b98Q*ST#bkd(FV`Nt% zeX6uPE+iXffvpout7AP={L2g#KR05o5+7A&I)wZVkqA4m5`zFf*W;a6kkF-Q_v zRgd>UzwaJK^Xmt9n6X%%Pk&Tv@d??>uJe(E>N`?@-G2NZC^0uxOl}&0re0>^)m|(y zeUL3Yrd)w~A9pFdT#zgg9QK9i>Grik`OobJg@Dr}kNHx1Av%q~pja5n#Njg|+042T zdf|jfvE_WNYxKw}1R7KnP$du6zPfw2B@-|p5kELO9x?C9>s}l8Je}N6b#2xDzHjYX zSmEK70~x;Gx~I3szwsl4P(O&;)XT_yi*LEIbv)vF{50R)f4b0-0^h!<*Wt@}<-kF? zrqWv!kdROY>LT4P{H&wH@eJRGAM_tI&*CY~oj&-f=dBCj3MlW-itVrWhs*R`*Q{z%NW z5@CPccX>2!nKs1-O(Vsoc`ZgAQ8y{^0HpBu_DKB!f#llA6; z?9Se(y?>SATs+po_@UBdt(mlW#B+rZS?%RBMCE;LjanWETm&P;WMTtHA1#egT!JoF z`gUW%c}~=-_;h5_sjkB{%lQY2q9w^&x^thb&-x>5mKjM%Xa*PL_0A&2$_>$DsEEOD zf^&@Btbq7dsMl&1S=A(AOfI+&vr*vf{Ah(>ihy*@_ucI<%tG7M=+eZQGp)5iHAOvG znf?f}3H9nr%FcTBmj)e59&!faXn6?K(*UO@^fQrCmSuDq8?nS2%vd!hY3EOa{T9`K zC}LNS9-MQTjYOUX&y#%r#=vqLfg`Kt&27U=0}r7|5Rt4I-KXBX{z;8 zn_Pl;t@B=Rn*k~DyCN~a{IeiUJ|DYMp7CHxTD99GIt%LO^^fQ!fBsW2bfqpMj9OT6jmIM-RLqoz zB|hg)`?Vj_x17L>M-0W>Y!4xD(91tmAka-r@ND|C;u}E;q7YhOKL<3trQOS*t9-GA zk^zW`r5Q!w2=zTFEw(~^XC52(`%cw{BW~lEWMK?cRkbdf2?CIde$A+RI)ITu($AT( z!Q0#`hf#dwgriQn*m5OIHb~);8^=}mt__Wm4KiAkWcg5Mj#CM$s#GkjKY!Ahe>pd+ zxNp$`(S=`hsINA4=0nOyiL(aPVC_Q8d|{n`L|zf2!Ot%;Ku(lt1}ET$$|`t^eRc0f zdz507X_vOmkTY`KjT{RPSv^#l8mk6`U0K|VqS-$j9Gwut(Ktdnk}m9Lg@vLr)wO=X z-1eIdG6Jw?N`GNgAhu*%t{+P-2twALssTL#MXR&wD5ttITd{aiVn(?5KNf7D^B?`- zW@fx7+0Qn=?BNK_y^g1cmZ`BE^U8OOenO@M2~mT}+y&vlJ4je(Vo9kvNOp%0wTD3D zmpV9)`nhkhJR^pv&`4N6{R*%~#{ntx#cdWBI5;{QASxZxTf3J@5|S;XtaW6>|++j>GVKzjy^+M|%OeTu2fzF0Oy_{xU%(YO_gY`FUw^<|dV z`oSl=Pq7q6hOLj}&2h-L;ElF(aV?6nXT5WkMv!as8#G#{uA zzB~x>SO51i_CVo;lCjk=R0R}Al_~!uz-%AI1A}BfIj~A`?6PGJE=xjKMf92>4rp$I zp!7u6EWJ~j0u|3^$s!53O$tbu`(;zlZy34(Vltxjg111K9Egx%7spwWKYxUx`4ThX zFvU-XIE+>Fr3AvTThRB6#xK>6uQr>&$eAka)f#^6@5~90CB2GA1g5A|P%A zbC;5f;EOAM$^pY6;aupDxNsGWPY1{1<;4z^AnqyLJuj2bhY+Xo1BS6&akb!0?K-!7 z`RQQ}q~N_DR0o`&kBY)*q5!6l39pm78zAD0TLmR#l+s0<^{@6}>Hj|xNRQR0!v=Ja zATDpl<}?Hy&G#nNjsF@Ze4IAG@)JRhed<$%f$f7|^X($?> zEHlypV*Kg}$zPRf#sOV#qrlC>7m4`!9k9uUf*V}~aczy2fQvC@U0wEarZQ81~8aB01-#?2eSz*%x(rB;OrL5H0B@(88neD@R&cy$lQ?j zQkbS8pRZ?~PQNdfxN0(W&q9=i0gq(YmUq(@%&+MPYz-Cb1yroM-iwEj#7eAexe7a- zN^?cV4EX-2=pA^@JrkWFSLQl$jfs&*-_)lG#jj%ry|pT6(vL6K*FZgc(J9mY%8JQkrjbWsEA zkaG$rIl7l8Es)0B@$KYjx6b|7*)g8jhUlRz%#U^HRheUsCaP8yR+9SI^5F+HXCkaQ822}*k~qu(2!I|4SUDgqnH|>N(DT+6r=hmfG zLAlcbK1o;Gecq%%ekbJC$(SmH=Bn@>5$IaEz#4rn(EFyl#<%qIbvM(!OK~zd>%FQ% z^DBg*(i6Zm?Le+BDb-mbwYG(EzUiR6tv_|cJ+-dS^fwh?N&f@=y<5Qv4gU}1Dy(x* z(S8Z|!HxJ&-yf9ySxlaIbx>I~`Lq+UYD##}WAnC-$Tq89J$F1{?=)U@Xx4QdCQomgZE}@B9uZnPh3ih--Hy&duBc! z&hy}FkicNAo1M)PmL3tA*JGf53cs8CWKo77 z0p!mhiM{G_FIxg|ypwPYU~TP2L%~W}cI)qZqIAHqFFZVKPAP9I+qV3Gql)`fl^5;r zW_hS#^dEG*+t9ht)kGBoo`~GI5UbA*%4(^go~P?WfAai0@WZUGSXz#S&xLL0W?5Ux z=>aNn^^g)~IF=qdt1%d8CvqlY)%{W^2zGdXr0|kLu6FKP`&GM{__;Lg|D)(!+?o9U zKfVLo9CD_~FlRY6+Xs`=$eEmSR+@7;vz)1oFdC6)G9t?POircIa%$+{Y)T_aQj%2E z_qX3auxr=7UHARIU$5u$@sM-rKEd!fMsYY7ws2?#u;a}9K5*;#rQ)1gzg^seJvR+v zC6?RNH`J(V_wMIR6|bjEn}}8{P3l2M%mpThT%G(yC%^diqBQqAAS1>#=R0qCka$0( zh`&_FGlIobr>z(t3}&*v3N875;C@Oc=QsCCLXq@EKGI@()uEity48~PCWB`tQ|zmL zVLb4AXFWCAaD34Pwbm=(6Hn6%w$}QgzjIkC!YPVX_wp2S-`=cC_TQV z?c}t{P`#h~+vq)^dE1R2<%JR81FU3wG;4)3V) zN0~4^TpkgV{$vu|F0}N;m+Po==a1RQKpCg-&Cv#=srBZ6&$9B}=5Gk_!SDA7oZ=vT zuY^W6I*oUGq7+1skEpIyb|Hq(lS>*7)I(68Z)7>o!*A7(U&!O6OK9BEHkp6v#67L! zAr*>u+j^i-+Qey0y4bHR<7%e|t`Spmvk?}S3b$1F`ncLQpw_YD_x{>QGk@!|39~6t zQ*Zt{JeYxwEoL0>T3o#Pekgw?Kp>R?OdB0FV9GTyrKTUYr_wpYb zYG(V#32UH5yT@2wzA$4v(6mKyVya&3Xb2s*LY$X^@%X2B< zf6~RL%1aAib7`H7C@a9@#7);>vs?hkY6f$T-=|p8Q^Z>@6bR0lp^FEqz)5`k`8A6( zhde{SiMch4J^IBn-m&V=>b7c>TC~9PsG;+suL|tW`Dk%w?c?Q-wz}#c{P+w_l4jeo zp7>mRDiT)feP?CyJD%{y@u`N*c)9nj!IBv`8Yi?aV17R{MCyZR%CRoB-=4xWE$2st z>R}!}d4nl;F5-UTNMjq%(wQ-`bFTJl=sPRtw8WEX6Yo3wqUGEl?!_ml%0j}_;@ePL zYC`KIibYC9^Kktb@nA-ysU5B^l4ahMj!t#RGo3VzwoF081~?}l((Ne8kLGSaTHZd4 zTl7qZ)-sB9kQ@!%F&OZ#JN`w{fzqesYm7a?EtlFc$!VdBQF3=WK}~(FF&}D1cgJ%q z@@-aTmY=3T>jav{o(0ZJX-2WOwBg8Bmn?>=jU)=0*A<-zo4TAT2N%W7ugB{mCWcSYzj;MQ`?ONxm#o7*lIrIztenpZR z_|-MV#DXiIKE2KAWMf?N2Rwj`jSDvSCz(w^;}G8mXFg@l>J4lOGrTe){APOYYv9ii za!&JHG5CGyQ)Z`Pq3X;_-(j9Dugm9pi|E>3!#9`rHXH?9i#b})mMYw^G8?rXmwy5*YC>W`p}{BS#UAfpYMbAC}}V6N8uFv7@dLnD1YXoujqm$~l@;kaf2n2S(dLYFsgeBl zu{~IdhT<26`lklBz~{0id8vt^3srW>JP={^P==-W zRSkN{&bh#sxA}i7?ULBGFJAP}h3*Tb19!EfSX}&Uf7|)q=XSF`#q0a9=B1IirTw~5 z&s$A_I~>nfnfEcR%u&rT;RwjA+ehn$EwS8ZC)rj>ih>Z2BB#btrmhP&zG_@Z{5G)r zT4AXgGL|52Im>d?PBYLjo|AWeldM{m+D@B!xUujybpr4)zHdy_J$92`aG`7FI zjFU(kw^0&f3ck6*?a+Nv0Bz6D!Pn}hkjEInUbgJUvjmZx+iJ1;q7i!)L6Z^xrp(Kn z#zS@j&4eKSP@GjD){tp4C1!qLfVZxBQ}WkkvwpVaO~c~3&1@`L*Tpo_Tj@^sBS=i9 z@AW!OcNS&c$~Z4BW0B;QaQJwzYi0zGAig}6d#Vgg5sqolkF0eR&~>f z*DGs;Ka8wq^Ob(XE>em7nc*^6y%Rrtgq!g*4PL(|OyflU{ZVyyxUW%8ENw|y*xPZk z%9m<~*dh&5oZ?Yv< zfx8*T2mAT!W^9lQ-z;CK{QdM9g0~eT#qUIeCr2N7FH1gBN{h97la$lcfK;z9wg7#`PS} zUtvR4Z63tzs;;Y!uQMd02-nD>?H!8@-aPy!Ny8(*PaClf5MYAp$Tc)kl!lcsY;40g zma{*XJaf*!-C(e4wtWU0PX{w@EtjDn_Sd57^f#HuywnnaIqGoMznupc(jUDOmdvDx za{;2CSh_i(SB^~Mmx$6`VpUy-9N=y;`BRsG|HZpAf*8+_E#f8{BG(HXmBI42G8jHy z30%Hc{T>ZBh$WzcY`;}&y~Up$pu_Vi6qNb-aH!E(`pz#0q*JdYcAeg**;f_kJq1-^ zKFdPjqN}K2#)*ecW*&4Izj<`-{N;ncHlMD1O#zI8H@MQH{M6`LT%QIUic#L*V-^e5 zn$jNsrCUzDtJm%NCg$%w+@QOu9Qyo{9`;3|ka9J+VlCQe^eOolE0)uf3BXQ+K-$3v z!TbQrwIV5}RTK&J^i!Y+~+5T*8UjE8qfS}pb?&Qvr2 zCC=(hIS%r2c1!Sl1>g)Dj{1oMf31e|75cXk2dFqs2Txln=0Ll^KkYI7G3^)eB!Q$l z6uPF5f(xKmEVTH!3@B^MfQuy6e)Jq>!zL$qD)?vN_y%~Gz91@d^*SJhATWFs2he); z6CY6OZf*hJv91pwfuVHzPSD{Fwk~c1AfAHe*5`nbz>1@~0wpK)i8jM*ZkMas%qzU3 ztQe7Dy9nP(>1u{cG+wS>m<~g;=#D57-$E0rnu?nM&T!}Ts_n9lbqN@dk^kuf@TM6Q zwqFrgFlMu!N*JPklW*v5{)Rk#zw!m5lsq<-m`Qhn1}ndI-~vEV8TYoFn&UW9N5A$z z2(xrA%1vRtSbGLwlLB*4vIHA4#W;`c8+nyUWG@P_^d=t**0fnsiCrOcTiP>GE6ha6 zOn{0eus9Z-NVb+HVA=^JIu%g8198(}4YOh-eJZR(wYlgQ5yNFx1cdn>aGdK1_M+#= zV!7~^e?h7M(qPGF=`k!vlOWOfh`2sfdHrs?u&id!k+8HZJT|a|1EI3T!jF@nHOe&^u$KAMIb|-D6PZL@iPJ+BSVh|sp{VWY zG@OH+hAn*ojsiID1Je>@*t&=(xke>13TKD31^2ae6A0ygkyKNWdEbmDdGpJdwayj%Ws zh2BM>5D-6IpGdv-2j^!Qo|w^Vj{G6NAt4lv3^(KFDnf1hiv^gW`nGa zaMPZs^EtWS^eNhVKnxk94UjFZ#4luY!ZHl$y@qthfvtcUJeJ6lF4PH!VmVjmENlbt z(O<}@O?W3?pAF(XE=9kr4nt0aNf`oxF{rh^J1r@sJ|bVL87E-B$MYT!3KkLw*yiXA zfJ`KTiknWgQUfsM0szEHXc8R7P&4Ukd|UBfBpS+!HR+A0_wd=O;aUBPYyUdiybcSt0>6@=3^A@ zpJ@}{itk>AjhbNWAGUx&G@W-V-@}GiYeE)G}PvZ<=}kkYnS9A_)51e$EDt zPU6#j_9^NfjV3#p=uj^)EP}o>C+Y`h7P9Ifrzt&I7i!5Cp+hc?`nhS@k~=~%U!<+K z&^02dV<)}DmZvSvJ`?Iju=$=GDI&UxjLyw%OAw&UX|aTL@|}p#M`0SrNSp#oLL1kM zY=g`&{o#UG0rTX02fq+W*PSIBXHbS@O{F2O1aYmY$`(v%q!{f$zV^(vOCFTzNy86k?3C7DYF^Y%1=OZ=-MF*2mK=7IX!L z8ojpo_to)laq1a7!<;BN3Ou7H4g1YJ%XE!#gx%f;%1*2tq&g6TcZode^tPXTt zg_&Oz>v_J22^zN2{wx`Zzp|r?)tt$!jjJJ1>>5?463J`Jz5E#@`NZ;N)_uX@v4~jcnGSibG3NVS5s-PIF}x%Dg}EKS0Bqh|Vmp z)6r24mM7JX18b=$$Lbs*pxkA-^Ye4XA|$VduM1xwNWA3%&Pl4))12X@(_N^4)= z;#Sk6ko)gGiwMDDyu3XdvJ3Y>Z87FIwelM-Ne#ca*c+$LTOY5Fb-SVg1n>4Gi1cd4uvsu2TX_cUwk(Li=&-(H|0Jtvf?0U5TULt|ei-1+!y~CApGPu0!MX&DrT~r(Tn?CW;gC)QI z&SGuPfy(%u3mO`_ZR{v#X=`a7ut!k5^2NU$C(6>?fe=8BSzmkZ&2S`}ZWzoB3U6J1 ze(n~S-`|bo0r(LdY_Ln>yv8(kuz+LN<#!GQkgARGANC|WstXxB-c{BMXaxfW`4;`X zlXl6e#bapqmIDKblK5$kVS|3_KTpIO%_73BiWN`(B`}EuBj=7 zwMM^9p+0&u>Qe7j@|fPM5>qghg@znq;wsb+T7?f*KkR1m3M3S3@)*A8e~H zG@>JQ0sbo?54;x8LH~V_a*({aBP-M#R2IHetqcrkSBP?{8_d6OM{&f?jmN)Q+4MzX z5TJb|)#_zCKjBr;?D;s4H8`J!+A+st>2gqKpBrFs@hx7-j^L_y^WyCjztPu$0Re@) zp|iyT4zBz1p~yHs19$9)z&A79H$*dqWTsiL4M z9l$J_4t6LICR_7LwqnVKuz_1^l>GslH?KeV$2QcD8ZZxZu*QVN>8?W@YTUw4TC)tt zZ>K>1Re@)Dr?4_gwh} z=~Q6zlP5OD&!zq-3tzCvJuXd}Ig{Lhk%1C>hS;^;}8R_pHA5_*`ve?Jt zYY&|oH7xIRov@iU5$<|-fb%OK4*SfLHy@fk;PVKp{$)X@y?Roq7w z4}fBi(-Kc&nqd+9C)zW5W5|f@Lj*YEAb-LEaJ!QyN9NubW6-8buuWpY@WpSm{;~`TqA`it= z9P=OU`y?F_r{ju=eUg938TgfDcv#bu1;ei3=2@~I1veca4*32`^TDH5{Qz`%%`Jj# zQm~YzJyPv%qtY~5jWC|S%{=tn#fXFX#xpgq7c10tgN%wAYRteU1aEPNeUg+KfL|sc zvZ3qXWWc^yEbC{0nzBtN1JeC`!3lN$oNeP)N9(bCjQ&>VK}WUvi5KuNU~|$pWU!Ag z)#UrFz{RhTj*L&8PW5G{;87r}nSG}POJFg0MgqXYc)0HN^LwCKs|H6GN1r-fAg&NI z9rFx;;&PRH%Gn5Fw3kPVcsZndKn!3!8b_B2P)l)SUYIPe@rRx{y@)qf(V5?vtkRkqB~wIKp8f1{0an@h<)>-HbC{JT{ns6hhCZ6d`3v6^#e&xZI)#X} znyjFR#=b0jcl@X_sC-Tr3eu|~kLk8mxA$8s7X#~K!V{{=}@1q3;wYjnfHV6H3$<60v!#hDct zJenmHqCd3L^J8O2No;=$q;hQPb1u(i0@%aZfJS?MW=GkrO#F+lzejhXFywt)(3l%sr;)ZYb zRuQii@eZ*(x@bj<^=MT-7<0(l*H{52YEM8`lKR6c!#QF^4?rq&@yVbgE2WG_vS! zTkw3*RS~>c!eYUs0wSh^{c9*P3PzOx(SQEg@C^>>lr16Ed%ca13S5~s1B1F-5!BqW zvL@=Y$YjcV@-;dEnR5PtAK>4nx}j#+Q!WCmk@6Je)a^bedkOnHf9>)zt1-+u?8jEC zY%K6`A?V+1Q$U|`sto^y=N!d*J`%;3(E?Z?hmtV?meuI|kpwVi+J@RnEK@&1G#@}fJyAP^#O7d4zX zPBc@aw3C{akE}%XS4EGPe60iP>z84(ISKgV!D~g#hHqE7oDP#Eb8R%K0-KruUkps@ z=8QlhoyY^=7}2P}jfjCV5b&*Iw|Nk*wx~#Z*>m{&J9OaQJCyWqj@@2eo0Bu+9D14I zbd)|Si3v4KfS7$xxzSfC#A7%_MPp!`k{M3`1!w6f^c@Kh@MFsu zl8-pGja{tS_FnlT_xKUgLV0{$8IQT=A22ZI&ptBpZ zV_ThQ^bQ>~BiLI;-U1Kc_gJ`CY_5&b@Zj5l>nJDvOFSHsIWG9aO;Jw6Pk|o@;JQ~& z{UxHh0cJj<@-VH`N!z9y8;2{!cpKU!QLCG&oooR}$C z_xXz?f|@N^EFquYM{F+9zm(m3{?6x|;zXh;fS>MQKNQ2_;^^rp0(cA|KbVMPKx7<2 zk(B^#J?a~TKS27K9$C;+NC3YRZpH;Ndh%RFS^FRRH>n*)-w8J*^E0j4fEZ}>KCq1u zf-rpt67^FMHXR~SR?e1>L>kiROnXJr%XHv0=Myl&K&&XRv=d0Qp%Ng$0D2!6oK>ML zp(UT3EAUYqE9@9+`7(*A_M3D*C;(7NP}JmF!yIQB5SeH{&*ShZe?C{eXpP1Zd;UrR zb{PbVGRnnq#yBv#g#d;p+W0!i5u0n7c%7g2E0=j(1tkEu4$n>CAGMe5g(Ij8A!MLF zsmC7zsPGHOm%o8}LVysM;ISj%nc44;f0T58h+<$ZRR7d z$OsA{LQ1D16smcj>T~Yn(Z_QdfH}$*U+C<>p3qIhvC}gxF?_v&3kI}`K`Ye!CBxq& zvjKZ)3l3zJp_wsGIz#>2qL_xe*8BDm)QDau!|x8gV*Xg~I~&ro0(-=&V{#|n+V8+I z6WX|k_jrf#Np!LXTfAFr57g^ojEn|w2j(>p(2Ip+!Iw<1B14y(jcSjD5gldZSbYqR zH;tqW7u@0gj^VJTyg35`#0C}*iA8E35^2x(6J(O9g%yG#RWobkHIkxW0e&ACX|F~d z8qYtDK6~j?D((~`onnLCl@z`yVspuGLZ=}Exd#e|b%M|oYWfGw>C#N<)zc(9fwya| zCrSD@c2axL!!M5;nIT$c$G6a5T$vjY4twb+F8P5WleUS{S?v+Y{%15Ij;RpfB1Qa0cP)3t2D$;3D+qA@R!sT5 zq6`L~-_)B@D^q(xDyO($2oz!o_vznC>EW2^rJ={>oe@G9U9)rLtg##4^{+b%yo<@6 zWd-`qDl98&uC0!p&LmyyQ@9Mlnb0;))pNq1jXDo{cZGV6tjn^ZPv-;;a><>pT1$)Az-Xzb@Si-h`Gz2SE?Z~3+TrVU-!8U)UA9i&Dn@bAj+9N{SRRJoBP6Qo6yaw3%W%{8nvJPOR-rh`jCI`JGeMOvh2;#-D`c7 zMytw?o;$9wRqS~-9NO`1H#($tIPDjlBH;9$GsLPC+L$MBRAj%vTA{Bd&1wz!pFf8O z^&C^A@N4<$ufMC$A`%C#rWC_PeobS`k9DIQE$t7jM}HT$J!q;sy$5qLRf#&M*URl0 z?%KHU@U*J;i{X-gW|fFZH`umbw14-DyuZ|(u%+1Qd!=W5zVyg&&8gG@zsY;%S8Q); zpM4KI#~_v5dYee;^2>?T7Tyj&RtxeALyKRwAWI;@eNyTR@fG|hJdg#~7!o4${?oh2 zH1#}YQ>yKJyN!&$4(NdZmriT_4#F1Z*0TD2u7EDQ0d<-<&MZ)Jcmt$~i23UrhPkbk z;)YzcLAHk_!@WYe?sfYT)AH6Ap1?+(niXX)uQEEGkj-dtQIB>Xl|pz4%LXB-)*Kko z%G@ysuU623}c z8&B5IHsqwZ)Y-jMxE zr|0hrQkiK{8`}C$boYl#-(31J6VfU|3gWFFK&#CK3QsA8IXb0K*=Ulp!Oce&IujS| zJri=KYiIQCheg^CvppLsj8%N^+4wje=>Ie3s$(}adL4*%IowUJ#>e6-|1f@vIb?gk zveZW*KfIoDgw`cuRhsr>Ubj+y(bk*>t8fB}(h2V2CqGe0yCN^1$V~?@LR%xydOeCa zFVh?(zcbSq^e2!06h|mXW;;5W4oI31E-wvus(%YP+n;-7N~mQGw%-5lo$QQ{?^kD^ z)|_A-LUOM5R1A0JfVx0-j@!)pM~y|}qFIO18vX|5?pqMEU!d3}JL9!6lyZ+}T3=~t zW(IOXi_wPQaqrfg2B1h?t9*I^0LI)>y&dlqd|!7nXjq^Y?G|((G+|2m_({x2jTyVJ z5wo?>SnLoIs``dlQ_6Swc||S$SAkiZMBC>VNjJ}wwYWU1mKIJslMiL2YKH5oGAloy z^oexS25}h(M(ecvDX`ws*-WFi=7^&ng#RgNzoDF51U)c%)y9lr3k~&n5cP$fdq6iC z{4cy#_rx%sJVM9(+$K(;mYthGgMn`0$Uh;a$$1Z(AFbt6?qB^-|0qAD(8s}4dg`uc zwFs+8?^DUpV2h&QXTJZ|Wk2Xk+V&!?-V|i7u)@M8X{SI=O-=M|!{4{>7hKsPd}VY) zs@*dFE<31b-CeJ0_gg9&Ayc9A>JteSPG#? zzv0w{folauQzf>~z+U5MyO7$30}XKE!Le!*t5Rw{gJzy$Q6lDxQLn|7tQk(o#pUK6 z|NH94$L)c~4k=x8#`QhXD*o=Xb7J}mY^ZU6ma23T6`2fJ-eEjyj14y(Lu=vxBjvHzgHQmGbRQYIl9pG51d3_;i3U40SDq7ii*I`Ix7MWSTs_7l5@H?r{ zH^}liG={#XR@agZ(QWA%<0Rt8*b{ZYls(n$H<8~yoD`%l)cuHP%gIGd}z z_2a31GUCxIKD=PFKJn&Zkjv-s+-_Odud4^V-ElXBI}EKa->xo+1Q^*iuZt8D9g9wP zEk&lZ(zZv|%H6k?@6bkrBC_$D>=Wes zPp@=JT#+e69MRWX1~NdOGchf-4}dFU>C54vkJ{GbLv#!tQ*v;6)yvnvkyDU!;Y^f-b|d#EQ6P{eA$%vX*lI0{Ps=J7bd9X zLfaF|XAll9wb55%5P&E(=sDJ4DD(b;`0Mo7T7_18b%9{8q1Bv3M82RxpTVNf8}*~d z!zyVO&7LtcB%lGX2vV(Nbc}G53(=1x(vBrYM6!Fmf_ci{D%zdII^VKSpF_EG!SvJ?G<~JUazBQRtjUYF zb^)p9_&gV$TViy4ovD%v5GDBSf8>Y<( zz0lwEl6E6qxk{(piCyuw?)BYWF+{N&Tv_Kw`#x@#8xsuE!79on~AmG?e076$HA zt#7xB5L$iOZ6&J>!|83s zdzz_AZXCzY6*om2GWvTWJ%tu`CCRpQ(;aC#9W~{zrVi;u7VlEW>pdpgHbRGw{j$dh ztR7pQ5oQH9@gC^ktpwe>hq|`nZwM2$(+!axaf~^zo$1yjno#d{i!HUl#nF}TLa&Q| z$vvq7b(wu#Qm{j}USM2&G-#g7ou)FrqZ6QyPFks3+}!bc>Sx1|8Bni&JwGA-W9sJ) z(2wwhC=0^)5tVV=4{P66QyuPq{`(Xilm*!FOuw;pO4bQ}`Dg3nJ(aLOc8>-cEn>9 z)CmSJf!3unGe5T=JKA?zzpJxCNvnT?6zclLI1tv(P`sjjyRfN3OeJ6?JQU+Xq(Z9bstZao#QFQjc)FefsECsDc6- zS5OKTE_vtB@fI)j4GvKJHhM2dfq)5#3<_^2f)P~SgwFUFxJOr{A=P5s^I7aWQB6m} z0TF-po(g9*zhkm{GPK!TULchUfc}m~ItKJhNZU6(%O@8fFNm)j9&cwI;jVenH71LY zZcPT%36lYYJ(i0KjtGs0*h82oQOKCw@gj--^NSg*s>~bHOqqJqFWbMf{ydR~axt#0 zz49YVq*&fX~cT0CQ6%uIa{W znptreS5WoIO&NvqI(>A+4t)#!HPVcs_F`OnHrlN9n)dm_p9dVMk3TUVBcyt6?|Z;X zfRK2iFzzQCpydcNVa`(Y45@5}IsHbjfLJU(q}_CsDtv=;xZ`t@k_=BBc`F|8YSIaq zgTO;d|~0u?|LQ1I~mO1OelvN}KX zXmqu_aToBU_vf6v7+&vj|C|`dh|#NsUvLKT!PwePz0&j;7I$#eM@w7DEOxYfQ4#gS z6ngZ?8vWjZD_EwTZe$a=M$U+Hd<^HGeX3aRCJYfg*RXOXw9w;{ld+e5=w>^9M4JtAf8;`UYj4u}(W>hC0trhb}yh4|cvuAi!hw zchtdTUMBNumBOX*9e(ynr7|j=~+kfQ^*c`+NHE5Qs-FgK7cZ7;W+p$&qR86(&C1q|cy{tEmsvs5~c z2?8h!U<3m|fL@}3_8mYV=g`L=4ACr_7d=~m6{1k#`~;xlUwd!<%{ph)4kyvVA&rnN z0j1_k5P$r=DhOWUQZ+`f2)6l$XbRprX*fydp%b5RAXAJ$9Op5sI?4vD!f+}?ZBEc) z2h|D1ZUDs_z`g6^v@=IJitEF5o<}@ly^3ek71~EZT5I`1mMay4Al(n({J`ZRh8z-P zV;Cn03XVjz1DKF$hH(-#Mvv+aF3rM7#f#mfR_6c}3n73q)SC1JX$C2XlI)akA4x3D z;u`iRfKM8c5qk&@-A%iQ3E;;+=)19@Yc0gHMq+`&uQ6rt+8o9^AovoT1~$kNZ;%dVBk=S9w~VQ#)s3_;-3 zQAXxRS)6jt%$cTOL*bmE_Visqb9NE<^;z4D5_u_|ONr+U-`TJA8lj<7nR0hIuJ#SS zZaeQ3N6e(^I)VB?GCSmmzTN8Xs5p^Kr%W4GtL~v2|FWTB7m8Twb?_lf0RncN1HhZU zXq;F!FN?YHcaTL@-#!5MhGH1!t_?`lsz)9xEWI7E{u3YHQkgb-0S6rnx!0Q^{#{_3 z{v)e#NARMGenliZiHZL$&4xa>@cEWaW;e2j@B%6m{O$levrqcChkANRAH$R&5~ykR z>qQKKuO2EzBK)m4c#CX#?>FV>)VUg+RFTwOnnE?;bW}b)$ZS;HMb5vkg?Im4i-8E3j_Z>? zYObCfC&$4NlJwZo4&`$l_*lLcb_iSHe{0Y_ zAi#u+4Q;i&-{G)EaY*S7nWe8gh+jor+c@?s@-*pFa&?q)lqWYGGtF|WK!${WOC)_v z9tE0aEpwmQNqYZlDk-z+6oo3?=pU}RfqV)bR8fne6_F+FbWQ0bmJaTRb>1IJd`d;4 zRO%jNK41i&e8x%an}7Gw;Z4zLd3v-dsqm->JUHpykm6u}cVRN4ViRd*QW6j}69azf z^G)~peg*q{`Gi&S!$p6%~X~)7-!N@vap(;FFDe28x)+F2AGg8nQ1U zip0v2B~eBuo;?+EKETLLYAc>A7=IqIr~0FU{us=>=y7Qy=>h9eEaA9r`zBft7b;f4 zzdSCz5v|rwD}=MgPAfz4ej5rslG0NOVVxn$uA&QE)H7w;to-eD=Fr|Ph54F}*H|nH zQZDnE=xe^epZ{O7h76DB<@#Dv-$NKA@mm9bFF-bXg8owAAwp$XQBA zvlmF2P|p&j;i;xei6j>mBcM0cbU;PdueLn? zm8c=w)F zR5pEiO}i>Yb08<^XzKd>O}A_H8&Cg4Sbf_9|GNvHiuUu(z3OQ0`1d*GnnIPzzb!|( zr*D|BXCxsG%D=n}*mqrU;-Xvs-p2wD8Aaaj3Zd6z-sN?3XDiiw@wYrq_V7a@C7C*f z{e+hIlhc^{w}2b2X;AjZu*;gO4n;n?rfkAh-8tL8PaFmi#S@cjD)qvUx%E=r);B%I z3XA9Nx{ZDp*3+qm4+&LPr_f6M*IuhCHazI_e}&p_|BgH<^`tuIm2I+Hk&1&J|J0;~ z;*6wY4>J^7K3yd0<8t@ao!<^G>dsi7oHC$YM^Jt!x`wZKI;C8Xf>zW<)jawV&#-bk z)&{??paxNL%?{V|SKvO^MUcF#ercL2tsr^F9msT@*ij zcoTiMpc`=Cdaku6=C<|h6Ow3Exbt;MrjOaHyk=^s8u|I#hOsB_}j5o>utyeJHuA(|} z-}c|;tkpJ!uLbXGk$kKr#eFjHniF(`bQxoUM~ibkMsm}(l|4jhaYJa<3$ z(Rs_YEVu%roL`#I8zFpl`|I{cT#D3>9cSF~o_NQzD|W9Ij*SYv{NNGB|Cc@!Dh|JK zTt2M$#N<9tD=s?l?Y5t~NQ>&{Fl7SLD+@~fR~-qEyx?FY@Z=pD7G;W;xf)_N_h=CD zKLGXa1*3}(-d&2=b=vWVSTWGOtv_1dx-!>P)MxB7*`vh|XP{iWyyR!Lp^3bexUQ5J zQSfQ!mZ;{_#qB}Uj6ATEjiGgQ#Hn6%u+H_i z^YI4d5({wd^MZYfO(Ld-xUv)~cWVsmgB$O+bU$a_Q>q9ipu4=hX--iI7f#8>EZ*HHf zulgULkP*aUp1)rsd?sE~jsqn2#+zJJrsh#PI zrTtvK+#U7}=@qJ8|FZ&CG~n3rdU_1~!r5-bhof~c3(zO38aNMXGd6!rnCu9Cn31Qy zS4W`kM4!F!lxB-|zl@&}FtlB&54u_>>Bkcila7{mkJmo)svzleNMplKihtanOrL1U zQL2W89giD)?=;w@JH<2bCx4Yr!pu_iN7E?zV@8X0G9hYTQUqldqn816DJv&gr+o6G zp55u#z&{OFtGD(gEoQ#o@k}3 z>zynC^QX;Qm%k^i;yiM5P=YcdlEKK3+>EWl`%56NLa~6S7>tnQ0E~+is@wMUb1b zfSrG`F|D@Ytp@2`kd~~$W;*A!Ul$)a^y}8c6|SF@Hy1nQX;Xt(XG#)qitc zd3?9`+^V(Vld1W_ac6`7>hCC7a>%|HZ9aK8YgMZ}9%n!G3GL|~RDwrb7(x-09LRmC zG%)K-=xmbtctsw!=7q+gQIvv1n#ozmuB03FZxmEjllJ6-9!M4f!A4WLGj|`;@6_n2 zg~(rdeK(>8qt-*2igI)R+o8KK*f%yMcj0M~TSP?}cm#XP(mM=j)jKZnb4NiI#1-DA zLKTxA86U-5%J8U<@-XnkMRY#K+jU61NhVU*rqUKSY*eX+yW;Z;O%5l_uBSwff0VRy zdl7hzq*`~T!L2F!Rc4no_DzRy^qL9ks?K6WTieJh#>EM){gcUK0*?KrP|Jpg!xjAH zK8TbYNL;9AnY!=n7$o8>tVirTh^tDYH4a}B5YUls9u?7q z{b&~HUPB{ZRcuTZaV+KL3*2Rc16J>egbLWnJhnaQ1Pfr*S@N%nO)bbYiaepOm%geE z5>NKUurhz%UEus1Gv()i0;7s{ym?=?OaL~-rt-sw{jX1o*G2=dUHz+Tbw9Vldn1s* zeI+Lz(jux|d9wOuDfoUK{nsA%V0pq0f{fPgLcmBoDr2{=RC>5r(`oyDi==OfsP-VI z4!Y8npL%eB?%UrY;grY~=h3m-l_1#F%K8Ft50e>E38#g`E4(90OV@InjxC<;_?fyc z>0@yT-1FTCXJt{huBuON&N@VA{tpmH3#tjj9uzWxc)#G&5WPO5TmeUFoMaGJg28|B z$TtH^kbQ(1_U)6#J9kHGUrVl&`#UDR7aa5|xO^_VHGz*PRo?6gUQYGD^pddP~kfY@1U2MWML(ecML-jwuIP+rg?WpzW z&0BJIq2;TBcHSSB}T@~r3F6Rs$7dp8hQc5cMwHORTeS7z1$ zK>DP`#mq~+M2dQ?jD7U;+laWAd2xKTO**tri)Pp};deQfvAtJ6x95qt95gd$AO1jaF96CDOq(M3aX)y+lbbtyd!ca<31QZdl zpJ#u-e%S8U&VA13yx-SlOs4h&&1gLW@W?-JOZ&~Ufs2@n9FSl<$g7&_f12_+Cw_4{9C!{j`wX~N<;0{rom zuIfH>Ezd*j3%nQQ!!HTxI`B^z+rVXy17j*EO#f^-(51aD%(Byb?n)LvJ{zF};+;X6 zc>ggs-<4NP9h}P70A6)kP9luHjUtTq%ppZDTTYAOtvRlJrf;c%_J9n~+^#AuWm>(+ z(C8eX=k0r)TQi^1pD}DNLRMSq-M?_`9}_ceLGFfZOYXy-y(OACYW+iwM;FkqO#}#h zE#A)Jndw2CpGy7*D3J)PVS7|r!*AoM5L2CMQod3V5hLSNh8?LHUJ4Qs%Qw5N)4hQP z;0KGwzS)yp(MjvnckY=`jqC@x!*d=#@Ix00_^!wvF$RIJDcn}2v8vA$Nc;c^08L@_ z@62O7dJ%k4LyBFNBxs`bd!Fyu*RTPQI(5E^^r3<<%Kf(^k(aqVg7qrZ3!qlMJu#xY z!otKhVyQq78K}4-h89dB?A-$FPlS7Gl=?E|(&^k!0+_qZD6Z3)5q?870&qRx&qQ~Y zC~QV{oW3p~Bs92NLinjOcHtB&vyS1u5x_w$zZFF|z%f*tJ^76SjCu_qMI(s90@#5a z*j9T`<_8U|x*59kvNu_(41l-Mizp!P0ixyu*|ce0$RO#~?%#HxrP|v~4X^&2gYtnC z*tfvYR^%`(9X4`I zEy>~_cqMlxOE6QIFB60XR7<2Nb6=zx`+-C9?Mb3IHtb)dw*@+o&0FEew|MN`gYC&Rv7;yQd3@B{>dWq0l z)$kq*geTV|E2;*e=mI5Ib?ESdV}N2&q-cTt(ezz;;Q5Pd0Cg+qjylj?cL$(gVByB0 z!*86c<1x8KNcv_9?~ZO z+mK*_)_RZ>f_>VM7RkaI$=&psBw8&65sK2tIv~OXzzH-JIx8U=PuixzsfIj5P-5d% zA?-)ji@|X@1%x-Ad+Um01kU2w8UZMta*JAm2M4R?PD%u=v>4f5J_b-&%yfy2Gh-12 zH}Z5vhK0>&y}R~$07FeiVCqpXik8lrOq-a-Q8DXmPaU?&PYW(nc^(4{V$>mjXOz6iA?^rV6=&lB8VC?9CqY5s zlZ@aSE)l#vrgwW09$dq#4$Z-EGD3bQ+6uq2nAdmoVU<5J7@h@L8jHOFO6L$CA}@+wZ0yIJLo&E?8Y3@^;wXbbM2q?4i0f_~TZX($Urf{jv$KWVmO>2EYRH%njl8+#+K7sS9vqUH1pigNadt}mWFQit(<7LigY*Z6VF^+Ow(zLN zJ%N&3VGNZ_`Av#Uyj9-4rP1&LMqn3*PJ35d?WuUo(c{3~10sYO$`&>2Qc;G`{{ZEz z4tku#EdhY6rMzCvbwjFaA$tY>NcY=TNr|Xu(IFw*=%c*oK5BWzmO}wv1TZ*;6DesX z9X6N*-qa>h=W zW6n*B^4+u#jckf-U}t2N5#u6@fB{=qaJvJWl{?rFXf z^%<$0vlvF9@<5}xBeBSXpVgl~sW`u&ZZA4|rYatR)AMLCn<-u{=w`0zN+CBr$Hm9C z#`-A?SzRGNQxS@Fv0+<_eS1a?b)O+>2JkI1GLGptWSC{~ul-cQO=;tT$HI#b%AbKO zXnXC}Z>~MR&msh9KLWb0Et0rl&A)r~SgPibRKT>aUJ1uN>jwuqbN)<0-HL{z-me@q z^l#%;R}wC7AIXX+K&h-=pC=8en(%GXC{K$<;+>^yTCWDcbnfsB1GG?HkFKZ#`){Hv zj>^o~c=|Ot&n4dOYe;DzK0VUN`cKh7LPqUs@A>_83S%6S%c3bI$!91hZX#MvDahA= zTfQD9p0suNvq6c*%0L*2k8?tX$=|4fIM|1wYXWB=2Qp;y` z=B!&rvegv3_#-}T{WxUh?__o6h(&oy+k;D(RT_}(!yWZB`JQfRu02RJBcW;Gacj}j z^NelUcjG+*5JeiDq)ImTK7v`hH{Y1T)lKMCM1q1^Ckgcf6H$P2$K}i+9ZE^u{G8v) zOoI#o;+cvEQ1-%`$0}1tD@7q55^R|d@QfE2`$yXl!*!}yGS4a7XMf@}w5(_cy&@d0k}`o)W4o1=!t; z4`;26V(U<+z$hOi7HHICa*Cqb`tGkHO{4fiGxqYWp=@Ea+XN(T!Tailoiuy3C8y#1 zrY@n7)K z!!%~g@8{W(vqAbuP(QKDJ~z%07w}(j+@%yZIcAkh4|4=0_ivWi?Vh1#1m07 zf|x%v-43OF%3UpEz}6y|kKmT!71Xyb|lMA2yhd2n@q|{dSj+%1MwN zWVDs~J(~7|Vx7b=KL|M?fM?P|sW32=b1~|n_)pBeo8;%eDg%IQi`SLeMsc&Hi-&en z!{S|T^U;l9NJ$1v`PN{tEb7D3wJKcLj!a4@|6qvL`2~f8+1c=XRj`Ek<~Gmq$3N1OMx5TuKhelGzbH7s7{% z^o?f3Rma2Jw)Rls>7SXQQ>@T}_!ri17&qLm4(B?j|KJZ@y(1YAe`V8=195BVybm$w zYCi{k0P}U+KeLf#e_M^>k7rTVjzjvMywyuwbbk$LDfSraZ088k(AtGaFIXjD>_C$) zEy6L={K|w6kEtmZG31Dj<=;BNKc!ou3W_$Y`z<+ncrwiVQj^J0)#8 z`nVu#54mJ+e2RztD70HsTJT`hC&-KUkS&Hqbdig{pV)qQJmuI6r*y8|e$j2B#nbxS z=e5V%IH?=Kp3qtzg<%yt7ngKL8{S)w9nu2`PwO$=OT)?X}_qcL@7_FrK%1@9C!>b0Wn#3KSYt+x77?4TQ8y0-s zCRN#v{ci&y%?63HR`KA1Fs+HqEgKDNoYsgL|Cqy-VT|%~0`0nG*0e6A z2(a}aMq&gC_%^~cZfixk#b|H7(R^XSt_OW{)@g_bL@Mu&aLk{ z?p%0e=QJDG;+?VB(2dq7vR&~mbK^QtD1^6`*mu~dLE9tbzE6ci-0L=DRz$ZYpmu&f z&+N?yI72?pg@)_-Bsx@&>8kH{zwu#MAEV{p|H?XvDwbmp@4rhn!IV_e@}DzG8B?=u z{azi)Q-|@c?3+wq>WT`#d7SA@wcQ={D?eu0TnGQTx8K93 zbIN`<93hAj9BSL;Ss*;jyU>26rL)pBuD?DieZsa^O@?vFX&0u?6FODUqWb&tX#TAoan?Vm~2zy5*Ra0TZnOj|?e(T*Av;S?e;$-4_0I$Xb zM96kmW|M=|do+z3N2j6$RZ6O*m&<|WqJ$+~+ru5^J*SOsWOcK;Ti057!lqByU!zJu z^n|6-yRgCHK%wvCH$M;f<64{#bP-i^6t)Yd&JoURp%LFdujpdsfnmr>vZKR)*SF+t zVaMyD&UK2SgEhRb!Ac4}4C=D@8o`&YQBU0Mg>&9PtPYfv8}M;IY%3GmyPiNTD-{z; zd;1HwlBM-2v?sY^hZBkMHt=^@E_?Y&dqQ1qj|FuLA;spP@f&T$z=};=xz6Ie@SQTc zJ=?2WJH>st60j`J?xp6V ztfQd+$g;PBhm$zgKNtXDN}l4(*5Q|anz$qGAQn{IQg{bnR6%Y#iS(9eWeNB^20r69W5Z_xVua$e&-#?1+Sy;D6h0Z| z7|9Cv;7^y{&}_R!71UocV@XRmV=SGm70yRYqt4R)y&lW8t*ktTX)tde9|7LS-BDKf z?RKdb$Bim8{Z!!aKL8%=@r(F`4g^ZnTs36t0-YBb`cPHM!&k^C?vT!PBKuR;o>Fgn z#Nao*R!LnKPo!sDjg2sHbpOvXp<5GHG^KvVfW*@1w-&Jv;v(?qtC7^@V4Y3<*U1sA zR7f-c3}Q)OPBdVErG^vn?yQD0!cxg#g#2U#pws|9O%+QUHj?9L->AVEpo%wG?B&mU zE(7$5p0+Sv27@yI(H}DC9azpy~JtUz^I>g?W~jV(=c?PT=d^*Br|0K?!AZ^&fN>xMJi2gCy2TL zrWu^O$Q!mZjORT2=WBn#F|6fP>}us1V9m=dWyh*>1;J$7Uw#-7$U)p;Y2nvkaM2m| zu*D@6Q5taNb%|c^is!>k`EP4%b|}1cyYL{T zVBjICT$hUD8qB~04ProfevcSqOoB1jvBm(42*YxaWJrnc?)S40ElS0oi9JciJM=NR z>U<$v_Y`|fGCN>tqLT>W=O!@4TLb(_1b0=dOn+u}rXAiN^L!@7hLeQo28LeFF6o#B zp%J8@u&KUF1s<>u7a&yhxmkG&ho^V6+s5NtD7d=#V_*>LUeG-0ntA*h*3S$)!RUM! zB+h%}hU4iR*@8)#J?wbk%Y@*h)9K|;Bb;| zYe^H~KangtQ+Sh6y<5gc{(&P%78=L-rEMaK?RgLnZR-?dcOA)xR^_DFN^00o&Y6^VnIp_^D`Xr zrGy>BEmFb@df6?4r-R>;{?4W+5e?;>hd$Jvzajr`hpReU9^Qi=j9~*Cj89!TGZ8EzKm0azR62T9YcZOb5bRWn8*qU*FvIzH!V|fjh(imejVmCM7?o;hE)q+a z0c?-qB>Vs--WN^$Xk2sy;2H2&MIG40eh@Dlc0>^SO{xKb%#<069yFgxoMb$~H0H;E z>thmFgS6=RoB0ry3IpT9AgZEiq5MT>;4#3olAy0s&<&(B$@`6x$haNg{v|C9Y$Ovi z3~dmnfz?Iyf&o|}>7H#;W*h(u(hM|yjl0Kw8^rClM~Il7?}y_mT%4tp48EWElwT!MgNuh+dCDcFN+hpXfEk~0{1J@^BXm-Tk(@8@aRgyqX8S(Sf!#&e#0xR zcU`QUa-K#q$CY4$McS`$AhehqY1;KNUF1i); zPQT2w@()To;#l!n-Hub=yu5LljnYM42kWP20!yRHI{e$r3x~(Ypz{njW7#4$q)@kV zsRw&_=vgpG0-`XsuKrfwp=ql18)1GqXh~>{3Y(WUbnR@uDzTxpMofi*-aR>ZxtMidHPu`lb$-J_n(tgi zT#lgtb ziku?>x2dHAzYONM2cR|C?yfWw_3nc`uQpWk#lw8uT0|6Hem*B)4WN7{yiND#-I>Rl zGBnIiT@fAlwzM|}_*C2r*_|51mBxG}PE~!EPo+2A0rO{K6eC#uyT}T?Ic%`$Ter8W ztkPAwS~PWt&Ut&yh$*ANzG*FmKe;%PQ2=eN{v3066nf0RD$3RTQ{sbw38w_NA52TV z)){vXo$SaD0vNr6u8*sbhGk*W%M~`H2trHHRe~x{CWL(S% zn^ESP?3Y|v40=iw2M&Azd1)rU#zWq1$P2u1fEB;cBe{iq|EhD$-^p=PUWPRJ>aWqC z!gm3C31Qm$77p3rI;{^WWKXNrL8M{1m)#*C$0B`S4%%WJszxl)9m|p$LH23r1jq(h zx(QyCkp>Di5C?$e?N-h%Rx-$H>ROO7rL<3@B`_>XI^!yixin7rIj}>X#+cl`Y<#?A z-*T_+Sj^>Q34PE|T?czt{MO?Xf9|mkU8^gKzRSqLJO5L-k^5GC=%y0J;Y3N-agvtN znE)C^6?D~BT}k9(zNN@9d6%g0N82vZJDURyu&uMM+0XgBvlPgJTPaFG zAIIyP<8?NIBOaDIwR>|l!JR$Wcq9?9%l|DUqXKHwQRil~;NuxIn-_@fZ&C~Q4~o2T zN4%}~VwqvP3D6qVP@zywHtzUgmbARU&zsL`hQFPw`}EJ-L7z^YZqM~PaJ?NE4AHxz zb;Ea&=kZh#hIy&?CT~)W!^1Ur9Uu@aZn>~yXg{4z_xUCxe&vJl2HpPNU*FqMEm_VR zd8_)Lsf3>&{^V>ku5YC=lI4F05usS4y6_hR76%N1`KGXJSZQki%3r(tA$x*2qoCEH zsKv9Jst>Qf>}_#)r*6QE&DY^qX}1$}iA4L&$tuDH^dddj9ryn!?|?zcV#wk|`N)65 zwcfJpKtnf)ruf9WfqnnAm!F@E%-;C4nz2~MEkx=W70}E+9o>=$WPWUb&kt(FcX#RB z5p2D$8W}8iDbJXbrqtyS!33cOD4TNYma{p2dlx9t{RwcHnb15{q#GO7 zEzk6K$wM2Ku_;#ZcjnQL-00pOzvbJ%3YFjmv4v`Sw^c^ME3>O0x9}CB3azt+OP!s6 z%Hw}6?e&e{$rhgxvp;NxAjz|qG7eK~c6m~>j&Dr{Hi%==OI?R`A!)T)4!tAm^ObTn*a&bPXP|kgHjo(;u>-dD*Kcq+^aJFD%Hnoa31* zwKL$C)PN38A|b^(Co%utrcBorv7bWaTg|H%4h~&KYV~tq?E0oI8#(BUdk^A)lpF^) zD%fBq_kV!*mv8~OUhK`1(iZl2J4;7m285aS;(MkinEXGe!Hz`i{aTVE^cjW>OvWE# zy4{n`pZn~KZf_Pu)(#{T)RNG;Rp-1TJ3WnFXN7)Mv@pC>WKevy@NC3xD(m7BG!DHl61ytX*?om&4nw|; z8I@_hj%H(FnlQYapLAykRQFJToHl>}ak+Mx-2aV;uX zqgh$aN@Y_6jbkef`duoNG_|Z?x%%Owsu|=aI*`f88&&@|k z@-Y>#^u1wz&UcsM4`ATMp-Z?3U1X`xFWj)ihGzDT4uEX#6RI`>E$pwlc~HsILK^50 z=E^vRJ$Yl|vI$)H)sZ4|5y8-84zxmf^v(x_yb0#oj9&H0f$V!Q?)t%v*yfly$43?q zZvD0QWZSV?QVq)`*Kr5FE(Y8BnRIQ6p=%LHy&{sZ=y0RF%xGOexZMxVU zpkil)h2xU>DozK40oBb1X<7#$l|>_*l4?s0-G(myA=|HtRk&ETaNy z4dLhPXdH^088EuX+g}^*E3NV1Kiq|u9EBD&G29Piv#p_beD^v#i&$09t76W*f&O&shuMQnM|wzCO6zHNW%iQr zI>-|5mt{I2$K393>wNu7n&|83RhJzH)kV$ITOA+cSc*5$oyBx~KD--4jJ6>Cu<4G} zCcsx)9z16=*O3&Enqv@d5Dtff{LUc$x~k#HMS}OOqy88rpSF{-)r=!%W2@C8p=GgB zZe4sF$6X7qX+ND$3lY9o3R+iNo&MY1LgqIMJ)!L)V7;$$uFVlwd)r`Ps84No z`;{F@EWX4`7n*PEEw9&6?mk2>^ykVZ7PXrv_iDv&(HiRTodXkIcgN+?-5x2c^05JU zTx5Vc&nkN5Ij!IBqiC1bR)bV{b!SCU-^T%c4eT&BUaW9- zYzPu(4-&ehSL6A%6u(S3t8ee!(%p1_!?rild!p0v>dwOn*&@13Q=!*=$DHLH%@O|H zi+n1>a}`010unPo`T0w{byeS9{B9^zWnbHu4F=5qU20>vDw+T_ak-3@9jkxh{DW3V}Fn1@8GflHdo6gRP5=Bt@L-lF4dcx zcI)j?{<7{4O2am>wtH{fR9y$2A~fYXOkYUAQQ+Uix_*|bGz9QiA%eWdyrgAc2wyyJ zgZ5-eDp7EKqz#{YZ1}!!Y(A8SaPPPrE z;5e)ZnJlL%jiD*-S}ZH?)WKKG+bZ6#p73%l;kf0PXIsPXJW)pob;VcWfuYPgGSbnn z|K;E7nSxe<9WZJJX1@TpxF&kgLg!u_#twzWMRBQeya^#*x$ za(U<7mBrt9gWPaGv&RDkpZVFZmHOcg&1~0V!Y*eX8i8D&8jwQ%X6fHtqqmq#-NH}J zYrN*MEVoZsBuGEX`iFLfUh5e7HeoDhj5)cIaRh{ZNL06IPm+bGG8b5Lo3%A4xjvV$ zW&2H%t}KyUh<@@-{-vAn>5U_hTEAojVv-gVAv-1-#<6dk@K2t*jR?TmE-%3Yy zII|~!a~&lasaQ#3yESBFS>`S742-gTNrlrRz;p)Wr)xO>&_!hUL858_^g z)o8GG=d;8R#2kLdOFwg4g5IzVxufbcB*DaW$5H`}ezoW)f7P7!!7U zuua*w{HZ>+9wl$14Zv{Im{;tByb2%QjNBe~Ect5|^ez%^m^t`}qODf|Vqr$@IK-+` znI_(`lm1lK^|iuHGNKD_5^(jDh9VLz0Wt{QL=7Hp{jK+wn_q+wzPuRAC0oL|ACatL zDC<^QHsLf5E$V$vItuzILEUixi``m*>lzgw_|h67icaqjHLhxP?R+4*u|kdf)6bB_ z`toKfhub!9+{WJ>`O+ld*euB?Q7oNXCT!|CO!T{hYFN)Y>h9|~gOX!456%Ap)+Xd1 zezD2=7$@g>;?ke3pn|b+eUVb;DMQ#SeEb#}A7N6-#uNCYP-s#2XK~=N z_AsM!{rXY)_H=JWzU3H&<97u(*CNod;9rrsr!I_b)G-NLiTb#((sB>NF4k`=CY1k& z>M#C)g((oMJAsi>wRl8{42oy2V`BbH;-KWF4?_*uI1jdZ+5O!~qWqKK){cKBm{nsc zbUsqeOYW-AyoPyRUJY-Tr0yO@q-YWElYTOtKQh3$gtQ&&`4(j30XtJ{!##Q`e?Erc z$P6x_Gdh&s^eA>PfQ_B9DdfBw2WJd|H0mN!(f&KmXBT$APazv~$7<_nxALNkBfiy_C z=t?0kLn0t3prt;IFWtq-tF47Z!@$UHSw$Ey>BDTFiI20&nO>NlZQF!V zByRvreEb&V&zg%mZ*i0nbulv7z!u2Mk#0*pP{&U$Iz6u;3%(VdRyW>J@|l!Jz%N{; z#NRwpcuU&tMU;u!qEm8Ul;tajz#}b&HUn+%u&q?+Zx=LYD|`64rJ2A*5eOzUl(2&Y z*=a9v;Gxdd{uX9SyQ$FCLLk!$oTN3vf_J7vVeHIs70E z#zPB|MDR*6NfK5Q@rjvFVJ4+V|LM#}ilXHCxI#H@SpyHlwl{f~`C@4BErB46 zZXQt--1=nW<2XV)2Alg3SHhw5GaFKaOkjJv!*{|6=LzK33TR>O3P#_+K;@x1@<5pB zso%d$=QB1;)Z+M)S{9I>#hk6-IE#M_@WDkIZ=6;Pu!kingLj*a>DdGvihvPBqp?`f zc|ZKabl5Y-jR$0wE=$2cHnIOL%d_SK!AREUacmb2ZFTgU3J03JV`uDjvhw#+$LKsm ze98$Q8V-&T&O4HO#yBGxP|ReM%dvP`hvPGAon&dpfl zd`m>z8BBRQD^Yn&(XAmp1~mc&j?N+me1u=_|8=oOwQGsRVAd&Ru1M|&SU2(@w_bVl z)zoIP`jGhSTb!omfzST{2S4&^?XkMPzsP%9g{i4FoS!?GCe(qT3oSNr{I6=O9-~ep zm~$KyPXI?iD+()rEsKNg$5+YMuXa(irf--upqm3z>tM#VEhZ7-R^{%j)z~))`{CCG z$PT@deCFR@|4K6K^IjuuQ#&nVzRC&LI27A*{kfCtBO@1ZnA;29gI~Oi>Yss5`Qq=J~TKx&UbPkEJ^2L1WhEZ^Q!{Z}smnVOjq zKz3ze?s41c;75c183m*7cDzoAfwx_{{|K`a>x@mt^KiiBa4x7xzKe%OtRUabsha{jB#52g%}k?OOJ^Hd@Qy^3rp3r!)u}_Xa^IkEwC{ zi~L!hcVZ&p;+mje`xg&=>wzQ7Xf~bFg~2AVm)q5w*?-5DpC=H6`d_NJ_>tu>f<$hA z^-$I4MC*E`FadZ8!a09ypmN(N5qGVM;hz6$*7V?+t989l?80k-m{_xIHvYfuf9y${ zZ@d8WEP)dAd|G#i`^!a1_|NQZ(`_e8kI8kocD4t-xNI;QL@u9SHF{4rcWnt{&DaU;ztY^H%tfVSx1+xU?b6YxS+q+mTj8>nE~6(7#p}6m&qb*NRkMePL9llkYg-V|FC53w==OPS>&T znk|&C0UeHk-lE@n9OIV`bfndSxrUAbu6C;;3C;s6mxW>_C#hboCmmD!ap%#EU`#*( zf4(+0uA(CEL4wr77wh5;L&Uic8IduI`wIu>oc{+Xl}6v)zYNY5Gwf(5Vre1yHrgI# zY-*Qwsa);YkFCbVGVZryfB*8^l)fYJVwlA+Ud=CC7k|mns>Qj4w*4fddGWWHv=d{l z9redP+P-Brb4!DBpkXnvqriZCeDMzFm7V-|x901dbg*x$S$9PwOHIE$2-zxeLO-K^ zdi9UfF`P517x)M|AAY0$FZ-VBzxt*sJ%>=)7V51J*D1cqiLC2!$`*(A#y1y}BQN3w zBu`i>yLBixeGf6P{l=HYL?{S58<8iMzZ7qW@IB0j&~L8@m0K zPH&!6f4-4m8xmPrte(3Ou5bUArYNNnaB#0eMBGmB;*dh*DSj|R@#LmRkg5v#^NU&U znhc|x#x*XI$d6X+cB!+-j`%zJ*$~Y#1qrj-8Tc^)*)0 zhLhfGqgP)qbKQ8q?dM4vh)&G7DZ_%fc$MYQ?%{0#0>xrrZ7lB7Scpe^rKCV<1GtaC znH-^2`CkZZxj*FGz|oG}V)mKpL|u!nKlO=-2c=Ls9OeB^=eypISJ1I>$HDS7f|MSipIqI*;~*E{iUze+*s*!e{m;e#mmwD=iZzMAq>E@kAv9v z(@ZnEx3e7Tjdmw?VCMaUk|FB^ug#@QFo`Ey^H640aUkL{aMOhP`1=Mch)XxR(F2n& z3jl5ZN~4u}UR90~GwVhEYi|OQH2xyO&_#x9G)$F?9@Y`8 zAF^RFLaWNXb%#}hqhjzu+fCBl_EN=;1SoSHzWUEx+KnnlcSq;oZ5!O1jx-~Yh`^O+ zE!`rg1%$p&`AxM4`&+qsd!g4?#Jbj9m%wonZD|-(R!N8;_+r%S=7!M4n8}BVTMzDp z8fsshh;{nhXn>=9HG4C#d8MhOz8A~CTLVHFrf+_tD73x`0|RgF2rfuh4()EnB!7(f zzQAxsx%*)}A3yjK7>E{xF=9^g)WyxM-%JTdEDg-l3;zS~$b&x}#kbl6F61IZ-roOC z87s-1_12948f{MMenJce1z7Co9Gi z$iH*phEJ(F&)63*^TRq+W}A$VtT2G{kxH9u^oELY#F0- zR6;D4_9VkCc?N054cgt~72bymP19GK7T%zZE$%M__9U?m&0n2kkTpnZ(PE6BF_?xT z>tLx;9*4b=*^N#fKlA(?{oQUCr&5Q+HHT%CQ%Zwcv~@=bi*J3!?aaDH{Uhwmj1$>E z4Ok$c^PVtL`fcGCpNo!F+F&lzFLpHVHu$eYU@;(f&0*%`ynD~~(sgvNNquHEiqik@ zZl>4c;QI=@9hPjJ+6WnzXrD&ENJV-=E<=F5xMHZOXmG6JnqAL+#wHFLzof)7cO#hJ zfm7tpqS7KZSkjri;OGe~;J+P$DBXJWGv{c2FOXF>u~>EhxD)c=ZsAg;D3@RI7r#E7 zpBZ=jQ_@*~xsEDul8VFb1BuyI|EYA|?1gbd{`?Thf{L=_?spI@4 zEXe6rdH?wX`j>mzuaqBjp?(x5e|~V^7DiGbmDxs(8qVx>nzx3+c5J&?=5r05dU+Xw zLCJ>BO8u3_6zX1@wQ{D}IwXdFjlZi(jg?y;TH-%&fwc$}X46C2np5y4kE=ZD;oRZU zJaKQe5*_j-oDW)Q%_w&$e$GoQ^Jy`lTsW(osGq308KY1IsaG9t281&Fv&Bd*sQzc14E}YT3mK+$1xuz-XB0LC{P>5*uppA{F z<6p~~TzmiOQcfXuNSMfnm(C1Mg8s_%czeNR^pWGU=s@n7 z*NT2)1k~7ewXLg`?>(Lnc8=$U752Hz=N~aE!<$w;*{q+NGK4c10GFjee!srJ$KKwHDtGKrqUWQdD8mkX%Ok1EffdMw`)()2NUrz8M@_?bGe=@i*uI3Z^2stM)C4C-5<2BTCSRc9XRfUSE zgsu7cpJ9=5;vzn7^g&4{p>Ay9kfes&ja?$y94MHa1Kwl?1r*;TI!3o2%^6r5o~U{7 zE7tz*fs1tx%%PbK#oMP#1H*BxqLurWVHYA*Q5}IqMweG#WR@QPL_~e*}3V@Fd(#Jeh=rsrP>0Wh zKM5z^z=UE(%K=>+=WI=YFjO1xCxX528(^E#4~U-45X}$LIi@qmg0sRXWSFR{U1Gk2 z27?R7vh~-3;vo868uF@1M)#No4m=3O!q_4K45P0yU7|tQW#Xe4^g|=pGEf<6WLr{9 z5!!RmX?wyd&(tyYjow$nZ^2)E+w-vE2gDz6KZ2Fk4p67Lax_Howp~AyxW_hU->;u> zy_r~9A|~c7eW@buQFI{WS>*OQ3SswBEO;nFJ)4qv2bRTdFx{W;fLMiIzkZ6DO@2Q4d7CaaOjg!UXdI{yQC{q0wJi?(j-VZO;xs6`1$_1<^qzfJobC zV@wK?iQGvSj|7!uqnFTe^FdvOS}$EWc|oBe>cZMJI=PMBBp3H+83A z(U_1=D~(n441cYE$ITMdEgQdRjG(Iby7h+f_ISu!3kCi(N^oz~Rvkiysn21=48ub2 z!KuKC{i22n2(E(=l1IFZStcVa96h-wc}!(~qDO46Ubj7FOw!J~ zdV~BqMTJ+&)_bOZlwix(-Yinvx~!gCfoN8^)oFt$cAw4jCd8x)gJ3GFP+RLXty-7J z2Hv?q2Ny8%cS4=ZUx&#V3J`TL1pE!VYB34OQR$oi!ROLZfDV4p7VxT)2=G2-(`SKhVG-k!wSd0BW^OG08Fz!%;O1@V6bAU#Q6)Y-V~)wN zQMb}$j6mipViGxfsMDYTVxTaD@KKu8Fbr0B@T1W@ztW-ZSD44VJn!_+%-I@dd;AbF zg*>jsFUDFyqzj55;XLY=a{waEhv^uArFf7g2a&ozQX*~aDC?ghjonZKq?r|X%b>ex zgjV*!&BtHBFf6nblz}?}+)^L}v>k>t%c*v}*5U9TI|us)3xXqn!A6X>R?!F#MvWny z>6?^C7Fy((vYzRyV)`RZtC*>H6=C7m-mpW~u_>qr+K?V^B^Q_af^h^GSm zb0Sa-*`gT*dj^kpWic$%9>Nh+4;=L>K6#xC@nvFoh-rWbal<3%6N{e#Ec?v+ISEv^D4u4SkpS=R`R=i($~ z@LtVhfQV?ANDNYe9`YW_CaLbr(EJ$G+ARo>EKUZJePOKVzqIX(9L8d($-xL3TXwp} zez?3NH8#823k!S{_!Ws@B3XgG;75f+nGvk8L_B)pnuHhPVSo${%yyR{ox=7}NlYtK zhZkcW!Zj0b@f&^m)eK`U+fQ2kAqFVLrrDgd9vWi_#R6nn-x#&g&xU8tf#J)I_-|hWC zwYs3SgCv|y)SZ{&lajqBuboQmU^0|g*Z76Xa?J)Q?Y>aU1CAcEFHwNp^0FFCv%@KI zc@7s+96F9BI5qjQmt>1ah%=vqofb00r{u*Kqo2(CHS3Mbiz6he)&EMhu@L0=I|QGL z685h?cfc4gI|Yp&?9fziZUXk;@~=us`lZE>KroidoP@Zlqum zt=+Gu;iik!dsfZyzd->X-H}cHkN8IBflU#k~8$@a^bV zLzh?^wKi$4W>LTbK;@Q*z4G~9Ke2uU`%-bWOkZs?cpEf4x2mk@6Bdomv(P-Miqmsf zy4TY*+la|eQ+dg8v`l{b#9N8=OQ_Zas6Jg8D_zP_##EHu!NimtE?H3T<=q5 z2F3yJ-0g%SB+)6DGywA`2Q^D2nElU~vfW|uBi;_C21Y`%Prz`MzY=+=#K&%V|A^f5 zlqA(7%rvPt)g@28f|ghqyn9TOcGE+-r^sk7+tTYpJHZsG+3lB`o@#GZ30s|iVU!CU z5|3cfvKOV&I)qd1E_r-H(j@@wKB_&7(qs%#>Eh#g@StE5M=~Pg=yH=QbI@T>*d;W_ z>)a=p@|MBPXqb_4bGI<`P3%n<�iNPXtQ)Io58C;^qOtuL9=jt1m89vW|^@yf=qc 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

C|#r)8~9L7P=s zOH~wmk0w`FyG!{dM?NwqHQI+43oM0t`g5m!I2VAY$(~-TQ$;$TOH9Sn$up|@MS4MN zK2^t2G+J#v)G*os`G9~I0qXJGs+3C+tp{oDa9CQP{+o~i#PsxSMz8Vawm$XemA63VB>J{ zIyFCzT}v}oa8+}}dkTt?&kOB>FeIN`a2ijx!lF*JMmg57Ckg5k4pQ-NLHNRnXn606Pym@^$YqPaa#^~?t05_*ryde>d};xGwO!GXfsnuy~h=ecWj z6l#?gn$M~{$W={L=$T(0p*a4hW}8W;uT8qUe|NYEdSA3F4m{#&-o2u+kivFS#i%?xZix$02}Ip?`IBe;O`AbrYM zuZenGH|?MCIGfsKs&dW8{J`x&g5K@`pFR144xYiBl4rP#pf*o9pFR0bD}V2Z9?$x2 zjXmFjWxmaaJWoSj5$UK@2d6;nd7fYTcTTqc4Vl{mapqS`YmFt0KK z?m7`gt+$k8)SiPyVtzI3wTRF05LH21!!zy;_tc`+W{U->%AXS7jH%7wGL*Rijch;zmo&aE*cHaqD#`G}d}w z$$ZP}X&PEl>B(Y!-_-A24w3%=4`YSpmy&*9dHNPQjW+$*+%XeNNJV5EkYs-sX59!* zm=lRwEHs-7@JZqo*-oMTR;tVjm3u!hQF=47h8gfAZvHf}&c;6MOWmQMpHikP#&eiN zby%&pKN&ysIyE}lbyOuNykv3WaX#xPV`0b#0yQ>QMTn(8%nfF*^m_8UNlbLHY`p$K zlvhsF2a-glp48*Zu&yO5O0CefPT1es6NZLn zuE5Q^o+90H(oqIrRNM6G>pF9ud4pOS&6TqZDCSf$`t@w|bAvkDSh_Pw z)dKAK!5$|)I=ik?h@c`4P9d^|)uNr*bnBTSrL1GAcD8_3`<$A4b@uAgras*BEn_+o z6yWtKU3!33&~x($>%G%Wu2A2=4skigqMHjTZ(%%US(#J!bvQZWnS1Ng-}usNR2lLF zD}uXe(}RW^OzKTd&!^p5`v+5NAfMum7__j z(&{n>LwAW<(STN``7>Y`e=_>54Ry0NL!1&I8vg(m+Lz6b#(JFEv>H8er8BTj;C&j@ z*KSJydz>pxn*DKAVYqfoA^j%RFk09t9wJ&Ar`S)9;6^$vdkaq>VjW#qYLq=(Bq|nI z>rva2%mjYE+BE6y&t`g>N7J=Sq_sdSF}vog3!>w!N-Z` zJ*i5CsfldleM7v^zNlT!doqXBX;lGyp7Vn$;MlY|?|(3>qD&4^?JTU!@kT6EF*3x#{i53Mv|#s`jqY%vPzldr8<212cnPrMa~}qS(kAvZe)CzMD|>(P=6VgDO#QF4UdJ zz%!dkQ~JRwQ(^4O-=ez9gK8`ZUV4REo2oZ0oB**OQK$7C%P}XcNNSRrEML;@JoC8c zGrwJ`(yb_!RE3BcA$-8$(=MgmtYX;lnSIS`?I;UMCa4NPDnXEIEG!*(J|J4bcAAG} zr*D99=5T36nu5)!u<_W;y_%b?_E_g15zd``Aj_Y)9LGVcvhQuIDe;3lDbU=QUsHB` zv~Se9pjyTu#-_p=kWb7HKGxP%tYFWbr;K$y1pJfNk5CmPcO$6`j-`e%+_gxLJ)BZViWP|}#c`RpJ+UdHG7iWDsuUvOJk+a3%6&_kUHCED96>tuC5QsC~g;Ki*XXY*Xu+Ehr!18BB2)fN-7LqGb z&J0Ue@#^li5*&0`_W_lbvNwB_#MkOyPhQ$;2X~n!t5EfWT};dK8m&v9*?oL<%ns($ zjb4hq)-oJ&0iJbKC@huu@@IL})uz;~Ou>ULc=004ZgMM7pq^n#T2<*9mxe#?Fx66N zRkyz8Jpm1kT^6l-bN3S4D6cHc3wRJNG-_)PdVr+#WK9$`xurXQOuRL-KYVr+CDHQVP=A_T|oD7pNJ1-jj6x%)s3M$ z5;m=8S6xmCPqn}mZ62Oh8|#Y*|qf`H0d_gr^XX;_>dZMmKSr+gDdLOK@3-Oc!51__Ub~{ zS_+4m)j-pJKTa4pdz<2OX-U;;Y-ZtcFs*91xx-_q4D0CHFA594%<2`rsy*9S&UCSL zHf4?giK?p0O8Pe7_<`OkO(jLFe6gGtY6#2Lq=0*q6lAn$#wLsk=?XE~fV3afTIhEuRml60(&*J) z+0J?DcP(WU+PwjTIXy)zeKJqX4lPaB56P`{v0DBoZmyd}LvxZor=g@u?9Sv;KENv)$$j_&yI1O~nRN|Y7= z&Rx$<>QHY2NvTlSYYAiHGr4N?)C}_i!pkikZ4;DJXQ+0c^E&LXRY(VxJqgeHt&5F> z83b(8U1MOLCw`Oh=!6?i=I{jN{YFZ3Yjd#gD=5-m&qL5=#CI|qmpT|(Kk0l1Eg^t6h)dRpsOEPBk^8uW;bz&Pr2-|Om_ zs(Vm%0nVWf#oGnE2`0Y%Ror_NNgDqEN(pasnX7+Ph3WpFR`=SXwK+aat*Ko)Fb`%c zRF$CzmOn8pr_`inj0x$%whw3a3mS1V;K$AAA+QL?w zSILiFjp|=n*kpN>Yprkp00m@CcI!Qx$gFl{6w?!^EcRLLU%7gp)MM7c)PnvwQ4jB7 zM~ul9H5{+;5)Qg6+HJrCcTxm?k++lXGp?s6N^C2Z@F$c?^)(h? zd`jwGlqp?gkuy`sQPw+}p-nBy?`R2YfN|VFAa?hMgMA4Yr&h z=ubf`EVxQCzc4)i09n~~420?!RM9DpqHT#~x61-!)N4CbQumI)&_p#hu=i*6$ zYciwzfmzzX2Xf9Cd}0MQ9e|i`ye&$KaD3uPbwsD8NBM(lD9dt81xhMs4`KGp*i@l3 zdsKOo3a+E#E%@3I4<8W+R+~wsT20or=A4;rOPz~^9Y(D{QM{eM60Kkfiq`@MGE(Vy z_e(QKnop5=B5ejv4#h=o(i!U35!HWdLgm}}9S2shcZe{$fC>n{HQcF`lM)2YS} z6W0AL0f1Kod63pMc33K*bGNe;PyIj${{T)`-xGuJBmV$~2%eAngund=E;ycd;ek3K z1EIMy4yJD5AI1>5#4&us3S-0z!JEV?JN}?~dgJ@!`<~W@&rYS?@jN|P&ZP%gY3&2C zQv;z0>)h@#eXBCRr~d$La^EvozVJ6GRg|!;Tq((bEx7E%a?@6}SwlVs1dFi72=^IL zd#xUtq2zL5OI=B5{mTdwt#8ulDj_N^*x=7LfjY_ocdEODs7z#L9u2|EyR^BKskaUg3o7BzbljK!e(YC{a4m?|5+%y1(jiyyo% z%qd7>aD2{+tvYo90NputcYf-wop%NEGK;^PkO}b!eN~R^3-V)8S=dXNBH884rD$%f z;jt)IqjP6>5$X)N@T1HXRLV##kt=o8twk5P1BDl-vm8XKs_V;IM;!?Y63wJ5?aX%4 zfHKx@Fsa?B+{IJczcB@MR@=*NKNF&jB3}DTVm6~kMwo)lpQr?1y02>B2?`b2%MScX zSf#7QLx?M9RN9NoApm5*H=O6GYbr);vjDT3QM(~qmol%Sx6uwsg>%_v%P~$$&Wf&V zV6IQh18A#iu3ATZh<2jnnL`p<{{T(1gYi0t@q~wSo*6n6hj7j%2N4m@H71l63$68p@Y)*KbntPhJIQ~XKU0?qI8PsRp=5<-7 zdo-fXaAy{!3%c$(V>_E%$y(9|Mll10tJ{FbiCT}NVz69~n3f}IFI4Et>TX(bP#G{D z{Zd%q?dRrlU2m-5XCOgfwZK(UGc1}DQg3#Fm9}6Y{{S+U7pX(mP*h;W_$@Ew6^$6J{v!oS5DwZ3^$lAF8N@5)za#iPZ{xvtthHmv zo@gM?(ro<27U`OsYTQW2B7Cppe-B&c-8kExaWX!9sm@0erk!oII+ypT@MLVQ>td`3 zi}lw0nasMH^r&fC z$#eeW6y37Ds4~U_VFAG)5f@RY3vzlduRJalcYYNxyKn&(9lb)px;NJY0toyje1Okiz z_V8vEobP^5#8iE!fH54}K5}J7^d82`93=0my&tB?r`@)ByRB{sz>a_@_V)rMPpHEr zjLNCo$Q;Hgv~DMp7O-x#R)d)pN~?R0=juaI?6HT$^=m;|;Pxk#slmCta3NJzIN}oH5?isri@Pu_kY?SEq<3J#34rAP z0L;b#2#{=M4Y7w)K-dCMTY-r&$>KO%4ts#bi4mzlY#X|Zw-Li&!0s%no($)ARy;|Y z4%|d9%m>KN5nT9#F?&3~2fiT?fiYkNDC7vXSTTXbMtsSZ-2*dj;6M{6nT%jF2srWL z5WGSLBck*33QeXkPCn(8a1RqO9y@^?7|J8<$jks@5aXeU%s}LcFxY{ZlLHe0J|dIM z&>Jux?g$TXF_>{M9%ja1R6fu#0k=Iw`h%zhoWYnOfxKp5c$>r+fM%P_-53TC4r0O} z97Q;cIe@?h2z)?$fFTEn48yn#COkkU?g0W1KTym}1v5fV5q!YM;%S6Df0zbt%)^m3 zcz{G8j77{oAxt5PBWIo<5e9Pz7>p7C0y-y|M6b-Cub2v|BdU^mj1Xox>i|FjM0{ca z93dtG<1&j;J<8WsCDjHxkWFghT@o^{%y1<@0x%O|7#KkbgAg>(iJ)OL(3lzzGfZG< zp@IgO%`^iya6{Y-IGSM$4F?lV;s)r=+|xjgxAH!_qE@|miE8gqam;|)zr=Gom59^s z113?-99Gx|nXGeR0fq#Mt2>j9Wp=sXjvy_Xagns-POUnRLEF3u%JnjzYxm+BOVUWQ zg)lW`HXXy6Hmbvbzv6Z%O9t#=MCW}$7VlB*5{U-4PT_3_26ow68bzc5GdR|1&4U?P zBv;f_5FP{|qmV%ygATV$wJKN-xx7f+=7&`SA$y%7)z#_|+-*hhU?aJGm7XPawVF{# zHw_0N=PSc zWpe6BI5LZ1dohn-oTW?L#-oJ?s7I%z+?rRgrcZ-B*K=uRZs&D+vbsjChd7*#ST$!j zFr%fj(?<4!#uWXleMTIg5h!f7-~GyJ+tVQSWE~oj5r0(5yEDWGO>I?WKi%R}O{T2|{YMADksTDerDu5HiOI>d?Bo;FtCOBbx5P>k z$8yz=Xo1m9NT>G*1|X#gX6|!cMgE~Ic|A+fTPhLeRY`$Efy}9Y<68E6fKy_rv%E>@ ztsc8uXG5U?UZ%T`(4D$1QEEzogYzV|0xh!CI6Y1(wHpa42;sia|tUuZm;M>e%tZ})ZLVB*Xv7y?)F?Om4D z=^Ws58(*f`q^iX1_aN3$O_YPUE+;LFro|PHYW99*@6#aCBP)CUBwQa!RaE46fhhEE zr7Y76fW`#m{A*cmsY~*M=1tpF^c*+suZenq{ST@MLjZnS`rBSBtN=0MQu=DAN;&tL z$EMSztXRHV#OP}5f7@?y5RCSLRcp6Dadn5>msB&3#HOu))2ac;k<*JawR&%uS5r8B zFt=#j1m)4ATVpXk>2poGL7O>N@h4gRHHOUp04{_9RR{GBT=F`Vs-2szv9XBNSL!oc zW8>m-TV2~rF(SOcwO1opOO6b#l~S!{>W&GKG?k@Wjfc!-wyM)=A9?cwepNH5-tD>N z{{R&9T86vO6X2Q4Wj14zxSugwO>H!b6y*Fs?EJCZMOBQb>k<@IWp=6)g?val|zMI;tdGZ>hYgyc4iu8OJ2a`6!@D)_KO?Sr{zKKNDn%gqX#t~7bw!aFvm~u->UJR8VB%_-bXAKeJDG>L!=u&I z9@{JgzBo9AM^mQDZn?KMIWXz;Np%DsiQ;lutGjc0!`jD*>D#HUugBEY4oKz^=f0ox z+J)0G;iJ3Rp?o099}D$@|CRa64mOJEEF?-*zXZ&)g>FYVUWsO_}YpV4Y|yoopkkCw#DiSIZ;u1y`-4NlXjh$ zz8etgn@wd!Dadc?PeJ=CQ&3JA@JtSKr_@)c9+)KOncJnbwHt07PQOv989*5)pI)-F zb0ZE3ltc0wn>5vCmTYELkIE*aN-KZlMhxrJYBcYodW~5);Np4Tjnb#2_Pu8k4%*oI zBBf!D=gt0cnEqaYZ;un%(=N?NkO|-!lWBZwBPe%qgcJU`2} zbh+|O_RElr0P#E@%kiXydS8d4+dtF$D`GO_$Ixor14WhYRXmx~_!1ZWGT1m`PA4bh z*3nhUM<>jq=`4Di@nr59#{zj@iqo^}YpVSEWE0%x{CziEO1*?AGq(3{ZkCaobB*5+ zI{gt|z3Qw22+WFEr=@MK%mPW~I$Qq$Pq0^RO@v^voTo@NmN<6UPaweS(;lh}FnW!u z)h3JBoU?Xkmu{0$reG4n-v)Nur1k#*9qX6PgRvl;wJn(Ef+Vy$YHPa7UCV9Yb1SD` zR-Z_=8|D|%dMoX6N$vr=@(NUsOt2jp&8F7tg+{OEOCGU1bmbbOQ>H*U%tzIwOcf9m zQ_LW1sv3P7+gQN|sj0DbH4?+A=$dK#hK#X&gB?#NMMF>@ck#~z`G%c3eXs0(6m$%2 zOPaLpfq>iynu^Ve9=65@h_&yzRW0!dCa?YylGr1hNA$(?D`O28Q>J=TD#e%o0Hh0Q zuAd?BM~DM`l#q;b@f(lTAn9AN1?=8}UdzT}ajCFaj0QYFt-p@8jcIDz6fn+ZO6hD+ zTx1RmOB&@+EOW9$P^(RqqP9bFV02lh1#_n*N5*0^F>Qon3UYqqYduR9KTdF0#HOOQ zv+;+;qq76dt@S$_Ymfn*8g$N~OA_0MB3&j<_MPV$^9X%*p10ErgY9f*`<(RKsj{R>&mS|wO;*>IRY&j%kJG$SM3~T5gj(2 ztkYvs*iVVjzl_ovO^9#+$mUB(Z`pR9_2a>dq()P*>>zwdJ9M?J)c)0&DgOYe9ZTwU zN$F}xWK-=pk}ltmv7LR$-OE*VTCgzKg>ecl^~E91K4s4R7NLJk#h4#)mDSc+cWLrj zek7Mt^wLe0;r>X3AIR9col;r13(Ey(^}CutN`;Zd@u`9o?|r(x-+D*k>UQq|FQT2T4O zZvLRs)-BU|d$0#`r%L(-eo1UM^(SR)Z2lP$becERTp6>a06WmovY_4*vktQV{LsvE1gN*;%>v{6MwpQlnuQ zProo}U42sS2|?I^&KqHJ*v~>8CaUc-l?Nz$mDGMqMr$ce9{DOSYgCr6ZXh`Ps-~-& z4Tyfal>CK>XiI5OpCAa0s0y4Y{_!SDZ5ETCfdYcRT|r(O5h~KQlETh?%_nZE-(5u> z*2jsDuWh0A7JEbrQI^(j@C0_Q#Vu&a8Jzm(ZK?WB&t_7MHoo05`r3d2{xXfLxtg{0 z4hN69BXiOfm(1+cemRP%vg2S>!5H%)rwQqmes-P=BhosGS4gj^E6+-K%;CRKS$DGS zPXbLeiK@48uz)%em)7RRtp5NHnFMLNr3{EMx>V|yPgVluzA@ZuMLKK*uXExyl{1?e zL9^rH70E`QQ~4XSckNO?_d4xbDFUk7A27Yoybg!d;MA0B_b)7afkh;<3bXzvMxXJB zNV?|hoIq@^O;RWx=83LLeKq&tevE^r-EEjPQCa-WxYI-e@!zBDlA4jBDLv6NuzT%sn%}1rD$pf~XX{TCIY2G(^B*AN@{{TZzg8u*_ z1lGSupHa6zh?*@guc&J+9@Y7aU2j{vTHBw%m{)S(?jX6~Kq9RJJCeLUqfpL^ z?Hvd$(%GjW?43FtS^`wBFd-5;ql`!|Wy?|Ybjy?FrzQ7T zTp}DFCRuGBsYN5~&NHLA^^anc=#MZhw%eF5`&Y9awCXv2{7Hj&vtl1;i+eF3bDttn zK~tighyEf|<=Ch~SW2~qs)xyftJh4NF6$lzG?j}P!wdo3T{ot>hXt|+Mo(E*si^|K z3wJpY-%7&0rJ1-U1vQ#?7VoXe=gFNkojsKSXSs)FEtQ|sFwR`b>GbA}G0!Z<5! z07}q-ImU&Jzs~@D$7@-1`zRQEc6?4C_ffLt3cp$Tqr`v8t@`o?3LSl83CQU>C^~%54IssBI+I zm>th$1vW1(MCa4#o|4aL!SO7L5w|D+2w0napc5)O6^5fq)YjNz*_@T>nQArH!)FA- z#8aKTHZdPdt6CHWO~*NrSS7!Y)v7g~pd*tNbd~zAYq`f@PMh5|Y_DGAi zU~Lws)28}{aOe4a2(_Y>WlsD@K8jKh5%(Y0u8PN|xo8~6LTPVS*UKKIs~fCcukMiz zZl=$9{{R!VwW626GiiW6zna9a4v%Ff!OR7CW-x zRD3|sTP|1tK4qDcPe-JKEPFGbW7z6!z)|7?Tloz=b$WDyU*{3%)u5;$Tru-0cA-M- zMO^;?Qgl?sx40OAO4SCSHgZXl)zPWH@<4T3^O;3K>-vGc!=VkHy|xxC2l;``thLp) z0gyb%{yN5OK@13AnRmXr7_K+Di(TcV|FJW>F@OeWaP_Q2`gUz0C$)TSWPn)IA$_;QqO31 z&L*~lUeTPHWw+E{c>@p=PKuk=fck`mN{=}+p4%SA{jhQKD7tnP8!l`C0R^hHkl8;% zYp%|h(?CXNU*avM*Ruc}qE7vXQp|C*N*1*JHk;LDJxOUbdW!=UtblqZbe(6a>YH$| zUvXe-TqyYx4jry_i|RJ)o_?pHs{Iz22Sb;CFGc9!OJNaUMU^OXbyHUA` z3pzD^pA^#g$7V%$Ra*o(J|`}or@F@6#YlnKRa!buZnrHn-KMn|)Z3L}*Py1=XSK75 zN)t^@OcY^YL0sOz1;t`o`?5tejibpD0_MH2i?*@mRFn(e2h0p=X7(Y;^ClHdn;WH- z)7!BdXvscIMzXYQDBSJb0{X@W)2MOOQA6W>hZ&Xh7O*U1gC%yPTHzNa1uWE})wNFN zlU$k-6nd`NGIzQZz&UBmhWRY$3A_c>z&rmYw)?qF1OAk^y0gH3nX01L*Ahep= z9m_j^i8}QDkjtIK%Gaef9mHW^OBzncyKkOpQ|8+(KFk8s~@m>=94jpzp6zF=J@s{94B+F)HNqN?y5pYtScN{6RK ze&+IEwvW-`vfG&V1y#FhmAe7}{P45>gm+FK!4vun8R&ng(#wAoSqRv@&p+@XpGr@G z2MAyr(8zV8~~#dt_^exgXN5YR_{))NP)ZNNk+%tjLFx!`}a2y?6{n& zi~;5Ww!P!jVeR;eJ%AeXnAF&te|^29p&qM}>rbXIqp3$5iyq+D6U3o#?gD~L>)5Qs z5tAk93alh^nE~~EG};Ha$!tH#&PnkZh*r)s3Y`0oQiEL$Z}K=;_v}RU&`G7O>fnDE z*RW;*WC(;-cpS!Tu*r<7h%(%nf`@Qlg%BNdUae%4kBJKRROB82ofhiH@T^GzyyVIS zmf=prIqE}WZm{4^msLLFz#bs3vv0Tz2tz*507E80&t@M)R@=8^Oys*^KjuX;0;ecR zc_m9M)DwB@=5*I;X_Sm*r#pI=F>Zt+_1}jf2NEx-G_l$;#u38pLCn?A!r)#4(M^WY zb*CPAmeu}1F+g`>ana^EzT7DG9vb+p|#OOeaP&tG|s?>PyI;~8;pC9e>(0 z0M^R4dlqeF&cGud@FleL59aIvlNxd_F5cnb$fT+5HSA6VDWV&!mf2|!Ad zW?PdwDy!MKM-z$3vmkJ?`aAs~RnA9VN3>vE;o4bDC`t)Fd9c?vzTCia6P>>wd#-ofWyS<2ox5404L7Y z%#FEDC#9$Sl5j2?rK6`%8qh8%MQQLL)7WlO)Yp(a&qV%z@#8|(pd!LCw{H?3h&pXP zm6_}wjlqj!E zS+EOu6V9ZP_#g6R@>jEy@dDa*HCo$Hv2LVoUry|}_cw`3FSk!!`@Uga6=zXD>+d~cln)7r6>6=!R7}q^2i6< z5vVpCR?@CeHq_xqW=_j0Q~PX7KzGvqnFH9_Gg6DGL$jE~deoBkbUKpJUFmNlfde|7 zH}S7=`7!F(5~XbbH;K=Fvde7Ry+SK2xg#V(j`HkD5ssuH?E~E=2qOgISyqbEaT$Or z_Xc(zCo>ac9ltWxYR1wlLz5dzlu}t?5L!+LoXRCZPgya&ZcaFg8*jK61f`keU`2Au z*c?VWs~>=wh}(}WIWQK@*!eTFPDkUaC6|5H5BQN(d<>o=GOL`kd!Tjh_T=_N@-8^F zr$cHTL0QP>b7#zo!2HECW?;FH48j3EBZUy-{vamOc#f(7z=y^J7{mk7n8BW9>eJ+I zXcJT|7*c%BjkxQGcVu#Tg-B8qXUru)?h<&2VFYt9F<{IFJjFfDoWd8FRtjTc7z=HX z25bySyYq>e;${#}A}%4vFsl5@GKobP5CM}PqYA^Bdhny<$PNs2Jixg*h(=7?f$k}2 z4qOf~5Vy#KFf(%iAMOL+Gje9mVF33rIhtr1ZxDs%9DP6lLyQg~6K4#r;wgX+ zaO6QTfM7k%Gz?+P80HXr5Ck(#<^d39Xdn#W;$t!92nWO+%uK|<(B=a)2F$?X4-h~( zf@pj|6HPP%Ans^jVcdS=fy8AHq9ZDt^$M)AFO%E_RFnxFRFl-E-XRJTh~aSv8H^w( z8H}n=QNk9MuBcSfxzLqhM_R!H92r$yKvh{lv4Dhi2pEJ-{lH)tIGe=YARNIAz`)Z? zIGP5UVKfY8nr{#^({}^|HfHlQ12BLIpdO}zXa;Vk6F}1r=9&izS7PanyEqRUp!uMB&W6xL8EVI+#SXKCP0 zJKts4N9sa5#+|DLYj0_TPpUdbY_8!r4zkSP6EV~~bOaIKUBdP($&PxLVy6mt6Utpp zmHz-4p8H(;j8W)OZW+-zA28{dRe9a#%;3`M4MmF#i9xGN8<0c}?OJ+_ELPx33Yy(M zOyseH))Y1b9=)khts6LjeI9GLt)qyxp!Jy5z%i(|*^5WG`IrE&l6Zl?+lCy>wEFfc zD|b5U^sS|lFkJOK`pvo>YKwsbJQzo(tkKt{sS$CXCUCJwd>?QgXGi5y+pAj<^1l;? zjIr5_A26>&O?4HaUD%v@i#=UIAmn(2(7f}^8akC(n$Ph9wd%znqpou`Z^`2T&dn`a za80_5AAo0{seD|;1{J!1NLI6I9I>5RB@1Cs{9DEraP3KZT0#ov1cw8UuTT7)|Dh`Y? z1PWG}qhTE4Mw`tWsb&6*uA1dbN?*fxn#WB}tSL>qeEiBIMa^!YAq4X;szYUhtuto9 z*b}GFu9bUu1PQ_T%}P_Ld)t=J0s{KBP>o&SgC(Na%vAR}za^cJxL}FhZl!fwG_`f)$$m`&m9@R4r2ha4zP6$Ek(Ce^S6i*( zq(~;t$K0d4a*Za!JQ_(bX{j!lV%>=psY@G}V<&+iTYXyVROF=TN+}wDR4FYX zslLjTZ2*Vknb}pJrqB}OB#B2DHiNyN1HhBM%Z}Gp$Oox3Cc;_R<2(sesfYW$rU#|^ ziuKx1FaZORJnFQfyh6@I{S*^ zgg}foxr!@o%E$PR5(m->g={Tf-SL^u5&gyZ8R~TE6L}T^w-A5@S#!7%0ew0xuVQ03 zoV0qhSjwD{E2s3*-tmJ5qka0obo>F?giZB2i!9q>5U0%Ss??}#+yMET*TD4eP(J4x zSL%MRH0!4~GcxY`GoM$o#xGb3!gXpk=~N=GKQelX7R@)QUkA)8`aeaqnPHnT zBn?edSFi`qaur##O|)|68jD!iZW;lt*1V(eC8&CpeT)8N?pof!jzA-`FjaqI5EOZo zHnOF;Hw<7)(3LmiS$jYIBpYRP6&7WW+&XD$&H9Jl_(^L2 z03S}FS?Y2caOJ3Gs=#ye0*^~qW;DdN%lPIGo>!2IM1d2|dO9jo@k4lpT4N z(QB&H=+|og;DOJs^>n(kr*CtSpYa}=2GCsd8s|E@PO{yhv5qB%hTAlMs8_)F%mr$! zsez^P4~UCht#AFE$2^f4D6vx}%zRFbKjemzmP;2b-55ly)lo)6SML6zSU+1xAZ?Pi z`s{Me+jT2b=Ar?_0&M*yVG9?}i7JII$0H3Cw(3w79D#K)@Q) z)XwaW_=8DsTAsGgyQxhrD{teORlVc6%cn-S+P$x41Eo7`C0n0}^;?H4Y340@dlOWp z4&ZzGn$=ph$9KGAp#jaL>8~h1ituD;RZqw6Ze7nNK23Q6PR8sY^Y; zY#enpHQB9JP}l>+&H7QR1;`&zkks02qm@4prB<^?Q&#D?XZb^?q@3E;0KNucvs76P zb}udSIgXLm#YV7&XdSg$Se0yG_4gsG&@P>YuEZ(vCvMuurmvE{8Plx1U!oiP5~FJ# zyR-tj+krTJ0jH%}wxdfUBY$+ICT-cHO!(`$Lwj&L{RBEBn zAX(z#Y|D&;->XC3BuVM+te-H?V@31VR`VN18TBd}_fI6AaJ(`M2@^>XItc^Xue9sC zFnHgM)goSDIZNT1vbeAYW)+o0eGac$DgvLKNk6yx4X!kfmX(P8isE2eTns2wNPET% ze``}iw+%H3Fdn%{J4b!15Jg&_zgQ5}+#(N5o?C3U+~#&?>H^2^Rx+(}`EkWLKADaX zE}nZe#bm0>5H`vVRha<7SS4&C{EyeM8T9)+wv@A$)r^LK6XKr&1e$lUfxnGf&pF8( zU+SlSjFd)G4TkLBntAAXp~F9wY`btcrhufklrp#nOy1vIPf>Tz772fW@ zDPzi@DxvC&>Le~Y7j$g0xXp!|7SqaD93c|2q(#G~U(_`ZZ2U)bN~m8nlGG@Y;%+jo zYfKWu`pboMjS;FI11&g)9=;I%r!?Xi@bbfcr>Ew*NcVL?zJ)D>ld+})<#b3OO+}wr zxf^d2U5Ft2?0iK6D$6u|k>}YhL?EH%pIGPr^71A03gO(t29SZ|OSSM* zbRL)9iTt$uHXd$AP7x`R9i%yNZmc@*h{U3VF>|HM|K#gq4pP z&@TEUVlPJ1%TUJL$BZHetB`-x-KY8N_Pf-OFWlv9);v7CXE@0!nDM#tRkrfb1-YUO zA=T~R^kJX|b|!uJVrpJDSQcGsZR{mRWFT-`_n2X=^He;b)7wCokCT%s6 zASao+?%J1laMCv8`#H!hVCNqN*K5)!EvHSgP^0>m@8LSgI^G#*on?XN?_HSMK|QQ? z;@0phj?Ta*T6a5}Jax^f^*sNtB+d9_;b%~<_Hox;!W)$Ld4@Q-SOH9@)|WDpIFjd7 zZjpeQr~Qgk^kpjNq8HGY#BHk9>lKq0L&53&WWg4tMR%3SJJr_AVwp0liH~LsgKB&c zjH9O<($~HVg!+sF?X@AvBrUnI@CZqaEq4WsJi-zFgi53jRo{OvIZ zp>7!k_KNN|#glNqlKH%I4FR(gCB?6@B_s1yvFJg=eV>2oWb04xQ2BC)A7d=x0PE$b z92bAGRH!;6`ZY7QbHt@Gn3q_zkWBb^lGosF!{=djhoXC^#4l@8jT2XIg6z)<{O_Ul zB1r^k{!K`1Y-B#YU|W~YUkZ%=^6*(feOJ?uh|9-|wlZp(7;5jaoUpM&&RElaX_IbF zDyzYfYL!gb%O7sXg_d9nRuCo{q{4bZH^^w4pw9bnJ0qMsD4;LDDiIk98who7?ge|* z+XcSak7ws;)96kGqmSpmxHwV*~nfS52HgNe#?rOcxQy;VFCe*ecJ(Un4^J(hFWR$ zo6*Mh`&~!Ml>8zICg*cox&WJp zOm}6^D|{*oAnycLjF|x%qqnOOI%KKGsbgf+E$E{p;*ZNCX+C60?U%e5yk z3dR2>z0Q^ugi(xmiU*^ntQJKLX~)Qd(Z^;&w8rFvFs?<(8zUV<=qM_Eig8fN<53!l zxCjq${MY?cw0kI?4pJSU9(+d^C27Q*%cw+*KD;j^v-@DiE4G1BP;h)bw?a%?ac7fJ zxCI#K&wpZmA#TF>SdtoWu0CI&rn(u)sH=p79x;V*(kCz>)|;?ue zO++~A>C|%Udj_ie{Z(??N}Xk%U!~1F<4kx10gXTQV!|ps*i8`H#|sH&fmCt3Esv+_ zMzXhbdslvocKk9WBVEn8#ZiL#l;y~#P0J|uy{Vu$Y6VCu52dUHJe{NO);2df;-?Bo z^tR6HcY}1VANzWz&_Or=y)zw^c<(c8ckxP~^3p7q`qsW6pqhewM$B_H;?3gSTl9DA z{(d`!4)s5MuI9iZTe8zzkHB-n{diiHb@I$h^O0BQomd;}m(@Slu!BRUEK}cOv4dw^ zLwD;gBkI9iQ>D^_H!}&4?qHNF>&~va5!vHCELPILYNG6W>NZ>x#q9p?(=u)aL&nzj z%R>??R~ad%M-=ROl^0&_BbF)Rvn(CZpS*qfU@rtsZ}D|f;Uq|`aGm?Pd6F`w^H$@v1nnWrYs_70fkAVFCauHj73a>Fg1CPLo2i@ldnGwqkHMZV z9(p5JL@)%paOE`r2H-b>sW9IHJJW2sFq-bK^)*IbrVTvj= z`1be^?`R2P^&7__8j7acQK&?5j&u@2DV;PGnDc=_-P0+s3Ay@AQVYPw)(&hGO5oa{ zw8>^qIYKCzH38m`Q()x%4N=%gf4%xAEG<@){=@}Gdw&kK;QGHttJ`|Qp`_LmDz$>- zjd1{opierjB0*8&zJApw8gKL!%YfQu6RlWZh9naLHyNwfOn8M*vFvctvhIE#N$Gp< zTLh8a7lP9nuh!VsK9pk!@vczt{6?x5;qgpXFAZo$D5Ex?l{Bth}Hjbn_F><)$pb>Oe~h0 zL+;#7;@;m9^UrXvmUQ6pxMiu4e$#fR1nbu;e#mR+w>Xbr@?fUxmBPRiBNmZ7u`_|k z+US!RqkZSEnzoyCo1~Af$SD%3*)aijQ9VMUym9Mi($3rE;sMrq<+o&L$|0)baeG=wcm16{j$V0WQksFtRuE>lSyEWOn<(QgTV=?J#W zrxi6Tu|lMUIAQN@sX>|A1Z+)v_jN#kA9zoztl4m1L9NT~p}b>*P8aKDt{T(Dd^LAu z`MH>#{$fa5nXiT!e>a=+Q!ZScxK^_=eR zhMZgs$MvzgpM6_!=6K_HW9ve{Lu6>>+W;+@8543QaxT9{&ic6*nkA?#`z8I!2a|h# zBFC046Mu8+Uq7_?SPBEaonmTmHtx(sH!CmNbYgURQCqs^|HKAexR>bNj2SoIN3DLXHs{wabHz%YXibAVzcu zTj9Nl)mO%di^69q1{{CT z!P-w~-|M3nlpGX{AL5tqw@+LM2$|$X;lqP8dw%$&(XG?{OV`8L&mAaPPy*2>3rhrT z)`k=GVAV%a2|>r^bs-r$6)GaAx{}R83s{vXV}G3JBw0x_;HxVXyZ2M}S({-K$cg|A@|y^~4n3 z#d=nh@;E;kpAq0Dz29yopP61R;225n{}v)HHjBxjDg@985Mp#;pDi7rY|v%-Vu?>8 zg?CJgzGkx_lD{L9GfbQ7S&p~yBvw>Xdcq*F;=LET&1(CH-NBTn%EzrH-N!VMDVfsU ztPE^ux^};`je!2^7<66d{1LuGw07?+g$kKNrQ%SHJNB6&u+Wzti zI-vC%^diT+?s&tIiJ>cPT-Xo$ON>LCYM|{|)MTLBOapD4pLI0}mIT89{k}f3KNyNV zh3K!oEuZnBFZ30nvL|k25294-wBJuziSup+4?VJUvzG&_$Uo*ko_aFuOz%cq9B*m7ScRKTyOe5%V` zSK0B&EW`q>?q^HdnojAfpanYv5$Yem9^*aj&tZ&1x9;YxdL|ba{+kBZtTqUaxV48N z&Zlc#eo(tCQ5}g^A6Im|GM-$wsxIQBD#*EUHeloD?8Kk^xtc03q17ld)dj=$uQwRd z1;pyu7KkPIPR*~<3#a_l{XdKsTxm!^&2bQ8z})S~eApe{Xm19{{uQ0cBfj047f^yf z)%@=*nb^FeVSO#Vt*s4;8UIio>Tp}V<3^-;4hMRAVE^PaBwm$Mp8*23%d{Megi|u6 znIIhM`fnYeJcicaY;tk>|zP<$bl~C&nWg=X=0qr^Iha zlV&*OvyTbry|&@vAuHujWqj!Eq1>v8g9>c#h4FhTzo%^D=GJIL2TR~XCU#{Rj>fNa zdFnDt13NLA#?rSLN@d@^R-f{pMwR%`-3u7JK@Zn2I}UW8V~x5+Y;}oW6%#M`E@fE4 zV=t8c*1ehHTIehg>lD3@tzpuqQYo8!U!T3&XD#toa&fa&sM9kd|f!+0B*mEmi!dd$7w9 ze*wXKY#ff;mSXhH>QwHD-KR#^kj|HC<={oy5zIx)TN3*dRd{KnP?L6R`* zsC0tl=zT`}y9B&Q_oB8d?Ly&oR!IJW-2MgGv`rkA)T{k20{y5U|LrA>k|^9iSsU)n})nc)`#zuVx}KYPmDwAaE$60u5flO%dM zno@U4sESGyC=#dNZ^N#cpRYr+J853S0&eOIDY|0>%Q`q(E1K^j9Ew`_ZQKiZd$}{2rh+ZQ-zYqGw z^6k(`Df&ve-9XWX*@FZo_Le$J9r#8!1*DdS6#`!OGm#%U?^B&DY zW}>e1+W!Sj(t^IRKre}`X!9Yxy_kqk`c&29m^xYm+<@VgSEQBd0CfDpKO;ulUl(L}$Eqpigrc_R774#J#|;G{(C4><8_u3R7P ze4t!(oDIy5N@z(ZXOXE~hrSA8vc5edBTC{e8ck^7F4|hOK-8?^0d}oU5_KS=ok}^d z?;2LPwJVagrSNMy6*lg~@vb#DAo>M_s@pL3BV%yi5#~~(EIR|YD}g|$1RFs6 zXGKZPHyFX4ZA8NMS7| z+jUKI6-w;KyX@Y0NY3y3HbuRXf@s$n9zuV@Sp5v)d5j7)>IAuL^{vh74jW^l9fdoH_{SzzylRqy9 z{%HnaWjS^^-!viy-Y>ohhCDi#S(0bc#~jrUz;!*3DDPp1xXLqb?0J1xzxa+>{mHiP zx@i35wEk5NykCX`5AYVplBVUyZP+x%Q8gh3UP~}+kG^5= zmNLO5m&esxYx(s(P2Xn73=sbZPG9EVGe9oucCOnJiXV}NHB~Y{ugW5yO7zTkv(M^* z5WWg-W?z~W#mhbp1vnavuazl^AV`;?GC1@{usld5E>-8^+EKBHe8G0~Z093l6hil- zfR6@GV2#z!Unj3Qr!M&+m+bFPzlrt%+Bt|+qfieS!`Y(@6#pX@k*1yy*CVt7<#X`RAtmb_pS3&h zVoX}imnw}J-2WpQ5Rq8CJ1!M7L2A8h5fwqRf;ar-Z=+ut?KX4AH>X=G_4YgU(k6lc z#&J}SYy2#fQ)tV%_O?#*Pws-Vuaobsz)Ujfkr1K#QV4E;FtL5&xhMcvNVDZ|aBHof zOyy3Y>4s1I$)@TS|J_z?r-#cQm{!WO!kx7r*w48U6$}4+{YdZxdO-w+hZ`4ITU8d# zRK;H%qK9T3hH1YIsvA&Tq+9r`ugxz*8q~M_%-dazA>?~<<;K>1b7S~ z$=>KvAK~}ls%)pH#`2)|UzbYGc}x4plDFD_n1>KEMF9a-e_*rCH(3ZBu=roO2-@#- z&&SRGN%-!_*poZv{{WJaKDmEK_-{%X1b3uADH^uV@^r0P<+^ZSL`x~1SYW3gIlol@ zxgTS?WHm*xd1F{|xOnVIK-55+!_KXTH;WilepCC8E`nBMC9*WRphfS*VL|s zkTyuG=1~~?yr$ThWcba$?w>-9SafI-CQjrNZi$1sI6!u-}^7iTcNzyZS+m{fygLCtKGwmZf8t>&;lGH0@#>%8{P=IRzkqFol zcoW*WDM1TSzSM*}nEyhwJq^Thh1O#~FbQfS5|CzbyW}aaX`D!3KA0d$B#SZ(2WKSi z9zc)2hMZe6QDrD{aQ!o%P$YMuI5ku1ow;f-ywyM zKB+GCUl1qIU!quBZf;2o5WE5>X9RVxa%w%)4yemjba_$d>*DxgaZ)Y;xjeAnhK%>( z%YXfn`Hhzcmq=G3mXF?$>#L#BnlCCllq--eo&Jn#$@S1ax~!79+7Iiiwemi5)ui{I z^ef8#VTk=$fNI7~?iRFc-Sas>ZDnBA;^eJElkR(qevm@)?A8#y>>`WUAkLHRu5mhO z!?hb}2*pxaVOEGB`o2;U5v`)CcAnL3$Zidnjy%g_mA^19GThLs8(oqw*`MrY%}!-h`6uIOtx$R8aQh@r)+#jhP`?^;uCRnhOh1OYr$uXe zY(3x|iP#C*g%U49<@GhlIXtWH#^9PQov4T$V`w=a(%v!N$7oyxO&MzTj;83i(D>;2pKQfSilnTYPxW2vjd#?mo|nBJ zlu=$!N?KlcZ-u);6JJTo^Fknosg=5lWRYtZsy=b1M1M;{4x0QF1Y|e)s%$K3^lIrU zJP>u3Mm+`Jlb>f}uM3wDHdGxhrC^7p20%OUhyWo5Kkq+HCQ4BKmY8s1;(jl# zCJV1^7cbnFEQnNQTC1aeoLm1hINmhLFuvorTBCf%)n%W#8S0ih-0yV`#HDUcyiD^2x`kQ#Nemg3-`j%78b7)keZD&j*8vOhz}2^Rb|?h ziejYnB!Z)T_jLk(Yiys2qgGsSH}n9urnVmd`)QWNd`>~AkVmgwwy>V=n?z56OpWb> z`}kp&pYGI-k^d3pMuTI}O3D_}{%uKCf_JGm+)og5ABd8!UY7o*J&~6v>3pHZ;hd_u zo?aV)wFzeFM;B!&;?mDpAL zx2LwBVwJe;-k;q^$1bVItBg@7kUuw6{O3lJ{ZvlwgV(tWZL=*MwQX*I5Z@72 zF!BRb;Hn8v&pbDBYHI#NFjTR8ZZm~3*)7{M{?4h=#eLc>%4!BB-9S7@bHVsNEuLX~ z^rbhAKY`FDUf4k&6e_RTzxed))Q7C}nG!;Mqi@sOs$I+(9=2xPw6jA~DQXF2?t6Du zjeB84ZyuiZisrGQ0%ZsXs={9&2V3*`BjkITAz{Uw!>KJ!M29(@6ze2O7zDRQuMLZ- z3=Qz=e2usH7DdMO)LIH6@)*+KXACVN<~;AC@#?R5p0ME=prX;3k69P8pz2FH zSz>uF5P)ZL>be0HRm|14~Q@et~94WBcqj8HbS}M!TPKyB9!+MS9MOGRRQe_u$3`csfr8xCfuT7~H9Qbl1ta=YvPMKe%bhU~zP|2zW*Cm4N7P zElYKM2jO#cb$x{ODbVLo#$*PSQPbZzl$0QFGt>3xt%Y6m8P&XkL`YVS_>SL11n(W$ z%!>L2ZuVp*MQi+5{mcftJASNu0tP*b;!nfHJnluaATx%FKPNYvjBY{qn%WM6ae(J} zKzP_fNm1yqhuO*88*;J!xM{nF^Ox3TSMs?}T$^>G#qf-u|1@(Q`n5*}c$EE(7{of{ z=fB0zt@o?G*x6{cw58hlaiX>NLe1GjRdNq}!Odf;W|D@P8K*NfFaCNOb)r7Co*MgT ze_f|4Kzh?a%+@mKgomCPX;wW|2MNb*Qw~=0%bp)O%`3U_YM1fu`2_h1K*&0p;L7?qU#qzm~qMC zT<(ir*R1uB@(97Vm8n*i@vMthqY4u9DZEF7x@Msd5;Fy}e)Gw))8@tovzq%N=5Ip)?lK+njZ>JAqrI#ai0H{QcP~?CNQP5Q%B4CM zX&wNTGo^^9kJ0D%2mLj2Vo@myAFtDnyYjb-uH#{kstCwUb)YdK3<|3dGe`o`PyLar zvW<1rkh*meZc(CQd?HnYKB_V41wbdte)zq935hnj<57Yka z{U_nyTL=Z$@UTm17oHc>^XzH0wN6Do%ENFG5e!R6>JBqZOq+F6^wx={HT zxg1pOqmljEJnFMkA^NywJ63v#kPhV0Gk1(&5y&GL);+gJI8B)yknDp1-F`{GUj0$|KFx#SHE_=2CGblY97_V1 zyQjR%oLtIT6i?@&K86m5g!^Jg{FhHn-6xwxw=bXjYc` z2s@xvJK5%2`3%R}gi1Sv>Uly7&x4vkAKg)&UeQSc5Wcz*{u*Q5mQ})9uf=G%5#iwH zK|q1fPf&O5IM?};e{07BGfcbB$KIuXdy<1S4=ib8jZRUZizwg-Dt35iu^4orM4!U5 z8mrR&x_$d3;XN7CjMNV2+q^;I2W)bhqCx+|S0Nq~6Ci?8~)qsn}8)x|*y3-|1#85U5OKKN_b zriX4RG`QE)@?#rsWQ|=~9uY8pWanBMhK|?k)1)#`v*r(GZq+uaD2?-Xc~{JI zo=!Mn_6r|8pEk&7QbSYhHN2|?V-2m6U?Z_O}I6}V;y=~t% zin-9dK9==c!PtxEIo7m(bN82a#P>cmd`>GW<(J$vc{zH1TfLpSYjqq@d-6Vow`52M zQQ1{7iZ?vT5naYuo!{k9x6{y5{h3d-z4XF43s$y+_q>mcEl9 zMrSu)y76uFw_#){xcf`{DX{m6FP654X9RcUJi$b;b&7iaM-SK(Hm)K1 zwf61xN$TqNF`AkMwD!%BjE(_Dihn<%Up8Tb<;-3`J@kUk$s2m-kUU@4*L7~39pi_jW3(?ViMC|cX$XiLh;D99$ z7*A7Ca=u_UA+}>O*mnM=syYM(0~p+Gk5}=Qz;;W;Dopi4Wh$0F=R>qCE8OEJh~qHy zy4~cb%j$tZKJ@Oq*8*V1>MH&E(Y5ROL*Y!2f1@WbZ0Y5*3bnF0RjZn4DM_D-MXiL*TY>L@swPq|!e+i{rSPqXajMoqlQbsx+ ze!j7~VROW_?1YoH`pSwtxw6+DQ>7_grt25Zst7Rg-Brrf9i!a;1E%@?b z*0N*dBMHQRG4L9b|F({`q>w1ni?6R_-HM4ELvL!QEl4{uC;xI3-ui_A(_V#obOX@& z&Z75rkoUBQ0wzwhz}4r2j{TOHd~fGpw2fLxXVMM5*g5ftX*!TAqGS;ZB|akUrgq(= zmshy&?0rEoaV6^;`XPteyrI<+0#@dO*w~o03}Kaj-*8UXc6!$NW9fs6rtAL6Qt{+J zl-o54^e|Je=_C%Se?>CahZz@aO9$zt`Zd{4*e~ZZr@qkHuwjQWS1$}M}0 zwa@acGfcSMW2`X=2*o^0UPU(coJ@dL_cGcPAHvmzWm^MAulP?4N zeZSZRh8#OHtRq8ip4l=i%pE`T69cCpz4~@48sweqwD!h2HI~i*k`DFlMT7+tJn@Uu zcal_*OXtA}&Juj|A*3qc41hUy1gu&FjU#>49Rh`fn#LABD%?6jZ;>mfX=#UiS-pT(Sb>^ENllOxSeE-#6KAd>HUuj&(z|cnpB+S9dJ7y0r zRJ&DaynXL%|@Xgv}+CaLUg1Yw0yO$ItcN}b2W&}Zz?=n=zK@y9@$ICq82UOAn zgVc*=F&9MzHh%VO%N%@nxC$G461gD}(l$d$7ZeEk(K1z-b;Z#gA}`^ouK~Rs&4HR{ zOjBKpOF9|-7?{6;9|uVwOQ=iBYS(q*d$Ki9%K(yCc_JR$4RfnJ6+h|adatsor=04M zpr$Ft&^*Q9WRva&Fb;q28Y@7Kqoe`Y^*>~0lKIvLP-+Ud@sNDqiryLCJ~*PX+U3X5 z9n%{0yP}9yx@SG>H(_l#D_W~nWrViI0{Bb_jugAU!srLz#Rtgb_}-}${#V@m?xkZC zmmQAs>i@Bz0mGw=BfD%cO_Op zv=x~xi!HUIzdm=XveaoWM?5(pp*9HID=M(x>F%k4Ej<@q7k-{`*@9|Qn<+l$jR z6z-WYH@FW%*ZyYA<*Ao_p(Qj+luPt-I{Q1^?T?+26Qcgi0#NxApAjpruIh^!xAfL5 zRW2qwG|Xl(4y^HrcUuGGJ#DqTHw%@bs#ozd$G;eo?@-Q9s?f}u~@s`ldSCj=VecDT?(Gmf%7$J^SPX0NweR9 z9oQ1MMNdcy^*!SgF8G(2whZN$?=`HmneQZs+=CT$JZa-*wgptL*&00eT=a_BS_2v) z?MkM3$5zo)QM%*PN=`!ENN4JoUztoT_xGmlk~PE>3kIEzzliY}Ar2I6i6fMSs_)nj zwGO|3UMNgW8ABL)PO$FQMdo-$T+k=MG%}V5_q2|CZS*Ih2X^Oq-%Ujoi(3LT4jri6 zX-x1RGFGzfjoH~WWzVDoo58XMfe+;*dT=U)=TJDajmGcF;<$Vy0ZC(#Uxisk*U&cs=_<(c)6E46~_g}q-p|GX)<1r74u|mdKyI)EA{1vu6(}MDv0K<|8xqu zZ7(;iFGCINODJ@1{$RTA%R>t%%12td7`If#6y+a#-L=INE&2r-Ozrm1YImphmGSrQ zwdC01Hxluk`j@t`qARwrJY}OmOvQx}Y%+bok3voAcjnIf0A)?bD%ItKJ7NH~e#us! zouXFbZ%Xl+ys2X!TYA491IP`&jeN~&)bVKgrn}9SCL#W0XJ(47QqQh?LJS4Nw3uHi zqp~CZBii{vrH|>P4nJAi_BEu{HrJht&%u*RFZBh?9yasQ+(vd}h3Kl*=t%_hup{Q2aZ_}I8>@9m!#;YGam z<*Lb~dLi&;Nj+)Ien9K7+=~)6p@%qnjgo&Bf1SN&8GOAJebSOA&r zB+q^}AeX+I?)m8STwx&gH@|P@9Y>Y}1-@d=AAQ>-?x8Ug%>gcVOh{ZZlp%8Cc*d85 zD|s9xtNv}gzk?r8_%6O(3c0Co`L^Hw0MBZ0|03;QD+b?QUbgHk9O0>z-l_O`^AUL8 zIwUh@;$Ce;6HE9Obz0CYN3LP4uD}yzjg|%RUgSF$o793N5^iVU7KHPec>>V-$<7XH z|C8Pyg6*Wmqg@k4sS*_Dt#eA~`RcyTbG{(9T&N4y@RDsVK3$QkUep5^9oTo~KP_go zY4p+L@JMGd_pl3@19Aw{v)~Kp_N=LSBB<7qX!UR7D2GC zw{4ort(m;VxF6>Z{xWVA3DvYKOee<1uh=7jwxfKm={tC9{Hl%rYd&`xeL)&#A|6l3 zh5$(9v1O6x15IDlg!ERp!}EdWcw*&L^jgXuO3hP<_ai+)V6o+#B_IQ}6M(ClDrFJ& zL(IfuNa@stgY0-Od5o9YGtQ&{mw)=|tZst`wqIBxA58u5|K;MB3foJ@J(FDuUi!-- zE2w(-9F-UGCaS2Cx#;PP3kja|3Ixz9mV4|<#DjYA&3gQEE-e~`Lh^;05X|))yqfBt zC!U57vu3I!_S`YEO#&7#J7r6J-{FHw_L79qMj7(E%Hwv(8pMBPL89p zX3JJr68x*;Dhep*C0U72l@Gxv{{Qr2tAcbf59fhV`ohE-sFho4hG9{t!5b)v8sW>wK@(Doky>0d#ofIC5PPbys zDmr%xa{iEsRWcVM;$o#3l=Xv;(!~Bn^5SFnicCbu8Pea40f^DwWd5T#(EShcMkF*E z+YRIgchhA72T#s;xhtZ|zWt1Ph23ot2&X0zrpWLjF9!U1{RSfIU$IqO&C5ZF!%dNH zkvX4HnSwa<(G2O2za-Lm0*i=lwBNdVGEgR<7x=0GqGR+7o`DcI9Pc9~Gd7wtjuZjP zloD?;rIfxc&|wiFbO6E3k%&@2ATA6P&tRP-Lg^?u2r~FOc4UB2VIckXqBMGK;!#!ik>ADWd5I&g71&H+^1CvHYQ3?47opd|Er}j z@OhCj8HBSP^#3lDcl1l1kRpERLpa}O5Vp*X$i(dVcHfi|4+l8oxGaIPd*VbuGXcba zCYwEnS$Rt z%TVXqG&fT;bh63^5tMJ9mFL^Od{}{zgJ%7KDnRwP6 z1<1-jh}HwNS)06Xwj*($dcc(aj!#y#>w2j+Kx5y~hvZCU1na>~O1%shE zv_$Cj4MpJK9CID0&a-l4R%H*OuTacY`W{Sr^u@I-tHF(_)cQC?{$@(1u}NkmH;GWj zwoOp4QOeFub!?Ynlp#-LwhVXfB^-qGS!lD;WC(<8q$iRIR^Xqzv3L`JDQlAQT2h%a0SP z%Ep^UZLPhh#N(+BJw{{9g1T*CWE7qV@g=CT>hARbV+)olYg?=Ueb ztOIGo&1FBN+Ewz>bZOZe)EWN(68fjC*R-5Dlv_aSX6r3bf4R-70BTgA!jsM=syWgW zPBGb(M6BtuNZdYT2*(Syw#UvSw5#csW(OZJ*0*!HG5tqfO0MdeMr9m#<*nSkPfC+T zx?;MJ17m_`338TgW#FDCOIB=QxMv;&1*1=KsgEwujw}oY2=O4l zG$IK`zn+E1={{Z46*5;=Vs2N`Z zOjCdm1H4MU(8{`lfe5{Nfv9Ezu*r!%OQ)u$wA;75N-NW&QfVQ#btDn(&hiynQ9CtF zs|i?K0p?#(P`zuZxW}0n)15VekmO1sH*yXv9wZbs)2F1Z>675eSnq8cABwyQJB6*q zQx!dDqR|NMG z%`VHzRK-DwZBIy2cw^Kx-F23Pei(U_7gnbp(m?FTyw`0=#OEF(l(EBB&B2_N@6uWO zi@84FQQTi*pbS9q3u*{&NbbP#Jqj$LP~4S+$Hemu!s}i3;j`2RHYpzQIw?}MZw-)q zN!WtjCe$CeCo@@prnRpaFgta0ghjLvrc}4;G@)__9FsZTySAa!9It>SDy!G93dsmN zfg^QVdbSQ*!4sdh_|la0%uG*x7Bqpd@3dLv_};_4rP+HQ6+#&H;=!rFeBLB|?nowF>n< zNa-~w*j+|) zJj!YUyMsYF`hkXp!W%Z@Y}yMBs=~H^6_y&ysG!xTUdIM=X=y1_8qX~t8oDbC->1o7 zdJ?~j1a7lZggW)Q8*6Pf3uvvH>M}l4d8ERtyIQ0{omr&QCKBi2(%Wba#wS zU~q9SQ3JRQX~N^o^8Wxa{{ZCTdM(apnfYP+GNb5!2J27a5dQ!s@F#YkLY|eE>MX^! zbUp;*{6I=S1yhyX&oVmZ^>wLYSmL9MfO>)HwO)mOl6%8=<>wlG17F zU(-0T$O3YDcDoBvhzF7&SSYT|t>#g*?Sf6aSI06Yhq~n%;C5y2sd39354ljfOM*G5 z`~KtVc83K}l|6wubU=$OU^wwR>eeL-i|H->Myr;B9sMvcC5sIeHZDeAsRz_8nuBFY zw0IIW2W>!mGC=VnsYU6g2h~zbav(NYW}!;(r0^$W-==DTwG>V}D?D3Mdo#o#wTeZk zQm-Q>b^c!Vs_iYvgBy7fZnJd?Ndq2abx&>DHR*upz<2zS)alQ!;? zUde#hS7+k2YpAXFS7!!aU8yzcmg>`SX2CxKPf=OaP_>rM*)+A+PSiNc!X|%Hsa=|P z+7D(bgKYfyr;7%Y39g?4(Hcch$Kj^SJlp`jmZTf6Hsp2n$d!s7#} zeF~Z>DQpAfZ5ZZ=q>(+4uYrms{@ls*WNMzpaNw;X{c z^lvL-w?9%B{-sBvjqYwal+);L(O8XjyMghU1BWS;#&aI6K`bk=cB$yjeOV_~4Ff+y zR?kxEz$=Rvp#a*nx2QqOFF?VEyYbB98-eO_5pAq}r8f3weO`rnAPt#z@DETcR+L+! z4$c>9^EtG-g+k~7IqC!s$I{$(o@DC+o7gY91@y-HY%Wxq%zG)VT|R0c>^%K?9)xt!}Niu2^-L-;Sjzw>CcpKCO)`Y^`%y zJ-~Vw8gRH6$1+M%n+m=PpA(rb)!fA?9^WQ2P|Bx!f?!?hP0Q(wW>3^#)HOuo?m7n4 z>T9C63P|oIze)NnT}IapzsP`GdSHuBFjgQd!qshNws>Q zKz|=Iw|Lah4$+@8o~K<=e2!%)xM@(M*31u)0Vt}KCEo#*#J2Q)N%s@P7FOD$ia}A? zFpWKBRalL~;z88I?JW_4??8k9r| zM#0d5%cym%@9ddX)HtLfpiteBIgN<;8&4CYS8>65$gdn25wx-aZAaWCsJ7cGHawH5 zv4Sb{%)NKjN*bS;G$F89_&@@V@eQR&2nQ3J)==aiAQ{q_;Nvg>7@&l}Y0sudS3do@ z?9RPFQrq*j6i#ZN^&5!c2bdMqX|sl{%Y2y)zTgXF!}`k=eJWQfe9GzR6@vD1?a+Yr zsr1M}jCq{a(OUrIoX*pQUwOcg7tmCqg4jLCGlZ(8b_DUjlf9T$tjqkm5?YODw&Xy# zRq^vXl)HfDlEcIaJvS{$?f`d*TP>!=3AFF?iOX@ltj&tZJ|(EBxomrnQi-Ot=~&j4 z@$z85-DNt9Mi($RMRUL0*_%=<)FP{4QF;&`Q--lloRUwOoqZrT9I=f>LYhERmV))! zVv7z*fT>PZg`6pvYJDmijXK~H%SSFs8qfGK5k+W6W(QfSp`r|p?gO0s$mq3(l2>76 zJ>X7y(&oG?_ep}+pW7H8GQX#-SKP$6_XBAXvv6xX^%Gw0W~Uuiu})p~r($Q) zvXQy6Ob1O;A@(WA^Cy90mnQ|jBdRJ5xQe(W?HMtEZ_2V%IUSi@EvPFf{IKpSQL$Ow zuusH|2C(d;_vQmJ^%#U)3DOUvq-xON+r*Pxm9Es}!CH}FHc41->JzkPBcge99$bYD)^!k~)^In)Hfq)js==L*h~ORZ*ubgMFu|!A)0coY{Au z5Q^FPOD;l!uovXY=o?O*66>f#3`n!Mez#`cNVW}=E%3fDM-y(y}bWtlE~Mx>|& zx-a}dWxcIk+X9cdJ0IPg@$m(^gt4|S1L`ekLlVHBh!saJxyBSgS+z~+A;S4FFLonh zj6kbqmrv>da^7H4`qxNRYhYOS5Ng65qb}#bk#(}bF_Oo#I{yG4qe>XtVcfz57(KRT z)!UyFtgUs{0^>h3pHXqL)1C%ktw!vz;s&+qYd>)35$Gy}zTg+Y5?1NGVqFFRkgrW; zhiD`SS5?+kxOJ1_bk%y-PSsBSBo{}g)7QSoEoXr%R`1g@fuD#(bwaiZEIwrQcC*wK zJ++9dS+VzC*brNNVX>cRfci~4nzM{A+$O@!>DD+MnTDn9sHz++l`WPvRoU#o);rr^ zt$X^0`dWaX0!f{9Qkra&?s+y_t$pQizc3|Uo!boE{7RMBz!Q`4BdD_EbqIL*l?P&j zoz7rfZ)G5y3C{L5eKqG3Snk9qY!ep?LGLVJDZ67}u20k(gIkg@{mqwm-M0h!fYSCh zcXa{p)Ordw_Z!mHojTmeLOH~l+qp&q5NCF)Q>wPKRwybR0Rxf!JvDfLb2Oc9TL35v zDQc~wo=B4owKjQxHCnCMO2!Aw)o5MRGZT{@w59C@vBbT$y0&ZOK!MCDu(7NX7tA0n zBWm(vQFWGIKQP z4fZ}W;v?M70;WKPRO&6uoFIG_J;5# ztDGp1VXbQ`JVXOew{wh{Co5UmS3h#ATC!%&B?H#2D?30R6KS-f&)v7(@FSfqR#)vf zl6y^F#5sVvolVtc5q7L?I{La+-Z_C$U)^&|+JZf`FR}vH>7o>7z!o`A!q|*5-!s?$083uYqX4%9#PbxbpM(*DTcvybO{3ykoY<;JC+xt>RbXy75xq)PHibEr z)KsGzPE6$}17yHd`f<#ZQ2$PR8Wjb=Moy5ePTT|!iiw?Fu`78S+}ah zDO3eON#+{PY|b(y{T9w$zr?zs3-BQotxn?1c=!>Xr_}(7$Ha-Wk7{)a+igd3kPIqX z%?7hfs?O>`>jpJzZFG(8$q?D8dl(y7wANUdxJxj7TQy>9GXnOp<@7tmVDL#NI%GVEE!VVoc^x zSk8*aBjyK6)L0H>PLP4|_YFuwf_t4MhR$1v9N_wEjO4;K1EV>uw=8iK4l-bRDX0e< zc#pq-Gt3rkZY4ic;20i_eD^89o^5)TUgdvP#169fF}HC!1>vOw=ggzGN_N?v=X=~X z^E`^}Bd+CI_8@MMUds!0IjqT!8!+w3<`p2BBZ+;XR~UehBD3)b1mmeY1E1p@AGqp3 zBc5P#ni%rJBWWvP)=cfOvm~Hy%%jY=@rJ;5t|tY*j=ewIKA^TF*?mKa2gtP!rvzZc zAdctM+oMPS0BFqf@6dsfh#oA{uFV^Rz>;k{uVMsdnrIqnrh%rKXc}pzfu@>h8fZe6 zJPAdi&xjI?s!95t3#Y&tlu8Kh1i-@a3FLek-Bybr7V{R`0yhvj1$=WEQwONvVDkvU z5{6M9jC0hU;5zOpe8>wh_=sC3DLlp;j$mlYAPP)%NLJ*>RmqI11geY)DwS*JF~|UO z7~lyDZ3aXwkK%KdIWsZOCMP(W4i6CLF$Qrc7l=T_d`uQTa4`XKF@(XG8fk|H7#In$ znWhI27)|~m0u$db76`y|HZhn25jXz;Nr~f#82v)9c$=XCfy@VpGX`L2G0Za_;A00r zGeMXKuI45WJ-|;82{2{?c!C21h#Ed-Aw?Fpqn#5C%6pV zO#@BT(?HNo3;_;if(DvtplDznO#sa_8RiC>V*~@-&_kXeU}1t`0QUsbK-rpUpdT|C zrh&Y3HhfJq50eRjlM2_KWy%&H0UT6u%!-(&BfelLNyk#k2!t+q^8$X3)#sBGryWcB zXUwg20+NnUnfjY%57g=ivo&hi5IJ_nBOGIyb57oSipi0f5Msr4_?oiF2PYBwo3jI| zn}NVQ8P*1HML0|yy6o?eZ^T(wwmCuiV)BCS(tZ0p40*H`*|Lu2QN7S(C0t;_Gr zL>k(5Ds0_mdyqCO47(l1Wfj#~XU5~^R9ji9TMAWy_XAam&d0#S=fYaP!;|wVOP~h3 zP9aU8uvc5}P)E#zdXB{J_U2mD8!=BS=1*Fxv>>eek8+NYL2WQlF`xHIRi@dH&ItL9 zX1D(UhLob={FviUiWS}ROa-mdvQ?Wu6Q0Gx5)Mg~bXFlx@`$ycP^cWhh&Hm6EK2-J zn%ttMf2lWSTS9@%>E6YG#t4u&LZ}kn{7H(yCq5vy%WZw^Ka9F+6w-GNOrdIfG3p@5 z97NRV-q#H4hi;)j>0ZRi$&~f%7Ygy01O6aFy6mAD7~sk^3c660b`ZbRK|uAljuaRji>6wO z-JGfDPJdOMy`nuV`kP8A!VcvPwbJKmC0;wo>O? zC>vKN#0XZkSnX||&^nGiBdAs_f%g{5g@}WqI}=-@OWA!hkC6)Nbkh2pi*bp*@9YQFzDPG5M?p%P5F^EBXN^273`}EmfSKkYZWu(7v0#0hJR!sIk9cOYQD-(Wh$^-W(&R zV8#4?uxN{9ZU#c@&Z5UFl*#H5)vDAj`f?NlVDmZX(zWUCJ6L?fO=M|}fMu7&r{ncY zecK<~0$_Ry!H8okO#^Q8jFAqnPffR#q4^V0a#c$u$KF4Tii!sX)UNO%E)yee3Gq6= z8>sy;weRqc(V1|jB}_F}Z(2H(6ZLnvwEqAVoc8JtuG6%8XH{Dk&qR!`%z&%V)VWpm{6M~$ z+fIV8n}c|WbfvXqk7hZ?%sZQU*^FbM2Bz!D7LkJin#VxRu!1K(ovgSxYyv)~Wp>=< zMU{f4Y$ca^YN1DyA|jfSDIwS~9SJ(_wG_QzfP0tyB^Tx^2SiFI zL#5!7J>F$lC!_*@n4gcnimyADm*bxi_0JFD+hOa(gK1io_0B>bpmny(RJFWgsZAPMiq69o9;Yx*SJ4Ok#7^(Z`iZ7WY9Jn< zLrjLtTE%Q*sFuCg+qAd0=5tW?Qo$S^XJXT78O8@-K&=(&w84Y&8fvgam=-X z+gyI$+{rSrN6fXPrGB14BeM!w zYgO%B0RlR!&G)FYfG2HrivblM;voEQqjRviGUK5mZT4vO))Y@^@d7Pvwm+xX22<4Z zFF>aXdl7W1*4$iipA%{}E!$mieq&k}3QJd*;4ndkmrfP!~?W^w*q za*D!KdtZ+>KjSM!{s)QQrPHM)(@}zqIGn$Nt*-n?LD=LOeA!)2Y+dCbbKm&t$=_EP zJx=XAV@}Iw80g3=-KoW)LN9?R*VGT8e+C6K+M!0C#Upl44JW8{YS#_tm`y5B1U}C( z>(SJpmgtE^Y*sozbf6Q7%%b~i7TCVuiA@1Ct>7GtduB~-zMrMEAGrjZn-r+P$5E}d zZK#4U!cMPH>IlIxjf$m}(Ek9$4Adhcy{8I1PK#@;s#UG9vy$6=WLl7WiIzXLO3*oP zmez5Feqj%+plZS;cv3hf4OK~_uBAh` zgUO41{)22EJejKnfp$BT{K~6QaJJA?g~0PU?{}`!M_(dy-$*woq>xFTiK$kAGr0LM zIqI_70l)b#ku6uFtgV zHZcJz8<_cknx@X2sx}BdJkGs6pQ_TTZ}%vix+0&bbkXY;0K)Qg%VL4S@h$j`T2)oGI*r@7f#!v?@po3_`hbpSR;N-L^wc20@+9y4ZlhJM z-p`89QkH2yNocCfx?_U?olcq9mpgOfNLN8^>f8xi608g+V)|9BfVe8S>Hs$uWfhDL zvl-PYwBYlIPS-|iMga39X!V#7{NtDgx~sD-y9PaACgF^jwdvPuE`7tPHoDy^g4N~# za^j*KV4kN&jRNV}`y@?T{-UkT{F|sy8mcve&U%198?Ap_t?GS0oOLIsvbNXQKpviW zof=JY*Ilb(3<2>xs{LB8HmJ%IoIvS)JKd;vS1VYQvF&{*tNozDEcKWK;CT@>R_$L& z4?bW~tZG$7K1U`n(~H#Q`Nm+T^z^n7?#FT~ajS5zlH5uy_#HDouIry5R6V50U%yeC zoRR?`W-0uQ^x~CF2JFCVx%So$6^}9nK)d%ZJoP&DOO&jEgXT)@1(diHHs&4XQ69lr zOP3~5AwmPan>yZMywOv3($ZXGOHFRr*Z% zlCjOs1!HWEqN^7s!#L znKtu|pqb7Vn7(2tG6KZCsvMz zv^MSm5)Q}^aljl&HnFQwu=DUC7i0QceJAJO$G=Hv9;4dFjN>v$t*airzSKe4^ExTN z{-Pa=ZB!T^at?hu8p*YrBne6$+tjnJ-1JN$rA(G=r^Gs{tU7UZdG!1NDzepGB)#75 zcoMf%+M2g30r0b$y*nK-)Lg|^9?*QorjpCQaV!T5DCFGLot6^3%l<<5{Sc!`QDWV^ zf70J;?s|d#%du1m6~2ca7(m6ot%m>l-*dja^CG`M9w z<{)(4oJ=)LY&qZ#p+e<%Y$(RxGSpTLM?ATSR<&!&vgEPuRkW5G4yEq&2m5~E8of33 zp?9wd^A@|S7i}Z?NKyG6VOFI6;ve@OAzeSJ!PxEFC>QC)daxJxo@Lupb1$SgLBw5Z zy|-4?e-Jq`R_c^40LR=4DD?X5&Vi(=mKI#=$j&D{HSe!^c^j&-%a?l{o(Ygys;P@G z7+(^0S%lkEwVHC{0n`9I83jGaIGqtXMb^>6sn4u zhdgp%L5NieSjHq-pKuCtbIj^YGG%!u%v+kRDsCq%d_bF!%r~60mZe4q$?*aumjh?< z_?FSoeM4oZcfM)qBxPK_&W7z2zzYY{H@ zN$K6aQ@5OT4VX3x)Z-_a)4Gi^0G{Ua0JE~x)?NPq6Oy}0`207&?aUW;X_ zww!%PCi>g2v#beFNKSh`Bi{OITM7n5lWGOH6|Y`p7SrkLpqnkhW8xro)LwQBAc1Qo zOIY%BU+E(Oz%VUq)~9IYrZ&Ez0^`^uhR~&m~i%InA9r=OKZd(17_Zp*S!;d|a zHlIhaOF7FK&t{`z6fJ@E0;aUx{Ib$dlykrQOH^5h?N&+oFimK($a3}~WOYO%j?4rMyS5<0#;(6hE(j4;#V9rp zaf4*bB6xP`-v4 zqYJ6g)Kyb1e99wMcHzz&z?NM(Z*#T;I$>IaZM?DZ65#d{LE4ZO+fugMU%9?u+{B&y zv=!DAJ@|;INV@Hy44paxK^WUW#0?&308K(^9{zTYRjCz#0u({ZjgF>ea=<% zXsdOHbC|WZqf^5jwanUjLw_yp0uGO=an9A9cc8CK5eFhqPfPmch{6vN-l8*}f5ZgQ zS`AK)a4{iO71)+FgarmAYR{;#*zHw4NooNDaBMDmjTY9edT+$o5Rea3f2LdZ4%ySG ztuOo=vo9(*GlTss`&Pl8Ga|j)+l=N#to^ghI+qxnZpFCF(mNFuH0Ae<_XT=}Rm&XD zEysB${%3o8C|~LaU+UeLa1*ET+J-iFiQ~P8Up{XPw_u(0C9h8Vot9`NEpZ+&W5x<6|Mw|j|euO zRsir!3)xU31F06pSR!-}XbKKYOA%N3a{&t-q46rFup1Ke(W)TKg9HQl?m-!uKyM+zx&vVn=V&>v@fzAx@^%s7tQqKIG!kkvA zSlQ3XigV^xy4hnT(9;pdj&ZeBYh9m{?1J1R`>O(pH=S|9IIpf5D zV*|KRH<^O&GUTc*0OkPN6l2JZTZI`t$sNWoh#iAmK*W`rrhWmD0s;Vl#?~jO-lGxU z5_?G#av(9V%nz9}7PT24?i_Oi6U0zikJMsw3Xlv8 z24RPA<{>zMdyKrr5tQWfAS7dvBVv~EIymkFh#YH9Pcbjjs{@JN5O)=kLCAsN*`V+4 zaoMG1Y)_@Kte>eT)2Z>31LoSMQ-cuk#P>BiP)AstU-a|I%nv?k>Q(sN!gR0Wl}8xN z4-W_8GS=VmUt% zNq`oy=c$5?<0FW2aTSTk<_B4IRUFPM+%p_Rdrvr#B$Lbl#}Rkqs7T0(w8Dci&SnQ9 zFspIQqSccWO+hAEQc-FHsX(}riG=!&qXVeW{{VbRRfYs$*zO^02`eoB0GI~bJWh9V zVP}b-GU5kknWjC%k20Wz;7S7&LOOuo6Baq@Y|R5_BQtoL6L^7-GfgxN8euVjW{cF` zU>JNw<}e&U-OZd$F*t#)fJ(-<0H zaWuvO%o&0h0El~AH?f??DR zG}A!SOlES>^FGiGUsfuRrsGz~GE%*F?cw*!c9K;{#X+|B$)5-CW_U`9cM)@B?> zUIYbklh-o`$N|5LS5l>NZ$N5rQilximQjFgfl~RXO^baLi22#0t}Ip{Q3K zPis`8QKuGX#PAs8Pe<|hHI%hPz=IBX@jDKhtyLf+dxv5{P^-9Zgk3iF)PB=#Fob40 zTXqh|a=gr6JhUPyLok9!>_y!e9tQ4^i{7mL78vG84<1?gC>_|8ud7Sl9 zF0}19*#i2FJ(^OjXCbEA?m-N8j$+ws>KAQ{PS~~Br!wab1LQc4or4tQzKn^g(qmvJCsYkW4CS?cOdAl)m0>n z@zmlr7G~Huoh*$-M#mgMrZv}De#>~2b$%Y?TL`#}o{5pyQ+A(R)+q!(MoyNd+Z%D) zh?iR4s0PBrp#c@FuHl|oo@aHg)qq)YzGQ6Dm8@8;xr{YhLgM4N{6M8wR@B+Cea1eM zPo=X$+uLo~G8$V^Y+yz+7V@64YR?{Eb=9T~q9u;pd7SiI_WMuDooc#$y)UQtE#@*c+0u46p zZ*eoNiMFB%!Cs7wRf2bJ+}|)z!?W&Sb`KJY%v&H~L{e^6+Io)LtEjQ&1vJ&0EH38* z#E>mT?Tnc{GuqaI#|bJdQ>Z8TKvi{JM*BuuHTHV$9S2?`UMfq*c_+CybfV0R^Ws5P z^hG|P;qlai<<(aQCM~y9V-1`iGt%@|^x^UgV~k1{NvA|`1)l76IdzQx0IL1&hf*G$ zt7)|#`xB^GH3|c-yXFGa$gUp)0&7UR(CdW~RjxH&pKC95D9!+42h<8_Sm~`O_+)=F z7wMjzTQwtaZ-~XyPD1B?dX&=Z8%1LhH?x20LCK>Aol!RKRzEWOt%A=}xOIi~mU@MD zktbH2?+kOo_<)6N)C}P5`kj^fI&CRX0d|wB+cedYk7| zfGE+|YHwCPuf%;5`Z|j!ae~9S&u*n@y-isJaA!{Ry~U~y@0c9+-gLUJPSKH`8dp>u zv2{(6OoSkK82Iw=Cz-2T=bW>{L*KGBSc&u9MtAPs~8^B~pQywt?7 z_>_9uwiIZH-Z!5UgYoH$JxemDv7a#M>s>{DwaxEN!Sgyb*4L@i*ZOgXQ_diB*joKT zVlV`?OI>%XKS!WoI+a9KHJ#p0Cmoxw)UM-zI)T@!)2*7d1BGtl-Bpx=ppb*irL0wb zqjL!hbsCEl2V5`22Yn+xlhvuoK4H;XMxBM9$asjBy-GPdPhuuXylm+A2uk%zFUo?f z4CuR3zN53`?(jrb)6#Wy?QxUXm;9|&;YtCx2vl^J3NBJc19dI=9U->CYcL7(I6^gu zEN%k8*4?X5M}7e61Cl*OMLAJEZ&oQkpFWYu^FErbF2o_&bv{DG75;I;5_y5^@r((A z=ORck+6nGZwkyw=5hDbTh^OWi_a0#?GsjXWrya))CDb{9fQRM0IqtJ+h3sD0K*vGn5wbPMtKnw0$SHAFa5LPEBcnZHsY$hVt3G1<@OK& z@c=aCs^fRe4kav%6F%1SIxQL@^aBM=-S669aa7e2-mLEQ>b9I=jL4N zp4P)49LqkQ%{y&!rHJt*T2={H7<18q&?}_YZEPv|oce`ZG|Oc~o_mb-HVS8Q;zrBW zC=~!f2dEud%9Hdp-TXlB?j0jlY5kVkaT?u4H|c*)=)!RdQj2R9F(r>bQiE^p>PUZZ zGL@hpfY|s3TTxn7U?gslxeyg_*bo&#O=9mHeMsA>->4~DZ5ih?(@jQ|03>d6)Z(}C z)m>{^SgAe)6>DAUtxZR8{{V3jTlWBL_=iN}PA#OVeE$F$3X6*h*rh=*FIcL&%2>QH z?rU~wH5J&P5%D?odR<+%D5w@+skF&!YQpL=S$r4`b%ytQEI2|q5?Uudo>PLes@h71 zF22Bg#V=Q-wHF8K25Z+)!*cCxcP20WC$M0#ne_KtP}sQpobC9nQ1_R}A2JT$_uA^W z9RC30^%}P-Y+E__iKf&CUr(zC88NJ?+MEW)5Bs1d%eRL_!1F6^mDLWRSOPgXjP$rW zMZ}|ZgClF-T6#Fjm=-$Ls-$~AiI1ZgAex(D`fsxeKrFxRhY1vrlMW;Z(Z>`498GyPrwL?@ecXt4)+Fa+H&Z??i zHJh03WAQW4*A_Lt3GiS?Ql^^2qjMeXZBCO8xIZ#Bhf4NXL2sFBSeh$Q$oiK@K95rL zHrE_@mZrk`rm*#lL5l2Vt%eBmDD{eT8;}y&@gQ30YZ}9kVUZiO@9DSkGp|I=Wf*4z z&LI4TjjnovFazcWrlqGRBRI_F(dqvHSFLw^?9AwD!Cis<{TM91%^sXrr>`t~FfVS4 zPNe?n25@4q*raYC_bO_&>o!_QBy}gIKARMEz;2A7)uy*wb_W>j{7W6Q92*N2g57Y^ z4^FY2-H{fcmV>zRU`emK{YUL*Gp41#OIf>8a(?8%YAqW^KH}@YQFUW^J2T=1HFvd@ z3rdAk;&o|%O{k!3P#etUxmQu3L__XgqR~~9C#k?7bs%dr;*Cb)+Q~U%7n(PXA?oz!ybyQu(Y%#RjhHCdX&-E*mW#8BL0!Yrp zGcMKZGWBWeM)exZkBO|cUa*b^-x!?0s(&o)@hIxERb9?#uwhR|b6ZVx*aHAS=P`{+ z^b0@nIRMVuDjM2%1s>kPkZ`u4Zo=ek6DF-UZO0R+SEfzQR1Ll)Po;HC^&l94q}Qmh zY+e_$FRN6nEAHTl=VV#7^{3iZk5G zlUmPKls0gqp*nQhTHj4o_OJohb|kfwKje@Ebwxqv%$Ao+b*t&UxkTV#@dA2{W1Iag zB4l-$*r;tlmtY@}0@qfa&5B0scO$7Tsz`1=Wd~D0uDnp&kCO!&O4hyhxX;9cY64ZY zc_+;0HP~@tIc{@<1JJAS_FZSFN`(j7GdJW7&uZ6c!l>X5p?9$970`fwB&cs)vvZQ) za2*{&`f9j8GnBo%ilVU}AWuTn4PFp+=2J?`R-CI2PnkzGRytG%WcZxAx?ReS05hWR zS5KFzcl{a9UAAiO*yCx(QVJsq%Ajog&bwRnDvQ#rZfoSb2BU03D`n>&UOh}6(=P1AgULzWQ-X*o6-javzSH4XjKL`r-7Vg{lI`>O+M~y zX@60TOUFH!`g*DgUeFo;0QyMkDzLaUKmp%5tdKm*Rd=J7E0YwDO0RY^^#FCUv4PYL zWx9(Lvn~WFQ|cTsZ{rwT`*7IAMzY$fEm-!L1lj00DmORGOrx=O;iYO!)xN?3?+`sm z)f*d+h!dr^YOBZbCU^crTc@JUn-<2$iRONq_XE=e11!2_r`>0{yvP=k){^eHUx=@8 zLVY30j%<6*#2Zj{XJXT*N{3nblyNqm#I0?%%oEVecT26KAY^>OsM9^qm9(1I<_h(e z6*N-03)?{H($(l`jg}vG#Ga*nTPl1GB-^62|DU4 zSYiM(qfMtfO}C7n8I9=r#J=DZNI4p->=|CALf9(^TQBh#>KQVsAggeHQM-XZ)7Y<@ zNyNuhk?2x0p3J(I)Ry&IYRXZhrk2X`Pm?I;8A|;%IBzmYmGfoIyB;Mj(`~(pbI(vF zofPDp{XjLFbwG;OY7a8T%JkKLVR0PdYQuAW`9pAx#F*H|mlj1QU4 zzm2fmO|6w4WF1<4T{VKsfr-kO*?sL}e~A{WeZ?sofSqevY3uhNcf_HSPf#W7_hu#5 zSG#2@1e01_z|I7r{W=lu_dr{LH2|QK<||ffRkG2wekE(vZEtFlB_5{Ny0xcmN#X}J ztk);CNM8_BbsA(P`FYiDu7o10#_W7VO)XZjzR{0?DuC2EthdilX|(l+^{?mPK;=o} zf#6C|yW8E+kq>sJ+YZ`5QS&_e>Ajm9iO-qWWy@JH7g6drSONuT($`f!=F5@X+C4I> zy@!*YBpT0B-{pWKzNqclP~*vf*6l7qZeRtGLZHTc&T5CLZtRne%&W7U?am+{Ow<_f zB$*1dwiIW;om4KwHa|ZR%j~al^Wp?_Xv&URd5QyoUpP6I^(}Qf1~WP9)4jHP-vD<5 zS5>zX%t@M}1CZwcPOB_hYub~Jx{b}bjt7_xZlwcz2l)WSx|TqdVR_laLSJn zu197Fr-|5!PL`b5z_cnhYL4KDn1rcz~kz1hp0lRFzD$4vVWgO*TQvKQo(8Wo~yl0i{T{Q~|i{Ux^0O)wqRd3x2qx z`wtN5U9~LMKk*W~G?mrw<-TWTopj5m_OMYP^WC1t_AV58lpdI`-nnm>t$(QIx;ati zF4tqQf0;)0(FRHr7#7qG&FxX*JNi`C5aF1@we3yB@$msS1Q{B^rV z6p7>h2a^8)+=Je+_ko_`ovOJeOrCgw)RpAoP>cb|&l1aP8p57HoS!_(p~B-Z8OsyI z>e80M-8of&Jjz#Y0T4L9CNoq20CN8Th}F=P1YyXM*X%k*Irm5WeJGkCX56tdj=S|4 zBp|>tKsjDK%GIZ5_c_3nYig}_C1$boMHfS-s39QC|oFj3;KA+EfBGOTt*zO@+Jp^x>0)R2E2h0(`Q`A zuKnq^sSE62!B#<4W;k5nc`-d&mrxh^W4H!=Jh{ZaiFAkyyDomRk4XSwCg95i$UcIA<&J^Rh9G!(*lkflbH%50zhog~_ z5F`W%3F+>RA)^@~rHqgUN$HN!IZ|NYBnJqL21P((0)CJZ1i#OI&mXYuKCa{5eP7r4 zKF`;wR-GD4dkrSA$cp~4H<=h10blg#!>N`tz(9e{1RS3wBp=e{25hpoKWLYr;BrDq zxHzK$Q_p5~e_mxP!e%Lp%13CQg__E5WH4a+o2s}HOWpgb#$ubFe7rTJkug(OkO0AEEmehg;Kw!&rr4XPgN|I`T8Jq6Xx$wNaElhKq@HxVfk?1O#T;| zVqcD>_&e&H)0>dXjnPG#c$*O3#WI9I3(tP)jYeOZC*+3)Y|<6`N`@dfVKkcFF;2i0 ztF$i|H53C~Q=Ggv$0r;>zWBuXjJzzHko}vIb~=gVMqainqf@K|$4FUX&8$;`3vjnU z#6VAeOwZ0E%Z=xS9+MeZ0>JZrsEkAZX!ma}8U^FGGAc8Up;V{L@pke4Q-mOX86D~3 zM8@DRf6g==kg5yx24ePMn2=7TNy&XPkx*j!xPo?J2|8@R11(M!R9J#E%L^)eYbTJ* zj+7nq^>r+IOGUs5OoDbs6A%+FhDt_L0`!~-h(~B|@=FC~2>}t&1sxIj=OFz=mHbPP zo`F*#@i;9V4NL_91D-N$(mq*q@sp6%1dl8_RPf_#%Y8i=ZC5nkGE6?pnFZf#FH-y3f8+D382GgiSAtKd3Vu*7RRi+W`9{=N;<`I#H#Mzfo`qFF7(cjO@D>>@Dcb<&c$Zx z6d>SHvr#vmH55BeY$gji1MGA06LRRjYQ6{tJx5PK0DtWmurxO4r?{Ak(NavpUeHnP zpb`Z&9-UqHg*t)Q4CzyA;RhS#V_L^56$D0V)(mR#)e~FlLqxo2)lM) z-ZZYIwr0bG>YrX(aN5R`8=?WJ6gB*4W$-i_$rYzVZzRFw8yBrTH^<3q9bdw>3{OK@{XWO!vSO;*s0ssI zBBD?I!;^0ZKV_aN9@XyE&sz~amo9nK(A0~cU=jy`wo)O$TFaV5xmR8^A%;m(Ty5IE z;NazV!($!1&UIXItMG!?uP)bhIu7!&OwFuY0skqxQQ7Nx@Au1zB_i@v`w~jR6qI=Crv(s&#vev zIJeL7l!VfdyQr6S;Gss?PRNm?MwCMm(3Te5W9kk~tWyr)^)amJd2M1gTf%GnXGVXh zjglq8?f5R%@eQgEaUU$i##}r7KS0FI!~FH(amBnK=Wc;Ub(>{h%MJOiJX{l%4gEBz zGGoCartZha92(h$ds5AozNZ9|f3zU<5n0@Jro`C0X5GZG!{7kf(r)V%0Ol>O*Ni82 z-ww54-qYlJF4(FHe7@o;Wa<|U&rCATa=Rq|sqG}E>{2KdmzpPeD&AGYKio@{)g}Vj zn~nO5j10J+h7xZH4{*?lKQWV`2=EQqAqv*7tF2)l2|3juYkFF#x+N#RzU=diCR@Rd zKPdUgyZs!v)J^ks~0{&6d}AeJ{8AvE4!6eE+n!xszlmN^#V3 zZkh8x6Rc=C_fqn~=rnn~<(UqrZ(NHHdSI`rm=I+koO!f_j65lA=`pkqrnva^k8jPh zN8@K6#VfeNrMk*cIqO`~lL5T1@&Y9`L9h6-PBieDW=&z!)7Ty27JLR)CDQ#vg&2$cN=9MT{Teg*Ks^9ARbm6+b{+Khd z#IZIJpf{Xw<{?nrg&pwU_lfuSybVmP@~7G@l`EH`&zC)3-IX_#>CSVXrH*pztOZJO zKn%@>(x8@#Ip+#N`OWtpzHfMJpi9sqd2(msZXeALSi`+%FWmYbQSQ0@Nv`+JO*1d9 z$5(i)%)6XC4uQ>bn@1_dq+y;xxCiNxIxFH4X~zAi2}e0v6Sa0lO|8JHf}lJqBmb}a z_|M=vLrVTTc&#+vQ4=iNc*65gBmMpAfgn10e`x07eH~~=Bk0P~Wb2Dmx40SLkrHFlW}64s{cDHP2=IK^&+Hqwgvbs~fWl1OTOI z)JXJ>hG2Gj)gO#O!lpb}g%84LRh~%$0o@ck=3bR!P99E>eZDERH;YtLj{VQlRXedM z92bIXv?cX^%YZo_CLHTu+_-xu*xa!6CR@*723-nigLwrP!c3OxSe*A|xc#bpf4zpU z7`p2m7KHqXf21PYP$H9SNxEJAE17@L?7W?CYLMuPT+?>0v z3v`9BL_{00-gnD zeYpzN3)mye0bT$pS=yzv@AWR6zjpAD&x%YCvu;k14J+MR7tVWQ zTZZEozpV19UM0!oM<6V1PT$zp+sm}psJ+c9-D6N$-n2p(o(B5_Em~C-XGo`A5}&A` zM)z%gu1`lj*>)jOGHd_jJHo|(su*nVYu9i7;C*)m+m^dp`Lepsv2Duj8PC%AwM+^G_^)E0gE9ysa`?g+?lW%5b`q zrR67c2AF|>d+mS92T@cBe!>9~t$Y%!llw1}WL7kwo7su|5m6DMo3A-ZWtd2mvx=k8 zLjA!&c~|_C)3hddb32+w&3~x5@TaihUdim#FFYh(ZYqKCF2FSeEL-4%JxY<7 zr96Z-=!-n^i=bAn6Da*#Us2CO9)^jxuxgpuZdYP84v#6k0#2m2ZaQ{EyH~U~KbH zErWhs-`QJGz{(Rz`H`*+r#b`Ky$i?7#u~Y0`fDs9K(tOiMR$)VzqPs~#qo0q`R>Yh zUvKzaS@Raal`-4z9Frz)DTs=ueH{yYWPJRE9ifk1_lf>1N~zq|SJCB6Qti1dKDhx} zLzQ?hR#U~;30i4IA1!`)hr+8(Nt}v9Ej!`HME$O=A|g&)=yu12`8ZYyDsOcE!8)He z3!#qy`AZ=~YiUHZ7dxroJ|T1&SbbsV)M{*LB(9P!H^)Hm(8xG?J5;jyNIgQZjl<)V zs5Sgp=ddP3xGdlU^wq+VcX!8?1SiD*=$L)Yv0G|p(EFk@-g%SE^TGlevf;X&{hr@& z_cA=qHidn$VfcR1s4&js@*#fTavDT&jK3YAKH{N!zlQ33R}{-m#jfk3+^)gY_$sC zCS$&YMSqdn#aJvuANwkG#ZG*vEm5w&zY{v9mIl@@$uFib7tydXG-5A<3_nt>W_1iI zJz=|;QXx^A71LPH)Mljg=q1s&sJ+~dS3Oq(`sfCNUDL9lAoavcyciViEtp`(nnjA+0YROZRi(_KJOd&goD` zh}COamf&-Q@dO}xSlYfuA%4;uxFcS6rqLj43nBSyfsYTCk7-@gG`#CX_GNcB;0$5u zyho-6mwCSUQ*=_a9o^5+6+>(>z^0;rl=Z2B=TldY4qV zSE+N&w-J9#9FOWdl=&OTCmKCmvv{E1EvaIzqHaG$4+J|wb(bhR zV(QQT@ulC}V-E1MycZwCy^xlCBMuc=gQ>lL;iiQMpDNJ46NPb>3wzpkPY{9mXeH4Z zue+h1}uFfXfumB)p_U!2?Z8B;98Q^A%W~-z(w+=Ekv}WowK(g| zat`jE8byrW{LK-&y@GWhr#^EHtRM}(c$lj-2#Mkd57d25t(EG}!FuEmL^x+XY@O>3 zX)TbRnWYP?8JI$-QiN=?TLwKK;~n4Sjuf=mN=m8CX2j9;KY?JX_}1Lt?(C*bwkI|} z^?+*`UT~xlK>*Kw!ym^VGG1Ok5v>7bUX38^#X}W8-PS3kbsX6mp@v+-l zI|mHBcW*%29H#87Zfd39Jdvzn6FmC&SgC-3@%Z{o=n$EAZSJ^3d9=K`VJrd`V#pl! zrm7-fn{WP6L;$zxo8DtE5HDjxJL479CntYhkBC!vxmL)F}MJUb7xG(N(&ln7vP zE!|m?UAjv;7C$!KW}_S`tlKte;K2U@m{JjQ=`;n;wZ9?c{a&T_e}G0QWJB*hH#3#N z+U4O*^%`&!ilF2~`@olZE$gEncoUg_%Q*Zi-4rF((w9xy1iH#CZ}@1k3fFQ*Iob5` zWhAEfq^dQ0(6Vc2>)x1nKYxMVcJ5uH6Q_rben_$Ay33^DKGT!ie>A6^bkzH2s++o@0&o;`0g`kwjoel=` zz*&5zux>BHmv>UJVk2T%wbZQLFZbg{X#{vh5Suf2D|*dyFTvQ=W0VKaYGT&J9SNoxR8um z=lESd+f`RFLs#SrM9quSgXdCdE;-_x1q#==!A8fM=$=BW(0}|mofd?E_Cr%>5TmJ) z&l+qsMI#0Ye*9cQ$YM|`w<*v=4x(mNyf5NVk^bw4$a^DU%DmrBk`HcO4xUX=lwMtV zyei4~({_o7kWdD9bS;8gYW@e1A{93s+D&DiE+!rAsEW{dLZvD;0CZxPAuo?ls`bwE z6M)W(`n~T+^+#Dqf~3QRtU^4b^1M5pAP%>j(bEQjsZrJY#!D6r4N#%G+2AFa?g#a< z@VzNxeHoBX>GA7KFLv{gN3AY567*QFm(=Kqf7uXOu7Q&EG<~-4dl~jp*!Q(SAS-;S zIehqVnb%crC-V9>YH*eYbGnkiCi~Tc`Fk$}9lI*})Spkx#Xwr*-E08QW!B3%siXtq zAQ1w&;@)2ZCbi^}1a*M>(PlUrE*KivRXi#;45l81DcO^4R5XX|hxLET+ejCz(+J^b z{9~t<)}NYIz61Sf^pqvUat4n?7(k{SvltT`edvMtSDI%pdDpM=P4dZRU~eQ1g>Ln;HaPA)>$da~feBT@(zeYuQz zNvzmlkudpgK$aWuB690qC6^*DBT{Lyc!1VVUJB9Z$Btd#%7e^;{ma&##` z)E;Wq233zeyvVhbo7P5zL#tq1hDnOKZL;ZM{|zVOVxWpdfM%2Lg>2>9R4@&rm-W`|w6W#az^Genk%D z^#j@SY%~x2UnSRWD!!-D8zbx%pDdrcbRr*3?c~`JKxWm;1EO>R#Xj{{StRurz^UMk z&H`vc&e6>s`e!ITYJE$w42GHRl0JrIJS#H*#~`l^4s-L7oNrS&H8*n0#@Ggok(iKi zZS!#GIRVjpF!cO;ST-<*iRBEa)-i=*Ey|~*AXQOJw{QXjNRo821qGm}IVIiL|Ky_C zfrbRIOwk256;)YkSE3yb6(hNQ4jMYt4(I#&MCzBP=3bM#`TtTV&j?ta`{(}6T?LOz z@V(@6Hq9(99(y#05iTRpQRn9Eb9RM~>}XSlvIM>1Yor$S%OBk&<36W;VQgr2@;5fZ z11ChA&XYisULpHBDMMnn)TK%JeA)SH04?dr8y7qzgjG;tH=l+Wa7KEFfk-?kCXIv0 z(`n0R#qWE=I8tH6{N!f)v~qEjH~ER=kTLFj6w63{Fez;u-~CI1gMtjntF+Z;q)iji z=b}Pkm@$;XDQs|Sw|;hop_t1($^P-HIRTZ`mpi)I`%+U60}_IYowMFlP?FFhq=6WJ zu(z6A5qfh6cqXxXo3EcwNliH3OY$5m4=<+;ed?FktlsZH6os)iH9l$H-WEIf@V~`?=r=?DX zeiHwuAL|q1JHTtUnW()OY1g~l@lD)%wq0x9xwEh!Hg;FKbTSPLd zho0J{j+Nex75j+*)^jOz;7gYIhVrlzFkvP28jhKsjeIG&yA#BXjZjY){5EDdx8 zB~mKHx0#I$NOqsH9O@|fp*k-gzW*h$Q9nO;bf2j>*CZB$_bnJRZ=LHcdiU%*!8=BnRz72wLr z|4@y4(^yRA*YR+i6(%iK1!a#w>70A-tb`t!sJvX+U#CFd-8+-v6Aj zXC0-`q}r`zS?%5nWnQn_(KT_{YDmdr7+%r((x9x~>V%5*9MoV-@ZJt`6T*_8D6SAF z*mSS8Z@l8-PYbqp+9mIRyH8w5F?=(v(u>uqBlNe$d&EGi06XEEw2(T{L}H^*0=5C` zU_ix>n)gbcx!%&DbZMc`MJH}8x2ZRpwe2~cv#P&ngRV(xcGvMe-AqhYtWoWpNb~Zmw)#|{ulYf@hUGFPdm)Lbrl~ce-DX_P zsQc(wKN9pOOuA)HA)L;jhi7z(-VhylpHB9CG}NFrCO&kx(kZZ|@zvEz_POFkVd_$j(aYmI zO&h2WQS3UW*}nfj&e28B5SF=o>ax2*3k(%%o*%YqDK4e4f z{ZD{$;dh(HA+Iy06g;jSO_vLALAHJTAHZa((mwjrLkU6C!SynWn)Mjj$|_fxD%Nu` z_vlQ6vW@ifeVCWYZSrm8!ABJpl3Mlp1B^Wn`N`MqLUfe+SH`IFjKrnYO%fIoG;d2I zUhOW!`?4+C=?5NNL@kG)4G6lcIz3_V)zsnlo6keq2P086Q08FYtqV%WMcNJNV~IYt zESC4|WBgrzOXp2xZOmJs!k58s>u6B9D}@(Vn#KlKeZB9z_8 z)ZbL*Q7hnhD%MpapQ3*(7j-Q!Up^w6M_*iGDG&{NPV9IXAjd6x%NMAGftT-rZ-25c zS7nQBn+Fv%FM43`(@2RKQ_F|TFuMRyoWtjMOMk61>DsBQT=9XW^o^lr=7=TH4%d6?T~<`(!>#erNI@2~#>8trj!MJJT_ zIAD+9>28Jq)|4#CQa+<#z%`l$K1VA80YzKwC=*=L8E_L5iLiRlKAzfLHvLbq%8~_h z{#N<~X}Ch0VX0rgRnr9iBzn2VwxuYRvMY^Q^lm*1k5FOnfhna$o!pv}N?5lVnVE0m9{5!WUWx~7M-k2*$u|=1r z3xn|i1PwMNncD!L7Tuob*zcxZP`2bE;ku08+lY7_`VlzOop`-Z`JV$?;agW5cKhz$ z!^o)>+mgri10*{JjkebH?6=0;kmmR+Zg$N8(o>%RdpT;=+v3ZwA<~G^S(v(wc}|wJ z;t67f6#Q4#jhZ4nk;Z|3fWTIRy;$Q*;ROHxn22=5_H+#6}&Yk zu@L~au!P>EnO&?G9=DlU-h`zFK?^(7w_i)hmc$>fyU#{Qcg)Dtwg(pz{i2mWSrl4e zXWN>st76dqS$MCr0pEc_?L!eDx(otN)==59Wy+W4P zEFrM(S6huMpuk=>)8x3*J??bj@N;+(U6@k=-IJW|pBkS;opjHGPg=5Ci^%@*nCc@D zI;Y<9cxjl~#d9Ka@=r7j@eq98Rgn?N+4)% zXbxW$V)T}QHCWdtA@F;^NOFcl?dSvNNP_|D66hx|r7|B#@5k?iKYt`?b_W#)jo)@o zWQmI!I=`C5!u;HICXJMI{@$1PQftH2oUPfDq2) z+$MlF+uqc(?ajgpd^DaQ#H++Mce!?~EeTa{9^ahj&SH&@ZbMZ1Ou~|C`}83LB)vD; zLp${yU1H~eDufZ*iMpye!`=7rBPrHX1pDf^|7ThR359%DNVxiXAWb5PL2GbP(*y{O ztMh4@c%AJB^P8PNV=DRO<+H2o&TdwkN%~NVt>1ciIE1-Manf?R>7Dx=tmcVHQ}$`Zj^nu zWUEnyA-X2Sx)#xWmyP*hx8dA92A{WGGUa#jA1_!48n75MhVRldg_GzHfF<&(jE6FG zL-|5M1sXZ^;;M5=n%*5e8J&C;CNuFJu(cdyjuoT)a|vOg#m&)W)jqjdck)GzhRa=N zj`MvDoD19xUyeBqDP9PRY`q3`6}F1G=U-hG%m&Zdl*DE*sfHKNybG<<&!S9&dhg{upl=rIft%C(q87hx9Hx77yzPMdu}B5)Wpqz zOR(QONZWL)eI*r(EjJb7F{}-zQ8Yi1+5vk%muqts&bGVVdpGt^|Q9bL>Dm-kid;TUSe3275rp{u*8S6&L!&x6~Nd2y=>amKwGt%1vo zmLLoTwAJp`>@k79Xdg4XyZHmxMOI}PO-o9y?>4MKW~S(Q;+f2;oJvSWlA*EsU%j-; zcU_9G{|G5-v&i|GB4Da9ije(JcS4znK#J}1A@R6 z;^Fz`j%TcVvmyN(&{f-q5{ggu?9fh(v>SDMxjt1phK9DrbyrV&(LUS%c8kksrOE@b zr&qh#%$g_aQs67y6%(_X;%j+Zt9pO4)>KsEhATauS2L-@A5rY<%J~f|lDpp4krgmN zu8<>^ZZMzLc=<5cmh8<(GTD{`-o@(3V;f-B4Rv>}}VRKNh!W5!!~? zr*5I1)f2*9DxTP<+&MRzEdTH)el}Ui&ffV?P@lZsApir83pJtj*qc-uMXopIor7>E zd^PH?ZnAVv+yDDmCh=G&_E(2kI@d@xTwwBTJ+k9Li0e0deFybGaPU*1hIGI=k(a*H z_nwE+g?MlRy*3@vV#Or+=Z_43X7j;(JckiUDpEeUOSP?D*RnO#{1Ny?(q=KZmzRgQ zl{t%GJMt6a4Ur6G!HQ;ncj*|3FA2lD!c7ZD!r~o*f0;cX_u@!{yml{@+;j-^9qQ%v zLt64=s^hTeSeJ9>=}2v;47K(PmfQ~9{P~C!mDA$^3?(S*DT`IS-0>(D*TlQ1n$dT7 z_?(NWQEbW8-xLmtvl3|~l^S!X`K;Ik3i{q^H&jQKMcG|t#Q|stja2c)!aw1MJHrdy zV}$S08|h|xiX+K9f_vXPQV>`4ezD;3<@ibzbtk z&@!p7xxvmxdo%U@<57v#k1=-5e6&(ugoMC%*`)K9G2Y%i(SmZF=I(LjC2X3V20u>i zXLcoI%$u#5QfXM@k^kbok;}x9V}1DdQs^2yJ-WEE)h_D*N=k3*Gc=!N6ATr%X=IFk zTJYSWS^nxR26}PieA(1SAE}a;S3O{r;s?T9A`6|&qhv-Ar(vNcqcf9bRU%rrriq~) z5q!I8{YUHgJ?aYVRs(s7Pt6$O2Lu}X(X>%|sDd?Mqm)>dC zARoSu#1?rmcy)QYwk%F_=^fKJyo+zCBh1_(d@fSS_(p8&_!@{RCHekxa?ZMR{6`A( ziP%Scp~}ubu{M8YrzjnZRx41Sz?XJ!&}25=4Wut!>T2BL46!-`W^7-Qyr<0lmVz}Q z!80Y%7YPU59lP%ZUH%6^Jh|Fd3WJ{~7<_tXT848-Qv{_NRG?o$nr zJ_GH%<+ZFl?=f^Oq#Xv){||sGJR~2=_>DPO%!HIM7O~K>^tPSwQgEsv)<2H36ZjaP zrjH1>!av06H}E+XM`<+^h~tg?Sp$y;_!H^#_J^U8kQ^`8r^jOVpAMH&(GBriMKl9D z?17uqgvpd6gN*{JR9#%oEXMJB<1Ja#SLcAjV=(1*SPmr;!Mcml)#U)V-14_c1HWE4 z$J^aw3W7)E7}!3m&`6w++;HGWSD#i)z7rc_p4U4SP+-)fB?$eX0tf#C5D)^qY@;v% z+bWyILa1~Z@&k5=Ebz`!g5|x)_pqc+Qu{vyAei{mrqYV7Xh&kBCEMZK4^P6Ade3<4 z>Z4h=$#hR41pVjW;6VnR!@FW9L$W7`@-}=J^K|)Xd1-0XjGQ?~BBg06=s}AdrZT#U zq_^5_PlcSE;~>e>}50%%#UYgNxL$*5YJM6bt(kzc&h=>=tPR7zH>5Zrf7j8 z`Dm2<&Z9m3O$h-l%s$rgy$UXbPT(hKtc{WH^?Mh8j~Yas{Eoi@qa2zvBQb)3R!iEA zu7EgRk8_Mf33XUcEG2gQBJAHBxk2d0W@>cl0Vck9}k#S2EP!Om+U@Bw2dVN zs~GC?0AlG=7xcc6vTkeHuw0{Js$vU__WpCTFejx3Lne4!AC%P#kM1VQo5KM}$JX*a*ztsdMzO%B-po>Yzyg>NKjifUxO#>u% zKryfL7$qpj`LqCPgle^9F=pF0`LJ)2gzfMLG48X<0_=wB`7z2xz-&o7$|ToV!Ax3i z2cFz?Tlr+|-TWlouJqImJ^sN(nSA=u?ypWeywB+)q7!3HRpE!kf>(W4ymqkY1uzVixHC0XdLvKacbAeD+V zT5|`;sSaRCuM$kOFz1`D43s4D%ocA1=4utF@W5GAoaExf!{Z*CT&`p(gQ3vh9y(3J z`8gEuL`_iQ4Jwx5|MX}oiK6;)JTqjJ6z^;%8UnL+5Ei%+zuhN#Ne9d3&z99AKSi%) zQAxNGbh0YV_dtNOv8CmhFYNW@r!4FR8K$5_7yw@qDf$14I%6dyr1b=%A^X55RQsOr zcYu8S58!>)Uj^_aaqoa9v`@aw5P$2kFo za{8ZoM@v3t1EG4uO1ca^f0BB~2-i^Y`X69!1+px;W14OS*Rqn)U|!Az+4sDwn`hjv zu89n9UL1H|3y=3P$Qe)1#1rr7zW5o`U{MJ?^LeeE^>Tb z%f9=}{+8Q4*|KnNVmE2%WV_R_&l!i$ zh=B{9(T+y65(-(s<#S)9xRIt#PvMN{H-at}dH+Ns+S6g=rS+>Pm@UmBCcFg+k@zB9RAdxd@A7HP{({~_r7Gt+_7<)J>Wds4Zi>u~8!KgEKvjqJc#x@SPk_Zy%B_z`2_n(`k@RrA6dV#<6zClip z#!JNxHq8>5I^*`u_?wa|)A9C>#&ZJa!YN&VDlJ&2?Z@wZc5&Hd`ka4fO#QG|^}QiK zC4|h2z9zs}J~%?nk0d4~wrYmeA*{X1Em|%f)xR92 z8!cOgwkSNgil0st-%1~PYKs;Bc^_n2-G46!Z6Y@ela9r&B%a+?;1UL&t-jYV|MkO5 zKxe6CpSn8x0sB!)t~u5F1+H7|aqtulO4^{iS4Lk5WkbC@c!eonJ}x`Herj}d^`=Q| z^+vup4=O``{5OziCxc^&&e^_5k&1LeY zWsRT!$ZUV)$V#5eO+x5nDY~_x(P13b7MAa5jQ9X3FmD5{^!(Nm!q@xtz9yF*hd{E#&Gk-lLabizNN0JKtrkX>dqdYf|;ap7BK zXf!@qoNFH3Z{p>g!Naees3phSDfF{r>Iw4JEF%BPgJ^V{M2-Y~^1$4g$w<}sF7*ct zhijwhQVGyqQfu>$-Hb4w;?D(Uo=NfNSuJr-?I;(f2zNDSjKfKN3>xMpuwC7Z+2fef zY~x#Z8KhR|r2t7q(^G5I!@niWxca5saDUQMaOoU2kNfHX{o_Hn1$h#f0n<|L?SHuO z#%=jG<|RH$%9Y+w7^TqIJif{Nsw4y{Dw~e}ebEG6+TVGpWN2z01qT?XUIHHrH&xSw z7HdPjp#|1bTKU*c>3{oDyhSLNGz)igiNeCzx1e+RPlJ{XAHG)4##<~=6-CJuhj`8w ze%ZJNym8~a{m|s)WdP@x#Fx*U>pt8C8k&D@@{iQEZiH^-e&D+VHG4nVC`2jtq8U9+ zFRA_Pm=6tH9U2Yl8{8FP#X8>_hmD~)jTb)0YE=C^c|N8wZ&P&|qqth1b~}!Ih)A3K zDL?X`GM=3fDE_@SLxOAlo25s?-bqf7&e7D`_!y+&yFCdpB98>T4*wF|Oc5n8l9nI%bYt*e3-(+E-mz=9zuZ{t$7z*7Q*hu_ zljy3kz}H_&YMB}Rj3iRt|BhlOTH@^v_Md~bv3vCHjGb7X%S+7m-8?b&UtN?nA4m@W z>V`gec<0R3{lV)Wzv=xNek-p>u+X471y9=lr<^sM!UW9HVi-QNF>ajhOq-k~%OwiZ zGKeyGI&54L?*Z`hdv5Hv6yAz7V3k9M3x~hA`h;(WmtZ&GJPQnnjo}OKfBLk!A98Kw zzgm($TD@8f(XKaVXE~K)^UPR_V+f#t&#y%f85^v4B z`?;0@RXRjI1|{ZyHmSq1mu#*jJNZtJXEppx#z>mx)U}Vy;bKN!&UoT1vucfp=p?cr zj6CvF(~4u*g(yLr9ID8;E=r)BQzowQG8UWGAHi%?JGNVS{{gr`9sktYLqgg(Ngp+rsXCD;;sHOER@L!}hG^lYr-GFL z%1tu$+9(;T0pIUu((~Q@CxX|~=#~oe|9oJ*f8Y$zN&?b3^i%q7k?b*r;t`7lwY~T5 zCyRrh)fme9Kmv#wZ!h+u9oUj;_W>X;P@|5-%&8K((^}t`+0z9t$IjGQ)>hdM zPd_tgR?09(uy#B|?+ut-*^qmFBd`q*$L}b|lZ?I8iaJxHCTwWeTVgkdJTzKl^q7#V zB-wnEJ;IS;a43>5pB7YvCEKh4bvBFN^Qre|LV5(yiZG0LX2TR9v1NdocSML*16Bu z&v+!x3mbJw^LBU9UwGA8rW&erIkYJBDB#44;%)u|%i8Mo;sSx@O@=$w^q7Vu-s~jas1{uW zyH=7B(xt{plLliiP{o$O{O}bk{m(ju_Q4HkM$(LLCjF>+k~LB2zsk{XpGp4hu0$MJ zDNs_PzGiujjp{~eeqlq39tC{Ybk;|#*tc-A$N!;+MCWG7$HgzMt7UlNG<@50b2Tl9 zG_63zLO1cJ$O1FhS20b;z2Hk@ou<-SceX-9ovg>wEGG{-B>f@vhe^{2wCc9X5dwp)}2oYniu^eHrg{^tot0 z;7tB_U|mkJQ;8Uv&DA?vCKd7}{V8}h5*4gtQ{!h^94IY+Da*ask6nZ9C>7$}exGNr z{uZP8sZe6SUy#0nB73B>043`xt**AtlMbBegCl8NnS~{7D~R|E*{R%1*L8b zc4-3R6EM5>Qb)h|D7Wzkct?BVJJ4!VWwWbj1UfCvICy05TKI8o9TCZMBZkG9 zI^I|G6Li|-fVphhwlE~w9!a*H5irQS0{Ks7W1-|;`?GL^WJnKyO82=R1%SaCL$%*PP{$P@t0PQw|xD>8Tw0jcz$h7a*%SMErxzFLAG9PCLu}k zKWVx5FtrcHqSG6G5`9f%r+s@$gs52yyyL6w|D~B}FOub&qO#cRdFmo4A-dw6vmF4k zgb16jQ>Crt$g~vug`$)NmFunOmkR0^kr#P=ljCY6Dm?~&J^>jUMjj6c3(7SVei`7> zG8UHoinc5nataY^F%5PC@`)ikhd#ybxJ=ta+BR?AA@x809!Jn(rD9}dHN#49lZP$D z4{nMJOE`m$Y%qT_lEj2Jg2|)*It8WV^$5rMOSVKjYLawdN0@sxc{|wdySm~4&Eph+ znv_H4S+=kdhy8C02YrjJDmjRz;u~}=+|pR9DwPhz*w8S|Jc%x`$u-~HEF;jm_?KQE zU!7x$J!xqcYhne$IW>EXeIm?gY0$}VeHE)d*PYOBK2KV(tbX)Qj>U$)+U^i6cZ<1I z?n+a!yJGt$=#H0nP{<}PqV+K|W$bwpL0x5BN0uQ*(9|C1Wz*>~N!L_6_y`0Zt8WAp zq9)IUa*^H(ALc&3rt3a zGT$q)u(7$&S$@&QTcL*W%|)cepbQ{LkJ?L&l<4*57i|1Zz&{=(TsP3>M^UHDulgoR zOZa&ryK(R(07+GT69?r=?(u+eVZ35X1b&hdPVy`V{k1PAG{-i|H0LRiE!Hkt3u8muWoP~-9_>jDe?yGpJ&9v4hJ zToCjSV65CSjo2XDH(qSSrrEm(?UFy6^^t*+Qj?+A6E4h*>l}}#mL+0&%cO{~KLLLF z%o+7vT|zV0G>0s8MS+Pl7(er`+tp4qv|>k4WPvYz#g`28;1yeiuE}B*+@Ott>|>hqEtLb%)CGe3{FA#2^^jB!cQJ zP%6(dj{6+nVXmXpkgmNyy5gp~ZZEQ?|WwUfU5c z2XU2X6f%$w1me=R9EDyC3Ak(ZEW5U#F?P}{B^!3xwZW7UhXnT*Lqb(avGQ}=2y3lt zwC{n1o>${IbDn{or{r~2ww0EViRI{ht^LS7XRw|JQA-da4m*m^0Pewz8~*?kiOyS? z!H6(A(((^2nds;>TdV=k6UGD?(@SHKDCqwHQCO^3Y3e?OX&P|uNn$6H`5Ussaq~T$ z5(_kgZ#+Pz6rIc5T1A&R7{}aEls)9i*LYlo{!oh8iA{Sm`-XC`Y8NM#m@SWKeprZh zxjU`v;uXr(YPA+_txxwZw7p4-TirSav;C9}qvmti&d-)4z+twv&t@ZPUA?HeG0q$S zC24B3#IuaIh!U$yb1-WTKBenH>XEul^-p6TO>>_!Ey<+>zq!l}s;$F$$INQN1pxA8 ze^#%jE4SR_FcsNUc>%;!*C zU~vGG6dV})0-j8n;J_@zz&Mzg046}$$%Zd5gO~@z5b=q-fH5>P89?U{e{jHH2y+HR z-AD-PZ1Dzpn}`H|a2OA8z?;{&bvU&eaz_)<5iA)HJR2(@;K{Xkz!TNfQJ#e2YRKTg z=f*gWqXGl*h;zh&fcclKj7R~QT8}b|D9Gj<0Wz@iCde=hEZD>y#WD<72!-P>*h5GT}hUU`8=Ot4-c5In}uGkBXY2<~i54>7#J*x~?rh77`om`6}zZxDl- zpyLxjIfbIb06<|Qp616eHzpW6IE}Qx9wx^S;~mTfAPJ$&9$+6ZL)_2@)ZNTxFgH^} znX!=o7$zoczy!^XA;cbFW7OI4H<_SmrZYgth$e)H0%&o>&@k$66Jw9KRSOsmP|I^V z5qv>ic$Y=TaH6Zss2Jo-K4SsI4b*f@nUOLlO;tb@*OAofQ~*qs$3WFFK5O|Iy6ox3~HhF|;rtD&925zRCu>)oaj}t)0nY)@{$$_Rb zd7G#jVKC+x0CP5Gn}Y)xrsFd}(@iuDG}xP{8euow&;gogdhP_ljsqULlU_)c2gC~1 zS(Q?AfHNms?VWV8k&)c0MO+;DmM0=6)4!f06O+Utg5X4A2lp8607*VU$$(1&KBqJC zPB@Lu=^KvI#EMG~I5Ka^;$~vTO2#5Uwy;q-%VfrL%$t}AVe)4)Hf1bgax);u0}ugh zm=D|?brhLLrKRSsI+St%aF z(B^d3j0Qxb1q&E-W*nTEn2n|qy)am+uCaFrbOHI!1;7p<^- z%||@nvC-*P;?2AvUym}Bl&;3zmLufNrb_)#yT7xT`jJ&v4^4sjlU*?_ORl2DYL^9j zi>toNnGL-!0vi`<=CR*!?A)CAg;6vVwO*yJOEBUhvev$lf7_I;gX!>k5@$(XplqeR z(gxB!c4~bvGP1TZ==DS?$UTU3Uy8P(TX*@KcD^+XGr0LMJF0LJ*F*e=Q+^{(+R80d zeXOT}^Es>RU>&Eq+O}1qe^*L{K>k_tDD$;p(al#W4h+3?g`ge4F@sX}>u(x|Uuoz> z)lp-pYR_H-gC)&N;kh3&+MV~Jn$8EDPFB=uRAxhe< zPNKC&AR@{mnko!eAefiv^*R?Gs%E_QC4o(IEh=`A)CpXyZ4M4|;##KEQ&ax{_)lc}qBVh^!T0tVB1RED#S-Xfq{+z`A#QEhLi z{mwa;)!Mpx{YpqA^(MM>)awVt+KLsmBDFYGlt1Z)qeJUi!=7_F>ZQ#EnSG<9FR3qZ zT5CIN9mmyQ=xI`f=RRO_gkw-|j}pOOR)~b`D<)i4wdcPw_gF0|Q0>5t8r?E!z&@$m zA)`@ET7-L7D*`e){`lSZ6ZGSGJ=A)UUZK2It6S>>(<8+4wQ1{XEOh{>If1QlU!*b+ z^(fjaYM?UNlHMRTlSyak-o&?Rj>P9WRk>KDxW{v_YEr!iqybkwj81<{tw1TjJ(xsk zYiXp^gW7z{(NcvaxG)0lg=<`a=1bRbLb7!Ot4Qrdr!gMeFVK&@9J%xm;o zYLjrcC*nypXc<#(6iN=I+lE1b@hzmiZDKZ!z;}sH$cn{jVq+d;G=7D8t=sSjkWqDQ zre_;6?Z7c=)3>_IpKf`Najx62oQ33=R>OS`gTw=~P7`uj@A->!Rux>F+2BaiLKX^g z2$o$6HNm|>^dK#^I*`~t?+}~s(}1Ud(KSr9-LrOa=Mt5=YAa>1f=5spYq9EYaQ8^n zNvIXne~AI4*IAKCC3EvS=&6nCUCp_Ne^LadwXWs?a>t*NpqC1B{YoO$?YTvVXl~_i z)6^I(9G>$U?LC^R&D<)Fxjh91T(yn>{@@XN*gYbv;fUvImbqP#RGP#!aCe#9-cR2 zFgk4K<}t?5V!eTv9YVR?L1~qEn30&lkAuXDHIH%llmiAJ=cs!!qpqgraDHI#)G6x= zJ1X#J7v;b2u0A9mL-i6SVr#D7{83ts%Wdca>t3)s8>yDFgaWa zQ2zjqqNiI!{{Y;_0wovUR_a+x0C*9#I%^Wu)l&HR6Q}hRvSb13p5+>{&I4Iq0Ewm4 z8*F@xBAf#!WwzjkY-hx#kUbQ#TDe#11L+kjy60yFPg9!B&1UsX0C+NYX&reEc9YcZ zC8^R4{^lcyL~E(_FTYUONy)0yfAi9$a)^A#M|K;m&dkd&Yc`So-l16jIB8rlzkYm9 zih};62F6I@K&x7%v$dC@Bc!VPHKFZn0RXa^wWTwh_?@1sR-%R+9)#xCQ(?c>q~wmo zWwrGdE`7Erkag&^RH=8gZOG#@k6Tsr+7As;=!x2zqj)s9!zl0O4Q^}GRH!!`^9X`! zQ7hxz`m66=tHG#J)zym3_M4%D_uKf{{WXl6+0_-L3W>#IgO~)Hls!cp)kuQ zqoYubu^S-uJJU{;^QglU;s+for*%hF$sLK-JuAT6xC=SGAy%|4JcsZnUYffpw)Az# zBZx$5)Y#geMwP+|O?7OByAd<(_ej{sLR!`2p1z|~uDSHVU)|E3vWeoFIBy(8OdZoi?^TH^;hK^j6aPxc5M{I;!?NV1HAc zEmB#9e9kpXSKYLn^*ZX@s#V4^C4z0JW;`wj%&x6=S6b)X<1$NNK&xWqOL01NnwlQa z8=Zs11feUkzf9ydJCm}O(^grJAn_1tg_ez|zypq@wWwO4*~s{iC8yNWiw7gj%VJqU zU@?i&_}Y{7#cd-8p_vNpt4OU&jFvn=HC~FlS#z0PKGs_{E>B=Zu>;l$01w2PyXkBW zIo;TRj7^`k-qK;y>1n9$-Itw>S`+JI9A?M(y9xW0(^_k>QO8Cu zuG3bqwGHk*L<6W#Lt5Hy_{cH<+oX0F;L5FbdY-eL&V0+>-nxqRjQqfkmhwqb+!=3$$9s#hbUU_XT!s1U^9! z98lVZ9`0r<=!dUxCNdjNotl--J2RYC?T!318AWNcaP-4x6QN0_vf0nnccP6BoG?=M zw^)!O!&c{99`PUsuT*-EpXzisr$uAaT$3U-LF)9?Fn(swrC8o_$Dsl@J+9#qW%T-L zG_1DW%S9TMsfcCfZAFWytOZlgm=*lRmFfZnYz%mZN_`rEW08)hJ$iMmcR9%s#j35| zLGc5g?L+FWJAn$lPMr;&lD^~&56F$F(`{w3afa^`mdhD!*ax@CfmFD*qk8*Cz?p2U z+{VvwCxI&ZdXkmc+?dzZUYkr0ZsQ^X3+t~?suW=MCqi4+N*q&3CC?43(@STjea-VWn^UKt*;+9K`GnMuXn#{D5IAkry?0|6QgOt!np>5FtM|->pTDaJ ztH3;&()xz|Kur5U=1{EH;HY_Ol{D2Bu;#-O%hJpW`vy|lD{2k4H@FB9R2M$uz?N04 zvD?5NWRlQp3OF+wTX(tevH@!p{!1<4G30PW}7=d-GT_+@$_>fQ9ifm=cmaXe* z4)f26%&TUr`TJA6PL{7r>0p8xdXz(+)05&>nr^!y#@i=dis}M(vCYg~RC3=?HM$U7 z7JPvvZmj;HR-i(pwyMVf4WworK&qWGZBShDOb&fT*1K=C>Q>JK#N%&TyGV1v^Ba4$WNyq3jYX+|=iJ@|X@Y)cRe8w~;Iy#-7ij^Y0Rxy!2GsJ6FpwMPK_%Gss}H}(W;wTSe9 ziVir0Dp<8RtvfJZs&qR-bMq@+j~a7zrwm85NiA&Zr1zLo9W9`TvxPk3b!mlVU7X+! zgxaHk26KVb=K!*jGXhqo_9_=3%GHYK*r#dp3RQEV+Auy$K9zMZy|+1mJD!tPE9JbI zk<}_5T6C_Sx1{lce9k((N-Zi^b|6FX($aP0!(!Wiw>v?Svq+!{ z>wK~7z*+-X`&8wpaZgD$lh2bm(y^wnEp3-0lOIuAl)|>+dw~lz2~*`)ej`(xyP_4c?^3h7Tlp1!^R-N>ih_udQL^!V#+dz&a3{{U*oz zW7+~>=OzTBavLA70u|Ls4PI-k65dSawKW^c`h0xMZ?!;GAwZQ~YZVEcljZ^hHLeE+ zFX%3?hYki~I2(fQ%NfvE(_bb8FVohlD=&|eIfmzdLr=o_F_{jbiEPXWp$-lj1y@cf z8%=<*l5IL8ZznAtm#C&lEaoQN*%{^p8LhIC6%+W&q6^#b!DjY0P9%#~Ctj$3gt^<9e7 z$8e)2o~(oKG6yU)^$=8UoU2RfNq6CANJDNMo!OUQ5k`1{#I)lj2O>4vmb##qE&ztj zQYW=ATw^dTU1xC5KQhLY zW9>M^2C|ia4iC)acVOEU^Pe(`-F821PEX8KEKbll`H7n9A1xbCdC54*fnBDImOPmy zHDs{>v5&Q_a`$itLMW&`p56olO=9c8w}ca<>J@Iroid0;#~f%s-dzWSJAC&r!4Ksk`{V5th zgUEotqq_PU<~vuhnayUUQjtooTgjfMxd*7{o+Oy#lPk22WZNy`1h+yATUCJ^ zOb!MNDxl!zUbn>MEw)ysBw|!^Yklr>J#WWeX`w4U5j>4a_YixY=iB zAYPzIQq>^OA27X&%ZyEFa^a8h_>6GFJ1_()NX);%V^?3VXj9yw8^^POIqXt@fx#YN zdJRa^sR}_egj5Z?u4uGXWsFH<#O$L=PHeE`2!LIs^;0O@Na}N|H2|*fbQaxfIa=}- z8fzrv@?`}SsP!yDbL7N#-TZrW{VsxD=dO)-H3gfD#uoXke^C+4d1L02dENfjl zWqC35=KK=Pw{#=M)#_cXBFT=WKH-E5PK#yK%@7 zfd&Mz%wQuG#8TN9fwBJp5KX%rOi#oNI))9d0g;Ic&&24ham)ka0y21v!!dg3$e=0U=ZK|1lqC5v ze8?tK20DyQ*@Va#LJu)SU<(icg=Hn11DSNvGhm*j^wcUYNal3lk;J))T*8%1aVS(` zQ)kROWrA^^@|12bYY1taDu zI2^`i`;f8xNGD<3bD1N_#Gv;aOD#hjz?Ew{Q-KsH9Yf9_W;uvgJw`JD10wS*69bs2 zvHZXo9wsA*X3PZxh;uON1DFT;gE)le5nyjK6T~n;AZ7?ez;gq3A;%EoiHrrBF&x2+ zbpWg*xUhr70(pa|NrOBk=lnp^W^CqT!GW?MCTMZwzy=Qxj^^k<6LdI) z&4>dNOa?oIa$pQi3F>Zy068$h4{!wCLL(^53>1^ZwQ0=NCn9vBWBY|3gl%p(oa*cc2L?E74{^zbb*t`N zd5#7@smQEx$1&`7U)FJMuD+~%>eaVY1B7Qp5} zrLbgeY?1L9n94N<7FqMtha?w!yc`Dzz@dk%OUHLY#S=0F1YO;dX)Q?6sp-;#QD zQ~1poByJ$%gE@!ctQIwuV#NoeJv|H7EDLTi@@98xbq>@vQ#}ct#pBJn?eqGEdfcm_ zL-7;~y#{cEsP26pvaLR^Pq~x_o^mVcD6v=;RuemqM?P%n=IQkZ(qN-GkPl)4)#q^d zonMdJOEWTtRy`jQ`ae(pp<^%tu(`pRcB<(A04ZSnbC*NBc_MLsKhe3JZT@f3ox0s} zE}ex{jiqvDoH*>I*Sjfyr~4p zuD`_*Yqp)v03Ddf5{oVy_k2!zsb#CyELT4eZBzVPaWFQIN)0coezIT;Z?v!;(JpNX zp?Wr+XC+rPH44D&z_V7ZTOHWPfgC#~hzdu)$%$gJVUTX}K!%-S*_2AodOuQ*t2GOL zh*y#74(BG-3K52JIm+y`l|0Vs2(qKNdxx0>!?lOgQN&v-I$M?NCv;(Y>50PRnMSg! zR5gcbA21!Y7hlEg-&3B-jdm;62w~BAr9JjyTm1{NZ#WDz{-^&u=F`CpmYWy`2^A%Vcb zk+Vr%g@8QbL47)^BiyHt5$UNOhH~S1oS%!_%VwF3yVdEb8O9+~R67|*KRjrbZDwKR`s)xSIkQE*v{9>NK)5Tjahpa3*41j+g8#CDms>- z+Pm7faLQzCsMTvS{{S4yJDuy)X_)OEuYov1Tp4M+ZQazST^VkzbB@GUy3JOkT-;;* zvJRS2>RS@L91iC#G_xaG=L8<7Z|dpVQBHQx>@3cZovZsB3CkkR8L!dTVV( ziA~1`=1pJKv{MT(_e6ai=1z9&xo4)EYj=!{`QW(zM~EN zK<5xBzlyg4>)Q%snbMt5Qk#%R8q2JIP1^`2dVf;jp#fLS2iD)~luFbpO6#=Eq|vJ% zabd*d*Z$VPr;m{__3a71#%1sih(hR`wPad^h}xYM6;v;&$@y7pSm{7gIAPq0(-ux& zg9_@=*;RUPQ5PWh7f_*;TT5gf)^k+1X)>g4tjee$?@#0L2$NVnQMowtIxN-HDJxC^ z_>XX=+Bbjr&#BE$g&LN!*4o}7SD~xZX^q70W{}Z3`u1GoxY(_9p&vOs344DWx@{6% z9F~6&h&GkA4s1r_Jc-q9dP>nZCnt%?S+`4IY~@d4bY4>WOAivL>$J;FwY#_NKSFca zT`6dF#?#_86+W%dYMku<0BmdOuT5sh8NuR21PrzxM+IB40A{YjiZD-!uPUKz)0`h7 zII&vAvG{yKmWx)qTh>fBh`x=hy6XAQL*g~=_9=H!^kLK7+GSf0xesCk(Dg2!!Ez5& zjx#u_sgxHagF1DVCZ^@Goc+n&V+(6m#@{eH^m>=A2@Qew2C3_*mh^60xgAwv#2Y{0 zPItpov9dP6u(H2)q0Z(#371vs3=T5|G_Bfim2o?_>T6#@+0 z#>Nc8`9h6khWd^&UBf=ZU6W%~~4(SIYkY<2ki;?7p&t z88Zs)8miqn8RSmgXJ9hLX^mW#C#>2{2Xj@cH;spe`GMW}O(0z&6lE3eALdKb z#Xzi{qKl5i1iG(?r&j3O88MCw2C32P*<#@MF%9O8N2bGr=2nLmC_r%(ri*PWB_lf!EsE3J3}U-y~uO* z@g-9q($o*RO2MVKPoTZ+xg3TZ062l?*{7hZIuZ_WNS$}-y(-k9F1U&LGM4Gr^mXk* z*>9O@Zp|R4xPjCNt=F)^0>5#SOLKd!wBX7+y;K%)hGW2mZ$PNFlam9Q^|M2$Q$TA; z^NHVOrw}eKY0{Ni_PChsvp)Isl8O zM6~?yXPc=X{Fna##GVWennT^FVw@rK7gv2~MPZ9$xzFoc>Md2AFOw~+r75IrUCetX z2Ss%obmGMR9%LH&0rcswE#%Ecs@0%WqYE=>tf9SH!8zoJz^_fCYrg=V1nbr0X;csW zN!Z5Wx!VMPw8DBhbJ}$ks)9KB zfzzt2>TE@?rTC4aQC;LZXFg2nuV$Z22>xVuIOqk?mf=R^)%{~=h{|8-Wm3ean!hun+sQ?T9jps;3;hfa}EsaEJ6bOW(`K7vrtkq zi4{B7^?FT!`sKCz!oMEdTebe zBDLI&*qrxjPX7R6WX_81D8=|7_>%OkFX|;^kNrUBeNL?iVy%w@63M82LK1(F@h+N- z+O^ufoJ!fJO+KKwUOd9Qw77n@zi%1$3E!xz*0floYL63*n!nVW0%He>*I~BWhSCC< z5VJ}jSG}7GWpx&+)wZw*Ux_!dy)R2|yXI;%!4$JMIQ}pjNk#78sI+3g3p#D9PH1+( zR`DP`Wn7mbPl(p4SQfT!KBW@T>NnEMVdY}_ZF`1M$INq~O3o6@2Kkj1wx3P45VkzX zBKmV(pfi#s_108tr<}5p$JFzVrQY@5kvppWI6I${0I~=7D8R(#OLsSO-dr>>#C(~~Evu-mCyD^s;4 z9eTQbOVsJq1q*;A6HjQoEvzx|BX8tfINC60VA1Mr)15;$(~ggs1!!c{8+6P#1A{qq zv@I^{Yvn=U=0yusjOy4Y%oWvUuPV96lLD0lT~ie0LGd~T^|LcOdq;@0R+?&>qH@jV zaJ3eChO#gT?gQCkf=Uhv;7cz0s|?6D89&n+m<;5J-%XSy=rmUl&w7jxR6>Jjj54f#(rvj}Z97}U0d|}Ngly-jO&YB#eL?Q|ku^EIF8qDRb@VL)*9A-j)G)H~ z@h+)aF7iS8iK?YSt0n^ZGX|$2REB_B;#b-rsc9-6*E_x>uhiIzR+J`_6kz4$N7CuD{b|y#&)2Awcn8R07|(q={;tzdoD|S!$ov8yPRYRbiaO} zDlQN}ox;$Vt+L)_G*u^}#q7hFt?E~KYbGgwvyA*kYByFtQE}XUOcdz%x!TzhgI$>X zaj&jtDw6oAcv0D%R%sf)(e^PL=J zP;g?Vg@s24++b68s#%G`j)WR&TK4aVJuzKEvB^D|(yvyVPFAy*A_Ym)RfQ@ES&=>}Oz@9tnhVIkc&+rN(4vT~?H~#pSyu zbv4^;*n=(S5L|UUF&Iy%9Mx!>alYei>MlGP}vq^aB&GM2W>131WmFIvVv)xd?c?BjKffgQCK@wWr&7DH<8 zV}*d|=(X&q1NS5>TFGYRr0lV4P^e>3LuxHl9Y9+>Yx?13lG^lDWSz|^sM6k}YA^yr z^q^yL+|VcLrR}+s1er^;EY$9+m{yICmmEtE$ognd0rdhJ5V|@Tx)SH=MDJ(yIup2C z>L&^bG8WRz+eriZg-xxp&uwG;z^iI<{YPt7f$5@>e3+QGPe z!0)1rd+y-*gKm!7HkZaE+h1<68}@do^NGq31_Ka1E46xhYxL*+tN-l0CDe~Hp` z+G^_D=iEd}ML5RJeoO)Q-70>eth1rkVEl%!cBm~Qf#w}qWgBZepNY>>>{4I9m>pVw zQT^}2h?eSJ!-PYD=Mktrx*GRjPN%lI>J^M*%!A7&+pQJY#4PHwLrSg@$#0m<)i~ON zpP5GV)d1WxDC8PssOHwpzMs=lSPmhsw0xTzA}*%dsZF&Ev4J~v9<|{>!ilY7qbUUx zlBL|>m~6mYDa;71c3O8ampXw(WChDfoS^<#`jR2Xxrg-v^=Um?&DORvIq5*QmQ#=; zGg{P;#HxsBti1U)(Lo@hffCHGM#RJxGUp;Gc;t zb{5e4a=#KFT!$wk`;UjS`LKjXUFzMUa-#?bQ^x#o_ZjW}MT+R1Yj8$6#PBpMLudYE zSFQ|Uh3AY&dZ4VItH+ofOi{a%DuCc~AZ&wvf4LQ6ihJTRES);SJy zJ)gx~wQ0jT=Z+_f`2sf+-1ff@r#g)=-@@Wl*Jhf<)#^*R3ZtPPU#PEgs`H7NDy_oQ zGmgxilmOnRk0KDuu;UAZEm|BCINH{8>>YeXd#`L(q=O2j*RixJsc+~`;dXT3TAN4M zkf!mYOtNmX?j^U~u57pnzXB1Nh&dcAWvt_JkU@Y_s=oLC01<%4@yw#sQ0~|SD2Dwt z^&!QhZ^mQ|jJW}hW)<4Qb2&dyq%12;c{2uOOsRp8tKr8o%|e>STmB$TEw@qZQ_P;D zNYxN5Y?I=3BhjN=uP$dJ>J7G+ZhoXitFddSB8(p~LaDSRV=iD*o^c+A71_LZC=aJ` zs0hcYPg4w4i2y*>=Ei*TWS-LbH}$1W-O< zC!7dzfg+HZfrNlzAP4}M21$gBLCgjmO#m~0^pqZ;CIb}bG6w1l@djWghzBzh1keU~ zhn&p@U^a0uXt|qqexOr1jeul>h}q+aMrEAV&>2a`Gp8^#4=T!W*K#3o-*eTrtnvil zzPud5rmePJ8zU2$aAm7-uq=9rMnom^GNxqFfXIX{JCq5>#8Ny+r67DoIPO0XrDn$9 zaUz9Pn_B=*>gfsMHB}17T*`rt<;*}I)TquN3Ss7H7?`BT+Z2gVhqyw6+&G)43d0g+ zRP!cBFc9?@9%TrCjvyd{F&sew2<8r>h0FzhpdpHTlp-MzCPy%N>N$hH_<+5RB9Wi& zKZu0jKteuZHxis+{K&VANT6l|Gh;FF;6MR5hXN7EiEC|G5wwAs%I(a1A9p59WzHlI zNgJ{!SQ!!(*MpNU*@2JDQ<%haFkF}l7ye_a#>NCaKm&=lb2Qk2v-3Cq07!b6Kpjj3 zJ|=*;n8J84d4Z3KiTIjsAYs=Kj^+a};~hXV92fw^*?=aR5!?(R{-&A$^UN9ZG|)C? znrIlnVVVXa12!f-K;9;rY(UuJ5!4^lFgJ)iLOYoE08P=GjLqB)*qg)?K+uRW91b{v zm!2h2Fea%p;&dwb^9m?2jwL|m1s_q?0qQUWz@U>ltFJu3G}VshQmn|il~v{ulw+9C z^#lxgfK4Jh1(OF#(-YVdy!|)^%c1>c_*kDnnJ)> z5jsMWU^Vi1lz7*x070C7XR)iVBOp&Lhq&<|3P_bh5mz#(zYwcd*yFi%dCsE)?pZ-6 zm_^a~msSiXI1-D*4wY=;P#MgvgDe|}RaD241~}patY9Jt*?@aI%{1O&0vU|ZHYPJo z15FGbU>G5S0Ub@$(?H$LG|)5ktdk$Kwr5ca(Iv{{LW`TCRXFl1cML^qHKAH#xpj5sWNh4Y>7(7 zU+N(KrD{Cl2W4Ok35$ENGVxzAMK2UA&7Qou3DK4O~H-9T9qV4Chrm)hA|sx6xvw_e0|sj;Z*P^H;-<8eulctap2)C%s@ELW z$BE9`GMf6eHJ{rJk|!>?eGdovK3`go&G`#gU#fOi z_Je~thNS7i6z7i2=Jw(?vkhkhqs*qN(QVb?eXHD}rc=~E?uhk!ODX0RTXlZA`c

$7<=(Gn+#BkKhqEHe00^X( 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 literal 0 HcmV?d00001 From cd1dafee77216964c51f3d9cab84ebadd01d083a Mon Sep 17 00:00:00 2001 From: Hilary Luo <103377417+hilary-luo@users.noreply.github.com> Date: Wed, 16 Jul 2025 09:50:30 -0400 Subject: [PATCH 16/25] Prettier notes (#440) * Fix typo * prettier changes * added note on how to run prettier on a folder --- README.md | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index fbeb007e..11e4f1b6 100644 --- a/README.md +++ b/README.md @@ -63,12 +63,14 @@ You can fix the errors by running Prettier on a single file, with `npx prettier --write `. For example, you can run the command `npx prettier --write README.md` to format this README. + If you have added a new folder and need to format all files within it you can use the `*` wildcard, for example" `npx prettier --write folder/*` + - Refer to the _package.json_ to understand what this script calls. - Refer to the _.prettierrc.json_ to understand the rules Prettier is using when checking files. Note, we used to suggest the command `npm run format-write` to update all the files in this repository. We don't suggest this command anymore, since it is then difficult for reviewers of Pull Requests to find the intended content changes. - If you do continue to use this entire repositry command, you may see files that claim to be updated in Source Control, but don't have any visible changes. + If you do continue to use this entire repository command, you may see files that claim to be updated in Source Control, but don't have any visible changes. If so, you should run these commands in your terminal to prevent Git from noting these types of changes: git config --global core.filemode false @@ -254,7 +256,7 @@ This helps Users know where they downloaded the file from later, as the asset is In an `img/` folder next to the markdown files where it will be used. 6. Files larger than 100 MB - + Files added to GitHub must be smaller than 100 MB—_(at time of writing in 2025-04)_. You will be able to commit a large file locally, but the push to GitHub will fail. We are storing large files in an Amazon S3 Bucket, rather than the cpr-documentation repository's `/static/assets` directory. @@ -262,13 +264,12 @@ This helps Users know where they downloaded the file from later, as the asset is To add a file: - * Sign into https://us-east-2.console.aws.amazon.com/s3/ . - * Navigate to the S3 Bucket `cpr-documentation-large-files `. - * Select the `Upload` button, and choose your local file. - * After the file has been uploaded, click on the new object, and copy its `Object URL`. + - Sign into https://us-east-2.console.aws.amazon.com/s3/ . + - Navigate to the S3 Bucket `cpr-documentation-large-files `. + - Select the `Upload` button, and choose your local file. + - After the file has been uploaded, click on the new object, and copy its `Object URL`. This is the public URL to access the file you uploaded. Note that this S3 Bucket is configured so all files' permissions are automatically set to public access. - ## How to merge branches into the Production branch? From fbf6031ff2b287a276be8beb81913ec1ee529a0e Mon Sep 17 00:00:00 2001 From: Chris Iverach-Brereton <59611394+civerachb-cpr@users.noreply.github.com> Date: Wed, 16 Jul 2025 09:59:24 -0400 Subject: [PATCH 17/25] Add a section to the controller page explaining how to manually set the joy device (#423) --- .../ros/config/yaml/platform/controller.mdx | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/controller.mdx b/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/controller.mdx index c2fdb451..cdfe96c7 100644 --- a/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/controller.mdx +++ b/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/controller.mdx @@ -66,4 +66,26 @@ Do not set the normal or turbo velocity limits higher than the robot's maximum v may make the robot difficult to control. The robot will not exceed its maximum speed, but the scaling on the joystick may result in awkward clipping, causing teleoperation to be jerky. -::: \ No newline at end of file +::: + +## Changing the `joy` device + +By default the `joy_node` will open one of the following devices, created by a `udev` rule included in +the `clearpath_robot` package: + +| Controller type | Linux `joy` device | +|:--------------- |:------------------ | +| `ps4` | `/dev/input/ps4` | +| `ps5` | `/dev/input/ps5` | +| `xbox` | `/dev/input/xbox` | +| `logitech` | `/dev/input/f710` | + +To manually specify a different device file or symlink, use the [`extras.ros_parameters`](extras) field in +`robot.yaml`, for example: + +```yaml +extras: + ros_parameters: + joy_node: + dev: /dev/input/js0 +``` From 386e9bc8325a5f4a24d0e05c83ee0b0e0d333cab Mon Sep 17 00:00:00 2001 From: Chris Iverach-Brereton <59611394+civerachb-cpr@users.noreply.github.com> Date: Wed, 16 Jul 2025 09:59:49 -0400 Subject: [PATCH 18/25] Add A300 attachments to config/yaml/attachments section (#404) --- .../yaml/attachments/a300/amp_enclosure.mdx | 39 +++++++++++ .../yaml/attachments/a300/amp_sensor_arch.mdx | 35 ++++++++++ .../yaml/attachments/a300/bumper.mdx | 34 +++++++++ .../attachments/a300/img/amp_enclosure.png | Bin 0 -> 114533 bytes .../attachments/a300/img/amp_sensor_arch.png | Bin 0 -> 199150 bytes .../yaml/attachments/a300/img/bumpers.png | Bin 0 -> 191190 bytes .../yaml/attachments/a300/img/spotlights.png | Bin 0 -> 162739 bytes .../a300/img/top_plate_default.png | Bin 0 -> 157726 bytes .../attachments/a300/img/top_plate_pacs.png | Bin 0 -> 211525 bytes .../attachments/a300/img/wireless_charger.png | Bin 0 -> 179625 bytes .../yaml/attachments/a300/spotlight.mdx | 38 ++++++++++ .../attachments/a300/top_plate_default.mdx | 31 +++++++++ .../yaml/attachments/a300/top_plate_pacs.mdx | 30 ++++++++ .../attachments/a300/wireless_charger.mdx | 29 ++++++++ .../config/yaml/platform/attachments/a200.mdx | 2 +- .../config/yaml/platform/attachments/a300.mdx | 65 ++++++++++++++++++ .../yaml/platform/attachments/dx1X0.mdx | 2 +- .../config/yaml/platform/attachments/j100.mdx | 2 +- .../config/yaml/platform/attachments/r100.mdx | 2 +- .../config/yaml/platform/attachments/w200.mdx | 2 +- 20 files changed, 306 insertions(+), 5 deletions(-) create mode 100644 docs_versioned_docs/version-ros2jazzy/components/yaml/attachments/a300/amp_enclosure.mdx create mode 100644 docs_versioned_docs/version-ros2jazzy/components/yaml/attachments/a300/amp_sensor_arch.mdx create mode 100644 docs_versioned_docs/version-ros2jazzy/components/yaml/attachments/a300/bumper.mdx create mode 100644 docs_versioned_docs/version-ros2jazzy/components/yaml/attachments/a300/img/amp_enclosure.png create mode 100644 docs_versioned_docs/version-ros2jazzy/components/yaml/attachments/a300/img/amp_sensor_arch.png create mode 100644 docs_versioned_docs/version-ros2jazzy/components/yaml/attachments/a300/img/bumpers.png create mode 100644 docs_versioned_docs/version-ros2jazzy/components/yaml/attachments/a300/img/spotlights.png create mode 100644 docs_versioned_docs/version-ros2jazzy/components/yaml/attachments/a300/img/top_plate_default.png create mode 100644 docs_versioned_docs/version-ros2jazzy/components/yaml/attachments/a300/img/top_plate_pacs.png create mode 100644 docs_versioned_docs/version-ros2jazzy/components/yaml/attachments/a300/img/wireless_charger.png create mode 100644 docs_versioned_docs/version-ros2jazzy/components/yaml/attachments/a300/spotlight.mdx create mode 100644 docs_versioned_docs/version-ros2jazzy/components/yaml/attachments/a300/top_plate_default.mdx create mode 100644 docs_versioned_docs/version-ros2jazzy/components/yaml/attachments/a300/top_plate_pacs.mdx create mode 100644 docs_versioned_docs/version-ros2jazzy/components/yaml/attachments/a300/wireless_charger.mdx create mode 100644 docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/attachments/a300.mdx diff --git a/docs_versioned_docs/version-ros2jazzy/components/yaml/attachments/a300/amp_enclosure.mdx b/docs_versioned_docs/version-ros2jazzy/components/yaml/attachments/a300/amp_enclosure.mdx new file mode 100644 index 00000000..39dc3d0e --- /dev/null +++ b/docs_versioned_docs/version-ros2jazzy/components/yaml/attachments/a300/amp_enclosure.mdx @@ -0,0 +1,39 @@ + + + + + +
+
+
+ +
+
+
+ +```yaml +platform: + attachments: + - name: enclosure + type: a300.amp_enclosure + model: default + parent: base_link + xyz: [0.0, 0.0, 0.0] + rpy: [0.0, 0.0, 0.0] + enabled: true +``` +
+ +The top of the enclosure features user rails running down the full length, to allow easy mounting +of additional payloads. The `a300.amp_enclosure` URDF includes the following links that can be set +as the `parent_link` of other attachments: + +- `${name}_center_mount`: the centre of the upper surface of the enclosure. Items mounted to the + user rails should measure from this point. +- `${name}_antenna_mount`: the standard parent for the AMP Sensor Arch, located at the rear of the + user rails +- `${name}_front_lidar_mount`: located on the front face of the enclosure, this is the default location + for the AMP's front-facing 3D lidar +- `${name}_ins_mount`: located on the rear face of the enclosure, this is the default location for + the AMP's INS sensor + diff --git a/docs_versioned_docs/version-ros2jazzy/components/yaml/attachments/a300/amp_sensor_arch.mdx b/docs_versioned_docs/version-ros2jazzy/components/yaml/attachments/a300/amp_sensor_arch.mdx new file mode 100644 index 00000000..1d37839d --- /dev/null +++ b/docs_versioned_docs/version-ros2jazzy/components/yaml/attachments/a300/amp_sensor_arch.mdx @@ -0,0 +1,35 @@ + + + + + +
+
+
+ +
+
+
+ +```yaml +platform: + attachments: + - name: sensor_arch + type: a300.amp_sensor_arch + model: default + parent: enclosure_antenna_mount + xyz: [0.0, 0.0, 0.0] + rpy: [0.0, 0.0, 0.0] + enabled: true +``` +
+ +The AMP sensor arch includes the following links to attach sensors and other accessories: +- `${name}_front_camera_mount`: located under the centre-top of the arch, this is the default + location for the front-facing teleoperation camera +- `${name}_rear_camera_mount`: located under the centre-top of the arch, this is the default + location for the rear-facing teleoperation camera +- `${name}_lidar_mount`: default mounting location for a secondary 3D lidar. This mount is only + usable when an additional bracket is physically installed on the arch. +- `${name}_left_antenna_mount`: the default mounting location for the GNSS/INS sensor's left antenna +- `${name}_right_antenna_mount`: the default mounting location for the GNSS/INS sensor's right antenna diff --git a/docs_versioned_docs/version-ros2jazzy/components/yaml/attachments/a300/bumper.mdx b/docs_versioned_docs/version-ros2jazzy/components/yaml/attachments/a300/bumper.mdx new file mode 100644 index 00000000..b1937ad7 --- /dev/null +++ b/docs_versioned_docs/version-ros2jazzy/components/yaml/attachments/a300/bumper.mdx @@ -0,0 +1,34 @@ + + + + + +
+
+
+ +
+
+
+ +```yaml +platform: + attachments: + - name: front_bumper + type: a300.bumper + model: default + parent: front_bumper_mount + xyz: [0.0, 0.0, 0.0] + rpy: [0.0, 0.0, 0.0] + enabled: true + - name: rear_bumper + type: a300.bumper + model: default + parent: rear_bumper_mount + xyz: [0.0, 0.0, 0.0] + rpy: [0.0, 0.0, 0.0] + enabled: true +``` +
+ +The bumpers can be extended by setting the `extension` parameter. diff --git a/docs_versioned_docs/version-ros2jazzy/components/yaml/attachments/a300/img/amp_enclosure.png b/docs_versioned_docs/version-ros2jazzy/components/yaml/attachments/a300/img/amp_enclosure.png new file mode 100644 index 0000000000000000000000000000000000000000..aa76f4c8c98cf6e8da7f4c0adbcb91e3734b4207 GIT binary patch literal 114533 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

OSQr`BDeO1JSgC)L5v)x*T=$D7 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%0Dk?-`LBe=cudZwZ6B@)v&n4X-$ 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

;>xJHQzPwMHa1hS(dw{$ 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 Hw@1{!OO6bQ literal 0 HcmV?d00001 diff --git a/docs_versioned_docs/version-ros2jazzy/components/yaml/attachments/a300/img/top_plate_default.png b/docs_versioned_docs/version-ros2jazzy/components/yaml/attachments/a300/img/top_plate_default.png new file mode 100644 index 0000000000000000000000000000000000000000..32a46ee64ce11a89b3fdfb323bf968482d9a8c8c GIT binary patch literal 157726 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

h&+9`bphJ+-5~m) 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%0AqRJ@h3%Q)faIOz*`2-2SiL2>Tb`Kb4 zCt*(30Z75{W+otn7LY0Am#H%40~|j?LgMZqAq{=m7fsDNNx|M^7D#^#eSY08asIJX z-44%UgtpMvPYE;gkxm&(fzIVNt#p;9XP*s>CGP4Q0o!=NG&7J*@O1nfuqY?nw5!25 zYay=$=8ECwb#bqas_+6N=}%Pl0!rXPI_&atf@C1Pfkm{ZU&u^O=-{&>*tn`Pj-Y5a=reP%|SNnqj4Y0rr za1NO#y^^so%EYFI?8X4uSWP{ZOyz_3Z+S(3?)5GZVGSK^-8*;x(<3-+tw$^%xqOgZ-zhM^ z2ykoaOV&jD^h?8@`Xn$jJ@phV#-FFG}1K&~OFmblia`d6+~ zs{vc7{~Ifc_9w?=wcqpD|$93D^kINL@`8ql!;?6y<-aH>Y6~b&a3^M58_EWhJ zL|MH}();f-{`ST`eraJ*b3XU%rx)CsPW9*zgJaXp$I#XDQjsX~6N;8r_wJj`lXO`# z)yih|w2FD6hAAY@CvppU#p7>a39{Wrh$-a}&htGk_HfehJgb)ndyU`_Iyw6J+#i%t zD~*_)$?6Rs3* zC+zxbvxm&%eXn|LseRk$sy9EFItAV{#60-4n-P$7I+QPe%TuzU^e?TCQ;&H6<>*tD zcAkhmR1fC;YFFAl2rDoosGwr4!pryGaqB9t=Arkza-yR|wUIBt?1p z&V;6wc0o4>s$)tT2&B{wyRh0LuBDKPf)7w)aU00vg4$Q)W-yGPkZ_|Z|%8}w~W~ExV z7Bw%rI24c3TfcpMr9z#^2gU6`vZaeqC8Fkv+rSZ(8FmxL*9{&&8Q%&nWeqiZWWFuw zV2JI9l?j6T2jgl@5HoDE)Kw029c&XoVgxH`vn7aY4gwf%XZG?TN)<2;!r zc>{!adzPXEKgRCu5#4VWivHYhbQPmD-=SHb4c>K(LczulCcEpp|E2d*#S`W6UEBF9ea)>;BH<^zXi)*7-fo88k> z0!+0gW`8CjK$F|lPPXg}Dw1U$+3g}GE}6xO$l0EeKK%lq9qX8)zKy$7!aVHEsky_AGHGjNwC5EB2gR&Xj`IGLIu>Ut!LYv785TQUyaz9e?j| zv5XL7auW{nPfhxMb-y^AO}F-pN_n>D+lxTz@=o6)H^G@sasuxm)WLA{nimQQJ6AKe zCSQ_g5k86OtIv(lko(GmrbLkr&6D*~>3pBLzJB8Rx-AZkXe?S9fLbm%fCYeru@ZS6qo8u+Hu4qG$vL`wHu5F6fz0|d zDL%)T`Vc;bK1A;+3Fhg&f4W7hUQGu2Zcr(iP@{I-V zVURjN3C(r(QtHH;DxN+N_2dcFR$g!Lzs+CB&rV01m9*4b4h-0?2+8n8*_DbBw)($g zQL?0A#Bi#w4@sunFE;>wI$;p)?(VKmKWlzjaYXkcZ^K|~Rgp-9FjYm1If)ytzd(vr zOR91q@MrTpRB8GL2Q)*m;CFL0Skd|k6hS@gwB*|lTuwCX(Z7`;{oD%{&rzG4erWYf zLR-5=ld)pviDZ1}W?gWqb2?zDOR4qT*&~!R3UV*)x;e?s(8monRu7+eZJd+6j$78z z>74-k;GCrsH6VWYGu@x+?o|DEKf$_(?KQm5wyh4gGL>NO$p2V4R{~2s&yuDaeWDKg+Q|FVD~ZS20O4=-=!Aa8G+hR7`*=R9&~ew1DLOO0hJ-G=Juku{~$m z>I@^>><>u@IlqfdLO^pS)CV)bkELgN?di>FJWJ*wF9?4k7oWw%^^ujZCFf_`Rv9Ig^Gr2OQ%ryZ}f-)0ayC=p(0? zucR_!rO=&TU84*LsxX0$Nf8R zq$xyl=?z)^R-p>`;(`#0-5q*^r!l@@haabcK>Dy~xsTIxeDNTUx&6%Q3GnkMCSGIJyMbo3SvKrK;6C^m zou0=l60;i3H(G!tWVD%zkbi44uB@W+Mh`k;*MLzo-|f^UJMOE8WLf*=CKQ4|q>k^Y z@{oKvT0!|h5KQ0}{ydsFEW5a8}kIr&*;yVIVop?^85#yKAbpap0&ZG%< z45(do0HD!s)?f__oAkUhK@g4X85iKslA^&-Q?KghSTqq8W%OfCfp6upd;_%o449H? z>vujhOft%LC6G(_;`%UV$s%+|1w?};2{1NFsi7_9=`($QCSW)r<$EH94GvUxnl+6I z!z?lo$1$bKQq+_WlqE|r;z84-vxQ`SE%Y;6brpAl*|?a~iv#S$zAPyAqVHT0Z}Q!- znJHN~o!>BoqC_=!Q|Ar)?WY9!O$>UiXH$}3Dde*XI!Ox%&qWZwH2xxWzHCm#^Cf*J z3FhM1V9{^@N3b{{r)vJmT|v$5f!Y zg)rT7_)!&95E5zja%B7mgt~8<!#u5A9oq&eDEd>!AgijuVDZh2` zu(cVT*w`F#E|eCP>6fS}0P zJfr(|+B~o0=p}%KF4rR$3LH#HBo%Cl>LCUNnxhb>k5igki0>*UPo*2;MLmuiW@hdH) zcM3HHBQhYA|NGl(S4DME%Xf;58mcb~ojZQJ{A<2mxu1a#|t?u0_y&b_Ni0^-gBJ^j>Ty3gtOgG%2UZ~-|b zps?wE$tOXydr)Gdo2|EQHNOOJWpi+X+w4&1;;>nPJ}06A9E&u~UO zGj#S&vN_h4RaS!m4F|U`l?-=1C_gJsUn79UxXb(|?tG5w$6LS}If3(}xxD*QXyFPA zN*l!#f&Grg_FlW^_8b2uw0iAFS#2qyqsbu_%cYx8-)9HBa%6$CQkgi+mMFOf^Y!9Y z8?)|5;8cF|&a|A)RhiPW)eufjI!KXUTmRSO6(BNY+=dbjBitq<5T+SuTe2i%@|jDi zb`{dFl?@y(y4flaG%BzS{!Q&Mz(xO=xjLF8bmoVkEVCJ;oDt3$T+l!bZ|W@gJGiW4 zBbx_wK;&XHZ)Z9DA%A6>0jAno|Ma)(f#&>;naL(gs9SQq6TsWJSn&qofV)@{D4Yq*IG|Bs--IA{93Gbiq_X2xZX%3 z&EtWuMDWaX;Nhs$T2#*jBj)%nEQdVM-+$2y9{BK3+crI+4s5l-KnR9_2oQUcmDqJIq@9co%p7%xDQo%z&-ehsckKBYNlFVY{Qe% zc6m&PKAe6BgE)54>Gn~7zD&SqrS5gOFW~{geU{VPPz*-gx%bP<@Q9y{Ny`3jfpNeW z;`MP;VLm(Z5PuHrNd=79M&I(6uX6C?etc{AMIA)XTyt=|69mz{JvV9Uu@wxaiS65T z21pLZ1i7+Gr~zPe##_4n;Mvg+VQHfu5=Guubv}?Q3}A)P;oV zeY~Cet6tiN4n-qU+ytz-dp` zMSY)o-4}M`{-y9m1BpI)tT~?-Gimzomz=a!P#oP-UyPbj>%u$x^EkbW`(I#F-}$^` zfzA# z;CKq~Y^x(vzdWFerHahMS_vn|WSQ@T>q;48_P%`wueu4bjdM0V=TH+Oi$u4m5x_tJ zpctFID^>}K-~ubFn;1a0-o^V?5WztiL(qRZoL-N$-5%@KhI%5<4||IJm){ zGrhOQa!;G}EvsFFKzPYhvDD%a7>xjoubyRd;3o|TJr09bltoCH$fUS|aSbS>!{O{= z$`RM4A7M16ms&1InyEG*(C=|I_${Z!-@PsIP&=lE`RJev02TKuIEip>NH zNYJn0G<4!5^hN`;)=9N~{kPlb$!p(^Zye|+*d49gM&h)szK30R9l?*56yXQJ%-`8$ ztXp4z9ZSQ3uWO+ddC*>!>{3P>IiJOS01E`+CyU3MMkMQV~M_dBKBgE`ouqACFtgr~Q#0 zS&59WKu+v#*}m^<*Vc6b$9EjqL~VP8JV`>)5c>S)a=xcKjt9pdE#uw3r8Bj@0cO=d zCEis$>9NiIc>&|yX1jyNabw9CK06^>^gktto!Oh8Xo>0oc{ev+@qCCG5uKBfCzVjjZV-$>5xV@2;Vz>pL6V*$rSf7px*!qx^J#)WZM%e=Ofx zUd-QW^9>@BJZKmz%WDEd=<)Smn{}VFevA&EvkJK6BjWk-*XIw%f`p5}^7!-LrwwB3 zFTmnJ>M6qr+K61`z(#E8EO%u%P}|(Dv*sQHO4OS2YRzdNBZL|w3&ElcSNTLP_)Vk? zPjSd!UA1eMMKT_MQJ>}yLYr`F6nHO46iNCc4g+GXgIoPS1mMTU?+=t#qushQk#Pcq zNz*{LhJwMf=5jjtqL6m{_R!C##`0;V2~G5!6K*{~{&OZJSt*r*4(|6aw`p|V zBM-^8oFpZ=ECAD9ug^h%N;!AR`cCsVF<`!40P;5}fx}+c9`#KoC)OGC+Qb(w7e#M6 z!vq6s@;{lF}-fup6900H<*Rnk(!eEo`# z;5XkhlolhtnV~Pdvj~IQ3J2Sgu0LXx=Mt(U=nW2Qa%+yu^{3C%K`b- zBHlyrl8rx1Pq#FUeFMuuv}ff%n2Ga+9M*N{qb@Lwld}MniZdEGIEke~04D~d&Sh;K zk&8fB4Ka7@PQthR)H|T$%w^4_ZmRGwsBzrqHh^as`Q!Co&RhwPcxCeSSuo;p861dG zVwK5GdL#KVs+KY(sZuvM-Ao6aEnMhKupY)2);y5`gT=tN4x)r2E~BL!XXEfug}*f@ zYwR>)&Bk?KE+~cff@3(okLnf2zIm+|&aA7IuGwF3!Gfi$07i*0bZA}k;`p^U)5p`q zhn^_6owe2-A3NCCZ#jZa8-{XlxIZ{0Un_Jo!6a zyevqYhAtNKhwovv$H3UozYFN?Wbo$pWS&Uan#<-7PUq>`B(fbBEIa9Yec%01XyFn zz>#O)^omQ%VepS&GNga=$J^1b_`97UR^qg1t%g(pg36noy><-5MgYRd;c9>@!j=fN zt8jFzWaqy&0lb5=*62D~9N?o)?(^i?O}7Mp(7OBsc8Jyb%^0VPfkGeS)sIr;dos28 zu8IcZvfMDlRP*qFWfOBF_fFira6N>O&z*?3iFsZ}3-~=}@B<-|vuh(B>gGi23&H!1 zF8-jGo8${f8^_k^m96yn0hUTg?S5YQKaK{1tyZ2;yKZK8iTcI$y#PInA~N}Q z|0+98vb?6+^)eRt6)&Iy3nQBAT1!w-XOg|ZCUf$EKIp|4}U=Vh}kO4P>J*3rP5oSVdAao6t5xco~s zRSu=j1~jw;tSrC^f++dKfZFL? zh##Inge^JD5}J(!9l5T=~5&{0uVh;=SMuUs;X93gSL0f!1@O0HlC=O=fN+OrAn zD;gmqwhh^5s>RQP%bmuJEX_%f6jH-1c!R|rd;8)}bBmDleXzg9<^X{-O&3Q%Hu9C8 z4vs>_z5r9l=jDYrZ$hKeJCg$sE$_-ATQDmOmhG2 zSDOYxyfkrtyMpu_``r zLG(PcA3)1>od0m4itI&gu>WZ-T(J${S*c?dQT(JL4x5P$^=(zCN#C1j{Yy2d5?JxO zrXkN0_^P}O$wL&GqjJrnD8uM?_PM3dwc;@pYeM-g%A~qDg6x(7k3=!3n`|$a=_#P+ zRT2YKGQm&7lOf6+rm8|dXJ|k!Q{BAbCxA!kZBG?f(N3CA(8|S8b(G9B zgy~<$i7Jc3+P1{6|9dkEHLGTL)Y5U5R*9|F>#ERJ3>E0MUc>P8`yLm4d;1Px3-w3S zc&Kx+h9<|ou1rMzfszcDLU@Iima#x(f&1?Ox9NLL&63@7_iEJ-AoagrmxK6Gi(YTO zC6Q(G@QXz#e$^Z~6~Z$nXS|vV3d0mvshF3^K$ER@rj-{*cq>d94ZsT1HbLrX2zcAEX_Yo$!}#&ohiv*|(f4E_S?ZdtrhIPvE#cH^J(39C~_1a^i8Jn0xndm4^nklI<#?^Js$m|dd`)mv_W}%xFD;}I=f|#3ybs* zuQti0X+HQpQoGw@yLL<59V>TFRMiID^L+3tTzh!G^7kl)1J$M*qn0i@M~dW=^%h?I zcPf;d@|=KsPoh3i-1Wy56hkp-+Vs-W4_bJb+Y&Hbl$B>c@S0UK0m++Lqa5$-Fm`Wo zSG`=M`*ypXA!!}wGKt-6`zh^ZH1IhzX>$_>TU5r8hSRBNqNg^BZIR2O;tP*U%uq9h z4TRAxJ89BjaM$G(b?fFE(Z}ZeNxiodv1|foU>6Ki3}$#X=?ADsa9|TiaoTK&VPMEk zN?C6#Jan)hXWNG2w#kn6ws)LvT$oeoU0MH1PqW8j@@#sMAZm&%R>P>HC8Tnc1c)g7CIDLLc4xc=!&GU>aBks_urM-XDT#* zLmjrrs&oRZNv!TcimbJu`_`OInSyYRrWe3-nBDDnjZVhqOVUtXUJ|-pR2+IB4g-Xl zP0(p^X!%e9OBZZ8Rz^hZ?R{Mr^G!8=e@SJrlXi0NuF~&UmBIV6I(J;kE7;RLZrp4P zh?gO8x*vtdOES{K0AZ4X=G!Ax5Ka0UxZS?=VmX3jV9_>Y(Kfkmmr3a8PGpl`npg^W z@W1T^&>sog&*yV1$4ILsUNkCB12d=C4)s)pFwnqX zObUvMhL$7wh4}pt)~d6Jwx71FE7fW7GU`-`-Pda7Iy?6ODT^ONDU9k@HwO_(v9q2$ zt=<|+k|9uX_>hU(G&rhzu+|9YXNf?Si|6=ib{V}-3h1R~1)EVmFyN>M8`NR04Cxk% zKLUWD1UWxBeek%QWyXaY)(R^Wp}_dxh^EmbgaU58s75KDPg< zTfx7mAP01zmED@MRg{Fk{(T9*CSLw~*Ot!#{flFcQymHjR^R(KfL?!OuO?-nV92ML zWm9(QwsW^fZJrx|XTVUQay2=bTmog4aca4dKEMcnNa?*+K?5IXC2KnljJ@piqg9-? zl>tvbFq~5v<8BKoi-U&|;Cy2E7B$>dwtA$rXwW$l_)oMNvg7>Scz)=W{%wyYA{GBb zXHbZ+2>TQD{D!q-3FTeb8%uQ6A=#}BVBJ*O+fnMz{79`Pu)4CvL-h-oK7fh=q^Jql ztuaheTm!{Lg2TR%5A?~UC_R0l^ z0(0ep!Pw7Eym4Y7+Vzng4$9hfU_5UP4kvZjT;k^|JO(P`O;+Rp zun4FJY8Er{{nWG^iU#DD`m5d&f1{nNJ&BEGlOhkn=mH_gKKwaaGrms|T@e%`VM^$` zMp?PrJ6?~z`;zqvt^9$Q%KZ?d!uwXi?IbHra+AE{{eWyBZa3>z}^K+|8!Bo}$Or3#GA6}$gCbhc_2 zTWg$Hmcwq_V)D%)Ea98AV+y+_=_6K4wfx0FAE@_gUg+~_5caw=eSF27Uz|T1lLIDj zHsJfh9^UJs0VQX$S1Touw@VjWwUt10F+!<7-@6F3L3GHhdAxzR zZf)lsQfaPvGO@5`zYTB#6?8G>@{MS7y}yY zUM3rpmmyz~&`h~~L;&URdcZ*y=IU6c6(^g9wn%P)S5IQRbMxzZh^mMq!njOmH$kNX zFTAYY{MdjvM3sa=?mQwv+`N-Z65~VM`|A{x$@BJ9_N>SC(6Gm|&>Ql46;<>zKpKzp z;qQ!|+g^f0Az-Smw8kg}j>dC%1^-m5Jg5;JI*mQa~hHNPeX9K%V3I`DGda}4UghC}^ zjz&NYpp*y!0h%upk+PZ2Sg0anotRv{yiUgDUV4b=$e%`;B&?Bmt zzU}2xo!28_IZ3k288#T=5 zz2t=$#{COH)Wz)X=YHvP0Z$t5SEE}#7zU3F!`Y3}Sni6Wl`d&J`N6;hqA&Ea`z?nq zxrtHx8V-66@$&FUD;=+%BgpvWxVeBKzi}(_G(&%mX--N%m7ft1 znRl+?)EMfhIvKZN$q-O+&gW%bdL0u|g`oj`;@~i5B|Se$H8kMn`aTXsd`}#|>(Y{n zy}B;Bt2j4||LrjH?s=9jjQBVd!eEy>$;1HndbQHL6jV}KTJ1a&*AMRDD`4Z631Xs( zjCUsJJq)vE@NHw7p7)>Ui@=BU+YxHLg7o9y2aDuz_?2!)Hh8jdTzeOJJoMIMhHtav z<)NI6SLq6Hz|g4)0S$u1r{4vUy@WpNfdO4J=cYN~F$VN-5Pk@XnNCQ7mG&ZU7srS% zvqqW*2Ya<&34(ivZhyE{;Ac5oM>GBD(qMM=HKu@T@)a;~18&VHu)IHD;!@{OCUP+d&3;wM zDoyxyS-Kq{$eR@Hit0R7!g4=bCgok$R2UG*fKn9;iZKZLi4&y<`L}CvWU4F+Zr*>_ zuEa}#%ngf5^lZdAW0t^f*Qrez%2biSSH5CcIO!LJ3 z8(CB|m(9Wy${tTaxjU`jl$50R@%9+G5@QlF#752Lwj!xt?oi3FPxw*lvg$Wu@Aq!G z+=ZOnFqZ$1r?ZTz^82DST_TNicOxPt-Q9=oknZkoX#}OEJ0%1pg+rqtjWp8TeYd}R z|91>NpTRi$yzkm;tvR2$j$)wbVW2R}(=kVCr)4|)g(`BF5w1Ubw9%^4R+Qo46MA68u#Ut7VF027Z>eDu^MV7uM zMmfC2lpk3LqKEKPLm)!89ugIT4AwB&4W6ii=2KiwM3Fo)jV`3=#L1fUX$H=*wLbQjwzp+IqQpr=PT?Xu? zbaBrxZaA^$7o6xW08z(@4wmFbK3l?(eWs37qM9?V>C>5h@bPb4rBO`X$}{z#9@kQR zoRj(4)ZTwKEVz0AtbOtkk|0Oh_)e43$yOBuTAU=qZVrDa?gkJH-h#@XgR)LYMGg7~ zCpB-G#j*SEq_NBQWOpO(1hl{gT~8|@BS#`xl>8;^N(+_EVbKu}1{wr{EiqtE)XN6Re_RO&3SN(Vh^*^5NQc$qbHybv@)4Jyu&>_1Je&TO4gV}Z2~ z!nmTY{(=u-&-mAM!eS8GUWZ<1q~iy;qb2@e6y20mb4r^n|6geFMYT z!I}-@Yj`%23NXj+Jcd`FF`ym`5&Of$h`eC{8oJT8y8~S#&ehm?6HXK6qV26T>XmDS zqdJca=+My6xG;f@9fmko|7&YSDi$saIr$vbhliNzC9W4NSO{v4S!wDwogf}=t&Lq- zCGW2RB(mpDK-v^#*28q36%QaQ0sFal`va|8Zo%FlxYLfYJk5KHW@;pdn5`&vCO&fi zX+l$)nWo2?N8GY#eKlO@O@o74BugDffE+|aCpSFJt2M3rYM&(TSEo%cbKR64)WV9y zK_&cn;l%JAgz6pqxR)nY(dq)bg-fPmTD#Xzu zEwvQ7n~7c$*D68ZtHfh3lSI6N zgIERUO2{V>%=@z?;kvW_y92lW-2r_FdFSy)PZ%;x#Xf~XYw+DoM@%8g6z5Dy;1Mv= zAgKQd{-PI9G)Lk{@L>u8kg@hZ*J<1LEH^kDyf}KR94e^~9&E-vIFEGT?4M0JQ+l1F zJa35ut!h?FPVN43Mksk-ZLRyVkJ2l_XGH<(GP#Xix50ysYbp+)aFXDTV?pFw@bl>S z4c7z&>>8s3yYjMb>(7x7@Izg_`7n+T8AFZ97JpL$)xPL*+a8~C^$zV(tp?e7E8ZDn zbGbEcCcLJ;c0W`y`Z9j~7*d8duvV0&&de=a+^(YYM@$t%Rf`HL7;YIh#v6cmbsvxo z!U`dSdbS8@)n!ApaK(YXB7n6?co@%_GqyUXuoIbU&wF26W9L(l`yj%Q{MopZ4$V{R zR6;n5eH9!8A2^8Rfg>DE3fNB%>-*l1@$E@PXL4E=G35!=jQM5q%{w7n$n;6wPcpD* zIxGa?FafF4l7XAkH191R=O^~|sUBbMQ^jvmBrznR{?~-p5IANope%h*C5753+qJO1 z0LQT!tQ6k(72;UglL?vgL})lA(iSDPS!=1Ra$+_6W+0w|b{-*rdFmQX115k!K(L>! zA%2(}pCsJW6-}E5O9Im9`#0gHD01mQo34keLuY{y(Ke=NLm%q!*6jpV77n9vLY`0> zr4PV`MAaZA1MKPixx*T^w}i2tMuDBNZvM$>TjMrdG8wiBafR|8_KUo!`r1+kQmW%| z`2uj-MS_mRnedxJ=OC!m#c3%Yf@!VP3X&Y8+YMSkG~_|R<0~Di#7c!$V?h&|0idoL_hEU z3qv_1&!w93j{euHKYzK1FVO$VRa}1Y#`_CxW^{(<33;n3zkiH{wJf6c=Pj#=LfDh= zX!9KeoBFqoW{l%;CK}Ze(v-Ips-54QRBN9*rls|6c71SUDDRP~{aGOtBR@_zy&Fxk zJ-}=t+B~x&D&5jtkbG9TJl08jdWt=aPuTAYeQGxiTjuk;rkfZ?@r!13`Q)ONZMFjc zr!jJKBI?fLQnxlRKax^I=s|3%D9pS#e{wD)}XN*X)} z7r7)WJmkuUgo}{;L*+{Eu}Gzsxn7 zjQUDyVX|g;;mi)Vk4$y7wk#9`rw~}#G|&f#5(nPVC5TSuscK+HP{E`i+*&+X{mHJo zxnU1;f#D%|5efs^58&`pUU1f22tvT{^j1>9TFe zrvV!XvA#3R^douyi_%!Wv##@P=gC4w`6CYqL4=OV{PCqptrm(LX0&z^YM1kVVtJW> z>m(rp>{Vpgf^)86aMQW$0SXSyYi7d`^=?exq%==vS}~*Px9ISoH3k2d{d3(h(|3DCeNyH4Gz)g>I;xqD~>BKk9Zy#kZBbZx9=s2F@L#Por!)JboN^ zLSee8F^CihwOv;N!uRtN>ncy1Dz3E(`&7?r>X^C&6&kcjq68IFU;5tmC^eRM?$~Zv zuKM80U_0!SaC~o}D|hMq*^#%!u*n=R{o$X4{uF-;0@sm^UHu4&oP&5_tB9pxUe3|Qg*vcB#336hYLH) zIDv;Dfh+GEe+BxGocdK(8)bB#K^Ber>sJYF;AH+iIF>RzC8Ohuh+Ancbi=?US*_9;WOc^bxe1wu#%SbSXiVwMG^`a!SnBI*y4&m6YtTg+4mF1jJRZ*y95tFHr^i- zp3jrkn19J&beZ1%Zf{miN{3hw5iu2Xe$1<^iWtl=C`$wLKo(ncnsE}xuvM@}>VkJb ziNIu7{v37G8Ucm z-Z^_DaVK{7jOx~H3Hqq8(Hq{|@<#XodIL;ynd4jbiv!l&NK}xKKhp#~>`)>p>|Rc| zWE9rLUe|BIw7e~AW#N>&HWitq6mqq8hP)=9=sUKYm`eh z!04)|>pTw1i4O8dFw-W79RRjPo(XjM=A({(%>DaA2=DV}&|V{kVnx$QQx_BCPc}O| zJZw|Im>_g>e_)|WpoUA#!F?-tPf85aT~!5J&5&eDNR86F>6SHpNEF$F)3lC4DeK2{ zmK7}HanlLQ-~2^^9A#+lQQF*d!+;J!{VT!tgi+`E@ui{Eph{$m0F|)3yecJ7IMA*JYlp$NzrK>TX5B7Y@_58*zV*wOru`{R)D?{ zG|LupND#(ePD#Q@!o7wS5*G5kq6D=^Vx6#+-ovdD4KB(uVI_;=gFv4ph>Dw-BN(NqVT9EuoLc%3~- z<0hOI1hH?xH)bT_OQo|Aa>%ym^jMl?g*)ObzNRdt3~i-FP;dz?hx0sIcILylh)P>Y z4<=me>leen=rVNqagXn;1$(Uphs%>LDF!}B>NUUYzZ46)coV*I^Q2|Uml&}k701jF z@6>tAyi9tPVpN16)QGH`E{4)rjv$s)l})$jdPXMJqnB!JyWGG$;<`bARQ-u5y6KP< zz>YNVZ{)0#n_TN_%XhUaDuxM(VTv&fya4DJ9?%`ZsmUasZEv z+NBNZnB~TJ&bv?9DwD@MqivbL5z)5sMDHvE{r%yT+HbZcG)eFyzGeSC=coOQ4Q=zJ zr2c_;-**49nAKW+iW>xY=%!#xRbjrR>t5>-YcLxBJIVr;Yq2CGQXAET-raH(Z!IU- zR2Omzr!0KhpE4(ivnkQBr;-vq2*E_ii_=2r3JykP4!5v|R*PIJ3WS z9-)*bMP*<6ACQR|ReaZ@1A_nPNU&a0O?^V#Q~m2y3i>uvVw5nL8P^0MDO2NK(cL&N zuv&XM@*{ledN!u9LEx#ia~HmRrM&F_(h1|kMJp_v;naLD{Lo-Q&8`k>#sNLsR-$1# zUKy&-W}gZ~H?Y%|R?Y}7w@ddg>Sn%`NrTCnLLe43N}pzOQChOM2+Hf_y zhrGZvH8;q*8-Vj)QRy;<^>lPX?cqy!|kvWA*)o zV~4F~fHqG^zDr=2TeQ|R4-aJG{A6<|b%b1tsP_TbQPGk6SP7w=ugQ;v)tcCjR=N^* z?bF9!JOIhKKZg%Xg1zwPZ)In&oMZPJwuQ9yqQXp62{rp>0y&|wu8%y;t*wBjiYHZf zhz|osD{gTtOGfhlB4TvtJRwqQCOf`*+p^tw(7>*!l8<<3CSO~$JCRF5xMlICefzOZ z;QGw!W$)`;PY|1wATk(6*PkdB93jxZwA)!RED-X=4($Fm8Iyp!$r7hJSxWxb)eU{I zb!;SH1%w611XuMj>U77~04tOJH!WHzGoy~~TSQSaOT&l?6Ne#3&waEUpUU_jzft9q zr&b>4f|=+X6m*h}^?nUjR|OJMoseGmA(aF@V?9wkx-g+{zd9>Qrd~NJcxm%6NU+jx zrIN7fV7K@V9RMoBw0 ziTnz=a{>CL98Iu=^n0}#B5_rw99Z&OEUM-}&Qz*cx-h+4{;OjZ0McWu$z7JXUsajG zNBuPAQTeZqJzAVX`qsosUg7)EG}oInY*YCx_d|II(NBgSwNHAGMUY|U0J;B3Sf5kn zAUD!FkIGpO;ZV4=U6jJkzq*`OWk*^Tb_`H^}EL; zsq8x*XtI7_n}~}8k7o=wCQyt}9x*)*v0ivq(O4?|NUltPX~c2cQbT84(DK03_XHZ3 zbninh(@QB0vJeHzM6-!LYVb6l?EESmn02#MSJaO!C_8=I4p-|(8;eRTup9NK*?z7P zpEf3$6?$!Yg%oWTOn)>$_W6BFWKHEshp54Wyc&L4q0g)I`ZR?VxU(0!W`{=Vf`7N%eLGyRBAIVrh`GPif-1gDrd|dX2ARjH8UWFIk!vs^JPi1OA%4-iT z_mNq=$I-wY%x<6R6l0hc$0VgTvU>0TmMkv!FMMRdO-H>sl!hpdx+^z=F*L=Br=*AR zuCa=*%fFVLfy>xY?7x3)sXd5d#x>^Ff83VBhjG<9{Fn8Qzh(FV)o*%Pp5AteQXo*h z_`y^bPYTAQ*fLBsskA{{%uvJWX9Gzr1hDFCoF`So6HlQfjQpG+X8)^Mhka_6C^F=i zHRk&Qf%F)2qKC)H%c{lDx!Ko5E@w-TPpfI`ryC5w>sbuFxooK38|=~djJ{t&^zm1V z`3HAs)vHzqwzyNRrnR!rIk$+~(F0=02DtKLH|Jo>1naVbXH^l%(xO-`ZI{lwm%D$I zZ(A9n&Xy&?#XWxd?ODKlv%YF;mUbhuTzn--KjFpw%^Y-jz@G;yVfsrt$PC69 z*7<|05Ur{qXnMa0kO_PhE#>K)vxeMzM-%|bw!TsuS~|w zT?wWn)aCm~J7ytZWCs2i6H*Z-8w&L6jq*N-Wt+Q3X``=L#a%*dX}Y5~+y%z4D~9>q z)(oPzOKo!5MO@!s7 zfm2{E74$x#e9Sq{dWQ!hSJ*Z8Q7mSr&(GZeC&-H-dqb+q4X+;e4Cup#Wz!vM=^_Q^ z%TT9wLE;T%!iE-;{$k`-^xpe%PZQE$Jxo(w9xax4k64wN>5L9UW@zC<+es}K))*w6 zq&u0JMKwsW+HTgaMrgELXcDct$hyCN@&?!M_r0LG(NwY}jw63MSh5&u=5DHs9W?s< zh{utRvV8w~UF7*l3$;S&)$|EPAZe}tj&NicIWRpFO6j<)qbS3TctQe)1{*#E)@Bq} zg%)?jU_oRkX~u3hjLdZnz1}bz^htgSILXtL63gWIT_?11jeYkD2`B##(c0B7hYtfZ z9oNe%e{(Y`qYUtbQ>9o~Wd3!&5^RnI3pZR>jvWF9yedwQOf-J42+m;nq^3lLc8LB`^_m4Da#cLeF#v=C2%#mApf!e7I%4UG+= z1#@$A*N0LW$~Tw)_IApSB#Z>#P;n}~X{w2}n8So4Y)g1NB?Nh5lBXlV3=OXMI1_Ra zOC%SozULQSXv4Cyrk30ZaC0O4?rt!DET}l!aKvJ%gRN1@GU*+tstH(^7?~ofHgRh$ zEGl&os=E2Tk7YP#lcY@mYAezI)X@Ltqq(OGNvv>Tc;~jgnA|Ig2U8(4+O!#)*XutpNMtf5jm`LaUM^ouH-H6 zOb%0Dz1bwp-8bvh>E>4Y04>CE*_^wTzts=wN&?nfB`m`B98e2ui_1u476)A47(q4bd1Y$x(`fnK*_usSS1Ki!ifmg7} z^AC0G#2Y1CfUs|N;7f2bMIMNonW{(APnJpMZa%CZ?5VC4eIyyv_r%)>+OLb_AzP1~ zas3v)C7qOVxYq{Q_TgKTwhwUL%gh!=0T!z*pP2C{-Ly}>UDvsB+)vc;Wk8&ESYRig!G+W+gfB&tI{ve>*jgJo00EEw9_%&9KYJ2K!Gh9p z8EC%u2|cvu3ESY??KGGFLV{$i=yJRqfDn>cs-iL#VI`%dzFxL30Ok^H)tPT%neT0+ zxz$ep(n6UnYYTxv4XB9TRB5q*pFn!=OQf)r@87Jo*>WqD+Bi?1w`Zo~R;8LNUF{{w zK_)SX7-bz{#=midTW&BfeI)WifIwawvx@%4Ud<7o;s(LiT7paK;};!}K_IWAx=(pg zSXF|7r&>(NvJ#fL)a^%X!boM$5!4aOT1vsCG?jcOn99Kw@BQifGwegqb&w-|cZv$UVRLM%0iU-7QVsHjRC_~xL6E0f|U7=O;x(M30%>^PHYUYJh`t0aw~q_OHl zB$rr7n0rix_F||iGkxixu{!=fxJ2)y=T73OaUuXiC0Do~Gw>wr!sGu=Z#%)xZ&tz+ z)G;HoCCMz?QXV5%_VQ)5DklUTVaX}4$@3Z~Rvek&M|PugprZBj^NUAt)hPCwdhHqw z@+a@T&&M!J^G@4@H>0AW_yh%i0RJz{>h4r&bT4NqPf1a|wMQ{t?)KWR=ZWR^N7BPjLj5ko8-`XS~emq#YH%6qz7>wJoGshp}YPo_>~9b zIVAfYqyriKPLxh@EK7Kv>SF6YBX6e3rTNeEyMA5}ONf@yIyn@RL3uM~5H}h7b24Ol z>eke%y@KnFBT>eA&hdRf7Xe4UMXdST-7g?^=G0s~f=c?-9IS2j_G07RCby<8;M3GW z{1m4J?!g~NWI#!reF^YTCZ8%IrSHCL1|W|d(tSHz?-8Fw^=MeqmQw2ubMar%58wy} z!DftJHM6Kg$*2%Z=+){f4B+PP4|RKqc_0v{$jo}w>##O(_-c@nlb2jgoJAdPZEeNZ zdnudM*3^80;2((dqQm#C!I%>EUVp#%tL4;%ix&PmiI!DSM$J(=g8L;|m=SWSjqpvB zh&xJf*-tpQuY_fN?5Yx|$v4{3P2}!>1|gz*f*<3!d<%?>SI2_x@{U=>F0BGHlcj4g zaDW$6c>T8#OS_m)ZWQwZxzw8LfSj53;pHUkD{ZpF>8M4XL;g9qvkG%8>FLeakkB`A zws>1JZ35gX$qKkXx^E~jPEsH&1g0tGj4vZd|)f&>|{2(hlg;uO~ zwh#QmKv=`MZQ+keG#HRzr&C`x(`5SU`lI>`TsYRu?dsi~013w_>U*Opt3}Vu4qrs2 zDN&Rjuyg~Ti10C)((9^vE~fu*WYIaQPfTl{@tleP${&sej(c@4Hip8=$_WdB>fdk` zgtp+Xx5~*Tpg-uiDR4Q>*VhEBv?oY!o=#VS^o>1sbyfaXaZ;XNmJvV#ccydyT_^4D zA0d{oF23i*BUuK9s%VmF*m5shU*k8dG_4_vjdx}`;PUn8>N#+KL6qESmt9AZCr1DM z8g>z_4#liB1Qyy18~as872UvC;&w_z;+f)^;)ZDxS91}i?^Z{Z7*={laKfC2w!wC4 z@JhmZM6Fe-eindj2tNu(3n(L36f}4Q2V}H-5vWPgdudA8oiSI3-WP6)Hj^@p8{aGY zUbdG>IM6*D8gy>lmthlhN4G`ODw$h`@Sy?adsJ#FE^vBU62O@v-+0~KO;>&}III6KnyhU< zrRIT&)`vAai|d_>ETsmmYjZs@$+jubv?#v+5p2Lr#dnPy*- zva|VXusU;|>h_F*uGX+K-{6c@=8{x~apVSH@x5_Gg>Xu?Y8>0U%=OCLI_82);Y1Ix zK6`KI0Kceb3}UK4=0)R{pttkz0`I7fAH0^|x7$Bm)|L<_(FoR-+J-0vmnVf;&2XEZ z_oNZgg;;5fC>}3)U}O?arx3Z#dPEc9DVKglFFq0 z$F9KlVB0%T+t-5yl(g?&L7~v<^3eVh3Q#`<$*m;YP#y1l+m*Pf6G2jMT>rZC9v)LM z3*vCQXfmJPtMiSZ+fCGH4;TR}JSe9QF$Bxr$eROc??5lY;tImhRGU89jM74xEa-}m z8#m}>S`lnh|2cQ{j`UYvAlmi4NcX+9h}h*t-o52Rf7AiJr_bBul&%ArA z&b(C6KIB&|Jxp%o?~mwKyI;*UXiKQ*Y)?~Kd}op>=ElrNLu7#bfrV|;gPs9M*jrZG2W&X=jgEgy znCjWFPJ4L;QrXNGou^{djR{r$G~Y4e$Y7^iZn36x@FZ8p3u4JsIiy`;Z9fb9oFN$d zpGqArVb#Q1zD;J#l+*6H*XZ;)M@n~C8{z2su|HcY#sng!#R($;0=~rNeY2__U+Y7u z0ZBW)l;+YnZHpyqPt#9Z6*Fza#H~9r=umNGxuJZGyc%`Iewv#2b>H>0yMO>e8z5?!pivFa1nJ0yGCQ7j3)t%W zk={$|eB*#t!54EDKoQF+L7&?dTT!zBQJbh~`@Hu_21}A9NF%M-Fq2`Wp-sAp>#@ok zLBPxpn@1>n9PRIl6$o0y-{}bY5X=Yg)erFyxFN6hsl`$#AM4H8bJI7HUsSrC>33>IxQ9EpX_ zKN<6u*jXEW^*=*AI7zFTD%06mY6UQU9&;R<8w?rh+9CF^g;i~#v@kiTU*FUqY&kE* zI^c^Q>J1o93jsq&U5D7FvgDW;&Zub-&j4s~#*Wk)ZZ`_%W+dj#bRnwT>@=bYCOdLQ%>=R%GbX|Y-fMSi;8mP8t~imN#Tkw*)zuvsfvS^7dK;o9u7~6 zb4pcUIW){k0iT_n{U2Hsd+Z*Lg!7}~wio0F}3n0y(t zqEw#b1E+ga6JAgIrDzmw|be!l8)nigf z8pxtn&f9ND$v_Zw;IR`Ij;`YSKSktcaNU^oaF_C7x6gWh>#fl0FE5);o5fu^(Rik3 zYmKco-~!RvMizX#BKxRVC;BV}bX1}~y`xXQoS>`k{MB651RGGvGu^I2$`97_rw^Z( ze6+L!@Fd<_l%0RDmnRK6OU+wd>x+v2Ee!**kx>=SGO&oryWc3<>Gco6)Gyb!=6&5n z$LRYPDBf1H0dCM073-@fFni(2OMcf0r$bN*%ge;PpeG+?SXLalWWHA)#fe;s(rSz< z-yT$?sT&w`KxYf~TIJeoUGgkeQa|vWwL$54^c zMH~LRk3Ms$2B&C2WW^USfA4ycU9@A=SiSfF&Cs2ofSG?IGfU{hz5T+y%Ri)0Bq)U@ z-XUV`;h^hG+j-J(xvqt{N)63R34VtYJy{a_U0wK!dxm?(hWq5P-z{B5rk;Qfwo@p{ zJcO<(L2ATy+V!ncb(2@(X#*7R*6t zlV^28Zq4nCkHIOdJ3vUfn0cnn{9;B%Mwa%o6=UOj_j|eLEmncw(}GJ*&SGA3m40cA@Hg8pkr-Y5*O~araYmWZ9yyKuDsGgSKIQ(>B)&|o4q`f02y+lZpxn%klW+G zVtl$=T6n4j88k%P1Bc^l_@dDVM*b{O$$YKnsgWc9`8IVJ2*MjVvyq=4YB#i(MG#|j z9i&?pLrQFb!}COtV-~686$;=Q$fmSjumM2<8a$&7*#?eHs=?GS;wEQ1vs5Wd?KdDl z$XbB#1G}v8k-Yfc*-K9JmmytxG`itm?0&voIlJ;|d#h&WFj7k(s_s zdVaf_=Y6Y6hAjm1tn#Fi^IQ$0j~xqe_sIPQPkEYGVLJ7Arm1z)zAH2J1JKag+L|;N z=!dx{OF9;cJL0ZSe(l6I@oZZJeReZV0%=sC#KX=Mg&b->`!rO!G)yK%ZlWYzb^GYGEsVwoI!`)~XOSHZa(X*89~aU_AOdYy9V~=TDdH4}^dw z3$2PmMh5LUeEff>K&sc<&RI0bUb3|q)U>2r5X?8eo9fb6xjR#K)@lj;zuhD4d-$v1`6HtS zD0$YZ!^{5Lic81rwBG{wJ;%5pxSA%p`@O9NQOu^-&>_83yrV(@wHCr(W#*(SxDrj3qe>Lz?+Y>wZ-4<_!!Zw z5BB_^Mf)T{nF(Ju&zL*;u2!754Q=Y@$zRN%;4ljRSlAf`P)6)nBi9Tbm!LNT48{_* zd0MjcuY(CoEbFsgn<^v}AmlhQ*zt?01=RGrpwC{q!iq|HcOnn>xinbTUsqJXu{jL& zq(JyxEHI@Z`a!x?3-Y|$WL9q9q~vPnFs6R4ZKuijK+Nmkb7{y%C^3`fqAv;1HDaFn z4h}q0g;s*3SG_NFAuyT?be2tFq`G<>4eKtOMMli{+u2C5`XA&TeH5i-iIXN za^HHfS)NG&*v6pOH{JmO=J)_@wA>Mx!%-*)zANS-n#Gd4y^S_W2$3X<)kojK!*ct8 z+nApou&+G^X{l(fY=G4m1Q3Cc3_j9$6G9~G6pJ<9($dmzr)O(xriDj{*`jBcr*`%^ zhumGP#pw|Iq{@V>-~2N@0@K){4!w6Z6$#x)0p$G!D?FiYo(_gv1fQvwvS+ZNRUT1V zWw>hp(*pFf#!q?kYnT%vl}y=0+zr-iQiY7kSrEd@_4c~s6_epla-w%U{L1+B{QVg} z@n<06_&R}b&*?11`u=zJP(~yrvoZuqoZhYbFG<#If?AeugDQXgb8yS8`Z?D8^c$LC z)RY>_-1&<$V(lZUjQy{Kl&O;`uvLCj8HvL3pSb0knYQFo9?7lCozRr&w3xWWicqUz zYCx$M+5GkEbm1xK2EvJ>+e%r0Or=@2d&Pt}4&l9O?+K8*ec_rn|MDpHf;z>qLtS-7 zMh45P=?0e#YwliaZau1GdlK!5=?7uWuJM(=YZW!TaMNf^;TxFDk~L6JvBL;a$LQhAgnLW?OHK*+cnV>&Hq$ z@cqSH+uwTSpiGZ4lI%uhrZiLFW1~(e{z*!yXVK^rS)U+Sl7CR&Xp@goEGkKq{5!ZB zB71#CEb?^y^ri!O)#~R5?wNAChyImE0%v1G#~g<$p1N7hm;ZswciJ$(z&7tR?yLWV zMQq_Gm{*YiP%wxq0}Ie`Tx>g$uu_nWEGeeZw>E*S%R*fg@zLfI)Ag*D9^Zs+gZ9yx zhOjDCmuTfzoWbfd05Hrfc$ z8bj5>*MF^~4hngO1TbR2x5%AsfAZ$Q_pAJaU@N4cRy}zTD+$M_qsJSRUMk|Cv*O+U zqu!=qPr!LnkPw4qT4suyrO%CTco36;TB-KFO|F7k5(ky?#mJgYseqQQe!$AaICNuU zW0ZUWVEui3Pz`6@EFvS|$hLlb_9(w%`6AeRTu|Kf2~EFwY+sZqi*j)0HQ{O>rpQvv z`ru59k;kTv_O-XGYXd`~M-Qf^F2zSBieV4Dex<5PFl8GY+naCx^NA0bQx!|!U`@l} z51Q9lLiN6uic6n1RLkJvtAFc=d=7dh>J2&xc#!&{YTuz| zPe++DsH7i&7qi_k7PXqfh6A;Hd zheiGPUvZ254BG#izczM**|A>Ny-4^|ihjNA+Mq`XP<3Z2FxezNF3ek?gJnARA?W2y zShniD*PYy4XX) zAlkgd`ZdZH4;;&;;Wpe|4K4Xh?zTD3c z)9C+o{Wx5&j1`Uu+5UU%)$tU>NBSOGwc*Zb`*XPf_3lxaURzuJvfgMv0kRKTvlc`p zwt+0s_cmKP1Z8hND}tyd(8HJToL#HSgA|)X)z57|Y{*P;GkW%^L2T5v4@>iz?etsY z{hN3vfAeDcCb@vJgUbR)Q#I-iumpPXFh*@?>3c+5H*Rl$S^lu%U*K!A4bb8dJ#;4> z-5$A4YdI)`7mKjxG-oOxEGwL$Odg)no}YLPL#D8tYOllCig8 zZmjczC_n`)Tl1M3e6KT{l`^Q)JNdN7_(2B~N-LJ6XX0Uq+&x%cL!ye8zHCbzXt$oIS1E;>W(fILwQD!tBg@3`CVC zf4NDa*1(xffhH1kJC=C5^XPYTvW!(y|8!B$ikohkUXheGStS+OO6Edpo;<_r>L*PY z9=$;*mqPi0S{myu8wpl~&9Cnc@4!^1qT>DY-i9Y1Op?^lKi z#VnbVE!34SYXP^#v~+#0OX@GDJ#w8TcMq>6{AN;_WU#?Apt7DG2H(Tu`m zvAOZys!?+KaQu%_s+JdIg;7EceW&yh9pDsSOvV|l61lroFO4AjcX z)xA?!lCwBQn)uA3v1p0+&axj06ID)!y3U<8WJK*u zx#dy)jAt<*ShmfebLCb^Nx>C$1j!b#W+zSl;zDQ5{Al>)kVw2t5^^G?)M&vXK%ka;HM-_ zi;~@GKNDez1zf-=!j7sL&fcunKA;JEdsAeV(89wS4hK$iHH#a64m5DrvcDM&sEJx->Ht5Aq#Lq0<1%ghRp zD=S_y0{MdNf=9VL75k&!TDzJ$03moE=@Yxb+MS+|{uzS%=Q0VK+h!Rx*2i~A+GLHz zC2?f#?{+*K(#BHu+j7f$NW}=vL>WFQG5kyM>RP0Z*_=xq^dfL_1No^ukYBkA&67K& zwmogW-wmhfw3U?OJhZsB#GBc)wYB;6-;*$=sI6Sj;y|bGq*qH0D;`ep!dwy@Kk>mS z=+`L*APnn!oscJ(9n#d@`n2BVq?wc8$T5xGC1sVw7~d5eFSO>}wmEFXA1}g*j9Wq% z023N&&iYExf{*DSV}q}bweo^=F+DqO#AZM6t2SANb@kum*)I;b*%~d|=4t^Kf=>Mv zZE_9Fb@JBQNqX8of6V=?jU!l*_7J*mSvV2TP&l(}5%_Jm1J`gLhB+SaR@%_Xpm6?n zB1Ek7@Y9`@KoJyiaCahBeXCSg(cs%70R8sbC2bBuP-84l`qHqHJ|R3HP~aTR|MmB8 zWy~rw4Y!%eY(s;D^umSv?+W8kv2b@ z+jVFD2rXeW`jKuqtxh2&=yzqmg-}6~q(RVelw9UnV=2>)fHT*GM)X`AM6?%lw(|a% z4#o)nM)2_w5$0jbX-!)sFdJJJi0vX0Mf}4@Dw)P7pshjAI<}Ax8fNQ0xoJgpzo(O? z88Tm`(1JRV&mB^L#TeVnvne*~K^Pm-eGLToy_^8*+P|4%&MWX z41M_O*_kWDW^(C*7L^L=qD)SvjJy*AVN{`gwpGdQj@air?|^tr@}MM|c%8gPlHzS5@Rpg@G)@7#kXQ{<`fuhPMSwv0QlpVqHk= zF>>@ep&DT*Rw$#M9;p=RCzXk^h)np{M+shH14igA)7@IE^mD$P@e>`w% zD3oB5B1Fi?n$qYTN)h68}&(&Jfyt@7O+@&1A% zH@~o1T%mGlYI&m6*Dth=jUSXGZY#QRDO+AntTCUo-3`p!`!YmtfUVKRUtlopeifq_ zBAHndW149((&bVzi3t=UjaCyUzho#rvbWdV>3C6_>8F6V6+4g!FfVeMqERB?>;$SX~IkJ{vr|I+9bA_26{ny8rCM(oskQBrsB` zc|{FEsShPZ6#MS)U@W%*-1sESU&xR!GP>9GE!Uq#d|!aA*q<+B9^tKyO|I&3_U%)} zo7q-_;34ex{U4gnJD%$QfBz>WE1T?jY$6%QNcPH+b!;J2#!)uevbSTCkrl_@dt}d4 zG7s5#bBvIk{GNS&x9|V{a67Np>p8B+b=@yh1mYC~XOnqY15)OrqO&&B@#D`HWXBgr z_-4@Mx}f*t1q>Tejqa(v@n_PsOc+g?p|==wHIEKShVR^QT#P2~$sj@FhJppNSi35G zLoz8+;awV(nF)>J z2YY;4fB6rtdJYT>w7GfV=>9JT;%cSe%pUT7SmUnyuCFq}Vg>y1ONl;lETsm)dg9_T z`+&5MnEtc-)?}N-TEGxNV@;=sFfcB8LrP)WBse8vm7&_iTGcL37xqP*xx|j$w^Wil zzT)$PSdQ_ZEFmdSs>H_r2cX%}JX597HZ{!VBleFdZ7kZXH2y4sbk@`W8$_Xu3OF#J z6P}iNck(Ls4lTKAk7W17#0-Ex6)u%0zGnSlnC)QJ$r$tMVMYnx0$VMjm_u|oM7gc1 zz4o%j#D9Iy&oZTo8~x*jh&C7Rz~SKomhKxlP^ZZ4Pt0nRf(*34(I7D4Zl(HW%CWt< z$puEC&I1Mf1*HVi@yVRScC*RGL&hExnI%!5tb&FTSo<{JQ8l;nRF>0QcwHa#TDyCD zM>;pR|BX8!m*7aiD!R2?z5?E#j34f4USbTXriue4g-pm(t0bDMK^GE>S%4j?$%r?S zo6;VOZ!}9QOVn*Z|4@I-zDs=b;1*|M_$FHmsXPslP6#ZX9As8`N2z-+{Cqft%B{x< zD2*}+$kiVFi}4Jw;qg5fo5EKNf@-HlbFk-YtQJ^$k&&k;s_5oBUPi+awu|7lKo(L# zN=Z%dE-~zPP#q(fpOb0qm6ShXis{#_a4~~$0#!Sh{R`si!f2!~HuasxkTJpd;Tk`z6#7XLS+ zZbPqHsLRJLjK7@HcwH+<3^3{{t7(s(HrJLJa#g0mW%qV6yLb|OfXOr=AptBqj%DDx zv8@-z-sd>P5%wK^%AK4#+obVktyGWU!ZE8vL6;yuOF&4*^C^>?8NLu#yb3W}`6W_3q+eSAtCkqG`VTZXWPRhNMOcRk zjP1@D#>1-gnIA2uqvJc{!>VkozhE}+qRK#oS8?iG>In!iI{3e}B)f3_H_i-R`WH6` zG8@e|3#xf^ipsq7JNJS&%o0(n-C0^`53Nxi%bp^nHPHCx)Y1h!m2bc;ofchCkr*}b zJc)|OwlUsgT1|6X)0nil;dD-K*Ad1Lw;xN>(lWVNJ2ZL0VJ-O1&cuZE^V;2q{;mT@H8eu94_6Q){e&?*RA;ySx49noWlJY3B!B z-kZ=vRGGx#eL&}SYN{BjIJR0K3uaIaWifs1_k1Y>hL{XHKr4w@f>LAb3%s=c( z>}}jO#t*5v{FK%I;E#b_Me|WLXOdnV)$_6OK zQ6Yp1bgCIbexWo`bxZ|taj;Zauy%FR+ZWLzERlz`Q5Mr;VoW7PGcF4`Vb3&@CgejO z+yk9aF?0TpHb4irui#-*#F~?%{t`8YvZaYq7r=$4Jff}axU??TlMU*SYueoNXEb>K zdLm9u{$3P39M#HGh%T@arFdfEd>YVu7W_@opL3LO0r`AMV!kO3a0+9Go(!d{>)Ea; zC+U1guu5hs^UjFN`JMmL=5ONwe4~FN-r9;l$gD6Rv(SaJ`)iMCcA_H-cCWFKMZ3oX z2X2pV`PI*5$V$iSm!E>!E|?!P#SApHfRzyW+kwhp>RfnvJyX@T-TVn^oV%(-ansv|VpW+-D+<0HT3ingIKL zx1Gs+qh6Ej`~kM9P)n+U17+uoJKwa67|QN5td!mCbY0fG#W1FfTrb#n&{7yxk_86o_6e6f&X zN`Yv6t8#^o1egAsY?8Xecd?7E-_-d!^=YR$WGBZ4O9t53ro{eDtETr{dxrzltT9-< z7mmmRX+t45qsg5|E-5wwNB_Y{|3y@RSEkyZ)reJ+aI&?dqhi;-@os-+e*praOU<_m zh((})&SZ&mNCLP~bI)|?IARs?tRr<^{aVDH8ONlA#fXrYBzv+WsmZ6L=mCTnZGZVC zrjU;4mOG6OLSp9ef0@SKxBiIWJK&uNmL((>Bws&M4wxz1;bt>6aKk>iS6=2|pXJE> ziYT9-+66~>#5LRhF@!*aM@h2@uE_ARsySFCwICLTV{Ct@8w0!i8@(|6waKFKzH4JV zO{0=WO?8Cd)u9AfPo~-rOTMHiM@xK`K#arF5s0UVJJ$h^8P(mylZ2lbdRa_kQQ+d` zv3jl$RDKA{R-Ys&7D>xb0r6YKSq~;==Dkp5y-|WsR|nmJJX8oN`;GllkG;9*8bN`3 zx%wa?;A8(RSe>oBrfNT7Rvcv2VDUg4J9xHN`l^s-Qh^>6(*3(^u1;i20#RkA(S$Z~ z3J>#aY|Yj4!cR_0YJSAEn`kat7H7QrnFUAc588kyVqWzaV)^@3Yun_?i8) zF*Pu}b>$|R88ti1>#n~~P*j!s>Fl6zcZ1fTNp_T>L*LV>-=WpL+-T>w0bE5aK_P`p zL4%ik5JHe26t{RG|4K?)@EvDLgQ~k!=01;-P;L1C35xP|FMqGQi30T}Gi4E>hcbaaOCOAv)d)Tg=FTB-Stz$`c<^*yrSWUIj(dYOG6mpZ{W)yZ$|;_f6N%GBs?Q8bH^mRYu}&OIdfe zv>2B;Rw$`^-PQJ%vfkiruL8?Hn4=p`5{RJOU0i~}DhHY9bL!8_E-J6$Oj`5*DG`7C z%tLT!W`hFK_4lND{dn@Ruz${3z-psJ21QY9S+t8nBAB2Z^pT|Yt*@(0fl5!w7 zoHn(e2b^`@+c?XUFa_p1-uis!ID@c;@f2lRglWLnV$X5Vg~4bJ`&m(WCsBte6%t?d z!6w_dMXuzox~;{lEPRVuMhaD{R+%g`yE0YzD{=3=XnQ)5Z*4=7XT3#&L^;#qRZTz0 zNo(;o!77?HBV}3=A26%Hq{b^#=qv!eQ@W2OpjO|YHJq{du5@&OtX6c60JUBqc=6Iv z$Rk@(mE&%ou?tB`r`J79-H0@L!8;OInP4(9W*0JfB3&IF{bT9EAJ7il4~Ne>z8z|3 z9u=VZd5h<}-)jL?FUr97c zQ7x>ZTj#RsCs(~x?UK%)`AW?q0u~P>crYED$tom;1#kGz_&oKH4?so-uHSkm`kfuM zCa(XH+jUkuzjMbp&TyEsMow0(p$aFKF5vf9wc>*_S>fzXN8cA8=@K~=X%jjBogn?X z7FqwU5aK*8kLu{^N<)R`Bn{~47&qM>Yg+mE(9mEbGDUIPAS3P8GI0;V#?ByP=Y@4^#;#6?Uwjh7%5qJi`PNRkz2bWmG4frOXhsOx$Wx>!OsCqK#W9%tEMIp)N3} z2n*MHzP5w9)*648Hndy!nXg4_8ZT|Sc~whSsX1 z7+r)3VmEtlx(NHTJ#uWPMGYEvAwka;oUYf_-dh-(8S9uSwB?o9e-aZq?*eI7a#ico zHv0_F;Hb;whP31I4#&y3@8>QiR8L_N+J*+%pnntDd z!SK#xz)IhlUq)I~DCPK)JA_h|k8n1ha6|klLw)zm54>8n4QZ0M%&@dBMFzXIC1ltJ zBxvai7uah5>{z|luS@`(=aYLCG2FNh4ZKvP`;E?5&a=f=y)e1L5xrCq0-4^ zd?l_nhh>)^VV{VoxSlG9-4Ob7=SPi8ex0Wueo&`;18+X=UXC@S>$I_Y^&erZs9IOk zZD(EjYDYRI$Q#vGWroqyfhKTdf#R}w+$4eHH0Jtw5`~@@(eSArzb^TeJL1@7&$tw2 zQ(8fRM#~b~aSAFw?P+vCMziyjG^G$tx0x{djl(ZDy&}40wI;|A&_hRdu_2%P^&-xxt%Z|4EnWrJ&0*w0r zXbPq_JfEZ)O)MIawV2{Y4>NETRoZVU7>k;8k}#9n4nn4FDLb9g%N>qvta2fO%*Csz-cob zkU4$u>ZdG&oFKTGN!NEK^khcu!ly|H9D;6Dn3`V5rIr(1vbzMGBpoVg`9 zG-$HiGHBXQTv}|}z8+p}+h53hl>~D}Rq!jluz+J(?)LS7&cqk>CZAt?->xy~yYLH8 zBY;9iUs;zlm7LA;Mgx;v$rOEiFx3VF5)vEPuS@cZKZGulQkBgEF;KH*wSSq>3dp*5 zZt34@WiT?bUJL=auDe-}yofhzGmiS+cVx8Q!p;sy*)l0f{x~b-(-sO! z?7>FIrmR36CWyGN-50h7Ll{Cdspe+BX(|y|WilAte$&Rxq@N}$ozw2LEvc0y$zr80 zr^>r>hl2JQ+a|v?IR}X%Uld-_)2v~j(@5L14vMa+E12j!r7T=dwd6F1|C~*%vadnD zEbiWd7w(-LVA&5Oet0$>a{EfoAb_x_$2dogOlpv5)-BO?BGQfpFA{j&?J)}fT3m`x zO5PiorXhS1wrorJ2-v}*A1Z<~kCm!%B0iocsmJpD@IC)Qhph8}Jhw#CH6R53@gQ&MgCVfR?2+~IIzN=(S>p&5HP4UaowEFM_VxxUb9 zK;J|dsBwZrcXtr*T=&P{IPJ~Ri z)r6%ns~D6e0;y*Gd()}H{LQ!P?_zi3ZER}aD7fy)=!I+Wna_@e1lJYo%*^0I3~=0; zh%JVComPc3Htr_9fKTs){Tx=edEY}^@Lr|y^H$%RGDU~mG@|h~uh2yLY)M!gmo?t- zEgt}2>8t`jMwZx47HMVqC$Tx{&y&IcYwB#_vFH)EnFH>j5$d*#64M8MTQWjO_`}6; zcxtih>*~*Ybu%?c1EgbO_$WXB&9)8Jxhh16I(5p;d!XiNniI>LL)$G4_jJ%h+j@(Ik9Sy_rov!8clqjgs zVR=5VC6s>vuH|Lq97lZv@B6x`qvA*gvswh zgd0c5P{CA*d5&I!$YH&(U1=v1DH=*%F4V5~YojyX>U$OVx9Uqjcji;r3;wlGgiq8Y-fk;WT9N^ zOLq2nwv6c5lbFU33{VIqA(Of#(xyrtxi7tiG*!x4H$=-iKZJtw*ESVdbkbb=nwGCa|bMlC5IgJ>XN|h}`5fYq8>JdByPCeX#(N50H-p z>Y5zg=WE2UrZ}Y!tG@aTa0V&mdvrQa$=O0TMTZxZBSC2mnBcd7;bT{qvEVQ8i;Z3m zc|_YR)s-OG&7Nj15C|rGo!LIR3sSjHkd1bswHoLhIOS01&K#2rqb^Vs8FFn*(!Sr< zX{dHZncM+>FKvb~6e9Zvfh|vMg`FDx4{jRNtm02XDDYh3D84FQYAIEeKGh5B$Zg$i zU;aR8&+wuwl?zuPjevTnOhvrHhw45zp+?$-1`|(WTUGB2%@>$FrDKr%4tQ1bC{>Ai z#KcHQrA2+yNFk;W#$OVdh6$@@(&qcHs#rfA$nr-MN@f+Fy|_Zgx( zqK@5bjjbfID|r<>9QtO0$wQzThPk)jw_w{qWdkrEYUX|7SltjuX`p&UNbF(sJSo5f zcXmD4Sdmq-dAYjN7JtRVL+?U;7FSeX5mg{RC1(E2Viklz)P{!Q-cs*Ji@E-O+v#55 zr_qb0RHtth$Rz_D(<*El3%2fZh#R`eO$e0Yn?1{ow7@1 zTYu#IjQ;f=2x#U>ZmIqV<>`qMb=&BN7EI9v4GTs!b9IG8uj7dLzAGN}>v*l==op8P z*lBL~JzL_oQwf9m(1@C)3zojX1QRRxEOGM0ZMR*E^!DDph@Pb)bxA@%^>o;;u1WEi z-0N;Zy^i4p&}@rh2uSc)4B@>rUHd7<9osytTjV*-DBXQ_lGr|ksgn3%%S&3*P&V_) zf<37nnyAuP>trUG^Iv8A5|B9TVQ`OL0VC?IW1p&zEXD5hIwjalz5YITZ?nXhn3%?m z*!0skU@iV+rL&|NOU^4lqZ<03G??7F0I>r6E_Z04uCql+?~<+Ml9n6(>i!XAYxV(> zHaYNkC1~yqf^->thv_v+-momrj|ubr^AbMD^RF8$dz>O%9xwlVxz>)O_;cb_V+>HyH#rrRdXzDv)JZkmXcHSq{XPdhqG%mS4 zCT2}1C>v20=d)&Vrg4iA~mqJI%dZ#?JMq)e~{=0<^?6l ztAWo%i&`jij5h{wXB*0JCL#+-{DK6~64_QuXM>h`6E6T1_S@`&Jc3^)g04e%_Gi=n z!PRMM*YtdFw-u|GHG&uR_~Jkl5K089xK9?1s`aOhYDS zH^%qcIg$`pe5R!rt@=F1r9!}S1%gpl2C%%W{HV(oP+BuI;llZ>ne6c&@;v|3%OV3_#2=V|hEV4fsc=gM`*A$m`$?`v!R4lAN8RcI7?sZvKYXeGD^M_2P5`yP2JwC>3h49CP`ll4d{5WB%^mw z`jgXr-3ey8KE7$~+8o_P4(ssnHHg+Buj7SIxJAw#3~v&$^aJ<;NMY7#mCf;cx_-hp zkD?1kQ!xB``i5fz(;Pu}|GSt|MNBize-{(VW-CbnvMX2*7B68gct;l`fOwR9@G(!;DbsQ8*G5;xnNXVPr$T`Rx7oNwld&sMs=UcR|rUOv$T@!$g9c|p#{ z+v0HGoX)gR?jW$34O@qq469SDO@s$(0}D>37E5Abk@&6lxyO@k6qonOtN5c3ItZG0 z`7>9>H8yej$RJJO~ z{*fLfFQ44-bkntVEbRUt5rpK((cM2h0e>Tfr#qVGOGt-AAzuuvwOq+Mq1u2;#Tyg= zEYLOz2pZ*WFQggx67Dl$!WTqBFlX1Ba_``(4faz%sHw*X+u-Ym$Rz(%+n8kHpsbb* zbBndV*HnL=1YUaq#$m$YP~e|H=S~+%>xcz>r0n9q6u-vHzprub^s%cJ_T|Xlu?5w4 z)z3Q7G%s||=A4tC8JlZQi-xe3wtRd|Tlx^R@MLN^MEL&t)Y>wML0KvqkNi7Yx3k(+ zw^s@HSDs7m^R7_Mn@brY#EJi-5USRt{^YUro>^BiRtxTKaj$FZ*0y&rIjTKxp{esS zrx^2n+x^$dZ_rd`o0l{3Vj8ajw0Z@D8)+)#LEDx-bM}kwW#PT+;bUfLpV3p zb{s640~TK|_Zw0;(SpoS#U;N?tyup@%cVTps@6lbCzIMhNVMFnNJfTGr^S z+MI-|ofwjG`G>9|*v1j~N+ zsbhEe^7Yd4(nzcaGdNi`3SLvpRpIOY@iH?IddWOe)eguhV3INOHZ5kw_KE7SL>RVB z;Fj;eCvS>@SzEqVEF0wr)cP@|DehT!9^;?0xBspIuz335WYp>3|>ojd!=&oDwB7%$?4?6!#S@hj-m@C&nU@EQo&&(z#YHm7L=$8)VX1@FZ(z?MG#fS8MR$XDauxMCfxt*??XZg zr-sf~-VL3nTK?UvCW&$yE4hs6K93P{g1gN%g{>EUjr%Nm56g&QT5Qx{DetvjgH;uO zsgikmFXnbtbv4D1%Q}+QQ8qh#Ww=Ku4`HmvajU{OQF2~*Ow`)c@X|ygN}P_w75Zu0 zz3w20s+x`9pHyDH-Fp8ITTcXQ0Pl5Id_sbYt1AcMO)KZ_33gUekz;7xMIxLc!Gu}` z%ue1geVnP?z&ul7lcKN8s);NpMNod7bm2%zRw?77aNza`qaLA<@6oipLyy?boYKjzv@ z@r>AGBs<$n713yX%nLGkiFc~j(f7Dap0Y?q^V?S21n<4RxZ6Z(+gPppz9x++M6q=- z{w-}{C^tbNdAPO}y{4wIkx&f>liARxd|Wu5#l8;wCMmXw#5r*0W1@1=Emz&uoSe){yO5%-?0a;QMkqG6i= zrF|Cn;QHa{>8q^pk5BVNdlxx^8<33P)QV~lAzAhL5l1=PMvJI|ji&ibZ5)E(Me8!F zoL|ea$377c4^K1gw^KxK97;{z8R*BfxVrIoGPoM%B8@^bs!Vqi@EWS6k348seL(B$ z<)&eA8`xnwpB;QIPyE9&*u@B_*JM(CB5A^!2gP-!crWZW`HK`G`m;SKjl#G)r@D0P zAH*BT6eR!bIn}WN*#&9Er_pK991WH^mt!=h)1zS zKZihNO7QTkacSz*S(t~){BEkgVwafP9cUJ6>Tt&14p%>t{$zP|&kP+As?N~#?7L}0 znZ%D7l9TO`YeobkFehwo+O6jXz;#tvvi)8UER=Dq+JknyP1kIPWS#dMBz-|>bn4Ba zOYpg6ZSFS@3wyNBls{zxeCfdZM1})k+S8DBPouPl6q;wp26+RrdY2B)=3BzQna35k zjK{C%WA^I01&9_0aH_Bz@izZug~NbAsrlk-#e#5>au*2qfFpmvb*OcVBFjaa#q5Bs z=t!g+bEI~oD4^JZ#Vj2q?TqVuEQjz!8YZb)Wy%YfHjZ)Y^l$D{PUbzHj1yNY{AyMv zo%{a%3Q#kA*XAglix6rQ!1Dos4Hu)!d5;50m(ScJ@v6ABKThc-xT2u*fxr+2=%n|& zI%5nT&EK_}N@K?A%zU$vvs{c)HVnZ3`uj#UVdA$(yG0PSyBfz|<0^H^-b+O^UlbJb zlbCg?b+!dZ6x2wnan+^8J|q8hOkAIYmmhYJ8aU}vSMel2rC=*V2QeQSdM*iS?7@BC zwybWIye#?`MnUs0S zYqr=Xe(}f6XdE{*_zpz9beEdgIE*>mnrWK9_{mM~_KBX9!ETKOR%d0z6_mQ(jGBc* zmYf}wxbX60VGB(;zSQ1T#L;$H#dKo4+95LWxEOvpqq&FJcS8xqCkX(q1;SJM;&zyv zur@A2;5x|jFA@5)a_4bkZXvMA13e!ge9sP+hhB-H{r3PoxeB`mzNFOIL2yCwQe+$G zDMFt`pBl`&j{Y^2^mCx1-a}&=wp!r3j!c-L%0x8?7_{}38&$go9{(>?JvRN4O9N;5 z48RA%SKnmR-}@Eu-Z+x9CVNLi+G<)1$#e1yu|ZLLM_TycVFMqKspo3WB@#Ikw#jmb zhD}xdLbI7aq5ACthe47S#^+A+g&Ic@7VK{1ogN$M3iwg_>uDPgsQ>n!g~1h-ANa!m z*iO`^@7A%B}DuXGtG}vDj!9Z#zp{f7b1Ez z3@qxwJvmDRQ5}`J@yLR^lot}eBb)@Nw`7(tw295?>7Avi@04=KW4~-Wz4+!vxEjGJKp+Xi;HiH=$keAaP~FWAovbYD=}Aw9o&3&e4D#+Rd#2nPgVpL zmi}pxPk===7yI*Xl|92h>1i*!UxFsb`CeN|Wo)|Pj1nK%a=?_<@bCS<;~KVR?+zyA zt|}V3w}8J`G_?_lBgK+XjQ$uYL1=5T6G%~)rApsF>l`AxAGOYcXc0dmfB=Hiz$kp< z=!g>73eSSHP|zm~>ypYYX|b01e;#YIv{u^P<7I4k1gwR}*hB4M&Ns~n_0a*bU==`S zJ7gv=D{egJ34^p{@h1}DQSvpDjzn&V!Pz#em0d!xnF8On!0aLtmNcvS3XL=NCEvcB ziXyuA?_gzVcvXQ-_7~!VrBGNj=mCIbm~kZ$&#K@EamM%X`{2<9#}-0d=yqe3PaPzh z0vKy#i!q!@ND6f;U&{G3_=&~N5&V5mj9C1ad8T>J*7Z5Z0!h+u*&Wcy!Stqv z@SG>pqaL%j_O(#0l42O(&^{e^XjKXWmPRGE9*Y{}Z>-&UxYq4wfdsF?t;K~-e=|R< z*>c++{9JR*aHMd&YsZHr_wmdACt4;lGBRU3B;I;@NwA|coPRxrU$)!$O&R{r3*erQ z-qG&m<{w%2``YHw7>O}t@B7W3nRl&qGjYQzJ6T>~B4pEH2h~HQvznNi*vE^}5*D?; zaeL^l``)U}>LgQ_=?I@$U@=IqM?x&4q-HNv9zo5ECPL`Cy=$$qDY*uCsxmwM%6F~; znuugH8dJ@)}_w&zj*zxK!mZy=`+^Vt90-gnl{Oa;S$gT_@>068{ zwa^n>TVrio+#KgS@kmY*B~VT_RcD2fz)nXJVH_QlawlI9=zC0k@i6AwhITN8lE1Q- zQ>@*7v`jiB28!8>my28e0zY9{9W=fYrXly}(Ncyo@cQ^&ZhtIZ7GPAGaBB<%;pr-m z`#4y_jpMD!dg{P=sphiYnNYE`Y5LjV^Gs>1Ba!nVO|230883JyoINbE;EHc@di65T zKkX4yGIS*1RF>=?x~Av8o;F*|MpAbG!0-ZL3sjjxlk7HJj64!VcQwOE!WPIo<`+lBE1C35LD)G;>+R+vo5RbB|DF*lj(Z z+ByMSL~ewN-j|;uFCY2XVzKVhH96mLG(f>vg!XFgu-R*f{L0lY|3Eu4i%C!+nn^US zLA2Zs8u-eZKp0ioul3RHHE4c*_X$m`5<1?*SHI~BEbpe-1*2^{ZTGwW9F1vZI%dm9 zZx=8hT{g;&DVExc4vgZ(OEJE_nc^^YhE#nEUl> z((koauLBma=$ZMjrG9V-I^7EVTbMKbXtbu1h+dTfY|aYCKPdY|J^EcxT@e-E1w5Gv zgU6Y3vp$;K#UUI84&og^FiDoA1Ip%;zR;l+t+L;yIiRtsFYfX? z$Bq|damLGZwH+B65`7HBTYlN7Sz@nQQMI{(_f5ukn}6e=vz?Y30xmd zrOI`qYoXB|?Sh?>A24^Noz0LPLfQOpWcn$LQA0@lT#uef;>lzFJJ{qAsN?y4bktfm z)7n9}b^g?L!-Cusl0iNtu**l>2`IImq{jGt}eq(I;r|cq^k049Bgi}XzSf_nmPT7gK}hx#TSAd;O!+w{`6REhmlXIqn$E^;q;&s5YXq^9q9-42NM~MqAL7)Zgyq z4KFEsqm?{;t&ujnXZ%L+;cLt5n|a@AK@HTdvCemx3yYY52I8gXiQ`Jn)XCSt9+qDb z2rDY%{&B(QKLl|tdlYOgA;)cB5z_+?MP)hOGxA8YI-s3jIRAA19AX>(KAE0Edwe1e zT{@gP=7I-`GSde6$F!oLQmWa3LOh9oUQ(;hyC};mBtiLTofDZI`8F!Tbw5x3GV-&; ze6ym@I&WA<$DLTESHcA91!47g=&{w6JGB)nyll`=aVou2yPilqhl3mGP76 z-lf+WKD@BqvH11HVO?q7AUFc-M%T$|+U96b{l(A2Em>()KD|)pp<{9PIbAr=9`6tj z+J{IVsq^JKFbE3Nr@c4}^L%+`sB#@(nb_IhE(7d_+wMewrzA=jd6YBlQO2Ew1=I14 zfa|w5R$3Rwr)3f5YHWd*+dK*xK9hY{+=(8VPE**eF4}32F+9>IERRd1hh9z}p0}LI zB_LW_TR+)~@)>I%B|-^P^h(jDk;6ZgT}9|tHpkLs#NRG$+LHFYL6Rq+(c?2HJbBZO zPlLJy%k=NQ;GtYwOx)m84p)jecnah=R#C;eOg3G=R&HZ`-we3m44r%^B{D!L&<(09 z7#Z*dJcud43x$}bu{AFg*o+~Ug5*n5mKq30h`wmFE>I-e5=ILu=+l5red@~xG!emv zF9x^UN(zvSiClylMC$XdJ8}m4b`56uvC8iF-i|ghO*>jR~fd06#is62L(+HXhvgAkL&Fk3-j5 zCVE2Okop$sUp+R?X__ui)jP*_9eSEnSUTN>#Vyx2bxhEpsn5N zVWS{1UEj(f8E!n00OpDN|1gge&btf97J9> zeIZ3h0+dd=t5g~XXR@E@2M0=g8hV8W-~F6b=>ex5d`z_WFFZs@l*k8>>Nc$}*FSuo z7xj_FLr1Rb?{A%JF(oA2F=Bb`>?{Vyr_mW&qgYP0UDs z6nXnF0)@KBzHO!oFPx$`-d^c_zEw!?Y+twYpR*DM9F4O*pGd9MJHP*$CwU{ z35jMhQ~?FmiYpERReaRLscP7-{exL?^IYV-qWQM`wo5!4%LiAt+B07Swm%~nDrcJx zO;R2EZm4HK?44gf;s6SAk+57`_}6|&PlJ}kN{WH}1Nq-9ww2y)v!%FkhLe8*bu572 za~kfgb&^PF{qEimR-R(&loH0P_|(HMLZHg8-37)JEz;C>icbb-3LYwyb$0Mdw8Zbh zU-=W@Q@W~3mAzA|W5~jHTM$DT&0kF2R#G_aTiT^0$aNM%K_*<7gkPb7nwy3s##y+YYRWS1z}3K>j0A3=+YWNDmGDC_C!tY ziqH0YM6ANO)JWV#Bn2HbD2~xP!*^PfFB!{f>8_w+?0psKY>l`%v{&46cr9(9@Ua zqk-zDZ5E3|m6(PKZfq_>7k)yke1&)#bF@Ex)tYsZP@IaA9JP+g{h*azU(C0kqRHS6; zpqBjg zoH*0BQOyFW{DoIupc<_0{O0f3jdK@^pGdOIuk>U`?DExF;LX{2MBsTu!c0jPPkc{Z zS1x9bq|aNdpTe6C!{03J3gle%y_MNeB(_r0T8yFcZh0%&8_W)oOHoCa%dF!E>#P>o zA$64Z}q3QBcCJgV!pG zPMG_~#!{m;y?(za*p(ZW<_w->-(x%4BFjr$4ds8z1eT;P+wKmP9h>rbN;4A9mn?|3 zgo7(UD*<8ot^>eUwy8B<`S}wc=rP9^=Efe!k2HW{xxn}6?7>PV?1wOmmXEuIQE5D) zTqm9wKaGb!Z+?^$uAfn2BJ*WFLjJN#c((x90anEmMXx6FsvwQtNLJP_TSGG{%6_7_Ae*=2aoRQ)#MRX zX(YW&*p!SOQsHonQbv8l9)W*0U}YBggU_7^`^XjOdPFO82%$#I$zoxw)HDVvjVnVz zPL|a8t|{LdS83n~b)uDl%}s6WHJ>#r*SCZqY!YsQ`vB(V=*03@_utu@`om62_C%=3 zdr9gJ&zGG?=MT!`diY&7R_cG*XH_-GdcRt1J{oo?TknNVxl1o)toV~OK8P;xB^xa3 zbC*`4Q~B@2^(2@cG+3Q#H%C6}PH=|5=rbw1c|MJI5kbakSb@fZ2|h%`jQ1bN<__>! z4sPWIcJ(b(hosjvm{wK}YRNa^5Y{{xXQx&VFvlIJWifhn+)q)e%_Nk(X#@TlJ*ka; zS-AcK)m$xZ8J?$GL*Jf?vwfU)Slz=klXWuWQM1H?^c3gY3&?amuVvu%$*7HA8V@|( zL&hg&M|#BH2xlZ}*GgngI_vNLPa?_Xo9?yOJ4>SCbvWH7(t&j#(W@B`$$omsN528WPFm~ zjCR~8(oMS6_$90M?-(V{c`%u~KIW(ddQwxHH`W?=8@JWo9dx8J-5qvc$j)Q|n~$cyG%tzeA$|y2|w} zhp7zGw|p)fR_9ULB;Z_EJHwvG{%_I`>UlabrN3-K|7Qbssw9w#*O&Txb+MHfHce^F z1*kr$->>;MfHOi`;?Hd0wGqIPQRwtfxA2G6|9Q4=^~yCqZOm?z3W5NTQW5C#8K_0K zrW@1_PU=C)%GtH=G|_Iq+)cPs>C@5LO3~>TgupS`RJoIOFSg@%?hrenZ5O^9hF&b* z>WK5(o8WDC{H##A&KqJV&Uj8S$9z-$b6<%4XaI|8SVtHAs#|DM_D>Q}#dq=wKmR;u)NU&#v=zcA^@5>Wf1o=|Ve&_xa_ZEZEBu z2yTT`m@CbSH7p<%n1c6)*QM9ae@-xFh${qnG&;9as>|J4J~#vMQ1CIajfrYMZO-fe zY}S3T+zkRG%`A)QgiuzpqeE6B$>S#7zdmq6Te&!i8>t%r*wd>i_~+d9&GCwmwe;cp z<}FKW(*(wuyA6T?f{*Oh&Yg_>>11C`6e2NztrIqPAZviAtPBK+13BE}h%Fzs(C?&! z*}21DPVVL9#TIHMLbuCgRzYV$t_~_%!tE8Br4x&(kz=9Ik(SoZKEG9~t~c@o3e;*} z#A)oAf`WpWN{b^{@gVFWuuxs-U!DgJIB2HWz1TN2)SVB$t zA+j)%0>*b6O2eiXP%DsUWJr1;j5iI!+WzYfm7L}BPxM1V>n??(tiUe4a>9dM>u6TV zgyCrEF59gXJK!6{F|*odag5{;^Kq%?v!xzCEXH$r4{EwnP47PIHboHAqiBy#64UHH ziNZ_KL}PX2cn_FngY6dsr%pdcmWU_05RtqjWUJrHdi)zxNsHx4&zZV@_PUtG)#SM4 z4@q=^8LpMY^fK7??wr49{{Y&qHa1$`rNhCkd1mGb3eO~MK&tgA{OH4*W$}bRKeBH2 z704?VUz=6ZO6Pq3)cp1SNgVuV@3Avim00yvddaS3`9#-8tWT^#IRpN?0Cp#h4xTe# zpQnfZUOql18l_HSy)pNM`J>iL4qnmW6R-q`_&ljwo8xv8-jOrZcJeu0VRQEE^wiKDvT`FhW{SzJ zE-IDD3y?=eDFF=9Pr?G=2<(H-AY4ZPtQY)S{NX} zug^1ezJ>-pFmDX0Mp;tWO#r}MJ?7sWBFOLT1SNb4 zj=Ln6&3yU}qLEck{)E57`1bVM#)IXVQT{1{64f`RQ^%L5r~4*hi? zZxf?AsC?FCl2kf+_HoH!6(U;ULo$_c77z$0u_0i-lgTA3Q7C$&_r z84OHTNWB^9UopbP4Z6PZ@I*0Uv_C!$&|u{C?)DpmC@ZnMe1qYR zj;)UXjVOWQVmx=oIBn#*GB5MI;XA=GrxHDss9oYVJG!7(6iyE6SKs@R8AftK61{Js z@Wct@sWmh|phaz?OyIpecT!_7Gi4vV%Mc1af}Ou7iuzepy_0G`y7R;cF^tX@_4Tx* zabHjKEh2GQksE6^NDrmpX?<#NI#wVG}N%IUpg@5sfI zAaeEX9j{gXBG%A1j}AsX2haIX&ikKP#ri?&MY?7MXn)(PCkBsX`UWm8qD8Y_YyUr*zB`=i|NZ~q z*qdWz9UOavWF;Xxdmpm0cN8IH?{SP|XYakU_c@e^tR!*B+sMoc^?UaDUO(5l{O7`J zJn#E{+>f!^dN-n&&n?|dDr}kKB=X^cZ=xy}R8jBcWaTdVdlv0aAJdKWVR3(6`=aGJ zloL;nm#e_Np3?#d%(G{}!-`~!iSn-ueRZE96%^dS&hBoYg($v*L&%$QZ8q^j2yC=| z`Z3>xu!HYgTU*W@%iyzq`OxCS0kiMK&7FP16r}*D+0gvysqY$(rBz!O)FfFJ{}`n7 zyk_Y3m9nwAr@%jIBP#7L7~V{h?Qb~p4P;!eyZW~r|Ar?Pxd{ZWP<%zX8*x;$;Ex&7 z2MF(Z%TU3BbL)2<<9YcJ1%Yg)97_>2NKIdZTcM>mX^61h*Kx|;tG*VpFeD8-(<5QV za`IjU5p~T>o${*G#lzP?YW^S;wT{x1CE3#_ZlThj^yrnll zbWLAzQza>GhOcNhjA6J-@i2B=pcNcbVJn1D(q^k2KmqF)ZoGOAr}N7 zr65hp1eVJlazQ`HBXh4#bxv1rg&XtcSslI&_T(9A0Pu-uQttyh^c)pAT|jfT8|W zy7njD$HDaP?{JZ9l%570f3LS5412Q_$^AH5A5AE^hk!_$fW*8fL8p+#1Rx6%AR*x8%}PWU$C%PRw^XZnOcs?RoM|_)udRv8d;hvopv0LpdDR?PBhMf|jkc`HLC!HEjZ4(_b6Mw(8jbHfbUu>I!xF!o zXx`yiLBHy-NM~r9=}$~?`F)JCjTI%cMbgh8CT}U3Qj#G(OuW}^v|pl2*84uICIjci zDlu>98E?wvCJSDk-0{Kl*r}z~#N+mRV=u5K7<8yaS=4V;h$tCt?>C>Jl1#bcz^h+Z zHx8EO+n1m>b^jSZfd#nB@R}Z7*s>2N3#O@fhh5R|q%N4EITY_%FK7 zxauNA)4%>%5R3ow4eCYEQ_n|rB@iCqkL%CvwYf5ZIkN3y55#YQKT1_)=c-T(o?D6P z@`Nbkwz3T=3p7^n#gD+#SF_yicI8}U>^ce{AP9M??!pZGmJH#nKK5Fwy>JKO0pt`7 zyINehayu#eH`k>r?lV@is0`B`4pS@skOVAa-vMbZS+ESmk$)`Pq z2|+=7nl=fY0r9#SoAQl9Eqa1O=i2}sLq=vSiTp!IV&fm&>(^*9SAv@P zX->>Sg5F;-8+$4(L8fS;diC8l`&rfC2z6AQ0I2^VYX4aM zR6S$(x&0gjM%s5T#={k^{G?9Ohf&+s^}~e&-J3_0F|}DK-+fu%6EeOTtmxUCAdWClhg5S3Jq(F5lo#AnZNS^)MgHAIc*YSmiq15P1Jr?4uxmM4@>Rnkt)Ft9?8^uIrf@D4u zoh-m3@9^STi9SefsWC=_79r{2 z6kJH}yomwj_sw8F9kCAx2@c~vn)F%?A}y$?5d>XjlaR47X|T#=yY{S+nax63?vFJG zVM{WovMQ6do*Ik^7+ zT!8lQu58{ynJ}{O!p09^Ey-q|*};#PG^bHVhIyW+8W87X01;0p74hsPZpk<Z)~GZUE7`duL?uDu4&GwT!{>Y1k$+0oN?$zh}G&w%IE?k!aB zTZ4GMs$|ghSUuewgNPgCyu_H-ob=sIb^z}D z86w7f+H)u#vBypXRGjLiA{Eo>iP8=`w_|J>-7+}RPLCgd3p)7+7K~{+34@gj2QdeJ z+lk?r9Aqp38p&ImSuX>4|NhS+MxTU9XqdLY>|Uv_o9gpQ84v#DDHL(;Q_HL;HOK*k z@ec+C>@2_Rw3E0Qx|{EdtWJ5e2+=2$Q0;jPzP^~9Ev}y31;hVbhxB?SXKK02dJm8O zT)PLj%I4R-f-Zm-2+XmBfsDr}`I#R#Dw3+Rp7hS{LARiP&beeSen2NfL&Buj9b;oa z=;zQ#Ta>??!aa`rsX{Xz6%TGKNb;0UHg$b?0=-W*9Bwea7QhBLJwft-6*UCD|NL18 zPskIMTw2I<0M4RM$~rFWq^;R*U4FT7k`rPp^SGPh)qi86ENnU#2wK^%-@bYF5WTs% z@TH&k>bq1GLN^Q9BA0l0uJkY#$l#bIv#k^SzQ32ZPDXcB(hN+dB&1)(efwT}5w!nT z;86VlkQ;B0sSk~6HiF!|Ljl(s+y|lT(5IGfCZ{!Kj*~Kq9b6j8EK#a|SSEMaP6%!K zUtnxFIYU?`Cc5hB)6g!@pfc~Dvc>QuLqx4%!#on&F$LY2W950d&ev_rEA``tEw4|d z`4(hxM)T9umm;`KqB?df_D1k+2Dw4R^xzB>_ zri7=F4Yx{xog?z0gmwf6dipg~L$k123#rvIcH%={jJpxYYCxir3hWdAXSArE9$6I| zpE%n`u5AoPISX!LetrtSxyQv{2A|pk`66v+{hL!;^FFIo2T2shNL|GQfM0`gc4>&% z^ymAGsfU9 zo$LHm&GOIs`}O;7?jPsIu7KnwMju3HmC0p#^Ktvk`s@@u;PL+Yt3Z?t0FXet^3Wzq z+VOP6c!b)y@BU8ml}B6&xFKC#Lz9!_#e6{7|Ia-d$XrI1qpPcnh1KYa`OKFypD^Il zgfc$3+vYVdY-dV0-tGZpGmy~6tm7NI93JyJlQM4E2KgVae1I!EGSeFn`9W%Dte8#+ zE4PLcOob@CF!iRjYR3OxEBME8#pm7nWtExvi=V<*iNn}W>1v^tLOC=TZ7E}b50Qyb z%B(Rc&Ll+NwkivXE^j zZlREN7piE6WH(ljP=kG-;@%r8trmFxFvbB1w=q$-alub6c1E74Bg``M=VjEf@{Q;eCJVrFEW>x>~+g%2@0L++;|Hp_ny}j`5W#@{x294Ofv(IBt$lfRJxhv7mWW^j@ zxoLcm1tX6x{8E1X>|-#|M*IAn_%R}FLAaTQ2p=%JhQ`e0SC6-p=ER(q+u^a^EZCc? z^YxI4*N^t~7ENq7-cByu0CV51z_BBLp)V+^=E>eGmvy9X(Bsb4?X~*@lsVu)^bVV{ zCc9Ai@9fME3$fIPQH!p3iG*BkG5~*nAMVRK0pg$X#HHY|>g|nU7@3y6O?5>Jz_041 zXxH{sC~0f+Y0e}=nJ+#9;?g?sbFKqr#Eji0yYVDk`B;4)HS!GQAN{nfMwuRB;~>mz z6K)`&eiqahx+}fD{-ymcV^=)jTfA6n%=O4o$}F8oU@jt7uovreXbDEcDXwXWd~nx2 z9~CR)iLNtV$lEvHntr%_ET*Dwvn&)_~<0J`|Zec91!n2{py-)hz;3#LJD5+@# z{m%C;w#N&!CMF>|KHQZP6Sv-blq$z4N6-oGZf_HZrt5y3*ijh(U3QeeCjVH;QT)&B zw=Y(7Dvkzr7vI#zG*|fmw>I|2ll`~%%yp+8D&+L+_r==H`LzFB_1_D^(P2>$q?p)Y zJ`uLRkYTux&m~GnTojn{p$nH}{qC{0N>NoV(7Dt()V5UY<4v7NibO2LFf0Xrl6h~&yIg+ z+}kOY-4Y3HWKF4iaaCMWkAPTPZM0_~i_O(@iCcrdmO+=BZ!Weg-a?EBnSzDz^5PkcVwBQ0Tz_?)Lw2Q>hE69HeS=|4k}%8y^1&4@YrNtR}v;LxJBW ztkA*2Oj?91RmQDMt2x18LjhN`02j;O68Niy*|B047l#TKYZpAF8fsa|=WxGqES^N0 zK;+|ZpxsX2hF0+M9tttfZbLziUXg4K;!(N$lV&5q+BvS6rzYwklP+1cb*_- zq8yOn$_AQIb(LChLydOTczRXql0y_kIXu9? zEf`q`d4HG3-4S(o1m#dr#qgJ9X;n-=@Aa!ayv&tyTX3Yk$-7T2d z+m6ElO~$f(s2k8gc%A$cK!KSmFE0-^X2>Gpmy%hxu4gY0tS51B0=E5q*dff-hSbnd+@4xLe-N=4)bNZ2W*&(9O6GYxyoS z4(tqvMadU4=Q>UP%c}lI=8`${7}t-no0F4Nq`mr4j>ChN#PN#x7JVJkb^EOC0x*Ll z%G3=rjdBhC9U-eHMb!cl+7ELOu`NPS{wtw4+A$K9O1Wv>H2Y0Cc;xr%J@>l06EJ4? zUmri>dbuOJVeu%VDT&*Mfz(aj>j}fAn0QEvmZ23tqT505?vhk^q`V`I~d zPXb#^Qy&3;4Dc}!{Z=4-517v9>o|?_FF-dJ0t;f+o|-K#TrcKm@qqWB&SbZwwZ8A= z`M!+pDfRkzs#++WsI`^V{JbI%z3Qv?5chblfz8A(l69%@YpsvaD5T)UojO zcRnczvdv}E=Tu-MKrT|aS=#<5OO$#?FgBczY-ua~$%>uic!G3tQKcHu$13PjrNWp- zc!q<T5Ohp#w~4JdK?`QdID*{v$teZlr!8AIXf+g|lhKLp~U?ie=A)S}j?c7l zZk&WsVO^6()21+6}7M79AGT|=T!{HPVzFm;+5L%cz7 zL<`M6)-mIJP^1xwoBg*{fK;^Mk)z?EX$%eJuAN4z11 z;UeTs?GZ81hozLucI+tdQHj%+h~~Vu8i<24d#w{8WT@THPI8 zvgjPA_=wD=L4>YCI+b#pA_AYf364+eFaDA}X-V54b#d3B>f&B1k<=?(NDn;H)|pe$ zBX!Qk96)Rq9~E8}BmnOZI1$L7=kk=m;THE7wx+hAG_xn>EZi6j{y121KoLv!W z%-bNuMc9BuPb19r7D^&O+heo&54b3Re~|CSQ8Po@0kD1lk7VAA1C3wwng1O}~04tPNiiZzL)U&_oI8Q|a~m*&{12qI)b4&hvyzmPGZ=S`IlPxsFE1v;5KLb( zB`bhgQXc&2^v$<3e1ahib&w;t$9V8y{6NKc^;Pc6SwoKGudbL!`p4Y-zR+CU#=1S( z*S)F>t!-@qdD6I}23QI0Q5);qb5fa8g!dMhbFhr1Vksacwrrj=2;ltBinrT?;qS!H zK^na3>Os-?KSvsS@j>>#7ithbd*`RP<5O+r`|v+Ga&bajf2B?5q>F^o$GXmcobSH< z^NaT=2#kQalBI$rkQD|m?zay$gU5O_|7!;&nqQbdAt^VC59g|A>I7N;s zsqS7G%#>aJb6*JavHJF!P)&-W#|9%sOw!KMi%~nCl=ZnN;fm%+vs5UK7O)QNq{MmoezZ}p@k<@>^dHdqv?;o#=zS~44X{UKV z-Z3sKEcgPMwYm!jkWg|8piV4&=!KVNEx z2y9UEQOL80g9zy%%Q!CH=wz%y8Y0qmQJSohBxtB~K{$E@;IfOwcL|qOA8YJA?}pph zi#15@`@DLUt}TK0L0f`_0!Q@yhFH4j32~kS0HOc}xZiedNmL3jwg(;m$MSkvw@?H| zZt~Uhqe-dN@1RYnOzAF_p(Mcj`t_@gcs7u2dLmLEH#&#k?!Rt6?AQvp_;Ym-HDJ4Z zmTt_>j`coDbPamGk&6AtWnhpC@yR4EbwC2_K|p~JA%9k0BoDM#Z8XSu+0%ZT#k=EcjP zWWIPG<=6Pzc?Hjl>X^*0Q11}HB()(wzeB`# zB3aI^TK!MHSgVws4h|URkeGJYU0fg=Ym49B64PdoeWQt`X zKl+rW2Kh(xe<}^TBc5TfwkD-b8*K}^xqlUf`OWKceu9XwEX5BNrhkEXU3>!Kwq(Qb zTC812N9q^wGK4QWNM%Zsq(YyeBnJMmiEK;=(d42pZuVZ{L|8FbS1TBJpla#=9fQes z-X-&Q=_3A|nMkVO22H8_2Z}#AiX5>othF>cM7}1CGsI^fS8J~U595sMp~M}Jusp7A zEyfhWEK0dt+DAy<62iI;Kam3oq{vPYW2N91Cmy<3{J3Ri;?Lp9hv9TTm=&X?U zE}I%o-(dHC!OC6O+UmVo_rY3rnHr;gnvyc!Y)+`diQ`ubV09{`k@k;oV>Zo49{jzW za(iRxr9it64!0bOSL_>*?&B_Th9Lic`v>lKn1DlhfBsM-8w4+(MkI93+OR=T@a0`W!jOXArys_6Z zLb=6Yv=w^nJ&d4HeD8R)$&WvS34?}K(re8sG5Qxm%-gwP;~vx%p~V(NwBJ2{6x!jn zS1A_3gh^4vqhD=%N#2q0J0T3pYFz@A??S^;;D;$nobRHP(-4?=GRs+b4GCzMYwxaj zE-Aq9j#TNIJ3(Rz$HLrGwp?jk1sHy8xuRm!9#Vl)glFHcs#YIHO2_F%K1KVYUa33{ zhkxZUX<%Sr`0_m)af^ZJyNtiFJJhFUv?lDiU$WFfe*Dck$v2K%H#>cOwcbRH=8GrU zt_XBPBn$$H`f9S9lD%W=JI!v!o6BgE+v7|pzX;kzrc8a$OAv(#r7Kn-P>}| z1SgGit!{w^_9TAt7<@6-ym)$Om6WIK*KLVuP7LV>so9Y;fd0mtTouy4s-Akg=8fRb z{${(hZmgutvirYmy5ch+3XtbN1_Fq;Z1S#~VkrmxfBUFj=5^%Nx71~(mRDt2YRgfm%@BKg%bWWY1PQ#YMMO0L>59}OEtAOiUzNE=?rGc z{_7&p7AoY7eE37eD~d`h=QeXk;`e{!nx+PPL3bRP>oD# z0vrV*dyQ}mI^2U6J=}kz#H>JAOH?S+vnuYlm>Cyq_ zmGpxLXwdh^2yN`GbiaUP)iH-&)DMUgmc;AfzCUrcm@(_{d<@4i+eh2!vtLU7K3n!0 zUDdsmzW98k0q_xO3^?J7lx{^gNvgghxjyaa=m4Xbb6e(owhtxdld}*TVQl3lXC(6I zI5RgG?io&ZbMIIR6D0QPe}qiiMazMG&ZF}Ga7CY!r!TQsB`a${r;YJ>Bj|@j3G}t8 z>dfmFGu4mU?)B@bXeSlZwzd&T_}MN~yT2cCUkfh=gS9dlF1r>Ws>$$ zRT{<@vwSDlll_|jusj2LYTKl#+ji_5|0y->&yvT5;GhY$wp2~cP49q)Ery?8@ zd^%_9f26!~cD8-gNs&i&mjku=8(pEpCLsO8k@g(cAQ$F|-1b<5BBh50@ETrH436^0XmN4R!3#27fXh2e5wH6lL zVjsqC1>`u8x1c*8hIkoj}6 zxZ}oYF%#}VprF>bjU<2um~2HVOhd0wvVGd`w|omqaVTr#Gp{7SwBKm4JfOk+ zy`BOe%3c~u`~p3E2za6gr-JYNe=Y!|o!K5((jzn?@B2#ThEd^a&jPwF@BwQ!rP<(D zxa7)8qi=-WQvx<+zep^0cW&ynU^Ngf=Pya)x{R7$tuISF#ufIW36O=cETl)TnMd=4m>U#A>*(-1hR7beL# zRHe#_AVKa10xdoIK6-wmlvCy5)viWANGN2{R|l<^JsK{rRhlT1sRlBP+DqPE8vpH`z z2v!A`vn9+k;4p{B#kR5DWp4f~I9YI3;&5lvDMhL18$EEM(V!XeP8@y0VJ@EG9qUJB zJQA*}Bh?w83%z&v4cEK4*=KF z{+pj(z(p$j!Sxztlxj^b0Y`N;pcpGzH-af?$sPEo7rK0z5T6$yGHd4pXWDFb`zWk75ZReO`A5 z^I3&iq1zzJ{%TK8V8ijfD;-6H(wLdYu3~fhyu{yiG84&MP=M5J{wlBW z@*IP6qjE(8v`?l^Na9D!9R%YIEE@bPf9klzg?zL8x}3x zmEEg#7&06P21v1og+Cxhe45#_Q+_v!uCHW%b&THSak$vf{`2?;MfX*6gZ!NGijxGI zw@&Vd?Xsk7e)3_gRQBM!g!X4?pC~ROT#zV*qeumKFgfM8HuDqV0$DeRvi>)>3uRP% zaFiAm6lP6`^^QV1ksh@XrAR>m`wUHWF3QZJ`;{cwdNy)S0;S5K62xxC>MoRYKJwPF ztJ<@R&*ra11rU05N@*;2f4(L#tge>lr<+NsemR((Mi>DjewZU-+|^97?T}97k~VNE z7Yb=sK16LM=Nh5qB(!PUrZ>Nri|4SI0_xJsMG;AVB_JYL;L;c)NkEy3qUZa+kIpHQG@hRzR$6SY1w#j^F$_ zJuLP>@$}5J|I6{pIcdGzHz~kd^0v(>=UYV*h5%Y^d3%`AB9+ylws@hSZ<+pkjR9kcU zz|TY-F>a(Dnu@Wb#(?D&A5ITysMWoEY#ipX3{^ncYwth#_BR|t^MsEG#hdC2^?CK) zmAo^pck9VaMw_-`d#_B`=g+?*k&>8sRQa|h;^HAZ85f}s)i8lO;Q2%;#|}ZtRTUKA z=`eAPPp{E>>i3V5u#5!<5ryiU!=gj>k}5RlMl$jpyyUB1qO6as%Evx5PAl;Cg`bYv zMZUH%)-k^Ccg_Q)WtikNa$T9g{0W=mGxptj zKFyL{I*4sbCSp4s&SZ@6d86@KKq>og0GO0&tE#J&(n`aB`@3Jc0z4CJ(3YJnc6h^` zj?KabLswb>#6X&2`q6pD;kfMJYR{2eVKR``KoeLsuSP9!+w#a^T28c8%1L<>HOo*Pmvg(?FLZ6g`oqG8kqy?rRZ zWDM(b+9Nw_nrtxICuv(@+)D2vGi?}um*{iMN+>dR3IbmFTT>;CP6-q;fq%e=F&qXJht7~S?8Fx|3@0{c#}HvA@gQ^bkqE_$MszdJlUzD z!s6WvHWG(N>vMB-U;-=V>*_d_A}cv+i)Xin6!Zud^B*I8vb*}(<36yTXF3q$j=##B zQ$u_IlaI+49qzB(12h$u=h;*KU;TMf?n=wZ3<6_s`UI6C3YyCLiZ$RM_#I;W7)Hzi z=yJ2$8FMyOJ33Zl)m>vLpk~%37r9WsujX{c)<=uBaQyE zY`u~J zj7r3IqMEz<9oh&8jX1cGDjmyVoR5+yDk^LoRsxXTj~QD>yvdN@R?CC`n&{~PaY;8& z)#CMfsBeHvJPBmD1E5|!`)vt8sq7IslVdXnHGKGxXFF5u@%KF0X8#N~Yl^ur$+m+sYaD?3_LYp zu1O1yBgv*c3j4$@7&bc{}tqk5*pP zuBgnZd5D}=hA*-4DZOB3wO_X|0s8+|A?-Sa!}uC3d^CgZ zYj#~vRajk{ZX=YlCVNeGi>x+rl9X{mj5b$c(iE8SYvnvc%Uv!&2SNgBlh)H* zoeIGn#J_VGtYCqGu1gL$@@XKzLu5Qdofxtd;MkoE66x7$R+_xM z8)-c|69FldAV~VEDu6I$yp+@iYj5yJCS;3f&lYa~Hi(jVCQxc(z=1VutZ62Z$(@Wk zJwMExyR}!SWIzHe@EMo1O%t+qAAVr4fk`w=> z;^7m?+_>gMj{&LE@oi$Q_fJ+yp?@8+YP4f!tZ0S{IG&-+JW(=o#Pl z_G*t_RC1*+FFro8m4y^C3YQv%cd2FR&<tvQ+pla6_xaH3Ym$x2f4Nxd>uA4V5Qx&M$& z>Ssa>A_aTISif8U`Sy>6I%4mQ$kcRIWTr~+hS&fe7UY<~RFX2jw8d2~HRb<(v&wdT zzJ7cL+z7C`CUrw#^=Ed)!U3({{Z^Cq1)=bdp;`sBy1xi+j0P>z0k8z@*kYA4A3mG# zzd92J#7L|(u&V(ON+i{%Oedfy&wIwcYQK3W2b(SDiL=~JYCn0>WByXLf7QClc+&$= zbl3LwKxW0mOymt~84Q$PB%=~ZXuRShI`6&HvlbJd_5ZHqdD4ji=YB2RS_)q0x{Wic zlrsW4G#jRJS~R~SX@i*U#&;4=x=s?Ag6=})h}UyU)!8H({7{bZ8k7Wa7y_4@Mq&ku zzp^-k{ccvGWH6CtZBaM>#fBxm%s8tCrLDegXUI{5>zfl=lUyi=$M3P(*-!w(7`A* z`MAzFMw9yuE&xZd;z)!TipLDwV%_%S0ehf+H~yvNoF6u~9aWig-!GeVjGsy+|hTzZ!WK>=yzhXX`79UVhs2 z*S2e;g}?dvQd4P!9|c=Vg>nhnrx<`L)A3qhRKq@v)oB^W03^|A@RJcbh1HfZUJ{R`8-?~Q^`5<&IH)t|q988F>LR`b0EoWu zdjTp{iV)U*U4TMg1_5tS4%~H3KHh2&#@^Cm$Qa$EN#CS-cEZpKd=z!Lk!>V$KYNoa zkHkiTqqiW5M03>Y+Os3dqN@#Wn}gfPbU15TTljHs-a;x)(2Q=G}2Cp(wwH~eV`B^Wg8V?rAx4UPdM zmH~c*Yvd9pFzMLW8m$S_-OK&BB?^=U%i$Sa&a?`dp-W$*+$})A0pTm%D|V~mH`sym z5Ex(%n{g~H*+*qR1c&ZysmI1c_Z(TNnFSpDtnb!U6OJcSqiSCibv=WSlXSNA29yF^)e?hXt`?=uI{fXJhxlsCZ{ zw8q37qFS_X-nfejv_n?uubuFVoG53L6pgeGVR$|h;Mf(kl?ec{?N83n8`fkXfV3g7 z@ZNU?SAXNoJfug?E)Kxp;IhY_dCS@GzS7yyaG-nF4JPa$c?QID(^!cOr=S^su=t?{ z84vz{|J+ASCVop&jV&Qc#=`a_0@g9?f-aAuwm^*4Ppu;xQK~!NAE!P}lP=GbD-Bn? zA?9@A`=c`~L#3k#0Xp5oh^L$PT~vK?s4zhjJCZ>7|CIh&D>*K?i1UU55A+TiecNF}CM!lFQrWbF7~dv4lM#_7#O=2rCd!)> zKl10Ur4DSgIC{IOFmED<-JdqcUC-~N5V-G}e8ipHRk@c>@#Wq(cuH#HZ+_b*GZ=x? zwfTew5pSB@4!bmq?S~4dH^K!y(Yw>%(FZ(cnQgDz+<{3Cb$ZP{(>zLD|m zD*v9(q2Tx`JE(Il@D$gz@w2uJ!;w1b- z9c@EI5$R43Lkc&DZ>PceLHa@^3YrND9&c(ljT(hKsaG{Lm=tBe(6UX0J%XO7gu+5O z1!HMVNXK7y!{YTg!W^M9q+#l=il3w!8Z`66NvbLZgl4Oa>CTw?Lxem)YZ*%e&IRcr zU|AMVhRTmdxv6ht3Y0S7yhx5z>3mL5>L$`KHPS>Bl6>rDTTr`c;kz+zH|O?Z^dU;k zDrV$CKgr`Zw|KMyOBkn^$(>Q7NrI|;9fpS09+4lo_IK{2BEV}HRg0>|J82|2B?zMqa}{Vx4suGM83NW}iFGS|J3natfw z1##Fr(gkj8F9v|-*paZB2V^XhkdBGqQCKbjxFZcg-G*y?Kfs@q3Mh}ZpDXbHv*2sl z97~lzF5+E{X&X5TxNXZ@2D{e&ZMwr?cM^UR`|NIo$L|kMX7g)CSVxj$|8i21K!Bw$NhkT=A$6ER_~J~!ak5?(IanT)RlS!q=y zLRBECKQ}(I$0y?Z6t9ldULi_IzT~NAlYotp@tRw(_|6NQI;P_a`j%y9M?x_wg4h z10L6zs6BKa@vR|ELkyl@z3ltw)V^~(^)Gh`s3)6& z?&+SWCMC^S#rj>I8n)r4!#uZ+eX2vbhV|+h-(K+mRen&?fM-De_UAdYQpP=Bq)z=S zIX@3t?8HM?$COpJ-#KWt?3MPRZSBvWzLVOM zm6a7MU3O{&=XsGF8V-8OpZF%2B88ESFnJ*XA&D_a2F@*uwKK=Bl}ZB8X)@N#GTd8X zYn||&fP^djrJG-;%<7I$_Ht~t={pRW11M^P31%fo?@ICGxl7RFkYR`@XOC`bjiWvr zLDV77yQizmNf)jlh8m&nbK7@yo0<#=>_@XsVRQzS&u(i+1<79IQicmFTwKARX<-Ww zaiyhW58PPa5`3cF&-mupz@$h8*Ekd2_5DoSO$oZjK6`%`%G5YR1+E*OWVVxPz!qIfO* zlcP>01<<12umdA?dPO^ZBq=Z-oe_#~$bOxJW2{&)ac|7ur{4DPT-P>~pWw4Qo>B_$ z?fBrJ57If}@Nqwr`T920Z85#AAZLotI5_iv))ewZ@g@JX8|?ZM-S_^w_AcDAfRq!q z!KlO3I=;Kig~FYY$u4(Mw3+p>NS?KfbIpmZU67)P#$)_V&K3_r%u0L@wEE=Lp|0jY z)^eG*AZ!pwgUpnC?D9_hgku{lw(e<72@=ON}Y!Rz7da4e62~wlr zN8zGf^~aGCr;1rj*sJE#_bEbzzAjDIolBA0=`(`69cGMqoekYu7>`9y9S0WsvLuHek z+CqpEH|ozAI{ZcxsTb6Nlrs#3M?$Poe>&`}N zB-}o2=3E--6XA14pB)X1JBT{Uh7HCBOqMF})ncW~Lz`Lw1jfj5FJD3P}sRUj1-#C`|yHv2)`^$^dL^QTp*N!$7 z7Lhe*GhKDQ@LV?d*Q8!gy+%Ha;YGHQ&v9b!Pu6a4+Gk`hj`0$Mi1SNDC*KA%pr0mx zLJ4|_he7>(Q4+|b>3q^kRI(j5hW!uTnddro{kJ}bru)-yN&Ic*Sh2O5B)q+SZAYJfI*5SeRX(a#q z@_z~H1rj@R3D)Lboc1D{E*bttglTeO`LWRf;Zp5F_bFve zP_#u)L(C*W!BU}8akUZ+J_JvTJIX^A9-SaJ_5I2M2pv`=iW*@V|BW71nHzO~e`lmV z)=5&8XXAkXt&t?4P->&&lAuZ)SL}tRMuV*1u-#s@$7EAO99kg5a+gJyBiWd)CFi>^ z*CWFZY>s8UAszOEEbqrT4I+D^h$0#hslK1%?%D-CarYTMV9GEEjeAMt=JCKcRypM6 zHyw7oG|$=Nq3Qa6vLC&orE#y>f}cHm*617al*Q5_7XVt`)_ScE-~+>yzb5jgUU}q)ieqh_(TY?G3#ZNUN4l?m8(!vh;>4}i*n6|* z+>3hh|A>0;aH{|RfBYEPbj*&79DA>qY~t8L_9ikk#>&lQF41RP7> z1!4upE7$^yqci00HMd=+J(!{6(cyKtyx9r{^kszr3XVQ8@^$H6D0D@ozt39mqMtbt$SbQ}9fecDypJIWaL(X6jc zV<#{jwC(0KDdPnexjMI5pMzu^}NV=8uv5P@<>V*uTH++gkV@#Mz-3Yj9)& z4hRP2@~<&EIr=~B z9P(3-D00Y%NUga$RDBpDp|5HJlsCjHR)5cPcRt}CcWA>kv6)tFc1=KqmQJd?j<014 zxl(&N0mMSV%>G?UrEv~+kD)tJ$PeRw|vPUlou@I$aGlvs}gFo{*P$2kdiDSXw?(*io zSobHZ(Ch2#0sETZFn4C8MNdE*!uxmIB;S)dgF|vJyj@r1-J_BqQNy(p?xLp^q>@yM ztolO$*A>BENg9Mn5E%~;Zg_R*%_(Y@As{{2oFDAukGh@qbXC|1HsNjq2 z+2SXCYhle@%~cKpD;@G zfT?xfsqOd8uT2yHbLFAtd^a_uui25<;AQ%*1-L!5$x!bd<$nKQjp>SV{Zjad%^rWZFNhNG7rpejr~7Iyhj>td+8ObB6FK z`k|pc?k%&XdS$LpljG|gxca0Z)8p?qHVUE_imyZ8}ALFf&YU#%H&udKgjw-3!oS#+)Z?aPXz-*sG;k-9!J}y!+^f zIki&orlWo~6Ib|i`Z*7T^W>QG@0Icr7M{*-qaVN~FW2J7^dzhju^&yi+^RrPDd`nt2oO*a`cERHdqR{W+eAw?Pt(5*Lb|)XO$}7Hu)avkm7rCp zttY<2UuAF?!Ble52yFNNv^g|FIpeYV2mI&&Z#j=_V8M#C>R7O{C`<0LU&C3$^HX5|plmxMvxft6!9ID(m2mG>V5&K55t&Xw<%U zC(hOI3@tAmUES+P-=~%+@V?7RkbZ6F{j2YNb@_i;YCncBw7q9wNztM5bn#blv3)}S zVt2A_ldTN3!+o*~o)LR6^pNf9)_C#9c1oSISIz0evtw;L#!hsh+;;7M9(?VKSx_H*v%6Zm}&ukA1Bu!~*w#(C$v8F@-coS4<=<-eA^|8j?HlnR4qH?I!rwapB zNbS#~JVm9F*4WLhnTq7|X2!0E)WYgvZUszw;#>}E`1-APxEn5&+&e≀YGipZ$fa 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 Xp)+mTG+tK%0UtG`+vq|C^XLB$U+X?% literal 0 HcmV?d00001 diff --git a/docs_versioned_docs/version-ros2jazzy/components/yaml/attachments/a300/img/top_plate_pacs.png b/docs_versioned_docs/version-ros2jazzy/components/yaml/attachments/a300/img/top_plate_pacs.png new file mode 100644 index 0000000000000000000000000000000000000000..fb6df2e3076ec032c427366b1ce1af85851c9d96 GIT binary patch literal 211525 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%0A5ArtpAzC9lm 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

Cg9?+jYzp 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∈HcN}{%=G^}$c*f>h~Ov&_@is6ZO#l{pBPx6C8US4i)d4~zq@{vO>4iGzz zngUD2mwjG1$T6a*vf8GmrZ*BK>bLn---PK1jnUTHBey2eitlfv&>GWBD=B(dZ<29Un8C(LuiJO-V<9$f`*2#pnOz5mi&uG=K0)e;UJX PCatov+_@!V6Fc;OI6+a9 literal 0 HcmV?d00001 diff --git a/docs_versioned_docs/version-ros2jazzy/components/yaml/attachments/a300/spotlight.mdx b/docs_versioned_docs/version-ros2jazzy/components/yaml/attachments/a300/spotlight.mdx new file mode 100644 index 00000000..78e7e00d --- /dev/null +++ b/docs_versioned_docs/version-ros2jazzy/components/yaml/attachments/a300/spotlight.mdx @@ -0,0 +1,38 @@ + + + + + +
+
+
+ +
+
+
+ +```yaml +platform: + attachments: + - name: driving_light_1 + type: a300.spotlight + parent: sensor_arch_front_left_corner_mount + xyz: [0.0, 0.0, -0.08] + rpy: [0.0, 0.5235987755982988, 0.5235987755982988] + - name: driving_light_2 + type: a300.spotlight + parent: sensor_arch_front_right_corner_mount + xyz: [0.0, 0.0, -0.08] + rpy: [0.0, 0.5235987755982988, -0.5235987755982988] + - name: driving_light_3 + type: a300.spotlight + parent: sensor_arch_rear_left_corner_mount + xyz: [0.0, 0.0, -0.08] + rpy: [0.0, 0.5235987755982988, -0.5235987755982988] + - name: driving_light_4 + type: a300.spotlight + parent: sensor_arch_rear_right_corner_mount + xyz: [0.0, 0.0, -0.08] + rpy: [0.0, 0.5235987755982988, 0.5235987755982988] +``` +
diff --git a/docs_versioned_docs/version-ros2jazzy/components/yaml/attachments/a300/top_plate_default.mdx b/docs_versioned_docs/version-ros2jazzy/components/yaml/attachments/a300/top_plate_default.mdx new file mode 100644 index 00000000..7519a94f --- /dev/null +++ b/docs_versioned_docs/version-ros2jazzy/components/yaml/attachments/a300/top_plate_default.mdx @@ -0,0 +1,31 @@ + + + + + +
+
+
+ +
+
+
+ +```yaml +platform: + attachments: + - name: top_plate + type: a300.top_plate + model: default + parent: default_mount + xyz: [0.0, 0.0, 0.0] + rpy: [0.0, 0.0, 0.0] + enabled: true +``` +
+ +The default top plate has 3 mounting locations that can be used as the `parent_link` for sensors and other +attachments: +- `${name}_front_mount` at the front edge of the plate, +- `${name}_rear_mount` at the rear edge of the plate, and +- `${name}_default_mount` located in the centre of the plate. diff --git a/docs_versioned_docs/version-ros2jazzy/components/yaml/attachments/a300/top_plate_pacs.mdx b/docs_versioned_docs/version-ros2jazzy/components/yaml/attachments/a300/top_plate_pacs.mdx new file mode 100644 index 00000000..95e241b3 --- /dev/null +++ b/docs_versioned_docs/version-ros2jazzy/components/yaml/attachments/a300/top_plate_pacs.mdx @@ -0,0 +1,30 @@ + + + + + +
+
+
+ +
+
+
+ +```yaml +platform: + attachments: + - name: top_plate + type: a300.top_plate + model: pacs + parent: default_mount + xyz: [0.0, 0.0, 0.0] + rpy: [0.0, 0.0, 0.0] + enabled: true +``` +
+ +Attach accessories to the top plate mounts by setting the accessory's `parent` parameter to one of the grid mounting +locations displayed above. The grid mounting locations span from `${name}_mount_a1` to `${name}_mount_e9`, where the +front left-most location is the `a1` mount and the rear right-most location is the `e9` mount. The letters correspond +to the columns and the number to the rows. diff --git a/docs_versioned_docs/version-ros2jazzy/components/yaml/attachments/a300/wireless_charger.mdx b/docs_versioned_docs/version-ros2jazzy/components/yaml/attachments/a300/wireless_charger.mdx new file mode 100644 index 00000000..2c9bb712 --- /dev/null +++ b/docs_versioned_docs/version-ros2jazzy/components/yaml/attachments/a300/wireless_charger.mdx @@ -0,0 +1,29 @@ + + + + + +
+
+
+ +
+
+
+ +```yaml +platform: + attachments: + - name: wireless_charger + type: a300.wireless_charger + model: default + parent: base_link + xyz: [0.0, 0.0, 0.0] + rpy: [0.0, 0.0, 0.0] + enabled: true +``` +
+ +The A300 can optionally be equipped with a wireless charging coil, mounted to the the right side of the robot. + +The `${name}_face` link is located in the centre of the charging coil's face, with the X axis pointing outwards. diff --git a/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/attachments/a200.mdx b/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/attachments/a200.mdx index d6f9dd87..aa3a7846 100644 --- a/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/attachments/a200.mdx +++ b/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/attachments/a200.mdx @@ -1,7 +1,7 @@ --- title: A200 Attachments sidebar_label: A200 -sidebar_position: 2 +sidebar_position: 3 toc_min_heading_level: 2 toc_max_heading_level: 5 --- diff --git a/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/attachments/a300.mdx b/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/attachments/a300.mdx new file mode 100644 index 00000000..fe9f75ff --- /dev/null +++ b/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/attachments/a300.mdx @@ -0,0 +1,65 @@ +--- +title: A300 Attachments +sidebar_label: A300 +sidebar_position: 2 +toc_min_heading_level: 2 +toc_max_heading_level: 5 +--- +import A300AmpEnclosure from "/docs_versioned_docs/version-ros2jazzy/components/yaml/attachments/a300/amp_enclosure.mdx"; +import A300AmpSensorArch from "/docs_versioned_docs/version-ros2jazzy/components/yaml/attachments/a300/amp_sensor_arch.mdx"; +import A300Bumper from "/docs_versioned_docs/version-ros2jazzy/components/yaml/attachments/a300/bumper.mdx"; +import A300Spotlight from "/docs_versioned_docs/version-ros2jazzy/components/yaml/attachments/a300/spotlight.mdx"; +import A300TopPlateDefault from "/docs_versioned_docs/version-ros2jazzy/components/yaml/attachments/a300/top_plate_default.mdx"; +import A300TopPlatePacs from "/docs_versioned_docs/version-ros2jazzy/components/yaml/attachments/a300/top_plate_pacs.mdx"; +import A300WirelessCharger from "/docs_versioned_docs/version-ros2jazzy/components/yaml/attachments/a300/wireless_charger.mdx"; + +## Bumper + +The A300 can have bumpers. By default, we have two bumpers, on the front and rear of the robot. + + + + +## Top Plate + +The A300 description supports two types of top plates that modify the mounting links of the robot. + +### Default + +The **default** top plate is mounted on top of the robot. + +
+ +### PACS +The **PACS** top is physically identical to the **default** plate, but adds PACS-compatible mounting links. + +
+ +## Wireless Charger + + + +## AMP Attachments + +The Husky AMP (Autonomous Mobile Platform) has large enclosure on top to contain additional computers, sensors, and +power-distribution equipment and an arch to support additional sensors. These attachments can be added to +the A300 just like any other attachment. + +### AMP Enclosure + +If the AMP Enclosure is used, the [top plate](#top-plate) should be omitted. + + + +### AMP Sensor Arch + +The AMP sensor arch is used to attach additional sensors and antennas. + + + +### Spotlights + +The AMP is equipped with multiple spotlights to assist in teleoperation in dark environments. The models also include +simulated light sources when used with [Gazebo](../../../../tutorials/simulator/overview.mdx) + + diff --git a/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/attachments/dx1X0.mdx b/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/attachments/dx1X0.mdx index acd2e631..5e2a3b37 100644 --- a/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/attachments/dx1X0.mdx +++ b/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/attachments/dx1X0.mdx @@ -1,7 +1,7 @@ --- title: DD1X0 and DO1X0 Attachments sidebar_label: DD1X0 & DO1X0 -sidebar_position: 5 +sidebar_position: 6 toc_min_heading_level: 2 toc_max_heading_level: 5 --- diff --git a/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/attachments/j100.mdx b/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/attachments/j100.mdx index 2f51ad01..d148c67e 100644 --- a/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/attachments/j100.mdx +++ b/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/attachments/j100.mdx @@ -1,7 +1,7 @@ --- title: J100 Attachments sidebar_label: J100 -sidebar_position: 3 +sidebar_position: 4 toc_min_heading_level: 2 toc_max_heading_level: 5 --- diff --git a/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/attachments/r100.mdx b/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/attachments/r100.mdx index 838cbd47..29988935 100644 --- a/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/attachments/r100.mdx +++ b/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/attachments/r100.mdx @@ -1,7 +1,7 @@ --- title: R100 Attachments sidebar_label: R100 -sidebar_position: 6 +sidebar_position: 7 toc_min_heading_level: 2 toc_max_heading_level: 5 --- diff --git a/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/attachments/w200.mdx b/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/attachments/w200.mdx index 956170b1..d8c6c7d1 100644 --- a/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/attachments/w200.mdx +++ b/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/attachments/w200.mdx @@ -1,7 +1,7 @@ --- title: W200 Attachments sidebar_label: W200 -sidebar_position: 4 +sidebar_position: 5 toc_min_heading_level: 2 toc_max_heading_level: 5 --- From 91e456aa53f40e359432692162dc2630dcb52217 Mon Sep 17 00:00:00 2001 From: luis-camero <88782189+luis-camero@users.noreply.github.com> Date: Wed, 16 Jul 2025 12:52:13 -0400 Subject: [PATCH 19/25] Feature: Offboard MoveIt Tutorial (#442) * Add instructions to run MoveIt on a secondary computer * Specify the creation of a second terminal * Add jazzy off-board MoveIt tutorial * Add example --- .../ros/tutorials/manipulation/gazebo.mdx | 2 +- .../ros/tutorials/manipulation/remote.mdx | 65 +++++++++++++++++++ .../ros/tutorials/manipulation/gazebo.mdx | 2 +- .../ros/tutorials/manipulation/remote.mdx | 65 +++++++++++++++++++ 4 files changed, 132 insertions(+), 2 deletions(-) create mode 100644 docs_versioned_docs/version-ros2humble/ros/tutorials/manipulation/remote.mdx create mode 100644 docs_versioned_docs/version-ros2jazzy/ros/tutorials/manipulation/remote.mdx diff --git a/docs_versioned_docs/version-ros2humble/ros/tutorials/manipulation/gazebo.mdx b/docs_versioned_docs/version-ros2humble/ros/tutorials/manipulation/gazebo.mdx index 52b564f4..bbb8626a 100644 --- a/docs_versioned_docs/version-ros2humble/ros/tutorials/manipulation/gazebo.mdx +++ b/docs_versioned_docs/version-ros2humble/ros/tutorials/manipulation/gazebo.mdx @@ -1,7 +1,7 @@ --- title: Manipulation in Gazebo Ignition sidebar_label: Manipulation in Simulation -sidebar_position: 3 +sidebar_position: 1 toc_min_heading_level: 2 toc_max_heading_level: 4 --- diff --git a/docs_versioned_docs/version-ros2humble/ros/tutorials/manipulation/remote.mdx b/docs_versioned_docs/version-ros2humble/ros/tutorials/manipulation/remote.mdx new file mode 100644 index 00000000..5a491344 --- /dev/null +++ b/docs_versioned_docs/version-ros2humble/ros/tutorials/manipulation/remote.mdx @@ -0,0 +1,65 @@ +--- +title: Manipulation across Multiple Machines +sidebar_label: Multiple Machines +sidebar_position: 2 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +MoveIt! can require significant resources to generate complex manipulator trajectories. Ideally, a single powerful computer would handle the robot's nodes, sensor drivers, manipulator controllers, and MoveIt!. However, if a secondary computer is available onboard the robot and on the same local network, it could be used to handle some of the load of the primary platform computer. + +# MoveIt on Secondary Computer +The manipulators' controllers can be launched on the primary platform computer, while the motion planning can be launched independently on the secondary computer. + +The secondary computer does not need to be connected over ethernet to the primary platform computer, but doing so simplifies the networking setup which will not be covered in this tutorial. For more information on setting up networks with the ROS 2 middleware see the [networking section](../../networking/overview.mdx). + +## Setup +The secondary computer must have the same environment as the primary platform computer. Ensure that they both have the same version of packages, and if workspaces are required to build packages from source, they should be mirrored and built on the two computers. Then a `clearpath` setup directory must be created with the same `robot.yaml` as the one on the robot, see [offboard computer setup instructions](../../installation/offboard_pc.mdx) for more details. For the remainder of this tutorial, the `clearpath` setup directory will be assumed to be in the `home` directory. + +## Launching MoveIt! +Source all required workspaces on the secondary computer and generate all description, configuration, and launch files. +```bash +source /opt/ros/humble/setup.bash +``` + +### Generate Environment Setup +Generate the environment setup bash file. This file will contain any environment variables required to setup the networking between the multiple computer setup. +```bash +ros2 run clearpath_generator_common generate_bash -s $HOME/clearpath/ +``` + +This script will generate the `$HOME/clearpath/setup.bash` with the environment required to communicate with the primary platform computer. + +### Generate Description Files +Then, generate the description files: +```bash +ros2 run clearpath_generator_common generate_description -s $HOME/clearpath/ +ros2 run clearpath_generator_common generate_semantic_description -s $HOME/clearpath/ +``` +These scripts will generate the `robot.urdf.xacro`, `robot.srdf.xacro`, and `robot.srdf` files in the `$HOME/clearpath` directory which contain necessary robot description information to launch MoveIt!. + +### Generate Launch and Configuration Files +Then, generate the MoveIt! launch file and parameter file: +```bash +ros2 run clearpath_generator_robot generate_launch -s $HOME/clearpath/ +ros2 run clearpath_generator_robot generate_param -s $HOME/clearpath/ +``` + +These scripts will generate the `manipulators/launch/manipulators.launch.py` and `manipulators/config/moveit.config` files. + +### Launch +Once these files are all generated, launch MoveIt! by passing it the path to the directory: +``` +ros2 launch clearpath_manipulators moveit.launch.py setup_path:=$HOME/clearpath/ +``` + +## Launching RViz +Once MoveIt! is running, open RViz with the MoveIt MotionPlanning plugin, with the appropriate namespace, and interactive markers. To do so, create a new terminal, source the workspace, and call the `view_moveit` launch file: +``` +ros2 launch clearpath_viz view_moveit.launch.py namespace:='' +``` + +Make sure to pass the same namespace as the robot's. For example, a robot with namespace `a300_0001` will have topics such as `/a300_0001/platform/mcu/status` and `/a300_0001/manipulators/arm_0_joint_trajectory_controller/controller_state`. To launch its viewing command: +``` +ros2 launch clearpath_viz view_moveit.launch.py namespace:='a300_0001' +``` diff --git a/docs_versioned_docs/version-ros2jazzy/ros/tutorials/manipulation/gazebo.mdx b/docs_versioned_docs/version-ros2jazzy/ros/tutorials/manipulation/gazebo.mdx index d0e666d7..1f412c2c 100644 --- a/docs_versioned_docs/version-ros2jazzy/ros/tutorials/manipulation/gazebo.mdx +++ b/docs_versioned_docs/version-ros2jazzy/ros/tutorials/manipulation/gazebo.mdx @@ -1,7 +1,7 @@ --- title: Manipulation in Gazebo Harmonic sidebar_label: Manipulation in Simulation -sidebar_position: 3 +sidebar_position: 1 toc_min_heading_level: 2 toc_max_heading_level: 4 --- diff --git a/docs_versioned_docs/version-ros2jazzy/ros/tutorials/manipulation/remote.mdx b/docs_versioned_docs/version-ros2jazzy/ros/tutorials/manipulation/remote.mdx new file mode 100644 index 00000000..67120a8d --- /dev/null +++ b/docs_versioned_docs/version-ros2jazzy/ros/tutorials/manipulation/remote.mdx @@ -0,0 +1,65 @@ +--- +title: Manipulation across Multiple Machines +sidebar_label: Multiple Machines +sidebar_position: 2 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +MoveIt! can require significant resources to generate complex manipulator trajectories. Ideally, a single powerful computer would handle the robot's nodes, sensor drivers, manipulator controllers, and MoveIt!. However, if a secondary computer is available onboard the robot and on the same local network, it could be used to handle some of the load of the primary platform computer. + +# MoveIt on Secondary Computer +The manipulators' controllers can be launched on the primary platform computer, while the motion planning can be launched independently on the secondary computer. + +The secondary computer does not need to be connected over ethernet to the primary platform computer, but doing so simplifies the networking setup which will not be covered in this tutorial. For more information on setting up networks with the ROS 2 middleware see the [networking section](../../networking/overview.mdx). + +## Setup +The secondary computer must have the same environment as the primary platform computer. Ensure that they both have the same version of packages, and if workspaces are required to build packages from source, they should be mirrored and built on the two computers. Then a `clearpath` setup directory must be created with the same `robot.yaml` as the one on the robot, see [offboard computer setup instructions](../../installation/offboard_pc.mdx) for more details. For the remainder of this tutorial, the `clearpath` setup directory will be assumed to be in the `home` directory. + +## Launching MoveIt! +Source all required workspaces on the secondary computer and generate all description, configuration, and launch files. +```bash +source /opt/ros/jazzy/setup.bash +``` + +### Generate Environment Setup +Generate the environment setup bash file. This file will contain any environment variables required to setup the networking between the multiple computer setup. +```bash +ros2 run clearpath_generator_common generate_bash -s $HOME/clearpath/ +``` + +This script will generate the `$HOME/clearpath/setup.bash` with the environment required to communicate with the primary platform computer. + +### Generate Description Files +Then, generate the description files: +```bash +ros2 run clearpath_generator_common generate_description -s $HOME/clearpath/ +ros2 run clearpath_generator_common generate_semantic_description -s $HOME/clearpath/ +``` +These scripts will generate the `robot.urdf.xacro`, `robot.srdf.xacro`, and `robot.srdf` files in the `$HOME/clearpath` directory which contain necessary robot description information to launch MoveIt!. + +### Generate Launch and Configuration Files +Then, generate the MoveIt! launch file and parameter file: +```bash +ros2 run clearpath_generator_robot generate_launch -s $HOME/clearpath/ +ros2 run clearpath_generator_robot generate_param -s $HOME/clearpath/ +``` + +These scripts will generate the `manipulators/launch/manipulators.launch.py` and `manipulators/config/moveit.config` files. + +### Launch +Once these files are all generated, launch MoveIt! by passing it the path to the directory: +``` +ros2 launch clearpath_manipulators moveit.launch.py setup_path:=$HOME/clearpath/ +``` + +## Launching RViz +Once MoveIt! is running, open RViz with the MoveIt MotionPlanning plugin, with the appropriate namespace, and interactive markers. To do so, create a new terminal, source the workspace, and call the `view_moveit` launch file: +``` +ros2 launch clearpath_viz view_moveit.launch.py namespace:='' +``` + +Make sure to pass the same namespace as the robot's. For example, a robot with namespace `a300_0001` will have topics such as `/a300_0001/platform/mcu/status` and `/a300_0001/manipulators/arm_0_joint_trajectory_controller/controller_state`. To launch its viewing command: +``` +ros2 launch clearpath_viz view_moveit.launch.py namespace:='a300_0001' +``` From 3d4ce55006fcbf5033d75a1210a44a5ee05d258b Mon Sep 17 00:00:00 2001 From: Chris Iverach-Brereton <59611394+civerachb-cpr@users.noreply.github.com> Date: Thu, 17 Jul 2025 13:18:52 -0400 Subject: [PATCH 20/25] Re-order the launch items for the Nav2 tutorials; the previous order appeared unreliable. See https://github.com/clearpathrobotics/clearpath_nav2_demos/issues/29 (#445) --- .../tutorials/navigation_demos/localization.mdx | 14 ++++---------- .../ros/tutorials/navigation_demos/nav2.mdx | 16 ++++++++-------- .../ros/tutorials/navigation_demos/slam.mdx | 17 +++++++---------- 3 files changed, 19 insertions(+), 28 deletions(-) diff --git a/docs_versioned_docs/version-ros2jazzy/ros/tutorials/navigation_demos/localization.mdx b/docs_versioned_docs/version-ros2jazzy/ros/tutorials/navigation_demos/localization.mdx index 7f54abef..db173c04 100644 --- a/docs_versioned_docs/version-ros2jazzy/ros/tutorials/navigation_demos/localization.mdx +++ b/docs_versioned_docs/version-ros2jazzy/ros/tutorials/navigation_demos/localization.mdx @@ -29,12 +29,11 @@ to `false`. ::: -**1.** [Start the simulation and Nav2](nav2.mdx#launching-the-simulation-and-nav2) -by following steps 1-3 of the Nav2 startup - -**2.** Open a terminal and run +To start localization using [AMCL](https://docs.nav2.org/configuration/packages/configuring-amcl.html) +[follow the steps](nav2.mdx#launching-the-simulation-and-nav2) described in the Nav2 +startup. When you get to step 4, run ```bash -ros2 launch clearpath_nav2_demos localization.launch.py use_sim_time:=true +ros2 launch clearpath_nav2_demos localiztion.launch.py use_sim_time:=true ``` The default map used by `localization.launch.py` is a @@ -43,8 +42,3 @@ If you are using a custom map, pass it in with the `map` launch argument: ```bash ros2 launch clearpath_nav2_demos localization.launch.py use_sim_time:=true map:=/path/to/my/map.yaml ``` - -**3.** [Start Rviz](nav2.mdx#launching-the-simulation-and-nav2) and set the robot's initial pose -estimate by following steps 5-6 of the Nav2 startup - -**4.** Give the robot a navigation goal using the [Nav2 Goal](nav2.mdx#nav2-goal) tool. \ No newline at end of file diff --git a/docs_versioned_docs/version-ros2jazzy/ros/tutorials/navigation_demos/nav2.mdx b/docs_versioned_docs/version-ros2jazzy/ros/tutorials/navigation_demos/nav2.mdx index 666bd931..68eb6f2a 100644 --- a/docs_versioned_docs/version-ros2jazzy/ros/tutorials/navigation_demos/nav2.mdx +++ b/docs_versioned_docs/version-ros2jazzy/ros/tutorials/navigation_demos/nav2.mdx @@ -30,23 +30,23 @@ ros2 launch clearpath_gz simulation.launch.py If the simulation does not start automatically, press the large orange "play" button in the bottom left corner. -**3.** Open a second terminal and launch nav2: - +**3.** Open a second terminal and start Rviz. If you are using a physical robot or running the simulation +on an external server, this step must be should on your workstation, not on the robot or simulation server itself. ``` -ros2 launch clearpath_nav2_demos nav2.launch.py use_sim_time:=true +ros2 launch clearpath_viz view_navigation.launch.py namespace:=a300_0000 use_sim_time:=true ``` **4.** Open a third terminal and start either [SLAM](slam.mdx) or [Localization](localization.mdx), depdending on whether or not you want to create a new map or use a pre-existing map. -**5.** Open a fourth terminal and start Rviz. If you are using a physical robot or running the simulation -on an external server, this step must be should on your workstation, not on the robot or simulation server itself. +**5.** Set the initial pose of the robot using the [**2D Pose Estimate**](#2d-pose-estimate) tool in RViz. + +**6.** Open fourth second terminal and launch nav2: + ``` -ros2 launch clearpath_viz view_navigation.launch.py namespace:=a300_0000 +ros2 launch clearpath_nav2_demos nav2.launch.py use_sim_time:=true ``` -**6.** Set the initial pose of the robot using the [**2D Pose Estimate**](#2d-pose-estimate) tool in RViz. - **7.** Give the robot a navigation goal using the [**Nav2 Goal**](#nav2-goal) tool in RViz. ## Nav2 Tools in Rviz diff --git a/docs_versioned_docs/version-ros2jazzy/ros/tutorials/navigation_demos/slam.mdx b/docs_versioned_docs/version-ros2jazzy/ros/tutorials/navigation_demos/slam.mdx index 3d890b9a..fbcd3e7e 100644 --- a/docs_versioned_docs/version-ros2jazzy/ros/tutorials/navigation_demos/slam.mdx +++ b/docs_versioned_docs/version-ros2jazzy/ros/tutorials/navigation_demos/slam.mdx @@ -32,18 +32,15 @@ to `false`. ::: -**1.** [Start the simulation and Nav2](nav2.mdx#launching-the-simulation-and-nav2) -by following steps 1-3 of the Nav2 startup - -**2.** Open a terminal and run +To start SLAM, [follow the steps](nav2.mdx#launching-the-simulation-and-nav2) described in the Nav2 +startup. When you get to step 4, run ```bash ros2 launch clearpath_nav2_demos slam.launch.py use_sim_time:=true ``` -**3.** [Start Rviz](nav2.mdx#launching-the-simulation-and-nav2) and set the robot's initial pose -estimate by following steps 5-6 of the Nav2 startup +### Building the map -**4.** Drive the robot around the world. Ensure you have mapped the region you want the robot +Drive the robot around the world. Ensure you have mapped the region you want the robot to navigate through autonomously.

@@ -56,10 +53,10 @@ to navigate through autonomously.

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 )ua)g%? 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%0De**XVjEszx#-Rc#EzKVk!GDSa{a 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

-**5.** Save the map by opening a new terminal and running +### Saving the map + +To save the map, open a new terminal and run ```bash ros2 run nav2_map_server map_saver_cli -f "map_name" --ros-args -p map_subscribe_transient_local:=true -r __ns:=/a300_0000 ``` - -**6.** Give the robot a navigation goal using the [Nav2 Goal](nav2.mdx#nav2-goal) tool. \ No newline at end of file From 8321ed3eb3d31de2397806a1f5bbb787110cbbaf Mon Sep 17 00:00:00 2001 From: Michael Hosmar Date: Fri, 18 Jul 2025 11:43:05 -0400 Subject: [PATCH 21/25] Handle line endings automatically (#444) * add generic gitattributes file * use LF on all OS's * some explicit file callouts * fix line endings in index --- .gitattributes | 19 + CODEOWNERS | 4 +- LICENSE | 42 +- components/button_download.module.css | 8 +- components/button_download_step.tsx | 24 +- components/button_download_wiring_diagram.tsx | 24 +- ...ighting_states_estop_reset_operational.mdx | 18 +- ...ommon_risk_assessment_for_integrations.mdx | 18 +- .../common_who_can_maintain_the_robot.mdx | 26 +- ...ommon_wireless_emergency_stop_charging.mdx | 82 +- components/common_wireless_joystick_ps4.mdx | 90 +- .../common_wireless_joystick_ps4_charging.mdx | 42 +- ...a300_additional_emergency_stop_devices.mdx | 72 +- .../husky_a300_amp_check_sensors.mdx | 48 +- .../husky_a300_amp_networking_basic.mdx | 38 +- ...a300_amp_other_documentation_to_review.mdx | 10 +- .../husky_a300_amp_outdoornav_checks.mdx | 32 +- .../husky_a300/husky_a300_base_link.mdx | 42 +- .../husky_a300_cable_passthrough.mdx | 160 +-- components/husky_a300/husky_a300_canbus.mdx | 38 +- .../husky_a300_data_connections.mdx | 28 +- .../husky_a300/husky_a300_fan_expansion.mdx | 70 +- .../husky_a300_internal_integrations.mdx | 44 +- .../husky_a300/husky_a300_ip_addresses.mdx | 116 +- .../husky_a300_network_connection.mdx | 30 +- .../husky_a300_orientation_references.mdx | 32 +- components/husky_a300/husky_a300_pacs.mdx | 26 +- .../husky_a300_power_connections.mdx | 754 +++++----- .../husky_a300_replacing_fuses_bf1.mdx | 44 +- ...husky_a300_replacing_fuses_board_mount.mdx | 34 +- .../husky_a300_replacing_fuses_mini_blade.mdx | 34 +- .../husky_a300/husky_a300_step_model.mdx | 136 +- ...300_system_interface_connector_summary.mdx | 54 +- .../husky_a300_system_interface_debug_led.mdx | 126 +- .../husky_a300/husky_a300_system_power.mdx | 98 +- .../husky_a300/husky_a300_whats_included.mdx | 40 +- .../husky_a300_wireless_emergency_stop.mdx | 52 +- .../husky_a300/husky_a300_wiring_diagram.mdx | 56 +- .../husky_a300_wiring_diagram_amp.mdx | 60 +- .../husky_a300_ethernet_connection.mdx | 84 +- .../husky_a300_netplan_wifi_client.mdx | 16 +- .../husky_a300_peplink_cellular.mdx | 102 +- .../husky_a300_peplink_wifi_ap_connection.mdx | 62 +- .../husky_a300_peplink_wifi_client.mdx | 118 +- .../maintenance/_wd_ssd_critical_update.mdx | 22 +- .../maintenance/wd_ssd_critical_update.mdx | 66 +- components/supported_platforms.mdx | 78 +- components/supported_sensors.mdx | 160 +-- docs_indoornav_user_manual/api.mdx | 276 ++-- .../base_robot_config/_category_.json | 6 +- .../base_robot_config/config_apt_rosdep.mdx | 132 +- .../config_install_required_sw.mdx | 94 +- .../config_install_robot_os.mdx | 80 +- .../config_starting_automatically.mdx | 64 +- .../config_starting_manually.mdx | 44 +- .../config_updating_software.mdx | 42 +- .../getting_started.mdx | 116 +- docs_indoornav_user_manual/index.mdx | 36 +- .../installing_backpack_software.mdx | 120 +- docs_indoornav_user_manual/network_config.mdx | 572 ++++---- docs_indoornav_user_manual/support.mdx | 20 +- .../using_indoornav/_category_.json | 6 +- .../using_indoornav/driving_the_robot.mdx | 236 ++-- .../using_indoornav/maps.mdx | 662 ++++----- .../using_indoornav/usage_background.mdx | 54 +- .../using_indoornav/web_gui.mdx | 82 +- docs_outdoornav_user_manual/_category_.json | 8 +- .../api/_category_.json | 8 +- .../api/api_overview.mdx | 50 +- docs_outdoornav_user_manual/index.mdx | 34 +- .../overview/_category_.json | 8 +- .../overview/overview_introduction.mdx | 158 +-- .../overview_operating_conditions.mdx | 226 +-- .../overview/overview_scope.mdx | 24 +- .../quick_start/_category_.json | 8 +- docs_outdoornav_user_manual/safety.mdx | 278 ++-- .../integration_husky_a200_observer.mdx | 220 +-- .../maintenance_husky_a200_observer.mdx | 674 ++++----- .../tutorials_husky_a200_observer.mdx | 92 +- .../solutions/husky_a300_amp/_category_.json | 8 +- .../husky_a300_observer/_category_.json | 8 +- .../maintenance/_wd_ssd_critical_update.mdx | 22 +- .../maintenance/_wd_ssd_critical_update.mdx | 22 +- docusaurus.config.js | 530 +++---- .../version-0.10.0/_category_.json | 8 +- .../version-0.10.0/api/_category_.json | 8 +- .../api/api_endpoints/api_endpoints.mdx | 32 +- .../api/api_examples/api_examples.mdx | 40 +- .../api/api_examples/mission_from_file.mdx | 420 +++--- .../mission_with_custom_tasks.mdx | 466 +++--- .../api/api_examples/monitor_status.mdx | 304 ++-- .../version-0.10.0/api/api_overview.mdx | 122 +- .../version-0.10.0/cpr_hardware.mdx | 810 +++++------ .../customized_tuning/_category_.json | 6 +- .../sensor_customization.mdx | 18 +- .../tuning_instructions/_category_.json | 8 +- .../ackermann_drive_dynamics.mdx | 18 +- .../tuning_instructions/footprint_tuning.mdx | 18 +- .../customized_tuning/tuning_overview.mdx | 48 +- .../tuning_parameters/_category_.json | 8 +- .../navigation_parameters.mdx | 334 ++--- .../user_interface_customization.mdx | 18 +- .../version-0.10.0/faq.mdx | 388 ++--- .../version-0.10.0/features/_category_.json | 8 +- .../version-0.10.0/features/custom_tasks.mdx | 406 +++--- .../features/mission_scheduler.mdx | 84 +- .../version-0.10.0/features/navigation.mdx | 76 +- .../features/rosbag_recorder.mdx | 68 +- .../getting_started/_category_.json | 8 +- .../getting_started/first_time_checklist.mdx | 226 +-- .../getting_started/system_setup.mdx | 472 +++---- .../getting_started/terminal_interface.mdx | 280 ++-- .../getting_started/tf_validation.mdx | 160 +-- .../version-0.10.0/index.mdx | 34 +- .../integration_requirements/_category_.json | 6 +- .../_category_.json | 8 +- .../integration_overview.mdx | 68 +- .../interface_control_requirements.mdx | 238 ++-- .../software_integration_instructions.mdx | 290 ++-- .../version-0.10.0/overview/_category_.json | 8 +- .../overview_hardware_requirements.mdx | 88 +- .../overview/overview_introduction.mdx | 186 +-- .../overview_operating_conditions.mdx | 352 ++--- .../overview/overview_scope.mdx | 30 +- .../version-0.10.0/release_notes.mdx | 504 +++---- .../version-0.10.0/safety.mdx | 288 ++-- .../version-0.10.0/simulation.mdx | 38 +- .../version-0.10.0/support.mdx | 20 +- .../web_user_interface/_category_.json | 8 +- .../web_user_interface/ui_autonomous_mode.mdx | 822 +++++------ .../web_user_interface/ui_manual_mode.mdx | 96 +- .../web_user_interface/ui_overview.mdx | 844 +++++------ .../version-0.11.0/_category_.json | 8 +- .../version-0.11.0/api/_category_.json | 8 +- .../api/api_endpoints/api_endpoints.mdx | 32 +- .../api/api_examples/api_examples.mdx | 40 +- .../api/api_examples/mission_from_file.mdx | 420 +++--- .../mission_with_custom_tasks.mdx | 466 +++--- .../api/api_examples/monitor_status.mdx | 304 ++-- .../version-0.11.0/api/api_overview.mdx | 126 +- .../version-0.11.0/cpr_hardware.mdx | 810 +++++------ .../customized_tuning/_category_.json | 6 +- .../sensor_customization.mdx | 18 +- .../tuning_instructions/_category_.json | 8 +- .../ackermann_drive_dynamics.mdx | 18 +- .../tuning_instructions/footprint_tuning.mdx | 18 +- .../customized_tuning/tuning_overview.mdx | 48 +- .../tuning_parameters/_category_.json | 8 +- .../navigation_parameters.mdx | 338 ++--- .../user_interface_customization.mdx | 18 +- .../version-0.11.0/faq.mdx | 388 ++--- .../version-0.11.0/features/_category_.json | 8 +- .../version-0.11.0/features/custom_tasks.mdx | 412 +++--- .../features/mission_scheduler.mdx | 84 +- .../version-0.11.0/features/navigation.mdx | 76 +- .../features/rosbag_recorder.mdx | 68 +- .../getting_started/_category_.json | 8 +- .../getting_started/first_time_checklist.mdx | 226 +-- .../getting_started/system_setup.mdx | 478 +++---- .../getting_started/terminal_interface.mdx | 496 +++---- .../getting_started/tf_validation.mdx | 160 +-- .../version-0.11.0/index.mdx | 34 +- .../integration_requirements/_category_.json | 6 +- .../_category_.json | 8 +- .../integration_overview.mdx | 68 +- .../interface_control_requirements.mdx | 238 ++-- .../software_integration_instructions.mdx | 244 ++-- .../version-0.11.0/overview/_category_.json | 8 +- .../overview_hardware_requirements.mdx | 88 +- .../overview/overview_introduction.mdx | 186 +-- .../overview_operating_conditions.mdx | 352 ++--- .../overview/overview_scope.mdx | 30 +- .../version-0.11.0/release_notes.mdx | 556 ++++---- .../version-0.11.0/safety.mdx | 288 ++-- .../version-0.11.0/simulation.mdx | 38 +- .../version-0.11.0/support.mdx | 20 +- .../web_user_interface/_category_.json | 8 +- .../web_user_interface/ui_autonomous_mode.mdx | 866 ++++++------ .../web_user_interface/ui_manual_mode.mdx | 96 +- .../web_user_interface/ui_overview.mdx | 846 +++++------ .../version-0.12.0/_category_.json | 8 +- .../version-0.12.0/api/_category_.json | 8 +- .../api/api_endpoints/api_endpoints.mdx | 32 +- .../api/api_examples/api_examples.mdx | 42 +- .../api/api_examples/mission_from_file.mdx | 420 +++--- .../mission_with_custom_tasks.mdx | 466 +++--- .../api/api_examples/monitor_status.mdx | 304 ++-- .../version-0.12.0/api/api_overview.mdx | 126 +- .../version-0.12.0/cpr_hardware.mdx | 810 +++++------ .../customized_tuning/_category_.json | 6 +- .../sensor_customization.mdx | 18 +- .../tuning_instructions/_category_.json | 8 +- .../ackermann_drive_dynamics.mdx | 18 +- .../tuning_instructions/footprint_tuning.mdx | 18 +- .../customized_tuning/tuning_overview.mdx | 48 +- .../tuning_parameters/_category_.json | 8 +- .../navigation_parameters.mdx | 338 ++--- .../user_interface_customization.mdx | 18 +- .../version-0.12.0/faq.mdx | 388 ++--- .../version-0.12.0/features/_category_.json | 8 +- .../features/assisted_teleoperation.mdx | 210 +-- .../version-0.12.0/features/custom_tasks.mdx | 412 +++--- .../features/mission_scheduler.mdx | 98 +- .../version-0.12.0/features/navigation.mdx | 76 +- .../features/rosbag_recorder.mdx | 68 +- .../getting_started/_category_.json | 8 +- .../getting_started/first_time_checklist.mdx | 226 +-- .../getting_started/system_setup.mdx | 460 +++--- .../getting_started/terminal_interface.mdx | 486 +++---- .../getting_started/tf_validation.mdx | 160 +-- .../version-0.12.0/index.mdx | 34 +- .../integration_requirements/_category_.json | 6 +- .../_category_.json | 8 +- .../integration_overview.mdx | 68 +- .../interface_control_requirements.mdx | 238 ++-- .../software_integration_instructions.mdx | 264 ++-- .../version-0.12.0/overview/_category_.json | 8 +- .../overview_hardware_requirements.mdx | 88 +- .../overview/overview_introduction.mdx | 186 +-- .../overview_operating_conditions.mdx | 352 ++--- .../overview/overview_scope.mdx | 30 +- .../version-0.12.0/release_notes.mdx | 630 ++++----- .../version-0.12.0/safety.mdx | 288 ++-- .../version-0.12.0/simulation.mdx | 38 +- .../version-0.12.0/support.mdx | 20 +- .../web_user_interface/_category_.json | 8 +- .../web_user_interface/ui_manual_mode.mdx | 108 +- .../web_user_interface/ui_overview.mdx | 1244 ++++++++--------- .../web_user_interface/ui_waypoint_mode.mdx | 542 +++---- .../version-0.13.0/_category_.json | 8 +- .../version-0.13.0/api/_category_.json | 8 +- .../api/api_endpoints/api_endpoints.mdx | 32 +- .../api/api_examples/api_examples.mdx | 42 +- .../api/api_examples/mission_from_file.mdx | 420 +++--- .../mission_with_custom_tasks.mdx | 466 +++--- .../api/api_examples/monitor_status.mdx | 304 ++-- .../version-0.13.0/api/api_overview.mdx | 126 +- .../sensor_customization.mdx | 18 +- .../tuning_instructions/_category_.json | 8 +- .../ackermann_drive_dynamics.mdx | 18 +- .../tuning_instructions/footprint_tuning.mdx | 18 +- .../customized_tuning/tuning_overview.mdx | 48 +- .../tuning_parameters/_category_.json | 8 +- .../navigation_parameters.mdx | 338 ++--- .../user_interface_customization.mdx | 18 +- .../version-0.13.0/features/_category_.json | 8 +- .../version-0.13.0/features/custom_tasks.mdx | 412 +++--- .../version-0.13.0/features/navigation.mdx | 76 +- .../getting_started/_category_.json | 8 +- .../getting_started/first_time_checklist.mdx | 226 +-- .../getting_started/terminal_interface.mdx | 486 +++---- .../getting_started/tf_validation.mdx | 160 +-- .../version-0.13.0/index.mdx | 34 +- .../integration_overview.mdx | 68 +- .../interface_control_requirements.mdx | 238 ++-- .../version-0.13.0/overview/_category_.json | 8 +- .../overview_hardware_requirements.mdx | 88 +- .../overview/overview_introduction.mdx | 186 +-- .../overview_operating_conditions.mdx | 352 ++--- .../overview/overview_scope.mdx | 30 +- .../version-0.13.0/safety.mdx | 288 ++-- .../version-0.14.0/_category_.json | 8 +- .../version-0.14.0/api/_category_.json | 8 +- .../api/api_endpoints/api_endpoints.mdx | 32 +- .../api/api_examples/api_examples.mdx | 42 +- .../api/api_examples/mission_from_file.mdx | 420 +++--- .../mission_with_custom_tasks.mdx | 466 +++--- .../api/api_examples/monitor_status.mdx | 304 ++-- .../version-0.14.0/api/api_overview.mdx | 126 +- .../sensor_customization.mdx | 18 +- .../tuning_instructions/_category_.json | 8 +- .../ackermann_drive_dynamics.mdx | 18 +- .../tuning_instructions/footprint_tuning.mdx | 18 +- .../customized_tuning/tuning_overview.mdx | 48 +- .../tuning_parameters/_category_.json | 8 +- .../navigation_parameters.mdx | 338 ++--- .../user_interface_customization.mdx | 18 +- .../version-0.14.0/features/_category_.json | 8 +- .../version-0.14.0/features/custom_tasks.mdx | 412 +++--- .../version-0.14.0/features/navigation.mdx | 76 +- .../getting_started/_category_.json | 8 +- .../getting_started/first_time_checklist.mdx | 226 +-- .../getting_started/terminal_interface.mdx | 486 +++---- .../getting_started/tf_validation.mdx | 160 +-- .../version-0.14.0/index.mdx | 34 +- .../integration_overview.mdx | 68 +- .../interface_control_requirements.mdx | 238 ++-- .../version-0.14.0/overview/_category_.json | 8 +- .../overview_hardware_requirements.mdx | 88 +- .../overview/overview_introduction.mdx | 186 +-- .../overview_operating_conditions.mdx | 352 ++--- .../overview/overview_scope.mdx | 30 +- .../version-0.14.0/safety.mdx | 288 ++-- .../version-0.8.0/_category_.json | 8 +- .../version-0.8.0/api/_category_.json | 8 +- .../api/api_endpoints/api_endpoints.mdx | 32 +- .../version-0.8.0/api/api_overview.mdx | 122 +- .../version-0.8.0/cpr_hardware.mdx | 810 +++++------ .../customized_tuning/_category_.json | 6 +- .../sensor_customization.mdx | 18 +- .../tuning_instructions/_category_.json | 8 +- .../ackermann_drive_dynamics.mdx | 18 +- .../tuning_instructions/footprint_tuning.mdx | 18 +- .../customized_tuning/tuning_overview.mdx | 48 +- .../tuning_parameters/_category_.json | 8 +- .../navigation_parameters.mdx | 334 ++--- .../user_interface_customization.mdx | 18 +- .../version-0.8.0/faq.mdx | 168 +-- .../getting_started/_category_.json | 8 +- .../getting_started/first_time_checklist.mdx | 230 +-- .../getting_started/system_setup.mdx | 614 ++++---- .../version-0.8.0/index.mdx | 34 +- .../integration_requirements/_category_.json | 6 +- .../_category_.json | 8 +- .../integration_overview.mdx | 68 +- .../interface_control_requirements.mdx | 238 ++-- .../software_integration_instructions.mdx | 290 ++-- .../version-0.8.0/navigation.mdx | 696 ++++----- .../version-0.8.0/overview/_category_.json | 8 +- .../overview_hardware_requirements.mdx | 88 +- .../overview/overview_introduction.mdx | 186 +-- .../overview_operating_conditions.mdx | 354 ++--- .../version-0.8.0/overview/overview_scope.mdx | 30 +- .../version-0.8.0/release_notes.mdx | 366 ++--- .../version-0.8.0/safety.mdx | 288 ++-- .../version-0.8.0/simulation.mdx | 38 +- .../version-0.8.0/support.mdx | 20 +- .../web_user_interface/_category_.json | 8 +- .../web_user_interface/ui_autonomous_mode.mdx | 688 ++++----- .../web_user_interface/ui_manual_mode.mdx | 96 +- .../web_user_interface/ui_overview.mdx | 766 +++++----- .../version-0.9.0/_category_.json | 8 +- .../version-0.9.0/api/_category_.json | 8 +- .../api/api_endpoints/api_endpoints.mdx | 32 +- .../api/api_examples/api_examples.mdx | 36 +- .../api/api_examples/mission_from_file.mdx | 440 +++--- .../mission_with_custom_tasks.mdx | 486 +++---- .../api/api_examples/monitor_status.mdx | 324 ++--- .../version-0.9.0/api/api_overview.mdx | 122 +- .../version-0.9.0/cpr_hardware.mdx | 810 +++++------ .../customized_tuning/_category_.json | 6 +- .../sensor_customization.mdx | 18 +- .../tuning_instructions/_category_.json | 8 +- .../ackermann_drive_dynamics.mdx | 18 +- .../tuning_instructions/footprint_tuning.mdx | 18 +- .../customized_tuning/tuning_overview.mdx | 48 +- .../tuning_parameters/_category_.json | 8 +- .../navigation_parameters.mdx | 334 ++--- .../user_interface_customization.mdx | 18 +- .../version-0.9.0/faq.mdx | 388 ++--- .../version-0.9.0/features/_category_.json | 8 +- .../version-0.9.0/features/custom_tasks.mdx | 406 +++--- .../features/mission_scheduler.mdx | 84 +- .../version-0.9.0/features/navigation.mdx | 76 +- .../features/rosbag_recorder.mdx | 68 +- .../getting_started/_category_.json | 8 +- .../getting_started/first_time_checklist.mdx | 226 +-- .../getting_started/system_setup.mdx | 472 +++---- .../getting_started/terminal_interface.mdx | 280 ++-- .../getting_started/tf_validation.mdx | 160 +-- .../version-0.9.0/index.mdx | 34 +- .../integration_requirements/_category_.json | 6 +- .../_category_.json | 8 +- .../integration_overview.mdx | 68 +- .../interface_control_requirements.mdx | 238 ++-- .../software_integration_instructions.mdx | 290 ++-- .../version-0.9.0/overview/_category_.json | 8 +- .../overview_hardware_requirements.mdx | 88 +- .../overview/overview_introduction.mdx | 186 +-- .../overview_operating_conditions.mdx | 352 ++--- .../version-0.9.0/overview/overview_scope.mdx | 30 +- .../version-0.9.0/release_notes.mdx | 442 +++--- .../version-0.9.0/safety.mdx | 288 ++-- .../version-0.9.0/simulation.mdx | 38 +- .../version-0.9.0/support.mdx | 20 +- .../web_user_interface/_category_.json | 8 +- .../web_user_interface/ui_autonomous_mode.mdx | 738 +++++----- .../web_user_interface/ui_manual_mode.mdx | 96 +- .../web_user_interface/ui_overview.mdx | 844 +++++------ .../version-2.0.0/_category_.json | 8 +- .../version-2.0.0/api/_category_.json | 8 +- .../version-2.0.0/api/api_overview.mdx | 50 +- .../version-2.0.0/index.mdx | 34 +- .../version-2.0.0/overview/_category_.json | 8 +- .../overview/overview_introduction.mdx | 158 +-- .../overview_operating_conditions.mdx | 226 +-- .../version-2.0.0/overview/overview_scope.mdx | 24 +- .../version-2.0.0/quick_start/_category_.json | 8 +- .../version-2.0.0/safety.mdx | 278 ++-- static/reference_pages/reference_sensor.mdx | 164 +-- 390 files changed, 30628 insertions(+), 30609 deletions(-) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..420e14c2 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,19 @@ +# Files determined by git to be text files +# are automatically normalized to LF line endings. +* text=auto eol=lf +# The following files are explicitly set to use LF line endings. +*.mdx eol=lf +*.md eol=lf +*.json eol=lf + +# If there are files which are generated with CRLF line endings, +# it is recommended to set them to CRLF so that there is no unnecessary +# diff when regenerating them. + +# The binary macro is equivalent to the following: +# -text -diff +# Which means that line endings are not normalized and no diff is generated. +*.jpg binary +*.png binary +*.gif binary +*.mp4 binary diff --git a/CODEOWNERS b/CODEOWNERS index eb198f0e..7a532831 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -1,2 +1,2 @@ -# Default all changes will request review from: -* @rhysfaultless-cpr @jhiggins-cpr @tonybaltovski @hilary-luo +# Default all changes will request review from: +* @rhysfaultless-cpr @jhiggins-cpr @tonybaltovski @hilary-luo diff --git a/LICENSE b/LICENSE index 7efe35d0..45dbe4ed 100644 --- a/LICENSE +++ b/LICENSE @@ -1,21 +1,21 @@ -MIT License - -Copyright (c) 2022-2023 Clearpath Robotics Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. +MIT License + +Copyright (c) 2022-2023 Clearpath Robotics Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/components/button_download.module.css b/components/button_download.module.css index 2d3bb9b2..9f81a6cf 100644 --- a/components/button_download.module.css +++ b/components/button_download.module.css @@ -1,5 +1,5 @@ -.buttons { - display: flex; - align-items: center; - justify-content: center; +.buttons { + display: flex; + align-items: center; + justify-content: center; } \ No newline at end of file diff --git a/components/button_download_step.tsx b/components/button_download_step.tsx index ddc544a5..c9e4e9fd 100644 --- a/components/button_download_step.tsx +++ b/components/button_download_step.tsx @@ -1,12 +1,12 @@ -import styles from "./button_download.module.css"; - -export default function ButtonStepDownload(props) { - return( - - ) -} +import styles from "./button_download.module.css"; + +export default function ButtonStepDownload(props) { + return( + + ) +} diff --git a/components/button_download_wiring_diagram.tsx b/components/button_download_wiring_diagram.tsx index 0b05622b..180a7a60 100644 --- a/components/button_download_wiring_diagram.tsx +++ b/components/button_download_wiring_diagram.tsx @@ -1,12 +1,12 @@ -import styles from "./button_download.module.css"; - -export default function ButtonDownload(props) { - return( - - ) -} +import styles from "./button_download.module.css"; + +export default function ButtonDownload(props) { + return( + + ) +} diff --git a/components/common_lighting_states_estop_reset_operational.mdx b/components/common_lighting_states_estop_reset_operational.mdx index 98d7353b..d0088a54 100644 --- a/components/common_lighting_states_estop_reset_operational.mdx +++ b/components/common_lighting_states_estop_reset_operational.mdx @@ -1,9 +1,9 @@ -
-
- | Lighting State | Lighting Pattern | - | :----------------------------------- | :--------------------------------------------------------------------------------------: | - | Emergency Stop | | - | Needs Reset _(after Emergency Stop)_ | | - | Operational _(Driving or Idle)_ | | -
-
+
+
+ | Lighting State | Lighting Pattern | + | :----------------------------------- | :--------------------------------------------------------------------------------------: | + | Emergency Stop | | + | Needs Reset _(after Emergency Stop)_ | | + | Operational _(Driving or Idle)_ | | +
+
diff --git a/components/common_risk_assessment_for_integrations.mdx b/components/common_risk_assessment_for_integrations.mdx index f074e3e9..f1d877da 100644 --- a/components/common_risk_assessment_for_integrations.mdx +++ b/components/common_risk_assessment_for_integrations.mdx @@ -1,9 +1,9 @@ -:::safety-danger - -**Always perform a risk assessment prior to any custom integrations.** - -Custom integrations are outside the scope of the robot's safety assessment, as custom integrations may result in new hazards. - -::: - -
+:::safety-danger + +**Always perform a risk assessment prior to any custom integrations.** + +Custom integrations are outside the scope of the robot's safety assessment, as custom integrations may result in new hazards. + +::: + +
diff --git a/components/common_who_can_maintain_the_robot.mdx b/components/common_who_can_maintain_the_robot.mdx index d839be9a..01e7aec8 100644 --- a/components/common_who_can_maintain_the_robot.mdx +++ b/components/common_who_can_maintain_the_robot.mdx @@ -1,13 +1,13 @@ -:::safety-danger - -Maintaining robots can be dangerous. -There are hazards from high energy batteries, sharp edges, joints that can shear, and heavy items that can crush. -The robot is intended to be maintained by a technician that is familiar with safe work procedures, and has experience using the required tools. - -Technicians must read and understand this manual. - -Technicians must review and understand their worksite's Risk Assessment and required procedures. - -Contact our [Support Team](#support) if you have any questions. - -::: +:::safety-danger + +Maintaining robots can be dangerous. +There are hazards from high energy batteries, sharp edges, joints that can shear, and heavy items that can crush. +The robot is intended to be maintained by a technician that is familiar with safe work procedures, and has experience using the required tools. + +Technicians must read and understand this manual. + +Technicians must review and understand their worksite's Risk Assessment and required procedures. + +Contact our [Support Team](#support) if you have any questions. + +::: diff --git a/components/common_wireless_emergency_stop_charging.mdx b/components/common_wireless_emergency_stop_charging.mdx index fe15932d..76a38930 100644 --- a/components/common_wireless_emergency_stop_charging.mdx +++ b/components/common_wireless_emergency_stop_charging.mdx @@ -1,41 +1,41 @@ -### Charging The Wireless Emergency Stop Transmitter - -This transmitter is part of the _Wireless Emergency Stop_ upgrade kit for Husky. - -1. Remove the battery from the _Wireless Emergency Stop Transmitter_. -2. Connect the charger's AC cable to an outlet at your worksite. -3. Connect the transmitter's battery to the charger. - -
-
- - -
Wirelesss Emergency Stop Transmitter's Charger
-
-
- -
-
- - -
Removing the Wirelesss Emergency Stop Transmitter's Battery
-
-
- -:::info - -The robot's spare parts kit included a second battery for the transmitter. - -::: +### Charging The Wireless Emergency Stop Transmitter + +This transmitter is part of the _Wireless Emergency Stop_ upgrade kit for Husky. + +1. Remove the battery from the _Wireless Emergency Stop Transmitter_. +2. Connect the charger's AC cable to an outlet at your worksite. +3. Connect the transmitter's battery to the charger. + +
+
+ + +
Wirelesss Emergency Stop Transmitter's Charger
+
+
+ +
+
+ + +
Removing the Wirelesss Emergency Stop Transmitter's Battery
+
+
+ +:::info + +The robot's spare parts kit included a second battery for the transmitter. + +::: diff --git a/components/common_wireless_joystick_ps4.mdx b/components/common_wireless_joystick_ps4.mdx index 358baa74..eed2fa40 100644 --- a/components/common_wireless_joystick_ps4.mdx +++ b/components/common_wireless_joystick_ps4.mdx @@ -1,45 +1,45 @@ -### Connecting And Using The Wireless Joystick {#controller} - -Your robot included a PS4 wireless joystick. -Clearpath's robot builders paired this wireless joystick with your robot computer's Bluetooth. -This means the joystick should always connect to that robot, even if there are other robots nearby. - -To connect the joystick to your robot: - -1. Turn on the robot, and wait till the status lights show that ROS is running. -2. Have the controller within 5 metres of the robot. -3. Press the _PS_ button in the centre of the joystick. -4. The joystick's top LED should start pulsing white or blue. - This means the joystick is attempting to connect. -5. The joysick's top LED should eventually become solid blue, indicating that it has connected to the robot's computer. - - -
-
- -
PS4 Wireless Joystick
-
-
- -:::danger Failing To Connect - -The _Wireless Joystick_ is not connected if its LED does not become solid blue. -Follow the instructions in the [Joystick Controller Pairing](/docs/ros/installation/controller) section to pair the joystick to your robot's primary computer. - -::: - -:::info Driving The Robot - -1. Make sure your worksite is ready to drive the robot, and that the robot will not create hazards for people, animals, or your infrastructure. -2. Make sure the robot's status lights show that it is ready to drive. -3. Make sure the _Wireless Joystick_ is connected to the robot. -4. Hold the joystick's _L1 button_ for slow driving. - _(You can use the R1 button for fast driving once you are comfortable with the robot's dynamics.)_ -5. Use the left joystick to drive the robot. - Pushing the joystick forward and backward will command the robot ±X. - Angling the joystick left and right will command the robot to rotate ±Z. - -::: +### Connecting And Using The Wireless Joystick {#controller} + +Your robot included a PS4 wireless joystick. +Clearpath's robot builders paired this wireless joystick with your robot computer's Bluetooth. +This means the joystick should always connect to that robot, even if there are other robots nearby. + +To connect the joystick to your robot: + +1. Turn on the robot, and wait till the status lights show that ROS is running. +2. Have the controller within 5 metres of the robot. +3. Press the _PS_ button in the centre of the joystick. +4. The joystick's top LED should start pulsing white or blue. + This means the joystick is attempting to connect. +5. The joysick's top LED should eventually become solid blue, indicating that it has connected to the robot's computer. + + +
+
+ +
PS4 Wireless Joystick
+
+
+ +:::danger Failing To Connect + +The _Wireless Joystick_ is not connected if its LED does not become solid blue. +Follow the instructions in the [Joystick Controller Pairing](/docs/ros/installation/controller) section to pair the joystick to your robot's primary computer. + +::: + +:::info Driving The Robot + +1. Make sure your worksite is ready to drive the robot, and that the robot will not create hazards for people, animals, or your infrastructure. +2. Make sure the robot's status lights show that it is ready to drive. +3. Make sure the _Wireless Joystick_ is connected to the robot. +4. Hold the joystick's _L1 button_ for slow driving. + _(You can use the R1 button for fast driving once you are comfortable with the robot's dynamics.)_ +5. Use the left joystick to drive the robot. + Pushing the joystick forward and backward will command the robot ±X. + Angling the joystick left and right will command the robot to rotate ±Z. + +::: diff --git a/components/common_wireless_joystick_ps4_charging.mdx b/components/common_wireless_joystick_ps4_charging.mdx index af87298a..76744e15 100644 --- a/components/common_wireless_joystick_ps4_charging.mdx +++ b/components/common_wireless_joystick_ps4_charging.mdx @@ -1,21 +1,21 @@ -### Charging The Wireless Joystick - -There is a micro-USB port on the top of the PS4 controller—near its LED. -A USB cable was included in your robot's spare parts kit. -Connect the controller to a computer, USB hub, or other 5 V USB charger. -The controller's LED should glow yellow when it starts charging. - -
-
- -
-
- -:::info - -The _Wireless Joystick_ will not send driving commands to the robot while the joystick is charging. - -::: +### Charging The Wireless Joystick + +There is a micro-USB port on the top of the PS4 controller—near its LED. +A USB cable was included in your robot's spare parts kit. +Connect the controller to a computer, USB hub, or other 5 V USB charger. +The controller's LED should glow yellow when it starts charging. + +
+
+ +
+
+ +:::info + +The _Wireless Joystick_ will not send driving commands to the robot while the joystick is charging. + +::: diff --git a/components/husky_a300/husky_a300_additional_emergency_stop_devices.mdx b/components/husky_a300/husky_a300_additional_emergency_stop_devices.mdx index 8586a437..39b2f552 100644 --- a/components/husky_a300/husky_a300_additional_emergency_stop_devices.mdx +++ b/components/husky_a300/husky_a300_additional_emergency_stop_devices.mdx @@ -1,36 +1,36 @@ -import Admonition from "@theme/Admonition"; - -### Additional Emergency Stop Devices {#husky_external_stop} - -[//]: <> (TODO, add image of the 8 ES positions on the System Interface circuit board) - -The base Husky A300 includes 2 Emergency Stop Buttons, which are connected to the System Interface circuit board. -The System Interface circuit board also includes connector breakouts for 6 more Emergency Stop devices, labelled ES3 through ES8. -The standard Husky A300 has a bypass jumper inserted into each of these unused Emergency Stop breakouts. - -[//]: <> (TODO, add image of a bypass jumper) - -You can use these Emergency Stop breakouts to add more Emergency Stop devices, such as: - -- Emergency Stop buttons -- Safety lidar -- Tape switches -- Limit switches -- Relays or similar PLC components -- Manipulator control cabinets - -{((props.robotModel == "AMP") || (props.robotModel == "Observer")) && - The Husky AMP and Husky Observer use 2 of these additional breakouts to connect more Emergency Stop buttons. - We discard 2 of the bypass jumpers, and then connect the new Emergency Stop buttons to the System Interface circuit board. -} - - - - | ES Pin | Function / Value | - | :----- | :--------------------------------------------------------------------------------------------------- | - | 1 | Channel 1 Out, _(24 V)_: normally connected to Channel 1 In; disconnect to trigger an emergency stop | - | 2 | Channel 1 In | - | 3 | Channel 2 Out _(24 V)_: normally connected to Channel 2 In; disconnect to trigger an emergency stop | - | 4 | Channel 2 In | - - +import Admonition from "@theme/Admonition"; + +### Additional Emergency Stop Devices {#husky_external_stop} + +[//]: <> (TODO, add image of the 8 ES positions on the System Interface circuit board) + +The base Husky A300 includes 2 Emergency Stop Buttons, which are connected to the System Interface circuit board. +The System Interface circuit board also includes connector breakouts for 6 more Emergency Stop devices, labelled ES3 through ES8. +The standard Husky A300 has a bypass jumper inserted into each of these unused Emergency Stop breakouts. + +[//]: <> (TODO, add image of a bypass jumper) + +You can use these Emergency Stop breakouts to add more Emergency Stop devices, such as: + +- Emergency Stop buttons +- Safety lidar +- Tape switches +- Limit switches +- Relays or similar PLC components +- Manipulator control cabinets + +{((props.robotModel == "AMP") || (props.robotModel == "Observer")) && + The Husky AMP and Husky Observer use 2 of these additional breakouts to connect more Emergency Stop buttons. + We discard 2 of the bypass jumpers, and then connect the new Emergency Stop buttons to the System Interface circuit board. +} + + + + | ES Pin | Function / Value | + | :----- | :--------------------------------------------------------------------------------------------------- | + | 1 | Channel 1 Out, _(24 V)_: normally connected to Channel 1 In; disconnect to trigger an emergency stop | + | 2 | Channel 1 In | + | 3 | Channel 2 Out _(24 V)_: normally connected to Channel 2 In; disconnect to trigger an emergency stop | + | 4 | Channel 2 In | + + diff --git a/components/husky_a300/husky_a300_amp_check_sensors.mdx b/components/husky_a300/husky_a300_amp_check_sensors.mdx index de29366b..ddbce4a2 100644 --- a/components/husky_a300/husky_a300_amp_check_sensors.mdx +++ b/components/husky_a300/husky_a300_amp_check_sensors.mdx @@ -1,24 +1,24 @@ -### Check That Sensors Are Functional - -Husky AMP includes several sensors that are used for robot navigation. After connecting -to Husky AMP's network, confirm that each sensor is functional by using the steps below. - -1. Connect to your laptop to the robot using SSH. To do so, execute the following in a terminal window: - ``` - ssh robot@192.168.131.1 - ``` - You will be prompted to enter a password. The default password is `clearpath`. -1. Use the `ping` command to check that each of the [sensors](#ip-addresses) is functional. - For example, to confirm that the front teleop camera (`192.168.131.15`) is working: - ``` - $ ping 192.168.131.15 - PING 192.168.131.15 (192.168.131.2) 56(84) bytes of data. - 64 bytes from 192.168.131.15: icmp_seq=1 ttl=255 time=0.265 ms - 64 bytes from 192.168.131.15: icmp_seq=2 ttl=255 time=0.213 ms - 64 bytes from 192.168.131.15: icmp_seq=3 ttl=255 time=0.282 ms - 64 bytes from 192.168.131.15: icmp_seq=4 ttl=255 time=0.216 ms - ^C - --- 192.168.131.15 ping statistics --- - 4 packets transmitted, 4 received, 0% packet loss, time 3100ms - rtt min/avg/max/mdev = 0.213/0.244/0.282/0.030 ms - ``` +### Check That Sensors Are Functional + +Husky AMP includes several sensors that are used for robot navigation. After connecting +to Husky AMP's network, confirm that each sensor is functional by using the steps below. + +1. Connect to your laptop to the robot using SSH. To do so, execute the following in a terminal window: + ``` + ssh robot@192.168.131.1 + ``` + You will be prompted to enter a password. The default password is `clearpath`. +1. Use the `ping` command to check that each of the [sensors](#ip-addresses) is functional. + For example, to confirm that the front teleop camera (`192.168.131.15`) is working: + ``` + $ ping 192.168.131.15 + PING 192.168.131.15 (192.168.131.2) 56(84) bytes of data. + 64 bytes from 192.168.131.15: icmp_seq=1 ttl=255 time=0.265 ms + 64 bytes from 192.168.131.15: icmp_seq=2 ttl=255 time=0.213 ms + 64 bytes from 192.168.131.15: icmp_seq=3 ttl=255 time=0.282 ms + 64 bytes from 192.168.131.15: icmp_seq=4 ttl=255 time=0.216 ms + ^C + --- 192.168.131.15 ping statistics --- + 4 packets transmitted, 4 received, 0% packet loss, time 3100ms + rtt min/avg/max/mdev = 0.213/0.244/0.282/0.030 ms + ``` diff --git a/components/husky_a300/husky_a300_amp_networking_basic.mdx b/components/husky_a300/husky_a300_amp_networking_basic.mdx index f9c96c91..68a397e8 100644 --- a/components/husky_a300/husky_a300_amp_networking_basic.mdx +++ b/components/husky_a300/husky_a300_amp_networking_basic.mdx @@ -1,19 +1,19 @@ -import Admonition from "@theme/Admonition"; - -### Connecting To Husky AMP's Network {#basic-network-connection} - -To access additional Husky AMP functionality, a network connection to the robot is required. -The easiest way to accomplish this is to connect your laptop to Husky AMP's Wi-Fi -access point using the steps below. - -1. Use your laptop to find and to connect to Husky AMP's Wi-Fi network. The Wi-Fi network name (SSID) will be - `cpr_a300_amp_XXXXX`, where `XXXXX` matches the serial number of the Husky AMP. When - prompted, use the password `clearpath`. - -1. Confirm that your laptop's Wi-Fi network interface is configured to use DHCP and that it - has been assigned an IP address in the `192.168.131.XXX` range. - - - Refer to Robot Network Connection for alternative networking connections. - - +import Admonition from "@theme/Admonition"; + +### Connecting To Husky AMP's Network {#basic-network-connection} + +To access additional Husky AMP functionality, a network connection to the robot is required. +The easiest way to accomplish this is to connect your laptop to Husky AMP's Wi-Fi +access point using the steps below. + +1. Use your laptop to find and to connect to Husky AMP's Wi-Fi network. The Wi-Fi network name (SSID) will be + `cpr_a300_amp_XXXXX`, where `XXXXX` matches the serial number of the Husky AMP. When + prompted, use the password `clearpath`. + +1. Confirm that your laptop's Wi-Fi network interface is configured to use DHCP and that it + has been assigned an IP address in the `192.168.131.XXX` range. + + + Refer to Robot Network Connection for alternative networking connections. + + diff --git a/components/husky_a300/husky_a300_amp_other_documentation_to_review.mdx b/components/husky_a300/husky_a300_amp_other_documentation_to_review.mdx index 56daa111..303476b6 100644 --- a/components/husky_a300/husky_a300_amp_other_documentation_to_review.mdx +++ b/components/husky_a300/husky_a300_amp_other_documentation_to_review.mdx @@ -1,5 +1,5 @@ -### Other Documentation To Review - -Refer to our [OutdoorNav software's documentation](/docs_outdoornav_user_manual), as this comes included with Husky AMP and Husky Observer. -OutdoorNav allows you to send your Husky on autonomous missions using the included ROS API, or by using OutdoorNav's web user interface. -OutdoorNav can accomplish these autonomous missions using the Husky AMP's sensors, without making infrastructure updates to your worksite. +### Other Documentation To Review + +Refer to our [OutdoorNav software's documentation](/docs_outdoornav_user_manual), as this comes included with Husky AMP and Husky Observer. +OutdoorNav allows you to send your Husky on autonomous missions using the included ROS API, or by using OutdoorNav's web user interface. +OutdoorNav can accomplish these autonomous missions using the Husky AMP's sensors, without making infrastructure updates to your worksite. diff --git a/components/husky_a300/husky_a300_amp_outdoornav_checks.mdx b/components/husky_a300/husky_a300_amp_outdoornav_checks.mdx index 337ff026..b95bf885 100644 --- a/components/husky_a300/husky_a300_amp_outdoornav_checks.mdx +++ b/components/husky_a300/husky_a300_amp_outdoornav_checks.mdx @@ -1,16 +1,16 @@ -### Confirming That OutdoorNav Software Is Functioning - -Husky AMP includes OutdoorNav Software, which allows the robot to be operated autonomously. -Follow the steps below to confirm that OutdoorNav Software is functioning. - -1. [Connect to Web UI](/docs_outdoornav_user_manual/quick_start#connecting_to_web_ui) -1. [Check camera views](/docs_outdoornav_user_manual/quick_start#checking-camera-feeds) -1. [Check system status](/docs_outdoornav_user_manual/quick_start#checking-system-status) -1. [Check GPS RTK fix](/docs_outdoornav_user_manual/quick_start#checking-gpt-rtk-fix) -1. Complete system configuration: - 1. [Load map tiles](/docs_outdoornav_user_manual/quick_start#loading_map_tiles) - 1. [Set dock location](/docs_outdoornav_user_manual/quick_start#set-dock-location), if a dock is included with your system -1. [Create your first map](/docs_outdoornav_user_manual/quick_start#create-your-first-map) -1. [Create your first mission](/docs_outdoornav_user_manual/quick_start#create-your-first-mission) -1. [Execute your first mission](/docs_outdoornav_user_manual/quick_start#execute-your-first-mission) - +### Confirming That OutdoorNav Software Is Functioning + +Husky AMP includes OutdoorNav Software, which allows the robot to be operated autonomously. +Follow the steps below to confirm that OutdoorNav Software is functioning. + +1. [Connect to Web UI](/docs_outdoornav_user_manual/quick_start#connecting_to_web_ui) +1. [Check camera views](/docs_outdoornav_user_manual/quick_start#checking-camera-feeds) +1. [Check system status](/docs_outdoornav_user_manual/quick_start#checking-system-status) +1. [Check GPS RTK fix](/docs_outdoornav_user_manual/quick_start#checking-gpt-rtk-fix) +1. Complete system configuration: + 1. [Load map tiles](/docs_outdoornav_user_manual/quick_start#loading_map_tiles) + 1. [Set dock location](/docs_outdoornav_user_manual/quick_start#set-dock-location), if a dock is included with your system +1. [Create your first map](/docs_outdoornav_user_manual/quick_start#create-your-first-map) +1. [Create your first mission](/docs_outdoornav_user_manual/quick_start#create-your-first-mission) +1. [Execute your first mission](/docs_outdoornav_user_manual/quick_start#execute-your-first-mission) + diff --git a/components/husky_a300/husky_a300_base_link.mdx b/components/husky_a300/husky_a300_base_link.mdx index 80abc1ae..2548c9fc 100644 --- a/components/husky_a300/husky_a300_base_link.mdx +++ b/components/husky_a300/husky_a300_base_link.mdx @@ -1,21 +1,21 @@ -### base_link - -`base_link` is the primary coordinate system for the robot. -All sensors, manipulators, and brackets are positioned with reference to `base link`. -[This ROS 2 Documentation page](https://docs.ros.org/en/jazzy/Tutorials/Intermediate/URDF/Building-a-Visual-Robot-Model-with-URDF-from-Scratch.html) explains how a robot's model is constructed. - -Husky's model is included on the robot, and is available on our public GitHub. -Husky's `base_link` is located on the bottom of the chassis, with +X pointed toward the front panel, and +Y toward the robot's left side. - -
- -
- -:::info - -The [STEP Model](#step-model)'s origin is aligned with `base_link`. - -::: +### base_link + +`base_link` is the primary coordinate system for the robot. +All sensors, manipulators, and brackets are positioned with reference to `base link`. +[This ROS 2 Documentation page](https://docs.ros.org/en/jazzy/Tutorials/Intermediate/URDF/Building-a-Visual-Robot-Model-with-URDF-from-Scratch.html) explains how a robot's model is constructed. + +Husky's model is included on the robot, and is available on our public GitHub. +Husky's `base_link` is located on the bottom of the chassis, with +X pointed toward the front panel, and +Y toward the robot's left side. + +
+ +
+ +:::info + +The [STEP Model](#step-model)'s origin is aligned with `base_link`. + +::: diff --git a/components/husky_a300/husky_a300_cable_passthrough.mdx b/components/husky_a300/husky_a300_cable_passthrough.mdx index 4aa919a0..94b2dea6 100644 --- a/components/husky_a300/husky_a300_cable_passthrough.mdx +++ b/components/husky_a300/husky_a300_cable_passthrough.mdx @@ -1,80 +1,80 @@ -### Cable Passthrough {#cable-passthrough} - -To maintain Husky's IP54 rating while allowing cables to pass between the external kits and internal electronics, - Husky's top plate is provisioned with expansion plates for cable IP rated cable systems. -There are three expansion plates at the front, and three at the rear of the top plate. - -
-
- -
Top plate electrical expansion
-
-
- -Technicians have two main options. - -1. Drill holes in the expansion plates and add appropriate IP-rated sealing solutions on a cable-by-cable basis. -2. Remove an expansion plate and replace it with a cable entry system, such as Icotek. - -
-
- -
Options, from left to right: hole with a connector, Icotek straight housing, Icotek 90° housing
-
-
- - -#### Using the Icotek Cable Entry System - -The [Icotek Cable Entry System](https://www.icotek.com/en/products/cable-entry-systems) allows pre-terminated cables up to 65 mm in diameter to be routed into Husky A300, - and be sealed with up to IP66 rated ingress protection. -In addition, the cable entry frames serve as strain relief on the cable. - -This cable system is based on a set of cable entry frames and grommets. -Refer to the [demonstration video](https://www.youtube.com/watch?v=BQpOG0ptltE) for an overview of using the system. - -
- Supported cable entry frames: - - | Clearpath Item | Description | Manufacturer Item | - | :------------- | :---------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | - | 031161 | Blank Plate |
  • N/A
| - | 032256 | Gasket |
  • N/A
| - | 031682 | Straight Icotek Housing | | - | 032777 | 90° Icotek Housing Kit | | - | 028997 | 360° Icotek Housing Kit | | -
- -
- Supported grommets: - - Grommets are selected based on the size of the cable being passed through. - A list of the most common grommets are listed in the table below. - Also review [Icotek's full grommets catalog](https://www.icotek.com/en/products/cable-grommets/kt-bk). - - | Part Number | Part Description | CPR Item Number | Retailer Link | - | :----------------------------- | :------------------------------------- | :---------------- | :------------------------------------------------------------------- | - | Blank BK
(41351) | Blank grommet | 031393 | [RS-Online](https://ca.rs-online.com/product/icotek/41351/72428519/) | - | KT 1 BK
(39943) | 1X Split grommet for 1 - 2 mm cable | N/A | [RS-Online](https://ca.rs-online.com/product/icotek/39943/72428434/) | - | KT 2 BK
(41302) | 1X Split grommet for 2 - 3 mm cable | 032027 | [RS-Online](https://ca.rs-online.com/product/icotek/41302/72428490/) | - | KT 3 BK
(41303) | 1X Split grommet for 3 - 4 mm cable | N/A | [RS-Online](https://ca.rs-online.com/product/icotek/41303/72428491/) | - | KT 4 BK
(41304) | 1X Split grommet for 4 - 5 mm cable | 032536 | [RS-Online](https://ca.rs-online.com/product/icotek/41304/72428492/) | - | KT 5 BK
(41305) | 1X Split grommet for 5 - 6 mm cable | N/A | [RS-Online](https://ca.rs-online.com/product/icotek/41305/72428493/) | - | KT 6 BK
(41306) | 1X Split grommet for 6 - 7 mm cable | 031394 | [RS-Online](https://ca.rs-online.com/product/icotek/41306/72428494/) | - | KT 7 BK
(41307) | 1X Split grommet for 7 - 8 mm cable | N/A | [RS-Online](https://ca.rs-online.com/product/icotek/41307/72428495/) | - | KT 8 BK
(41308) | 1X Split grommet for 8 - 9 mm cable | N/A | [RS-Online](https://ca.rs-online.com/product/icotek/41308/72428496/) | - | KT 9 BK
(41309) | 1X Split grommet for 9 - 10 mm cable | 031395 | [RS-Online](https://ca.rs-online.com/product/icotek/41309/72428497/) | - | KT 10 BK
(41310) | 1X Split grommet for 10 - 11 mm cable | 032535 | [RS-Online](https://ca.rs-online.com/product/icotek/41310/72428498/) | - | KT 11 BK
(41311) | 1X Split grommet for 11 - 12 mm cable | 031396 | [RS-Online](https://ca.rs-online.com/product/icotek/41311/72428499/) | - | KT 2/6 BK
(39905) | 2X Split grommet for 6 - 7 mm cable | 028994 | [RS-Online](https://ca.rs-online.com/product/icotek/39905/72428402/) | - | KT 2/7 BK
(39916) | 2X Split grommet for 7 - 8 mm cable | 031398 | [RS-Online](https://ca.rs-online.com/product/icotek/39916/72428413/) | - | KT 2/8 BK
(39918) | 2X Split grommet for 8 - 9 mm cable | 032028 | [RS-Online](https://ca.rs-online.com/product/icotek/39918/72428415/) | - | KT 4/5 BK
(39910) | 4X Split grommet for 5 - 6 mm cable | 031399 | [RS-Online](https://ca.rs-online.com/product/icotek/39910/72428407/) | - | KT 4/6 BK
(39933) | 4X Split grommet for 6 - 7 mm cable | 031400 | [RS-Online](https://ca.rs-online.com/product/icotek/39933/72428424/) | -
+### Cable Passthrough {#cable-passthrough} + +To maintain Husky's IP54 rating while allowing cables to pass between the external kits and internal electronics, + Husky's top plate is provisioned with expansion plates for cable IP rated cable systems. +There are three expansion plates at the front, and three at the rear of the top plate. + +
+
+ +
Top plate electrical expansion
+
+
+ +Technicians have two main options. + +1. Drill holes in the expansion plates and add appropriate IP-rated sealing solutions on a cable-by-cable basis. +2. Remove an expansion plate and replace it with a cable entry system, such as Icotek. + +
+
+ +
Options, from left to right: hole with a connector, Icotek straight housing, Icotek 90° housing
+
+
+ + +#### Using the Icotek Cable Entry System + +The [Icotek Cable Entry System](https://www.icotek.com/en/products/cable-entry-systems) allows pre-terminated cables up to 65 mm in diameter to be routed into Husky A300, + and be sealed with up to IP66 rated ingress protection. +In addition, the cable entry frames serve as strain relief on the cable. + +This cable system is based on a set of cable entry frames and grommets. +Refer to the [demonstration video](https://www.youtube.com/watch?v=BQpOG0ptltE) for an overview of using the system. + +
+ Supported cable entry frames: + + | Clearpath Item | Description | Manufacturer Item | + | :------------- | :---------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | + | 031161 | Blank Plate |
  • N/A
| + | 032256 | Gasket |
  • N/A
| + | 031682 | Straight Icotek Housing | | + | 032777 | 90° Icotek Housing Kit | | + | 028997 | 360° Icotek Housing Kit | | +
+ +
+ Supported grommets: + + Grommets are selected based on the size of the cable being passed through. + A list of the most common grommets are listed in the table below. + Also review [Icotek's full grommets catalog](https://www.icotek.com/en/products/cable-grommets/kt-bk). + + | Part Number | Part Description | CPR Item Number | Retailer Link | + | :----------------------------- | :------------------------------------- | :---------------- | :------------------------------------------------------------------- | + | Blank BK
(41351) | Blank grommet | 031393 | [RS-Online](https://ca.rs-online.com/product/icotek/41351/72428519/) | + | KT 1 BK
(39943) | 1X Split grommet for 1 - 2 mm cable | N/A | [RS-Online](https://ca.rs-online.com/product/icotek/39943/72428434/) | + | KT 2 BK
(41302) | 1X Split grommet for 2 - 3 mm cable | 032027 | [RS-Online](https://ca.rs-online.com/product/icotek/41302/72428490/) | + | KT 3 BK
(41303) | 1X Split grommet for 3 - 4 mm cable | N/A | [RS-Online](https://ca.rs-online.com/product/icotek/41303/72428491/) | + | KT 4 BK
(41304) | 1X Split grommet for 4 - 5 mm cable | 032536 | [RS-Online](https://ca.rs-online.com/product/icotek/41304/72428492/) | + | KT 5 BK
(41305) | 1X Split grommet for 5 - 6 mm cable | N/A | [RS-Online](https://ca.rs-online.com/product/icotek/41305/72428493/) | + | KT 6 BK
(41306) | 1X Split grommet for 6 - 7 mm cable | 031394 | [RS-Online](https://ca.rs-online.com/product/icotek/41306/72428494/) | + | KT 7 BK
(41307) | 1X Split grommet for 7 - 8 mm cable | N/A | [RS-Online](https://ca.rs-online.com/product/icotek/41307/72428495/) | + | KT 8 BK
(41308) | 1X Split grommet for 8 - 9 mm cable | N/A | [RS-Online](https://ca.rs-online.com/product/icotek/41308/72428496/) | + | KT 9 BK
(41309) | 1X Split grommet for 9 - 10 mm cable | 031395 | [RS-Online](https://ca.rs-online.com/product/icotek/41309/72428497/) | + | KT 10 BK
(41310) | 1X Split grommet for 10 - 11 mm cable | 032535 | [RS-Online](https://ca.rs-online.com/product/icotek/41310/72428498/) | + | KT 11 BK
(41311) | 1X Split grommet for 11 - 12 mm cable | 031396 | [RS-Online](https://ca.rs-online.com/product/icotek/41311/72428499/) | + | KT 2/6 BK
(39905) | 2X Split grommet for 6 - 7 mm cable | 028994 | [RS-Online](https://ca.rs-online.com/product/icotek/39905/72428402/) | + | KT 2/7 BK
(39916) | 2X Split grommet for 7 - 8 mm cable | 031398 | [RS-Online](https://ca.rs-online.com/product/icotek/39916/72428413/) | + | KT 2/8 BK
(39918) | 2X Split grommet for 8 - 9 mm cable | 032028 | [RS-Online](https://ca.rs-online.com/product/icotek/39918/72428415/) | + | KT 4/5 BK
(39910) | 4X Split grommet for 5 - 6 mm cable | 031399 | [RS-Online](https://ca.rs-online.com/product/icotek/39910/72428407/) | + | KT 4/6 BK
(39933) | 4X Split grommet for 6 - 7 mm cable | 031400 | [RS-Online](https://ca.rs-online.com/product/icotek/39933/72428424/) | +
diff --git a/components/husky_a300/husky_a300_canbus.mdx b/components/husky_a300/husky_a300_canbus.mdx index c83bf572..1aa1a006 100644 --- a/components/husky_a300/husky_a300_canbus.mdx +++ b/components/husky_a300/husky_a300_canbus.mdx @@ -1,19 +1,19 @@ -### CANbus Connection - -Husky has up to 3 standard CAN networks: - -| Network name | Data Rate | Purpose | Devices | -| :-------------- | :---------- | :------------------------ | :------------------------------------------------------------------------------ | -| `vcan0` | 1000 kBit/s | Motor Control | Primary Computer, MCU, 4 Motor Controllers | -| `vcan1` | 250 kBit/s | Batteries | Primary Computer, MCU, Batteries _(up to 6 batteries)_, Wireless Emergency Stop | -| `usbcan0` | 250 kBit/s | Optional Wireless Charger | Primary Computer, Wireless Charger | - -:::info - -We suggest you add custom CAN devices to a new network, using a USB-CAN adapter such as a PEAK System PCAN-USB. -You would need to name the new network something different than the 3 networks listed above. -We configure these networks using SocketCAN. - -It is possible to add new devices to the Husky's existing networks, but this requires significant testing time. - -::: +### CANbus Connection + +Husky has up to 3 standard CAN networks: + +| Network name | Data Rate | Purpose | Devices | +| :-------------- | :---------- | :------------------------ | :------------------------------------------------------------------------------ | +| `vcan0` | 1000 kBit/s | Motor Control | Primary Computer, MCU, 4 Motor Controllers | +| `vcan1` | 250 kBit/s | Batteries | Primary Computer, MCU, Batteries _(up to 6 batteries)_, Wireless Emergency Stop | +| `usbcan0` | 250 kBit/s | Optional Wireless Charger | Primary Computer, Wireless Charger | + +:::info + +We suggest you add custom CAN devices to a new network, using a USB-CAN adapter such as a PEAK System PCAN-USB. +You would need to name the new network something different than the 3 networks listed above. +We configure these networks using SocketCAN. + +It is possible to add new devices to the Husky's existing networks, but this requires significant testing time. + +::: diff --git a/components/husky_a300/husky_a300_data_connections.mdx b/components/husky_a300/husky_a300_data_connections.mdx index 43da26ab..fee3b616 100644 --- a/components/husky_a300/husky_a300_data_connections.mdx +++ b/components/husky_a300/husky_a300_data_connections.mdx @@ -1,14 +1,14 @@ -### Data Connections - -:::note - -These are our suggested methods for connecting sensors and actuators to Husky. - -::: - -| Data Bus | Clearpath's suggestion for connecting devices to the Husky's computer: | -| :---------------------------- | :------------------------------------------------------------------------------------------------------------------------------------ | -| USB | Direct connection to the robot's computer, or add a USB hub. | -| Ethernet | Connect to the robot's 2.5 Gbit/s Ethernet Switch, which is inside the chassis. | -| Serial RS-232, RS-422, RS-485 | Add a USB converter, such as a FTDI cable. Most computers have Serial ports, but these take more time to configure than a FTDI cable. | -| CAN | Add a USB converter, such as a PEAK System PCAN-USB. +### Data Connections + +:::note + +These are our suggested methods for connecting sensors and actuators to Husky. + +::: + +| Data Bus | Clearpath's suggestion for connecting devices to the Husky's computer: | +| :---------------------------- | :------------------------------------------------------------------------------------------------------------------------------------ | +| USB | Direct connection to the robot's computer, or add a USB hub. | +| Ethernet | Connect to the robot's 2.5 Gbit/s Ethernet Switch, which is inside the chassis. | +| Serial RS-232, RS-422, RS-485 | Add a USB converter, such as a FTDI cable. Most computers have Serial ports, but these take more time to configure than a FTDI cable. | +| CAN | Add a USB converter, such as a PEAK System PCAN-USB. diff --git a/components/husky_a300/husky_a300_fan_expansion.mdx b/components/husky_a300/husky_a300_fan_expansion.mdx index a9f3b240..fddbe47c 100644 --- a/components/husky_a300/husky_a300_fan_expansion.mdx +++ b/components/husky_a300/husky_a300_fan_expansion.mdx @@ -1,35 +1,35 @@ -### Fan Expansion {#fan-expansion} - -The System Interface circuit board has support for 4 additional 12 V brushless 4-wire PWM fans. -Ports FAN 1, FAN 2, FAN 3, and FAN 4 are already used by the base Husky A300. -Ports FAN 5, FAN 6, FAN 7, and FAN 8 are available for your fan expansions. - -:::info Examples Of Supported fans - -* [CFM-8025BG-170-517-22](https://www.digikey.ca/en/products/detail/cui-devices/CFM-8025BG-170-517-22/16581761) -* [9GA0812P4J001](https://www.digikey.ca/en/products/detail/sanyo-denki-america-inc/9GA0812P4J001/6192305). - -::: - -The pinout for each fan is: - -| Pin | Function | -| :-- | :----------------------------- | -| 1 | 12 V | -| 2 | GND | -| 3 | Tachometer _(output from fan)_ | -| 4 | PWM _(input to fan, 3.3 V)_ | - -The speed of each fan can be controlled by publishing to the `/a300_#####/platform/mcu/cmd_fans` ROS topic. - -The speed of each fan can be monitored by reading the `/a300_#####/platform/mcu/status/fans` ROS topic. - -In both cases, the fan value is in the range from 0 _(not spinning)_, to 255 _(max speed)_. - -:::info - -Fans require spool up time on startup. -Setting a fan to a very low value may result in the fan not rotating. -You should experiment to find minimum PWM value that causes your fan to spin. - -::: +### Fan Expansion {#fan-expansion} + +The System Interface circuit board has support for 4 additional 12 V brushless 4-wire PWM fans. +Ports FAN 1, FAN 2, FAN 3, and FAN 4 are already used by the base Husky A300. +Ports FAN 5, FAN 6, FAN 7, and FAN 8 are available for your fan expansions. + +:::info Examples Of Supported fans + +* [CFM-8025BG-170-517-22](https://www.digikey.ca/en/products/detail/cui-devices/CFM-8025BG-170-517-22/16581761) +* [9GA0812P4J001](https://www.digikey.ca/en/products/detail/sanyo-denki-america-inc/9GA0812P4J001/6192305). + +::: + +The pinout for each fan is: + +| Pin | Function | +| :-- | :----------------------------- | +| 1 | 12 V | +| 2 | GND | +| 3 | Tachometer _(output from fan)_ | +| 4 | PWM _(input to fan, 3.3 V)_ | + +The speed of each fan can be controlled by publishing to the `/a300_#####/platform/mcu/cmd_fans` ROS topic. + +The speed of each fan can be monitored by reading the `/a300_#####/platform/mcu/status/fans` ROS topic. + +In both cases, the fan value is in the range from 0 _(not spinning)_, to 255 _(max speed)_. + +:::info + +Fans require spool up time on startup. +Setting a fan to a very low value may result in the fan not rotating. +You should experiment to find minimum PWM value that causes your fan to spin. + +::: diff --git a/components/husky_a300/husky_a300_internal_integrations.mdx b/components/husky_a300/husky_a300_internal_integrations.mdx index f26202e0..00555777 100644 --- a/components/husky_a300/husky_a300_internal_integrations.mdx +++ b/components/husky_a300/husky_a300_internal_integrations.mdx @@ -1,22 +1,22 @@ -### Internal Integrations - -[//]: <> (TODO, add image of an internal integration) - -There are interfaces inside the Husky for your custom compnents. -This [Interface Control Drawing](/assets/pdf/clearpath_robotics_034163.pdf) shows the available volume near the robot's batteries, - noting that the size of this volume changes depending on what battery configuration your Husky has—_(40 Ah, 80 Ah, or 120 Ah)_. -The drawing also shows mounting provisions on the robot's Electronics Tray, for including these components: - -* Husky's System Interface Assembly _(circuit board with Husky's microcontroller, power supplies, and motor controllers)_ -* Primary computer -* IMU -* Add-on secondary computer or graphics card -* Add-on USB hub - -Refer to the [STEP model](#step-model) for more measurements of the Husky's interface areas. - -:::note - -This integration volume is available inside the base Husky A300, as well as Husky AMP and Husky Observer. - -::: +### Internal Integrations + +[//]: <> (TODO, add image of an internal integration) + +There are interfaces inside the Husky for your custom compnents. +This [Interface Control Drawing](/assets/pdf/clearpath_robotics_034163.pdf) shows the available volume near the robot's batteries, + noting that the size of this volume changes depending on what battery configuration your Husky has—_(40 Ah, 80 Ah, or 120 Ah)_. +The drawing also shows mounting provisions on the robot's Electronics Tray, for including these components: + +* Husky's System Interface Assembly _(circuit board with Husky's microcontroller, power supplies, and motor controllers)_ +* Primary computer +* IMU +* Add-on secondary computer or graphics card +* Add-on USB hub + +Refer to the [STEP model](#step-model) for more measurements of the Husky's interface areas. + +:::note + +This integration volume is available inside the base Husky A300, as well as Husky AMP and Husky Observer. + +::: diff --git a/components/husky_a300/husky_a300_ip_addresses.mdx b/components/husky_a300/husky_a300_ip_addresses.mdx index a0298283..79a1047a 100644 --- a/components/husky_a300/husky_a300_ip_addresses.mdx +++ b/components/husky_a300/husky_a300_ip_addresses.mdx @@ -1,58 +1,58 @@ -### IP Addresses - -
- - - - - - - - - - - - - - - - - - {(props.robotModel == "Observer") && - - - } - {((props.robotModel == "AMP") || (props.robotModel == "Observer")) && - - - } - {((props.robotModel == "AMP") || (props.robotModel == "Observer")) && - - - } - - - {(props.robotModel == "AMP") && } - {(props.robotModel == "Observer") && } - - {((props.robotModel == "AMP") || (props.robotModel == "Observer")) && - - - } - {((props.robotModel == "AMP") || (props.robotModel == "Observer")) && - - - } - {((props.robotModel == "AMP") || (props.robotModel == "Observer")) && - - - } -
IP AddressDevice
192.168.131.1Computer, Primary
192.168.131.2Common Core MCU
192.168.131.5Computer, Secondary, (Optional)
192.168.131.10Axis Q62 Pan-Tilt-Zoom Camera
192.168.131.15Front OAK-D Camera
192.168.131.16Rear OAK-D Camera
192.168.131.20Side Hokuyo Lidar (Optional, Autonomous Wireless Charging)Side Hokuyo Lidar
192.168.131.25Seyond Robin W Lidar
192.168.131.35Fixposition Vision RTK 2 Positioning
192.168.131.51Peplink Access Point
-
- -:::info Custom Additions - -Our [Network IP Addresses page](/docs/ros/networking/network_ip_addresses) lists the common ranges we use per sensor type. -Clearpath will provide a supplementary manual that includes the IP addressess of custom configuration sensors. - -::: +### IP Addresses + +
+ + + + + + + + + + + + + + + + + + {(props.robotModel == "Observer") && + + + } + {((props.robotModel == "AMP") || (props.robotModel == "Observer")) && + + + } + {((props.robotModel == "AMP") || (props.robotModel == "Observer")) && + + + } + + + {(props.robotModel == "AMP") && } + {(props.robotModel == "Observer") && } + + {((props.robotModel == "AMP") || (props.robotModel == "Observer")) && + + + } + {((props.robotModel == "AMP") || (props.robotModel == "Observer")) && + + + } + {((props.robotModel == "AMP") || (props.robotModel == "Observer")) && + + + } +
IP AddressDevice
192.168.131.1Computer, Primary
192.168.131.2Common Core MCU
192.168.131.5Computer, Secondary, (Optional)
192.168.131.10Axis Q62 Pan-Tilt-Zoom Camera
192.168.131.15Front OAK-D Camera
192.168.131.16Rear OAK-D Camera
192.168.131.20Side Hokuyo Lidar (Optional, Autonomous Wireless Charging)Side Hokuyo Lidar
192.168.131.25Seyond Robin W Lidar
192.168.131.35Fixposition Vision RTK 2 Positioning
192.168.131.51Peplink Access Point
+
+ +:::info Custom Additions + +Our [Network IP Addresses page](/docs/ros/networking/network_ip_addresses) lists the common ranges we use per sensor type. +Clearpath will provide a supplementary manual that includes the IP addressess of custom configuration sensors. + +::: diff --git a/components/husky_a300/husky_a300_network_connection.mdx b/components/husky_a300/husky_a300_network_connection.mdx index fa33c95d..e66187fb 100644 --- a/components/husky_a300/husky_a300_network_connection.mdx +++ b/components/husky_a300/husky_a300_network_connection.mdx @@ -1,15 +1,15 @@ -import ComponentEthernetConnection from "/components/husky_a300/networking/husky_a300_ethernet_connection.mdx"; -import ComponentPeplinkWifiApCconnection from "/components/husky_a300/networking/husky_a300_peplink_wifi_ap_connection.mdx"; -import ComponentNetplanWifiClient from "/components/husky_a300/networking/husky_a300_netplan_wifi_client.mdx"; -import ComponentPeplinkWifiClient from "/components/husky_a300/networking/husky_a300_peplink_wifi_client.mdx"; -import ComponentPeplinkCellular from "/components/husky_a300/networking/husky_a300_peplink_cellular.mdx"; - -### Robot Network Connection {#network-connection} - -Husky provides several network connection options, the details of which are outlined below. - - -{(props.robotModel == "A300") && } -{((props.robotModel == "AMP") || (props.robotModel == "Observer")) && } -{((props.robotModel == "AMP") || (props.robotModel == "Observer")) && } -{((props.robotModel == "AMP") || (props.robotModel == "Observer")) && } +import ComponentEthernetConnection from "/components/husky_a300/networking/husky_a300_ethernet_connection.mdx"; +import ComponentPeplinkWifiApCconnection from "/components/husky_a300/networking/husky_a300_peplink_wifi_ap_connection.mdx"; +import ComponentNetplanWifiClient from "/components/husky_a300/networking/husky_a300_netplan_wifi_client.mdx"; +import ComponentPeplinkWifiClient from "/components/husky_a300/networking/husky_a300_peplink_wifi_client.mdx"; +import ComponentPeplinkCellular from "/components/husky_a300/networking/husky_a300_peplink_cellular.mdx"; + +### Robot Network Connection {#network-connection} + +Husky provides several network connection options, the details of which are outlined below. + + +{(props.robotModel == "A300") && } +{((props.robotModel == "AMP") || (props.robotModel == "Observer")) && } +{((props.robotModel == "AMP") || (props.robotModel == "Observer")) && } +{((props.robotModel == "AMP") || (props.robotModel == "Observer")) && } diff --git a/components/husky_a300/husky_a300_orientation_references.mdx b/components/husky_a300/husky_a300_orientation_references.mdx index f29a3079..c75a843d 100644 --- a/components/husky_a300/husky_a300_orientation_references.mdx +++ b/components/husky_a300/husky_a300_orientation_references.mdx @@ -1,16 +1,16 @@ -### Orientation References - -Husky's coordinate system is based on ISO 8855. - -* Gravity is aligned with -Z. -* +X translational velocity will drive the Husky forward. -* The Husky can turn with ± Yaw. - -
-
- -
-
+### Orientation References + +Husky's coordinate system is based on ISO 8855. + +* Gravity is aligned with -Z. +* +X translational velocity will drive the Husky forward. +* The Husky can turn with ± Yaw. + +
+
+ +
+
diff --git a/components/husky_a300/husky_a300_pacs.mdx b/components/husky_a300/husky_a300_pacs.mdx index 62e89bb5..974ff904 100644 --- a/components/husky_a300/husky_a300_pacs.mdx +++ b/components/husky_a300/husky_a300_pacs.mdx @@ -1,13 +1,13 @@ -### PACS™ Mounting and Kits - -Husky A300 is equipped with a [PACS™](/docs_robots/accessories/pacs) Top Plate for mounting sensors and equipment. -[PACS™](/docs_robots/accessories/pacs) is a Clearpath Robotics standard, providing a grid of M5×0.8 holes onto the Top Plate of the robot. -This grid of holes has a 80 mm X 80 mm spacing. -You can create your own brackets to interface with these holes, or can use an existing Clearpath Robotics bracket. - -:::note - -Our [Sensors](/docs_robots/accessories/sensors/) and [Add-ons](/docs_robots/accessories/add-ons/) pages -indicate the required bracket for the particular attachment. - -::: +### PACS™ Mounting and Kits + +Husky A300 is equipped with a [PACS™](/docs_robots/accessories/pacs) Top Plate for mounting sensors and equipment. +[PACS™](/docs_robots/accessories/pacs) is a Clearpath Robotics standard, providing a grid of M5×0.8 holes onto the Top Plate of the robot. +This grid of holes has a 80 mm X 80 mm spacing. +You can create your own brackets to interface with these holes, or can use an existing Clearpath Robotics bracket. + +:::note + +Our [Sensors](/docs_robots/accessories/sensors/) and [Add-ons](/docs_robots/accessories/add-ons/) pages +indicate the required bracket for the particular attachment. + +::: diff --git a/components/husky_a300/husky_a300_power_connections.mdx b/components/husky_a300/husky_a300_power_connections.mdx index 264caf20..0d6f62d8 100644 --- a/components/husky_a300/husky_a300_power_connections.mdx +++ b/components/husky_a300/husky_a300_power_connections.mdx @@ -1,377 +1,377 @@ -import Admonition from "@theme/Admonition"; - -### Power Connections - -#### User Power Connections {#user-power-connections} - -The System Interface circuit board has 8 User Power connectors, labelled USER 1 through USER 8. - -User power is divided into 4 power rails and the power for each rail is shared across each of the 8 connectors. -The maximum—_(aggregate)_—current available on each power rail is outlined in the table below. -These circuits are protected with self resetting fuses. -These circuits can also be toggled on and off through ROS. - -| User Power Rail | Maximum (Aggregate) Current | -| :------------------------------------- | :-------------------------- | -| 12 V Rail A | 5 A | -| 12 V Rail B | 5 A | -| 24 V | 5 A | -| VBAT (24 - 29 V, unregulated) | 5 A | - - - Do not exceed the specified maximum current limit of each power rail. - Exceeding the maximum current may damage to your payload. - - - -##### User Power Pinout - -The pinout for each of the 8 connectors—_(USER 1 through USER 8)_—is illustrated below. - -| USER connector pin | Function | -| :----------------- | :------------------------------------- | -| 1 | 12 V (Rail B) | -| 2 | 12 V (Rail A) | -| 3 | 24 V | -| 4 | VBAT (24 - 29 V, unregulated) | -| 5 | GND | -| 6 | GND | -| 7 | GND | -| 8 | GND | - - -
- Making User Power Cables - - Connecting to user power requires the use of a Molex connector and compatible crimp terminals. - To create these cables, follow the steps below. - - 1. Expose about 5 mm of bare wire from the payload power leads and twist the exposed wire on both leads. - 2. Take 2 Molex terminals from the spare parts kit provided and insert the exposed wire and crimp the terminals, - ensuring the wires are well secured inside the terminal, as shown below. - 3. Take 1 connector housing from the spare parts kit provided and insert the positive payload power lead—_(red)_—into position - 1, 2, 3 or 4 of the connector until it locks into place. - The positions numbers are visible on the back of the plastic housing. - 4. Insert the negative payload power lead (black) into position 5, 6, 7, or 8 of the connector until it locks into place. - - [//]: <> (TODO, update images to show a higher quality crimp) - [//]: <> (TODO, update images to remove the background colour) - -
-
- -
Crimping A Wire
-
-
-
-
- -
Inserting The Crimped Wires Into The Molex Connector
-
-
- - For more technical information on the Molex power connectors, as well as their corresponding mating connectors, - please visit the [Digi-Key WM3703-ND Product Page](https://www.digikey.ca/en/products/detail/molex/0039012080/61382). -
-
- -##### Software Control of User Power Rails {#user_power_control} - -User power can be enabled or disabled through ROS by publishing to `/a300_#####/platform/mcu/cmd_user_power` ROS topic. - -- To disable user power, run: - - ``` - ros2 topic pub --once /a300_#####/platform/mcu/cmd_user_power std_msgs/msg/Bool '{data: false}' - ``` - -- To enable user power, run: - - ``` - ros2 topic pub --once /a300_#####/platform/mcu/cmd_user_power std_msgs/msg/Bool '{data: true}' - ``` - -:::note - -User Power is enabled by default shortly after the robot first powers up, regardless of its state when the robot was powered off. - -::: - -
- -#### Expansion Power _(EXP 1 and EXP 2)_ {#expansion-power} - -There are 2 Expansion Power connectors on the System Interface circuit board. -The Expanison Power connectors can power small manipulators, DC-AC inverters, and DC-DC supplies. - -These connectors supply VBAT voltage, with a combined current of up to 20 A. -The connectors also include soft-start circuitry which limits inrush current to 25 A. -This soft-start circuit reduces the chance of a high capacitance load causing the 20 A fuse to pop. - -:::info Replacement Fuse - -Use a [Littelfuse 0297020.U](https://www.digikey.ca/en/products/detail/littelfuse-inc/0297020-U/3427482?s=N4IgTCBcDaIAxgJwHYFwHQFUQF0C%2BQA) as the replacement. - -::: - -##### Expansion Power Pinout - -The pinout for each of the 2 connectors—_(EXP 1 and EXP 2)_—is illustrated below. - -| Expansion Power connector pin | Function | -| :---------------------------- | :------------------------------------- | -| 1 | VBAT (24 - 29 V, unregulated) | -| 2 | GND | - -
- -##### Software Control of Expansion Power Rails - -The Expansion Power connectors are connected to the same control system as the User Power. -Refer to the [Software Control of User Power Rails](#user_power_control) section for details. - -
- -#### High Power Expansion Kit _(Large VBAT)_ {#high-power-expansion-kit} - -:::note - -The optional High Power Expansion Kit can purchased at the time of your original Husky order—_(Clearpath item 032001)_. -We do not allow field installation of the kit. - -::: - -:::tip - -We suggest you purchase a 80 Ah or 120 Ah Husky if you plan to operate on hills steeper than 5°, and have a payload of more than 50kg. -40 Ah battery configuration may not provide enough power in the worst case. -Contact [Support](#support) for more details. - -::: - -Some high power payloads, such as manipulators, require more power than can be provided through the User Power connectors. -The optional High Power Expansion Kit provides VBAT voltage at 40 A. -It also includes 2 contactors for enabling and disabling power to the payload. - -
- Making A Large VBAT Cable - - We suggest using #10 AWG wire for this cable routing if it is completely inside the robot's chassis. - We suggest using #8 AWG wire for this cable routing if it is outside the chassis, where someone could touch the cable. - #8 AWG surface temperature is acceptable in an exposed cable for 40 A, per UL 1740. - - The mating cable will connect to the yellow Anderson Power Products SB50 connector in left-rear of the robot's chassis, under the Top Plate. - - - Always observe local laws and electrical standards when building cables. - - - - Consult the manufacturer's documentation for full details on proper crimping. - - - | Description | Vendor Part | CPR Part Number | - | :-------------------- | :----------------------------------------------------------------------------------------------------------- | :-------------- | - | Mating connector | [Anderson 992G5-BK](https://www.digikey.ca/en/products/detail/anderson-power-products-inc/992G5-BK/10650433) | 022554 | - | Crimps, #8 AWG | [Anderson 5952-BK](https://www.digikey.ca/en/products/detail/anderson-power-products-inc/5952-BK/10650106) | 017281 | - | Crimps, #10 - #12 AWG | [Anderson 5953-BK](https://www.digikey.ca/en/products/detail/anderson-power-products-inc/5953-bk/10650410) | 022562 | - | Crimping tool | [Anderson 1309G4](https://www.digikey.ca/en/products/detail/anderson-power-products,-inc./1309G4/10650073) | N/A | - -
- -:::info Replacement Fuse - -Use a [Littelfuse 142.5631.5402](https://www.digikey.ca/en/products/detail/littelfuse-inc/142-5631-5402/2515916) as the replacement. - -::: - -
- -##### On/Off Control via Software - -The High Power Expansion Kit output is controlled through software by publishing to the ROS topic `/a300_#####/platform/mcu/cmd_high_power`, - similar to [Software Control of User Power Rails](#user_power_control). - -:::note - -The High Power Expansion Kit output is always disabled when the system powers up. -You must enable the output, via the ROS topic above, each time after the system powers up. - -::: - -
- -### AUX Inputs {#aux-inputs} - -The System Interface circuit board has 3 auxilliary inputs—_(AUX1 IN, AUX2 IN, AUX3 IN)_—that allow external payloads to provide inputs to the robot. -Each of these auxilliary inputs can be driven by one of the following: - -- a 12 V input -- a 24 V input -- a push button or switch - -The state of the input can be read from the ROS topic `/a300_#####/platform/mcu/status/aux_inputs`. -The AUX inputs are active low and are mapped to the ROS message bits as follows: - -- AUX1 IN: bit 0 -- AUX2 IN: bit 1 -- AUX3 IN: bit 2 - -| AUX Input | Payload State | `/a300_#####/platform/mcu/status/aux_inputs` Value | -| :------------------- | :------------------------------------------------------------------------------------ | :---------------------------------------- | -| AUX1 IN | 24 V on OR 12 V on OR button pressed
24 V off AND 12 V off AND button not pressed | bit 0 reads as '0'
bit 0 reads as '1' | -| AUX2 IN | 24 V on OR 12 V on OR button pressed
24 V off AND 12 V off AND button not pressed | bit 1 reads as '0'
bit 1 reads as '1' | -| AUX3 IN | 24 V on OR 12 V on OR button pressed
24 V off AND 12 V off AND button not pressed | bit 2 reads as '0'
bit 2 reads as '1' | - -#### AUX Input Pinout - -The pinout for each of the connectors—_(AUX1 IN, AUX2 IN, AUX3 IN)_—is illustrated below. - -| AUX IN Connector's Pin | Function | -| :--------------------- | :-------------------------- | -| 1 | 24 V In | -| 2 | 12 V In | -| 3 | Button/Switch In, _(3.3 V)_ | -| 4 | 24 V Return | -| 5 | 12 V Return | -| 6 | GND | - -
- AUX Input Example #1 - - Consider the example where AUX2 IN has a 12 V supply connected to pins 2 and 5, with the remaining pins unconnected. - - Monitor the input reading in ROS. - - ``` - ros2 topic echo /a300_#####/platform/mcu/status/aux_inputs - ``` - - | Action | `/a300_#####/platform/mcu/status/aux_inputs` value | Bit 2 Explanation | Bit 1 Explanation | Bit 0 Explanation | - | :------------------------------------ | :------------------------------------------------- | :--------------------------------- | :--------------------------- | :--------------------------------- | - | Begin with the 12 V supply turned off | 7 (8b00000111) | '1' since AUX3 IN is not connected | '1' since 12 V supply is off | '1' since AUX1 IN is not connected | - | Turn the 12 V power supply on | 5 (8b00000101) | '1' since AUX3 IN is not connected | '0' since 12 V supply is on | '1' since AUX1 IN is not connected | - | Turn the 12 V supply off | 7 (8b00000111) | '1' since AUX3 IN is not connected | '1' since 12 V supply is off | '1' since AUX1 IN is not connected | -
- -
- AUX Input Example #2 - - Consider the example where AUX1 IN has a 24 V supply connected to pins 1 and 4, - AUX2 IN has a 12 V supply connected to pins 2 and 5, and AUX3 IN has a push button connected to pin 3. - - | Action | `/a300_#####/platform/mcu/status/aux_inputs` value | Bit 2 Explanation | Bit 1 Explanation | Bit 0 Explanation | - | :--------------------------------------------------------------------------------- | :------------------------------------------------- | :------------------------------ | :--------------------------- | :--------------------------- | - | Begin with 12 V supply turned off, the 24 V supply off, and the button not pressed | 7 (8b00000111) | '1' since button is not pressed | '1' since 12 V supply is off | '1' since 24 V supply is off | - | Turn the 24 V power supply on | 6 (8b00000110) | '1' since button is not pressed | '1' since 12 V supply is off | '0' since 24 V supply is on | - | Turn the 12 V supply on | 4 (8b00000100) | '1' since button is not pressed | '0' since 12 V supply is on | '0' 24 V supply is on | - | Press and hold the button | 0 (8b00000000) | '0' since button is pressed | '0' since 12 V supply is on | '0' 24 V supply is on | - -
- -
- -### AUX Outputs {#aux-outputs} - -The System Interface circuit board includes 3 outputs—_(AUX1 OUT, AUX2 OUT, AUX3 OUT)_—that can be controlled by publishing to the `/a300_#####/platform/mcu/cmd_aux_outputs` ROS topic. -To enable the AUX outputs, publish a single message with the appropriate bits set to 1 to turn the output on, and 0 to turn it off. -The state does not persist so new commands will need to keep the bit enabled as well. -The AUX outputs are mapped to the ROS message bits as follows: - -- AUX1 OUT: bit 0 -- AUX2 OUT: bit 1 -- AUX3 OUT: bit 2 - -#### AUX Output Pinout - -Each of the AUX outputs is an 8 position connector with pinout as outlined below. -The output value is available in several modes: - -- MOSFET outputs, _(2X)_ -- Normally open relay -- Normally closed relay - -| AUX OUT Connector Pin | Name | Function | Output when corresponding `cmd_aux_outputs` bit is '0' | Output when corresponding `cmd_aux_outputs` bit is '1' | -| :-------------------- | :--------------- | :-------------------------------------------------------- | :----------------------------------------------------- | :----------------------------------------------------- | -| 1 | AUX_24V | 24 V output, fused at 3 A | 24 V | 24 V | -| 2 | GND | GND | GND | GND | -| 3 | AUX_RELAY_NC | Normally closed relay pin | Connected to AUX_RELAY_COMMON | Floating | -| 4 | AUX_MOSFET2 | MOSFET #2 DRAIN | GND | Floating | -| 5 | GND | GND | GND | GND | -| 6 | AUX_RELAY_COMMON | Input that gets connected to AUX_RELAY_NC or AUX_RELAY_NO | Connected to AUX_RELAY_NC | Connected to AUX_RELAY_NO | -| 7 | AUX_RELAY_NO | Normally open relay pin | Floating | Connected to AUX_RELAY_COMMON | -| 8 | AUX_MOSFET1 | MOSFET #1 DRAIN | GND | Floating | - -{((props.robotModel == "AMP") || (props.robotModel == "Observer")) && - Husky AMP's lights and sounder are controlled by the 3 AUX Output connectors. - The AUX Outputs cannot be used for a user payload on Husky AMP or Husky Observer. -} - -
- AUX Output Examples - - - To disable all AUX outputs: - - ``` - rostopic pub /a300_#####/platform/mcu/cmd_aux_outputs std_msgs/UInt8 "data: 0" - ``` - - - To enable all AUX outputs: - - ``` - rostopic pub /a300_#####/platform/mcu/cmd_aux_outputs std_msgs/UInt8 "data: 7" - ``` - - - To enable just the AUX3 output: - - ``` - rostopic pub /a300_#####/platform/mcu/cmd_aux_outputs std_msgs/UInt8 "data: 4" - ``` - -
- - -### General Purpose Inputs and Outputs _(GPIO)_ {#gpio} - -The System Interface circuit board includes 4 general purpose inputs, and 4 general purpose outputs. -All GPIOs are at the 3.3 V logic level. -General purpose inputs are readable from the `/a300_#####/platform/mcu/status/gp_inputs` ROS topic. -Publishing to the `/a300_#####/platform/mcu/cmd_gp_outputs` ROS topic controls the general purpose outputs. - -:::info - -All the inputs and outputs are exposed through a single connector. - -::: - -#### General Purpose Input Pinout - -| GPIO connector pin | Function | `gp_inputs` value when driven at 0 V | `gp_inputs` value when driven at 3.3 V | -| :----------------- | :------- | :----------------------------------- | :------------------------------------- | -| 5 | GP In 1 | Bit 0 is '0' | Bit 0 is '1' | -| 6 | GP In 2 | Bit 1 is '0' | Bit 1 is '1' | -| 7 | GP In 3 | Bit 2 is '0' | Bit 2 is '1' | -| 8 | GP In 4 | Bit 3 is '0' | Bit 3 is '1' | -| 13 | GND | N/A | N/A | -| 14 | GND | N/A | N/A | -| 15 | GND | N/A | N/A | -| 16 | GND | N/A | N/A | - -#### General Purpose Output Pinout - -| GPIO connector pin | Function | Corresponding bit in `cmd_gp_outputs` | Output value when set to '0' | Output value when set to '1' | -| :----------------- | :------- | :------------------------------------ | :--------------------------- | :--------------------------- | -| 1 | GP Out 1 | 0 | 0 V | 3.3 V | -| 2 | GP Out 2 | 1 | 0 V | 3.3 V | -| 3 | GP Out 3 | 2 | 0 V | 3.3 V | -| 4 | GP Out 4 | 3 | 0 V | 3.3 V | -| 9 | GND | N/A | GND | GND | -| 10 | GND | N/A | GND | GND | -| 11 | GND | N/A | GND | GND | -| 12 | GND | N/A | GND | GND | +import Admonition from "@theme/Admonition"; + +### Power Connections + +#### User Power Connections {#user-power-connections} + +The System Interface circuit board has 8 User Power connectors, labelled USER 1 through USER 8. + +User power is divided into 4 power rails and the power for each rail is shared across each of the 8 connectors. +The maximum—_(aggregate)_—current available on each power rail is outlined in the table below. +These circuits are protected with self resetting fuses. +These circuits can also be toggled on and off through ROS. + +| User Power Rail | Maximum (Aggregate) Current | +| :------------------------------------- | :-------------------------- | +| 12 V Rail A | 5 A | +| 12 V Rail B | 5 A | +| 24 V | 5 A | +| VBAT (24 - 29 V, unregulated) | 5 A | + + + Do not exceed the specified maximum current limit of each power rail. + Exceeding the maximum current may damage to your payload. + + + +##### User Power Pinout + +The pinout for each of the 8 connectors—_(USER 1 through USER 8)_—is illustrated below. + +| USER connector pin | Function | +| :----------------- | :------------------------------------- | +| 1 | 12 V (Rail B) | +| 2 | 12 V (Rail A) | +| 3 | 24 V | +| 4 | VBAT (24 - 29 V, unregulated) | +| 5 | GND | +| 6 | GND | +| 7 | GND | +| 8 | GND | + + +
+ Making User Power Cables + + Connecting to user power requires the use of a Molex connector and compatible crimp terminals. + To create these cables, follow the steps below. + + 1. Expose about 5 mm of bare wire from the payload power leads and twist the exposed wire on both leads. + 2. Take 2 Molex terminals from the spare parts kit provided and insert the exposed wire and crimp the terminals, + ensuring the wires are well secured inside the terminal, as shown below. + 3. Take 1 connector housing from the spare parts kit provided and insert the positive payload power lead—_(red)_—into position + 1, 2, 3 or 4 of the connector until it locks into place. + The positions numbers are visible on the back of the plastic housing. + 4. Insert the negative payload power lead (black) into position 5, 6, 7, or 8 of the connector until it locks into place. + + [//]: <> (TODO, update images to show a higher quality crimp) + [//]: <> (TODO, update images to remove the background colour) + +
+
+ +
Crimping A Wire
+
+
+
+
+ +
Inserting The Crimped Wires Into The Molex Connector
+
+
+ + For more technical information on the Molex power connectors, as well as their corresponding mating connectors, + please visit the [Digi-Key WM3703-ND Product Page](https://www.digikey.ca/en/products/detail/molex/0039012080/61382). +
+
+ +##### Software Control of User Power Rails {#user_power_control} + +User power can be enabled or disabled through ROS by publishing to `/a300_#####/platform/mcu/cmd_user_power` ROS topic. + +- To disable user power, run: + + ``` + ros2 topic pub --once /a300_#####/platform/mcu/cmd_user_power std_msgs/msg/Bool '{data: false}' + ``` + +- To enable user power, run: + + ``` + ros2 topic pub --once /a300_#####/platform/mcu/cmd_user_power std_msgs/msg/Bool '{data: true}' + ``` + +:::note + +User Power is enabled by default shortly after the robot first powers up, regardless of its state when the robot was powered off. + +::: + +
+ +#### Expansion Power _(EXP 1 and EXP 2)_ {#expansion-power} + +There are 2 Expansion Power connectors on the System Interface circuit board. +The Expanison Power connectors can power small manipulators, DC-AC inverters, and DC-DC supplies. + +These connectors supply VBAT voltage, with a combined current of up to 20 A. +The connectors also include soft-start circuitry which limits inrush current to 25 A. +This soft-start circuit reduces the chance of a high capacitance load causing the 20 A fuse to pop. + +:::info Replacement Fuse + +Use a [Littelfuse 0297020.U](https://www.digikey.ca/en/products/detail/littelfuse-inc/0297020-U/3427482?s=N4IgTCBcDaIAxgJwHYFwHQFUQF0C%2BQA) as the replacement. + +::: + +##### Expansion Power Pinout + +The pinout for each of the 2 connectors—_(EXP 1 and EXP 2)_—is illustrated below. + +| Expansion Power connector pin | Function | +| :---------------------------- | :------------------------------------- | +| 1 | VBAT (24 - 29 V, unregulated) | +| 2 | GND | + +
+ +##### Software Control of Expansion Power Rails + +The Expansion Power connectors are connected to the same control system as the User Power. +Refer to the [Software Control of User Power Rails](#user_power_control) section for details. + +
+ +#### High Power Expansion Kit _(Large VBAT)_ {#high-power-expansion-kit} + +:::note + +The optional High Power Expansion Kit can purchased at the time of your original Husky order—_(Clearpath item 032001)_. +We do not allow field installation of the kit. + +::: + +:::tip + +We suggest you purchase a 80 Ah or 120 Ah Husky if you plan to operate on hills steeper than 5°, and have a payload of more than 50kg. +40 Ah battery configuration may not provide enough power in the worst case. +Contact [Support](#support) for more details. + +::: + +Some high power payloads, such as manipulators, require more power than can be provided through the User Power connectors. +The optional High Power Expansion Kit provides VBAT voltage at 40 A. +It also includes 2 contactors for enabling and disabling power to the payload. + +
+ Making A Large VBAT Cable + + We suggest using #10 AWG wire for this cable routing if it is completely inside the robot's chassis. + We suggest using #8 AWG wire for this cable routing if it is outside the chassis, where someone could touch the cable. + #8 AWG surface temperature is acceptable in an exposed cable for 40 A, per UL 1740. + + The mating cable will connect to the yellow Anderson Power Products SB50 connector in left-rear of the robot's chassis, under the Top Plate. + + + Always observe local laws and electrical standards when building cables. + + + + Consult the manufacturer's documentation for full details on proper crimping. + + + | Description | Vendor Part | CPR Part Number | + | :-------------------- | :----------------------------------------------------------------------------------------------------------- | :-------------- | + | Mating connector | [Anderson 992G5-BK](https://www.digikey.ca/en/products/detail/anderson-power-products-inc/992G5-BK/10650433) | 022554 | + | Crimps, #8 AWG | [Anderson 5952-BK](https://www.digikey.ca/en/products/detail/anderson-power-products-inc/5952-BK/10650106) | 017281 | + | Crimps, #10 - #12 AWG | [Anderson 5953-BK](https://www.digikey.ca/en/products/detail/anderson-power-products-inc/5953-bk/10650410) | 022562 | + | Crimping tool | [Anderson 1309G4](https://www.digikey.ca/en/products/detail/anderson-power-products,-inc./1309G4/10650073) | N/A | + +
+ +:::info Replacement Fuse + +Use a [Littelfuse 142.5631.5402](https://www.digikey.ca/en/products/detail/littelfuse-inc/142-5631-5402/2515916) as the replacement. + +::: + +
+ +##### On/Off Control via Software + +The High Power Expansion Kit output is controlled through software by publishing to the ROS topic `/a300_#####/platform/mcu/cmd_high_power`, + similar to [Software Control of User Power Rails](#user_power_control). + +:::note + +The High Power Expansion Kit output is always disabled when the system powers up. +You must enable the output, via the ROS topic above, each time after the system powers up. + +::: + +
+ +### AUX Inputs {#aux-inputs} + +The System Interface circuit board has 3 auxilliary inputs—_(AUX1 IN, AUX2 IN, AUX3 IN)_—that allow external payloads to provide inputs to the robot. +Each of these auxilliary inputs can be driven by one of the following: + +- a 12 V input +- a 24 V input +- a push button or switch + +The state of the input can be read from the ROS topic `/a300_#####/platform/mcu/status/aux_inputs`. +The AUX inputs are active low and are mapped to the ROS message bits as follows: + +- AUX1 IN: bit 0 +- AUX2 IN: bit 1 +- AUX3 IN: bit 2 + +| AUX Input | Payload State | `/a300_#####/platform/mcu/status/aux_inputs` Value | +| :------------------- | :------------------------------------------------------------------------------------ | :---------------------------------------- | +| AUX1 IN | 24 V on OR 12 V on OR button pressed
24 V off AND 12 V off AND button not pressed | bit 0 reads as '0'
bit 0 reads as '1' | +| AUX2 IN | 24 V on OR 12 V on OR button pressed
24 V off AND 12 V off AND button not pressed | bit 1 reads as '0'
bit 1 reads as '1' | +| AUX3 IN | 24 V on OR 12 V on OR button pressed
24 V off AND 12 V off AND button not pressed | bit 2 reads as '0'
bit 2 reads as '1' | + +#### AUX Input Pinout + +The pinout for each of the connectors—_(AUX1 IN, AUX2 IN, AUX3 IN)_—is illustrated below. + +| AUX IN Connector's Pin | Function | +| :--------------------- | :-------------------------- | +| 1 | 24 V In | +| 2 | 12 V In | +| 3 | Button/Switch In, _(3.3 V)_ | +| 4 | 24 V Return | +| 5 | 12 V Return | +| 6 | GND | + +
+ AUX Input Example #1 + + Consider the example where AUX2 IN has a 12 V supply connected to pins 2 and 5, with the remaining pins unconnected. + + Monitor the input reading in ROS. + + ``` + ros2 topic echo /a300_#####/platform/mcu/status/aux_inputs + ``` + + | Action | `/a300_#####/platform/mcu/status/aux_inputs` value | Bit 2 Explanation | Bit 1 Explanation | Bit 0 Explanation | + | :------------------------------------ | :------------------------------------------------- | :--------------------------------- | :--------------------------- | :--------------------------------- | + | Begin with the 12 V supply turned off | 7 (8b00000111) | '1' since AUX3 IN is not connected | '1' since 12 V supply is off | '1' since AUX1 IN is not connected | + | Turn the 12 V power supply on | 5 (8b00000101) | '1' since AUX3 IN is not connected | '0' since 12 V supply is on | '1' since AUX1 IN is not connected | + | Turn the 12 V supply off | 7 (8b00000111) | '1' since AUX3 IN is not connected | '1' since 12 V supply is off | '1' since AUX1 IN is not connected | +
+ +
+ AUX Input Example #2 + + Consider the example where AUX1 IN has a 24 V supply connected to pins 1 and 4, + AUX2 IN has a 12 V supply connected to pins 2 and 5, and AUX3 IN has a push button connected to pin 3. + + | Action | `/a300_#####/platform/mcu/status/aux_inputs` value | Bit 2 Explanation | Bit 1 Explanation | Bit 0 Explanation | + | :--------------------------------------------------------------------------------- | :------------------------------------------------- | :------------------------------ | :--------------------------- | :--------------------------- | + | Begin with 12 V supply turned off, the 24 V supply off, and the button not pressed | 7 (8b00000111) | '1' since button is not pressed | '1' since 12 V supply is off | '1' since 24 V supply is off | + | Turn the 24 V power supply on | 6 (8b00000110) | '1' since button is not pressed | '1' since 12 V supply is off | '0' since 24 V supply is on | + | Turn the 12 V supply on | 4 (8b00000100) | '1' since button is not pressed | '0' since 12 V supply is on | '0' 24 V supply is on | + | Press and hold the button | 0 (8b00000000) | '0' since button is pressed | '0' since 12 V supply is on | '0' 24 V supply is on | + +
+ +
+ +### AUX Outputs {#aux-outputs} + +The System Interface circuit board includes 3 outputs—_(AUX1 OUT, AUX2 OUT, AUX3 OUT)_—that can be controlled by publishing to the `/a300_#####/platform/mcu/cmd_aux_outputs` ROS topic. +To enable the AUX outputs, publish a single message with the appropriate bits set to 1 to turn the output on, and 0 to turn it off. +The state does not persist so new commands will need to keep the bit enabled as well. +The AUX outputs are mapped to the ROS message bits as follows: + +- AUX1 OUT: bit 0 +- AUX2 OUT: bit 1 +- AUX3 OUT: bit 2 + +#### AUX Output Pinout + +Each of the AUX outputs is an 8 position connector with pinout as outlined below. +The output value is available in several modes: + +- MOSFET outputs, _(2X)_ +- Normally open relay +- Normally closed relay + +| AUX OUT Connector Pin | Name | Function | Output when corresponding `cmd_aux_outputs` bit is '0' | Output when corresponding `cmd_aux_outputs` bit is '1' | +| :-------------------- | :--------------- | :-------------------------------------------------------- | :----------------------------------------------------- | :----------------------------------------------------- | +| 1 | AUX_24V | 24 V output, fused at 3 A | 24 V | 24 V | +| 2 | GND | GND | GND | GND | +| 3 | AUX_RELAY_NC | Normally closed relay pin | Connected to AUX_RELAY_COMMON | Floating | +| 4 | AUX_MOSFET2 | MOSFET #2 DRAIN | GND | Floating | +| 5 | GND | GND | GND | GND | +| 6 | AUX_RELAY_COMMON | Input that gets connected to AUX_RELAY_NC or AUX_RELAY_NO | Connected to AUX_RELAY_NC | Connected to AUX_RELAY_NO | +| 7 | AUX_RELAY_NO | Normally open relay pin | Floating | Connected to AUX_RELAY_COMMON | +| 8 | AUX_MOSFET1 | MOSFET #1 DRAIN | GND | Floating | + +{((props.robotModel == "AMP") || (props.robotModel == "Observer")) && + Husky AMP's lights and sounder are controlled by the 3 AUX Output connectors. + The AUX Outputs cannot be used for a user payload on Husky AMP or Husky Observer. +} + +
+ AUX Output Examples + + - To disable all AUX outputs: + + ``` + rostopic pub /a300_#####/platform/mcu/cmd_aux_outputs std_msgs/UInt8 "data: 0" + ``` + + - To enable all AUX outputs: + + ``` + rostopic pub /a300_#####/platform/mcu/cmd_aux_outputs std_msgs/UInt8 "data: 7" + ``` + + - To enable just the AUX3 output: + + ``` + rostopic pub /a300_#####/platform/mcu/cmd_aux_outputs std_msgs/UInt8 "data: 4" + ``` + +
+ + +### General Purpose Inputs and Outputs _(GPIO)_ {#gpio} + +The System Interface circuit board includes 4 general purpose inputs, and 4 general purpose outputs. +All GPIOs are at the 3.3 V logic level. +General purpose inputs are readable from the `/a300_#####/platform/mcu/status/gp_inputs` ROS topic. +Publishing to the `/a300_#####/platform/mcu/cmd_gp_outputs` ROS topic controls the general purpose outputs. + +:::info + +All the inputs and outputs are exposed through a single connector. + +::: + +#### General Purpose Input Pinout + +| GPIO connector pin | Function | `gp_inputs` value when driven at 0 V | `gp_inputs` value when driven at 3.3 V | +| :----------------- | :------- | :----------------------------------- | :------------------------------------- | +| 5 | GP In 1 | Bit 0 is '0' | Bit 0 is '1' | +| 6 | GP In 2 | Bit 1 is '0' | Bit 1 is '1' | +| 7 | GP In 3 | Bit 2 is '0' | Bit 2 is '1' | +| 8 | GP In 4 | Bit 3 is '0' | Bit 3 is '1' | +| 13 | GND | N/A | N/A | +| 14 | GND | N/A | N/A | +| 15 | GND | N/A | N/A | +| 16 | GND | N/A | N/A | + +#### General Purpose Output Pinout + +| GPIO connector pin | Function | Corresponding bit in `cmd_gp_outputs` | Output value when set to '0' | Output value when set to '1' | +| :----------------- | :------- | :------------------------------------ | :--------------------------- | :--------------------------- | +| 1 | GP Out 1 | 0 | 0 V | 3.3 V | +| 2 | GP Out 2 | 1 | 0 V | 3.3 V | +| 3 | GP Out 3 | 2 | 0 V | 3.3 V | +| 4 | GP Out 4 | 3 | 0 V | 3.3 V | +| 9 | GND | N/A | GND | GND | +| 10 | GND | N/A | GND | GND | +| 11 | GND | N/A | GND | GND | +| 12 | GND | N/A | GND | GND | diff --git a/components/husky_a300/husky_a300_replacing_fuses_bf1.mdx b/components/husky_a300/husky_a300_replacing_fuses_bf1.mdx index ccc4cfe5..244f9d07 100644 --- a/components/husky_a300/husky_a300_replacing_fuses_bf1.mdx +++ b/components/husky_a300/husky_a300_replacing_fuses_bf1.mdx @@ -1,22 +1,22 @@ -### Replacing BF1 Fuses {#replacing-fuses-bf1} - -1. Perform the [Lockout-Tagout Procedure](#lockout-tagout). -1. Locate the fuse to be replaced. Follow the maintenance procedures for the corresponding - subassembly to access the fuse. - :::safety-caution - **Treat all circuits, cables, and fuses inside the robot as potentially live.**

- Some connections inside the robot are live even after Lockout Tagout. - Refer to the details of the subassembly maintenance procedures to - determine if the fuse is connected to a live connection. - ::: -1. Remove the fuse cover. -1. Remove the nuts holding the fuse in place. -1. Remove the fuse from the fuse holder. -1. Install the replacement fuse into the fuse holder. - :::note - Ensure that you are replacing the fuse with the same part number and rating. Refer to - [Common Replacement Items](#common-replacement-items) for a list of fuses. - ::: -1. Reinstall both nuts onto the fuse holder and tighten to 3 N·m unless otherwise specified - in the subassembly maintenance procedures. -1. Reinstall the fuse cover. +### Replacing BF1 Fuses {#replacing-fuses-bf1} + +1. Perform the [Lockout-Tagout Procedure](#lockout-tagout). +1. Locate the fuse to be replaced. Follow the maintenance procedures for the corresponding + subassembly to access the fuse. + :::safety-caution + **Treat all circuits, cables, and fuses inside the robot as potentially live.**

+ Some connections inside the robot are live even after Lockout Tagout. + Refer to the details of the subassembly maintenance procedures to + determine if the fuse is connected to a live connection. + ::: +1. Remove the fuse cover. +1. Remove the nuts holding the fuse in place. +1. Remove the fuse from the fuse holder. +1. Install the replacement fuse into the fuse holder. + :::note + Ensure that you are replacing the fuse with the same part number and rating. Refer to + [Common Replacement Items](#common-replacement-items) for a list of fuses. + ::: +1. Reinstall both nuts onto the fuse holder and tighten to 3 N·m unless otherwise specified + in the subassembly maintenance procedures. +1. Reinstall the fuse cover. diff --git a/components/husky_a300/husky_a300_replacing_fuses_board_mount.mdx b/components/husky_a300/husky_a300_replacing_fuses_board_mount.mdx index a7ba311a..ee5723ee 100644 --- a/components/husky_a300/husky_a300_replacing_fuses_board_mount.mdx +++ b/components/husky_a300/husky_a300_replacing_fuses_board_mount.mdx @@ -1,18 +1,18 @@ -### Replacing Board Mount Fuses {#replacing-fuses-board-mount} - -1. Perform the [Lockout-Tagout Procedure](#lockout-tagout). -1. Locate the fuse to be replaced. Follow the maintenance procedures for the corresponding - subassembly to access the fuse. - :::safety-caution - **Treat all circuits, cables, and fuses inside the robot as potentially live.**

- Some connections inside the robot are live even after Lockout Tagout. - Refer to the details of the subassembly maintenance procedures to - determine if the fuse is connected to a live connection. - ::: -1. Use tweezers to pull up on the old fuse to remove it from the fuse holder. -1. Slide the replacement fuse into the fuse holder and push firmly until the fuse is installed fully. - :::note - Ensure that you are replacing the fuse with the same part number and rating. Refer to - [Common Replacement Items](#common-replacement-items) for a list of fuses. - ::: +### Replacing Board Mount Fuses {#replacing-fuses-board-mount} + +1. Perform the [Lockout-Tagout Procedure](#lockout-tagout). +1. Locate the fuse to be replaced. Follow the maintenance procedures for the corresponding + subassembly to access the fuse. + :::safety-caution + **Treat all circuits, cables, and fuses inside the robot as potentially live.**

+ Some connections inside the robot are live even after Lockout Tagout. + Refer to the details of the subassembly maintenance procedures to + determine if the fuse is connected to a live connection. + ::: +1. Use tweezers to pull up on the old fuse to remove it from the fuse holder. +1. Slide the replacement fuse into the fuse holder and push firmly until the fuse is installed fully. + :::note + Ensure that you are replacing the fuse with the same part number and rating. Refer to + [Common Replacement Items](#common-replacement-items) for a list of fuses. + ::: \ No newline at end of file diff --git a/components/husky_a300/husky_a300_replacing_fuses_mini_blade.mdx b/components/husky_a300/husky_a300_replacing_fuses_mini_blade.mdx index a153c7d9..48d8ef2d 100644 --- a/components/husky_a300/husky_a300_replacing_fuses_mini_blade.mdx +++ b/components/husky_a300/husky_a300_replacing_fuses_mini_blade.mdx @@ -1,18 +1,18 @@ -### Replacing Mini Blade Fuses {#replacing-fuses-blade-mini} - -1. Perform the [Lockout-Tagout Procedure](#lockout-tagout). -1. Locate the fuse to be replaced. Follow the maintenance procedures for the corresponding - subassembly to access the fuse. - :::safety-caution - **Treat all circuits, cables, and fuses inside the robot as potentially live.**

- Some connections inside the robot are live even after Lockout Tagout. - Refer to the details of the subassembly maintenance procedures to - determine if the fuse is connected to a live connection. - ::: -1. Pull up on the old fuse to remove it from the fuse holder. -1. Slide the replacement fuse into the fuse holder and push firmly until the fuse is installed fully. - :::note - Ensure that you are replacing the fuse with the same part number and rating. Refer to - [Common Replacement Items](#common-replacement-items) for a list of fuses. - ::: +### Replacing Mini Blade Fuses {#replacing-fuses-blade-mini} + +1. Perform the [Lockout-Tagout Procedure](#lockout-tagout). +1. Locate the fuse to be replaced. Follow the maintenance procedures for the corresponding + subassembly to access the fuse. + :::safety-caution + **Treat all circuits, cables, and fuses inside the robot as potentially live.**

+ Some connections inside the robot are live even after Lockout Tagout. + Refer to the details of the subassembly maintenance procedures to + determine if the fuse is connected to a live connection. + ::: +1. Pull up on the old fuse to remove it from the fuse holder. +1. Slide the replacement fuse into the fuse holder and push firmly until the fuse is installed fully. + :::note + Ensure that you are replacing the fuse with the same part number and rating. Refer to + [Common Replacement Items](#common-replacement-items) for a list of fuses. + ::: \ No newline at end of file diff --git a/components/husky_a300/husky_a300_step_model.mdx b/components/husky_a300/husky_a300_step_model.mdx index 68e861c0..8d72c086 100644 --- a/components/husky_a300/husky_a300_step_model.mdx +++ b/components/husky_a300/husky_a300_step_model.mdx @@ -1,69 +1,69 @@ -import ComponentButtonStepDownload from "/components/button_download_step.tsx" - -### STEP Model {#step-model} - -{(props.robotModel == "A300") &&
- - - This simplified 3D model of the Husky A300 includes details like the Top Plate mounting surface, internal Battery Integration Volume, - and the System Interface circuit board where you can connect to the robot's electrical provisions. - -
-
- - -
- 40 Ah battery configuration is shown. - Other configurations are available. -
-
-
-
} - - -{(props.robotModel == "AMP") &&
- - - This simplified 3D model of the Husky A300 AMP includes details like the enclosure's mounting extrusions, electronic modules and 3U Eurorack, and arch superstructure. - This model also includes the features from the base Husky A300, such as the System Interface Assembly circuit board where you can connect to the robot's electrical provisions. - -
-
- - -
-
-
} - - -{(props.robotModel == "Observer") &&
- - - This simplified 3D model of the Husky A300 Observer includes the PTZ camera, and the wireless charger. - This model also includes all the features that exist in the Husky A300 and Husky AMP models. - -
-
- - -
-
+import ComponentButtonStepDownload from "/components/button_download_step.tsx" + +### STEP Model {#step-model} + +{(props.robotModel == "A300") &&
+ + + This simplified 3D model of the Husky A300 includes details like the Top Plate mounting surface, internal Battery Integration Volume, + and the System Interface circuit board where you can connect to the robot's electrical provisions. + +
+
+ + +
+ 40 Ah battery configuration is shown. + Other configurations are available. +
+
+
+
} + + +{(props.robotModel == "AMP") &&
+ + + This simplified 3D model of the Husky A300 AMP includes details like the enclosure's mounting extrusions, electronic modules and 3U Eurorack, and arch superstructure. + This model also includes the features from the base Husky A300, such as the System Interface Assembly circuit board where you can connect to the robot's electrical provisions. + +
+
+ + +
+
+
} + + +{(props.robotModel == "Observer") &&
+ + + This simplified 3D model of the Husky A300 Observer includes the PTZ camera, and the wireless charger. + This model also includes all the features that exist in the Husky A300 and Husky AMP models. + +
+
+ + +
+
} \ No newline at end of file diff --git a/components/husky_a300/husky_a300_system_interface_connector_summary.mdx b/components/husky_a300/husky_a300_system_interface_connector_summary.mdx index 4564daa1..a79bfe68 100644 --- a/components/husky_a300/husky_a300_system_interface_connector_summary.mdx +++ b/components/husky_a300/husky_a300_system_interface_connector_summary.mdx @@ -1,27 +1,27 @@ -### System Interface Connector Summary {#system-interface-circuit-board-connector-summary} - -
-
- -
-
- -The System Interface Assembly is a circuit board that includes power supplies, lighting controllers, motor controllers, and the Husky's microcontroller. -This circuit board has connectors for: power, fans, relays, GPIOs, auxiliary inputs, auxiliary outputs, and Emergency Stop devices. - -| Purpose | Label on the circuit board | Connector on the circuit board | Mating connector | Mating connector's crimp | Crimping tool | -| :----------------------------------------------------------- | :--------------------------- | :----------------------------- | :--------------- | :------------------------------------------------------------------------------------- | :--------------- | -| User Power Connections | USER 1 - USER 8 | Molex 0039296088 | Molex 0039012080 | Molex 0039000140 (AWG 22-28)
Or
Molex 0039000073 (AWG 18-24) | Molex 0638191000 | -| Expansion Power | EXP 1 - EXP 2 | Molex 1720650202 | Molex 1700010102 | Molex 1720630311 (AWG 14-16)
Or
Molex 1720630312 (AWG 12) | Molex 2238631200 | -| AUX Inputs | AUX1 IN, AUX2 IN, AUX3 IN | TE 3-794682-6 | TE 794617-6 | TE 1-794606-1 (AWG 20-24)
Or
TE 1-794607-1 (AWG 26-30) | TE 91391-1 | -| AUX Outputs | AUX1 OUT, AUX2 OUT, AUX3 OUT | TE 3-794682-8 | TE 794617-8 | TE 1-794606-1 (AWG 20-24)
Or
TE 1-794607-1 (AWG 26-30) | TE 91391-1 | -| GPIO | GPIO | TE 4-794680-6 | TE 1-794617-6 | TE 1-794606-1 (AWG 20-24)
Or
TE 1-794607-1 (AWG 26-30) | TE 91391-1 | -| Fans | FAN 5 - FAN 8 | Molex 0705430003 | Molex 0050579404 | Molex 0016020103 (AWG 22-24) | Molex 0638118700 | -| Wireless Emergency Stop | W ES (Wireless E-Stop) | TE 4-794682-0 | TE 1-794617-0 | TE 1-794606-1 (AWG 20-24)
Or
TE 1-794607-1 (AWG 26-30) | TE 91391-1 | -| Emergency Stop Buttons | ES 3 - ES 8 (E-Stop) | TE 3-794682-4 | TE 794617-4 | TE 1-794606-1 (AWG 20-24)
Or
TE 1-794607-1 (AWG 26-30) | TE 91391-1 | -| Computer Power | SYS1 - SYS 2 | Molex 1720650204 | Molex 1700010104 | Molex 1720630311 (AWG 14-16)
Or
Molex 1720630312 (AWG 12) | Molex 2238631200 | -| Graphics Card Power | SYS3 | Molex 1720650206 | Molex 1700010106 | Molex 1720630311 (AWG 14-16)
Or
Molex 1720630312 (AWG 12) | Molex 2238631200 | -| Network Switch Power | SYS4 | Molex 0039281023 | Molex 0039012020 | Molex 0039000140 (AWG 22-28)
Or
Molex 0039000073 (AWG 18-24) | Molex 0638191000 | +### System Interface Connector Summary {#system-interface-circuit-board-connector-summary} + +
+
+ +
+
+ +The System Interface Assembly is a circuit board that includes power supplies, lighting controllers, motor controllers, and the Husky's microcontroller. +This circuit board has connectors for: power, fans, relays, GPIOs, auxiliary inputs, auxiliary outputs, and Emergency Stop devices. + +| Purpose | Label on the circuit board | Connector on the circuit board | Mating connector | Mating connector's crimp | Crimping tool | +| :----------------------------------------------------------- | :--------------------------- | :----------------------------- | :--------------- | :------------------------------------------------------------------------------------- | :--------------- | +| User Power Connections | USER 1 - USER 8 | Molex 0039296088 | Molex 0039012080 | Molex 0039000140 (AWG 22-28)
Or
Molex 0039000073 (AWG 18-24) | Molex 0638191000 | +| Expansion Power | EXP 1 - EXP 2 | Molex 1720650202 | Molex 1700010102 | Molex 1720630311 (AWG 14-16)
Or
Molex 1720630312 (AWG 12) | Molex 2238631200 | +| AUX Inputs | AUX1 IN, AUX2 IN, AUX3 IN | TE 3-794682-6 | TE 794617-6 | TE 1-794606-1 (AWG 20-24)
Or
TE 1-794607-1 (AWG 26-30) | TE 91391-1 | +| AUX Outputs | AUX1 OUT, AUX2 OUT, AUX3 OUT | TE 3-794682-8 | TE 794617-8 | TE 1-794606-1 (AWG 20-24)
Or
TE 1-794607-1 (AWG 26-30) | TE 91391-1 | +| GPIO | GPIO | TE 4-794680-6 | TE 1-794617-6 | TE 1-794606-1 (AWG 20-24)
Or
TE 1-794607-1 (AWG 26-30) | TE 91391-1 | +| Fans | FAN 5 - FAN 8 | Molex 0705430003 | Molex 0050579404 | Molex 0016020103 (AWG 22-24) | Molex 0638118700 | +| Wireless Emergency Stop | W ES (Wireless E-Stop) | TE 4-794682-0 | TE 1-794617-0 | TE 1-794606-1 (AWG 20-24)
Or
TE 1-794607-1 (AWG 26-30) | TE 91391-1 | +| Emergency Stop Buttons | ES 3 - ES 8 (E-Stop) | TE 3-794682-4 | TE 794617-4 | TE 1-794606-1 (AWG 20-24)
Or
TE 1-794607-1 (AWG 26-30) | TE 91391-1 | +| Computer Power | SYS1 - SYS 2 | Molex 1720650204 | Molex 1700010104 | Molex 1720630311 (AWG 14-16)
Or
Molex 1720630312 (AWG 12) | Molex 2238631200 | +| Graphics Card Power | SYS3 | Molex 1720650206 | Molex 1700010106 | Molex 1720630311 (AWG 14-16)
Or
Molex 1720630312 (AWG 12) | Molex 2238631200 | +| Network Switch Power | SYS4 | Molex 0039281023 | Molex 0039012020 | Molex 0039000140 (AWG 22-28)
Or
Molex 0039000073 (AWG 18-24) | Molex 0638191000 | diff --git a/components/husky_a300/husky_a300_system_interface_debug_led.mdx b/components/husky_a300/husky_a300_system_interface_debug_led.mdx index 6eb05965..1c7ca7ef 100644 --- a/components/husky_a300/husky_a300_system_interface_debug_led.mdx +++ b/components/husky_a300/husky_a300_system_interface_debug_led.mdx @@ -1,64 +1,64 @@ -### Debugging The System Interface Assembly, _(Debug LEDs)_ - -
-
- -
-
- -The System Interface Assembly includes many LEDs to help debug system issues. - -:::safety-warning - -The Husky must be powered on, with the Top Plate removed to see these Debug LEDs. -This exposes significant battery energy to the technician, and risk of starting a fire. - -Review your worksite's safe operating procedures before performing this task. - -::: - -
- -
- Click to see all the LED functions - - #### Common Core Debug LEDs - - - `D6: USB 5V`: Solid green if a USB cable is plugged in and used to power the board - - `D7: 3.3V`: Solid green when the 3.3 V power rail is operational; else off - - `D9: DBG/CON`: For future use - - `D11: HB/ERR`: Heartbeat that toggles (red/off) every 500 ms when the main firmware loop is running; solid on or off indicates an error - - #### DC/DC Debug LEDs - - - `D3: V OUT`: Solid green when the output is operational; else off - - #### Motor Controller LEDs - - - `5V0`: Solid green when the 5 V power rail is operational; else off - - `3V3`: Solid green when the 3.3 V power rail is operational; else off - - `MTR_FAULT`: Solid red when a motor fault is detected; else off - - `ERROR`: Toggles (red/off) every 500 ms when a motor control error is detected; else off - - `DBG2`: For future use - - `DBG1`: Heartbeat that toggles (green/off) every 500 ms when the firmware loop is running; solid on or off indicates an error - - #### Main Circuit Board Debug LEDs - - - `D2`: UVB FLT: User power VBAT fault: red if the user battery rail is not enabled or if there has been a fault such as an overcurrent or over temperature event; else off - - `D3`: U24 FLT: User power 24V fault: red if the user 24V rail is not enabled or if there has been a fault such as an overcurrent or over temperature event; else off - - `D4`: U12A FLT: User power 12VA fault: red if the user 12VA rail is not enabled or if there has been a fault such as an overcurrent or over temperature event; else off - - `D5`: U12B FLT: User power 12VB fault: red if the user 12VB rail is not enabled or if there has been a fault such as an overcurrent or over temperature event; else off - - `D6`: PWR GD: Main power good indicator: red if any power supply is not enabled or has a fault; else off - - `D7`: 3.3V: Solid green if 3.3V rail is operational; else off - - `D9`: UPWR GD: User power good indicator: red if any of the 4 user power rails are not enabled or have a fault (including and overcurrent on any channel); else off - - `D10`: 5V: Solid green if 5V rail is operational; else off - - `D12`: APWR GD: Auxiliary power good indicator: red if either of the auxiliary power supplies are not enabled or has a fault (Auxiliary power supplies the USER power as well as other PCBA subsystem power rails at 12V and 24V); else off - - `D13`: SPWR GD: System power good indicator: red if either of the system power supplies are not enabled or has a fault (System power supplies the power for PCs, any optional GPU, and the primary network switch); else off - - `D30`: WES BP: Wireless E-Stop Bypass indicator: green if the Wireless E-Stop Bypass is enabled; else off - - `D31`: WES PFLT: Wireless E-Stop Power fault: red if the power supply is not enabled or has a fault; else off - - `D46`: XPWR GD: Expansion power good indicator: red if expansion power is not enabled or has a fault; else off - +### Debugging The System Interface Assembly, _(Debug LEDs)_ + +
+
+ +
+
+ +The System Interface Assembly includes many LEDs to help debug system issues. + +:::safety-warning + +The Husky must be powered on, with the Top Plate removed to see these Debug LEDs. +This exposes significant battery energy to the technician, and risk of starting a fire. + +Review your worksite's safe operating procedures before performing this task. + +::: + +
+ +
+ Click to see all the LED functions + + #### Common Core Debug LEDs + + - `D6: USB 5V`: Solid green if a USB cable is plugged in and used to power the board + - `D7: 3.3V`: Solid green when the 3.3 V power rail is operational; else off + - `D9: DBG/CON`: For future use + - `D11: HB/ERR`: Heartbeat that toggles (red/off) every 500 ms when the main firmware loop is running; solid on or off indicates an error + + #### DC/DC Debug LEDs + + - `D3: V OUT`: Solid green when the output is operational; else off + + #### Motor Controller LEDs + + - `5V0`: Solid green when the 5 V power rail is operational; else off + - `3V3`: Solid green when the 3.3 V power rail is operational; else off + - `MTR_FAULT`: Solid red when a motor fault is detected; else off + - `ERROR`: Toggles (red/off) every 500 ms when a motor control error is detected; else off + - `DBG2`: For future use + - `DBG1`: Heartbeat that toggles (green/off) every 500 ms when the firmware loop is running; solid on or off indicates an error + + #### Main Circuit Board Debug LEDs + + - `D2`: UVB FLT: User power VBAT fault: red if the user battery rail is not enabled or if there has been a fault such as an overcurrent or over temperature event; else off + - `D3`: U24 FLT: User power 24V fault: red if the user 24V rail is not enabled or if there has been a fault such as an overcurrent or over temperature event; else off + - `D4`: U12A FLT: User power 12VA fault: red if the user 12VA rail is not enabled or if there has been a fault such as an overcurrent or over temperature event; else off + - `D5`: U12B FLT: User power 12VB fault: red if the user 12VB rail is not enabled or if there has been a fault such as an overcurrent or over temperature event; else off + - `D6`: PWR GD: Main power good indicator: red if any power supply is not enabled or has a fault; else off + - `D7`: 3.3V: Solid green if 3.3V rail is operational; else off + - `D9`: UPWR GD: User power good indicator: red if any of the 4 user power rails are not enabled or have a fault (including and overcurrent on any channel); else off + - `D10`: 5V: Solid green if 5V rail is operational; else off + - `D12`: APWR GD: Auxiliary power good indicator: red if either of the auxiliary power supplies are not enabled or has a fault (Auxiliary power supplies the USER power as well as other PCBA subsystem power rails at 12V and 24V); else off + - `D13`: SPWR GD: System power good indicator: red if either of the system power supplies are not enabled or has a fault (System power supplies the power for PCs, any optional GPU, and the primary network switch); else off + - `D30`: WES BP: Wireless E-Stop Bypass indicator: green if the Wireless E-Stop Bypass is enabled; else off + - `D31`: WES PFLT: Wireless E-Stop Power fault: red if the power supply is not enabled or has a fault; else off + - `D46`: XPWR GD: Expansion power good indicator: red if expansion power is not enabled or has a fault; else off +
\ No newline at end of file diff --git a/components/husky_a300/husky_a300_system_power.mdx b/components/husky_a300/husky_a300_system_power.mdx index 33982c8c..30b78798 100644 --- a/components/husky_a300/husky_a300_system_power.mdx +++ b/components/husky_a300/husky_a300_system_power.mdx @@ -1,49 +1,49 @@ -import Admonition from "@theme/Admonition"; - -### System Power - -These 4 connectors collectively provide up to 400 W of power at 12 V for powering computers and network equipment. - -#### SYS1 And SYS2 Pinouts For Computers {#computer-power} - -| Pin | Function / Value | -| :-- | :--------------- | -| 1 | 12 V | -| 2 | 12 V | -| 3 | GND | -| 4 | GND | - -:::info - -SYS1 is always being used by the robot's Primary Computer. - -::: - -#### SYS3 Pinout For A Graphics Card {#graphics-card-power} - -| Pin | Function / Value | -| :-- | :--------------- | -| 1 | 12 V | -| 2 | 12 V | -| 3 | 12 V | -| 4 | GND | -| 5 | GND | -| 6 | GND | - -#### SYS4 System Power For A Network Switch {#network-switch-power} - -This provides 60 W of power at 12 V. - -| Pin | Function / Value | -| :-- | :--------------- | -| 1 | 12 V | -| 2 | GND | - -{(props.robotModel == "A300") && - SYS4 is always being used power the Husky's network switch. -} - -{((props.robotModel == "AMP") || (props.robotModel == "Observer")) && - Husky AMP and Husky Observer add a wye cable to SYS4. - This wye cable powers the base Husky A300's network switch, as well as a switch in the upper enclosure. -} +import Admonition from "@theme/Admonition"; + +### System Power + +These 4 connectors collectively provide up to 400 W of power at 12 V for powering computers and network equipment. + +#### SYS1 And SYS2 Pinouts For Computers {#computer-power} + +| Pin | Function / Value | +| :-- | :--------------- | +| 1 | 12 V | +| 2 | 12 V | +| 3 | GND | +| 4 | GND | + +:::info + +SYS1 is always being used by the robot's Primary Computer. + +::: + +#### SYS3 Pinout For A Graphics Card {#graphics-card-power} + +| Pin | Function / Value | +| :-- | :--------------- | +| 1 | 12 V | +| 2 | 12 V | +| 3 | 12 V | +| 4 | GND | +| 5 | GND | +| 6 | GND | + +#### SYS4 System Power For A Network Switch {#network-switch-power} + +This provides 60 W of power at 12 V. + +| Pin | Function / Value | +| :-- | :--------------- | +| 1 | 12 V | +| 2 | GND | + +{(props.robotModel == "A300") && + SYS4 is always being used power the Husky's network switch. +} + +{((props.robotModel == "AMP") || (props.robotModel == "Observer")) && + Husky AMP and Husky Observer add a wye cable to SYS4. + This wye cable powers the base Husky A300's network switch, as well as a switch in the upper enclosure. +} diff --git a/components/husky_a300/husky_a300_whats_included.mdx b/components/husky_a300/husky_a300_whats_included.mdx index c417d779..5ac81bec 100644 --- a/components/husky_a300/husky_a300_whats_included.mdx +++ b/components/husky_a300/husky_a300_whats_included.mdx @@ -1,20 +1,20 @@ -### What's Included? - -
    -
  • Husky A300 base robot
  • - {((props.robotModel == "AMP") || (props.robotModel == "Observer")) &&
  • Husky AMP's enclosure and sensors installed on top of the Husky A300 base robot.
  • } - {(props.robotModel == "Observer") &&
  • Husky Observer's autonomous wireless charger and stationary dock.
  • } - {(props.robotModel == "Observer") &&
  • Husky Observer's pan-tilt-zoom camera.
  • } -
  • Wireless joystick
  • -
  • Battery charger
  • -
  • Spare parts
  • -
  • Crate, with straps to retain the robot
  • -
- -:::info - -Clearpath Robotics also provides integration services. -Your order may include addional sensors, auxiliary hardware, or software packages. -This additional work will come preinstalled on your robot. - -::: +### What's Included? + +
    +
  • Husky A300 base robot
  • + {((props.robotModel == "AMP") || (props.robotModel == "Observer")) &&
  • Husky AMP's enclosure and sensors installed on top of the Husky A300 base robot.
  • } + {(props.robotModel == "Observer") &&
  • Husky Observer's autonomous wireless charger and stationary dock.
  • } + {(props.robotModel == "Observer") &&
  • Husky Observer's pan-tilt-zoom camera.
  • } +
  • Wireless joystick
  • +
  • Battery charger
  • +
  • Spare parts
  • +
  • Crate, with straps to retain the robot
  • +
+ +:::info + +Clearpath Robotics also provides integration services. +Your order may include addional sensors, auxiliary hardware, or software packages. +This additional work will come preinstalled on your robot. + +::: diff --git a/components/husky_a300/husky_a300_wireless_emergency_stop.mdx b/components/husky_a300/husky_a300_wireless_emergency_stop.mdx index 088bc6c4..3de2e785 100644 --- a/components/husky_a300/husky_a300_wireless_emergency_stop.mdx +++ b/components/husky_a300/husky_a300_wireless_emergency_stop.mdx @@ -1,26 +1,26 @@ -### Wireless Emergency Stop {#wireless-stop} - -A wireless dual-channel emergency stop can be added to Husky. -This allows you to invoke an emergency stop remotely—_(either through a button press or when the remote unit is out of range)_. -This is in addition to the Husky's built-in Emergency Stop Buttons. -Refer to the User Manual for details on how the Wireless Emergency Stop can be bypassed in certain debugging scenarios. - -The Wireless Emergency Stop can be connected to Husky on the System Interface circuit board at the `W ES` connector, based on the pinout below. - -| W ES Pin | Function / Value | -| :------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| 1 | 24 V, _(fused at 3 A)_ | -| 2 | CAN High: combined with CAN Low, connected to the CAN2 pins on the MCU; see additional notes below | -| 3 | Reset In: Pull to GND for at least 100 ms to restart the robot after all emergency stops have been cleared; equivalent to pressing the Restart Button on Husky | -| 4 | Channel 1 Out, _(24 V)_: normally connected to Channel 1 In; disconnect to trigger an emergency stop | -| 5 | Channel 1 In | -| 6 | GND | -| 7 | CAN Low | -| 8 | GND | -| 9 | Channel 2 Out, _(24 V)_: normally connected to Channel 2 In; disconnect to trigger an emergency stop | -| 10 | Channel 2 In | - -#### Receiver Installation - -In addition to the electrical integration noted above, the wireless receiver will normally require mechanical mounting inside the Husky, along with external mounting of an antenna. -Refer to Wireless Stop receivers and Cable Passthrough for additional details. +### Wireless Emergency Stop {#wireless-stop} + +A wireless dual-channel emergency stop can be added to Husky. +This allows you to invoke an emergency stop remotely—_(either through a button press or when the remote unit is out of range)_. +This is in addition to the Husky's built-in Emergency Stop Buttons. +Refer to the User Manual for details on how the Wireless Emergency Stop can be bypassed in certain debugging scenarios. + +The Wireless Emergency Stop can be connected to Husky on the System Interface circuit board at the `W ES` connector, based on the pinout below. + +| W ES Pin | Function / Value | +| :------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 1 | 24 V, _(fused at 3 A)_ | +| 2 | CAN High: combined with CAN Low, connected to the CAN2 pins on the MCU; see additional notes below | +| 3 | Reset In: Pull to GND for at least 100 ms to restart the robot after all emergency stops have been cleared; equivalent to pressing the Restart Button on Husky | +| 4 | Channel 1 Out, _(24 V)_: normally connected to Channel 1 In; disconnect to trigger an emergency stop | +| 5 | Channel 1 In | +| 6 | GND | +| 7 | CAN Low | +| 8 | GND | +| 9 | Channel 2 Out, _(24 V)_: normally connected to Channel 2 In; disconnect to trigger an emergency stop | +| 10 | Channel 2 In | + +#### Receiver Installation + +In addition to the electrical integration noted above, the wireless receiver will normally require mechanical mounting inside the Husky, along with external mounting of an antenna. +Refer to Wireless Stop receivers and Cable Passthrough for additional details. diff --git a/components/husky_a300/husky_a300_wiring_diagram.mdx b/components/husky_a300/husky_a300_wiring_diagram.mdx index 3fbe6497..116b9528 100644 --- a/components/husky_a300/husky_a300_wiring_diagram.mdx +++ b/components/husky_a300/husky_a300_wiring_diagram.mdx @@ -1,28 +1,28 @@ -import Admonition from "@theme/Admonition"; -import ButtonDownloadWiringDiagram from "/components/button_download_wiring_diagram.tsx"; - -### Wiring Diagram {#wiring-diagram} - -
-
- -
Snippet Of The Husky's Wiring Diagram, Showing The Optional 120 Ah Battery
-
-
- - - -Wiring diagrams help diagnose the cause of issues, such as damaged cables or loose connections. -This wiring diagram lists Clearpath's 6 digit item numbers for circuit boards and cables. -The diagram does not include pinouts for individual cables. - - - Please contact our [Support Team](#support) if you need more debugging information, or want a replacement cable. - - -{((props.robotModel == "AMP") || (props.robotModel == "Observer")) && - Refer to the Husky AMP's wiring diagram for details about the additional wiring added for AMP and Observer. -} +import Admonition from "@theme/Admonition"; +import ButtonDownloadWiringDiagram from "/components/button_download_wiring_diagram.tsx"; + +### Wiring Diagram {#wiring-diagram} + +
+
+ +
Snippet Of The Husky's Wiring Diagram, Showing The Optional 120 Ah Battery
+
+
+ + + +Wiring diagrams help diagnose the cause of issues, such as damaged cables or loose connections. +This wiring diagram lists Clearpath's 6 digit item numbers for circuit boards and cables. +The diagram does not include pinouts for individual cables. + + + Please contact our [Support Team](#support) if you need more debugging information, or want a replacement cable. + + +{((props.robotModel == "AMP") || (props.robotModel == "Observer")) && + Refer to the Husky AMP's wiring diagram for details about the additional wiring added for AMP and Observer. +} diff --git a/components/husky_a300/husky_a300_wiring_diagram_amp.mdx b/components/husky_a300/husky_a300_wiring_diagram_amp.mdx index 129c3360..bc2df840 100644 --- a/components/husky_a300/husky_a300_wiring_diagram_amp.mdx +++ b/components/husky_a300/husky_a300_wiring_diagram_amp.mdx @@ -1,30 +1,30 @@ -import Admonition from "@theme/Admonition"; -import ButtonDownloadWiringDiagram from "/components/button_download_wiring_diagram.tsx"; - -### Wiring Diagram {#wiring-diagram-amp} - -
-
- -
Snippet Of The Wiring Diagram, Showing The Husky Observer's Wireless Charger And Docking Lidar
-
-
- - - -Wiring diagrams help diagnose the cause of issues, such as damaged cables or loose connections. -This wiring diagram lists Clearpath's 6 digit item numbers for circuit boards, electronics, sensors, and cables. -The diagram does not include pinouts for individual cables. - - - Please contact our [Support Team](#support) if you need more debugging information, or want a replacement cable. - - - - The Husky AMP uses a Husky A300 as its base. - This wiring diagram only includes the hardware which converts a Husky A300 base into and AMP or Observer. - Refer to the [Husky A300's Wiring Diagram](#wiring-diagram) for details of how the base robot is wired. - +import Admonition from "@theme/Admonition"; +import ButtonDownloadWiringDiagram from "/components/button_download_wiring_diagram.tsx"; + +### Wiring Diagram {#wiring-diagram-amp} + +
+
+ +
Snippet Of The Wiring Diagram, Showing The Husky Observer's Wireless Charger And Docking Lidar
+
+
+ + + +Wiring diagrams help diagnose the cause of issues, such as damaged cables or loose connections. +This wiring diagram lists Clearpath's 6 digit item numbers for circuit boards, electronics, sensors, and cables. +The diagram does not include pinouts for individual cables. + + + Please contact our [Support Team](#support) if you need more debugging information, or want a replacement cable. + + + + The Husky AMP uses a Husky A300 as its base. + This wiring diagram only includes the hardware which converts a Husky A300 base into and AMP or Observer. + Refer to the [Husky A300's Wiring Diagram](#wiring-diagram) for details of how the base robot is wired. + diff --git a/components/husky_a300/networking/husky_a300_ethernet_connection.mdx b/components/husky_a300/networking/husky_a300_ethernet_connection.mdx index 5aa4e1c6..61a022cf 100644 --- a/components/husky_a300/networking/husky_a300_ethernet_connection.mdx +++ b/components/husky_a300/networking/husky_a300_ethernet_connection.mdx @@ -1,42 +1,42 @@ -#### Connecting to Husky over an Ethernet Connection {#ethernet-connection} - -Husky can always be accessed over an Ethernet connection, following the steps below. - -1. Open the Rear Charge Port Door on Husky to expose the debug Ethernet port. -1. Connect an Ethernet cable from Husky's debug Ethernet port to your laptop. -1. Set your laptop's IP address and netmask as shown below. - - **IP Address**: 192.168.131.100 - - **Netmask**: 255.255.255.0 -1. Confirm that you can ping Husky from your laptop's terminal window in Linux or the - command prompt in Windows by entering the following command: - ```ping 192.168.131.1``` - The output should be similar to the following. - ``` - Pinging 192.168.131.1 with 32 bytes of data: - Reply from 192.168.131.1: bytes=32 time<1ms TTL=128 - Reply from 192.168.131.1: bytes=32 time<1ms TTL=128 - Reply from 192.168.131.1: bytes=32 time<1ms TTL=128 - Reply from 192.168.131.1: bytes=32 time<1ms TTL=128 - - Ping statistics for 192.168.131.1: - Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), - Approximate round trip times in milli-seconds: - Minimum = 0ms, Maximum = 0ms, Average = 0ms - ``` -1. Connect to your laptop to the robot using SSH. To do so, execute the following in a terminal window: - ``` - ssh robot@192.168.131.1 - ``` - You will be prompted to enter a password. The default password is `clearpath`. - :::note - All Clearpath robots ship from the factory with their login password set to `clearpath`. - Upon receipt of your robot we recommend changing the password. To change the password, - run the following command on the robot: - ``` - passwd - ``` - This will prompt you to enter the current password, followed by the new password twice. - While typing the passwords in the `passwd` prompt there will be no visual feedback - (e.g. `*` characters). - ::: - +#### Connecting to Husky over an Ethernet Connection {#ethernet-connection} + +Husky can always be accessed over an Ethernet connection, following the steps below. + +1. Open the Rear Charge Port Door on Husky to expose the debug Ethernet port. +1. Connect an Ethernet cable from Husky's debug Ethernet port to your laptop. +1. Set your laptop's IP address and netmask as shown below. + - **IP Address**: 192.168.131.100 + - **Netmask**: 255.255.255.0 +1. Confirm that you can ping Husky from your laptop's terminal window in Linux or the + command prompt in Windows by entering the following command: + ```ping 192.168.131.1``` + The output should be similar to the following. + ``` + Pinging 192.168.131.1 with 32 bytes of data: + Reply from 192.168.131.1: bytes=32 time<1ms TTL=128 + Reply from 192.168.131.1: bytes=32 time<1ms TTL=128 + Reply from 192.168.131.1: bytes=32 time<1ms TTL=128 + Reply from 192.168.131.1: bytes=32 time<1ms TTL=128 + + Ping statistics for 192.168.131.1: + Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), + Approximate round trip times in milli-seconds: + Minimum = 0ms, Maximum = 0ms, Average = 0ms + ``` +1. Connect to your laptop to the robot using SSH. To do so, execute the following in a terminal window: + ``` + ssh robot@192.168.131.1 + ``` + You will be prompted to enter a password. The default password is `clearpath`. + :::note + All Clearpath robots ship from the factory with their login password set to `clearpath`. + Upon receipt of your robot we recommend changing the password. To change the password, + run the following command on the robot: + ``` + passwd + ``` + This will prompt you to enter the current password, followed by the new password twice. + While typing the passwords in the `passwd` prompt there will be no visual feedback + (e.g. `*` characters). + ::: + diff --git a/components/husky_a300/networking/husky_a300_netplan_wifi_client.mdx b/components/husky_a300/networking/husky_a300_netplan_wifi_client.mdx index 91a837b4..e89d6379 100644 --- a/components/husky_a300/networking/husky_a300_netplan_wifi_client.mdx +++ b/components/husky_a300/networking/husky_a300_netplan_wifi_client.mdx @@ -1,8 +1,8 @@ -#### Connecting Husky to a Wi-Fi Network {#wifi-client-setup} - -To get Husky connected to your local Wi-Fi network, follow the setup below. - -1. Follow the steps for [Connecting to Husky over an Ethernet Connection](#ethernet-connection). -1. Follow the [Wi-Fi connection](/docs/ros/networking/computer_setup#netplan-wifi) - instructions for setting up the Wi-Fi network. - +#### Connecting Husky to a Wi-Fi Network {#wifi-client-setup} + +To get Husky connected to your local Wi-Fi network, follow the setup below. + +1. Follow the steps for [Connecting to Husky over an Ethernet Connection](#ethernet-connection). +1. Follow the [Wi-Fi connection](/docs/ros/networking/computer_setup#netplan-wifi) + instructions for setting up the Wi-Fi network. + diff --git a/components/husky_a300/networking/husky_a300_peplink_cellular.mdx b/components/husky_a300/networking/husky_a300_peplink_cellular.mdx index e55e957c..96785042 100644 --- a/components/husky_a300/networking/husky_a300_peplink_cellular.mdx +++ b/components/husky_a300/networking/husky_a300_peplink_cellular.mdx @@ -1,51 +1,51 @@ -#### Connecting Husky to a Cellular Network {#cellular-setup} - -To get Husky AMP or Husky Observer connected to a cellular network, follow the steps below. - -1. Install your SIM card into Husky's router by removing the Husky's - right side panel, removing the cover on the `Cellular SIM` port on the router - inserting the SIM card into slot `A`, and reinstalling the covers. -1. [Connect your laptop to Husky's AMP network](#basic-network-connection). -1. In a web browser, open the configuration page for Husky's router: https://192.168.131.51 - - Username: `admin` - - Default password: `Clearpath1` -1. Click on the `Cellular` link. -
-
- -
Select Cellular
-
-
-1. On the new configuration page, complete the configuration as specified by your - cellular network provider. Ensure that the `Enabled` checkbox is clicked. -
-
- -
Cellular settings
-
-
-1. Click `Save and Apply` and wait for a message confirming that the configuration has been applied. -1. Click on the `Dashboard` tab and confirm that the `Cellular` connection reports as `Connected`. -
-
- -
Cellular Connection Status
-
-
- -:::info - -For more advanced configurations, refer to the `Cellular WAN` section of the -[router's user manual](https://manual.peplink.com/peplink-max-user-manual/). - -::: - +#### Connecting Husky to a Cellular Network {#cellular-setup} + +To get Husky AMP or Husky Observer connected to a cellular network, follow the steps below. + +1. Install your SIM card into Husky's router by removing the Husky's + right side panel, removing the cover on the `Cellular SIM` port on the router + inserting the SIM card into slot `A`, and reinstalling the covers. +1. [Connect your laptop to Husky's AMP network](#basic-network-connection). +1. In a web browser, open the configuration page for Husky's router: https://192.168.131.51 + - Username: `admin` + - Default password: `Clearpath1` +1. Click on the `Cellular` link. +
+
+ +
Select Cellular
+
+
+1. On the new configuration page, complete the configuration as specified by your + cellular network provider. Ensure that the `Enabled` checkbox is clicked. +
+
+ +
Cellular settings
+
+
+1. Click `Save and Apply` and wait for a message confirming that the configuration has been applied. +1. Click on the `Dashboard` tab and confirm that the `Cellular` connection reports as `Connected`. +
+
+ +
Cellular Connection Status
+
+
+ +:::info + +For more advanced configurations, refer to the `Cellular WAN` section of the +[router's user manual](https://manual.peplink.com/peplink-max-user-manual/). + +::: + diff --git a/components/husky_a300/networking/husky_a300_peplink_wifi_ap_connection.mdx b/components/husky_a300/networking/husky_a300_peplink_wifi_ap_connection.mdx index c6552c1b..337a3640 100644 --- a/components/husky_a300/networking/husky_a300_peplink_wifi_ap_connection.mdx +++ b/components/husky_a300/networking/husky_a300_peplink_wifi_ap_connection.mdx @@ -1,31 +1,31 @@ -#### Connecting to Husky AMP's Wi-Fi Access Point {#wifi-ap-connection} - -As an alternative to connecting over Ethernet, it is always possible to connect to Husky AMP's -Wi-Fi access point, following the steps below. - -1. Use your laptop to connect to Husky AMP's Wi-Fi network. The Wi-Fi network name (SSID) will be - `cpr_a300_amp_XXXXX`, where `XXXXX` matches the serial number of the Husky AMP. When - prompted, use the password `clearpath`. -1. Confirm that your laptop's Wi-Fi network interface is configured to use DHCP and that it - has been assigned an IP address in the `192.168.131.XXX` range. -1. Confirm that you can ping Husky AMP from your laptop's terminal window in Linux or the - command prompt in Windows by entering the following command: - ```ping 192.168.131.1``` - The output should be similar to the following. - ``` - Pinging 192.168.131.1 with 32 bytes of data: - Reply from 192.168.131.1: bytes=32 time<1ms TTL=128 - Reply from 192.168.131.1: bytes=32 time<1ms TTL=128 - Reply from 192.168.131.1: bytes=32 time<1ms TTL=128 - Reply from 192.168.131.1: bytes=32 time<1ms TTL=128 - - Ping statistics for 192.168.131.1: - Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), - Approximate round trip times in milli-seconds: - Minimum = 0ms, Maximum = 0ms, Average = 0ms - ``` -1. Connect to your robot via SSH. To do so, execute the following in a terminal window: - ``` - ssh robot@192.168.131.1 - ``` - +#### Connecting to Husky AMP's Wi-Fi Access Point {#wifi-ap-connection} + +As an alternative to connecting over Ethernet, it is always possible to connect to Husky AMP's +Wi-Fi access point, following the steps below. + +1. Use your laptop to connect to Husky AMP's Wi-Fi network. The Wi-Fi network name (SSID) will be + `cpr_a300_amp_XXXXX`, where `XXXXX` matches the serial number of the Husky AMP. When + prompted, use the password `clearpath`. +1. Confirm that your laptop's Wi-Fi network interface is configured to use DHCP and that it + has been assigned an IP address in the `192.168.131.XXX` range. +1. Confirm that you can ping Husky AMP from your laptop's terminal window in Linux or the + command prompt in Windows by entering the following command: + ```ping 192.168.131.1``` + The output should be similar to the following. + ``` + Pinging 192.168.131.1 with 32 bytes of data: + Reply from 192.168.131.1: bytes=32 time<1ms TTL=128 + Reply from 192.168.131.1: bytes=32 time<1ms TTL=128 + Reply from 192.168.131.1: bytes=32 time<1ms TTL=128 + Reply from 192.168.131.1: bytes=32 time<1ms TTL=128 + + Ping statistics for 192.168.131.1: + Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), + Approximate round trip times in milli-seconds: + Minimum = 0ms, Maximum = 0ms, Average = 0ms + ``` +1. Connect to your robot via SSH. To do so, execute the following in a terminal window: + ``` + ssh robot@192.168.131.1 + ``` + diff --git a/components/husky_a300/networking/husky_a300_peplink_wifi_client.mdx b/components/husky_a300/networking/husky_a300_peplink_wifi_client.mdx index fa465396..6e46a9eb 100644 --- a/components/husky_a300/networking/husky_a300_peplink_wifi_client.mdx +++ b/components/husky_a300/networking/husky_a300_peplink_wifi_client.mdx @@ -1,59 +1,59 @@ -#### Connecting Husky to a Wi-Fi Network {#wifi-client-setup} - -To get Husky AMP or Husky Observer connected to your local Wi-Fi network, follow the steps below. - -1. [Connect your laptop to Husky's AMP network](#basic-network-connection). -1. In a web browser, open the configuration page for Husky's router: https://192.168.131.51 - - Username: `admin` - - Default password: `Clearpath1` -1. Click on either the `Wi-Fi WAN on 2.4 GHz` or `Wi-Fi WAN on 5GHz` link, depending on - whether you are setting up a 2.4 GHz or 5 GHz connection. -
-
- -
Select 2.4 GHz for configuration
-
-
-1. On the new configuration page, scroll to the bottom; under `Wi-Fi Connection Profiles` - click `Create Profile`. -
-
- -
Create network profile
-
-
-1. Enter the SSID and password for the network, then click OK. -
-
- -
Configure network profile
-
-
-1. Click `Save and Apply` and wait for a message confirming that the configuration has been applied. -1. Click on the `Dashboard` tab and confirm that the configured WAN connection reports as `Connected`. -
-
- -
WAN Connection Status
-
-
- -:::info - -For more advanced configurations, refer to the `Wi-Fi WAN` section of the -[router's user manual](https://manual.peplink.com/peplink-max-user-manual/). - -::: - +#### Connecting Husky to a Wi-Fi Network {#wifi-client-setup} + +To get Husky AMP or Husky Observer connected to your local Wi-Fi network, follow the steps below. + +1. [Connect your laptop to Husky's AMP network](#basic-network-connection). +1. In a web browser, open the configuration page for Husky's router: https://192.168.131.51 + - Username: `admin` + - Default password: `Clearpath1` +1. Click on either the `Wi-Fi WAN on 2.4 GHz` or `Wi-Fi WAN on 5GHz` link, depending on + whether you are setting up a 2.4 GHz or 5 GHz connection. +
+
+ +
Select 2.4 GHz for configuration
+
+
+1. On the new configuration page, scroll to the bottom; under `Wi-Fi Connection Profiles` + click `Create Profile`. +
+
+ +
Create network profile
+
+
+1. Enter the SSID and password for the network, then click OK. +
+
+ +
Configure network profile
+
+
+1. Click `Save and Apply` and wait for a message confirming that the configuration has been applied. +1. Click on the `Dashboard` tab and confirm that the configured WAN connection reports as `Connected`. +
+
+ +
WAN Connection Status
+
+
+ +:::info + +For more advanced configurations, refer to the `Wi-Fi WAN` section of the +[router's user manual](https://manual.peplink.com/peplink-max-user-manual/). + +::: + diff --git a/components/maintenance/_wd_ssd_critical_update.mdx b/components/maintenance/_wd_ssd_critical_update.mdx index af280c77..4085b081 100644 --- a/components/maintenance/_wd_ssd_critical_update.mdx +++ b/components/maintenance/_wd_ssd_critical_update.mdx @@ -1,12 +1,12 @@ -:::warning - -Some computers shipped with a WD Blue SA510 SATA SSD, for which -the manufacturer has posted a -[critical firmware update notice](https://support-en.sandisk.com/app/answers/detailweb/a_id/50208#subject2). - -Failure to perform the firmware update could result in permanent failure of the SSD. - -::: - -[See these instructions](../../accessories/computers/mini_itx#wd-firmware-update) to check if your SSD is +:::warning + +Some computers shipped with a WD Blue SA510 SATA SSD, for which +the manufacturer has posted a +[critical firmware update notice](https://support-en.sandisk.com/app/answers/detailweb/a_id/50208#subject2). + +Failure to perform the firmware update could result in permanent failure of the SSD. + +::: + +[See these instructions](../../accessories/computers/mini_itx#wd-firmware-update) to check if your SSD is affected and to perform the update. \ No newline at end of file diff --git a/components/maintenance/wd_ssd_critical_update.mdx b/components/maintenance/wd_ssd_critical_update.mdx index 138740e7..9e28b40b 100644 --- a/components/maintenance/wd_ssd_critical_update.mdx +++ b/components/maintenance/wd_ssd_critical_update.mdx @@ -1,34 +1,34 @@ -### WD Blue SA510 SATA SSD Critical Firmware Update {#wd-firmware-update} - -:::warning - -Some computers shipped with a WD Blue SA510 SATA SSD, for which -the manufacturer has posted a -[critical firmware update notice](https://support-en.sandisk.com/app/answers/detailweb/a_id/50208#subject2). - -Failure to perform the firmware update could result in permanent failure of the SSD. - -::: - -#### How to check if your SSD is affected - -1. From the command line, run `sudo fdisk -l` to check your SSD model and check the - "Disk model" and mount location. If the disk model is in the - [list of affected models](https://support-en.sandisk.com/app/answers/detailweb/a_id/50208#subject2), - then proceed with the following steps. Otherwise, no further action is required. -1. Check the firmware version, which may require the installation of `smartmontools`: - ``` - sudo apt install smartmontools - sudo smartctl --xall /dev/sda2 | grep -i firmware - ``` - If the firmware version is **v52046100**, no further action is required. Otherwise, - proceed with the remaining steps to update the firmware. - -#### How to update the firmware on affected SSDs - -1. Create an OS image backup of the SSD ([ROS 1 backup details here](/docs_robots/legacy/ros1_robots/outdoor_robots/husky/tutorials_husky#performing-a-backup), - [ROS 2 backup details here](/docs/ros/installation/upgrading#saving-a-hard-drive-image)). -1. Remove the SSD from the robot. Ensure that you use an ESD grounded wrist strap when handling SSD or PCB components. -1. Use a USB SSD dock and a Windows computer to perform the update by [following the vendor's instructions](https://support-en.sandisk.com/app/answers/detailweb/a_id/50208#subject2). -1. Re-install the SSD into the robot. +### WD Blue SA510 SATA SSD Critical Firmware Update {#wd-firmware-update} + +:::warning + +Some computers shipped with a WD Blue SA510 SATA SSD, for which +the manufacturer has posted a +[critical firmware update notice](https://support-en.sandisk.com/app/answers/detailweb/a_id/50208#subject2). + +Failure to perform the firmware update could result in permanent failure of the SSD. + +::: + +#### How to check if your SSD is affected + +1. From the command line, run `sudo fdisk -l` to check your SSD model and check the + "Disk model" and mount location. If the disk model is in the + [list of affected models](https://support-en.sandisk.com/app/answers/detailweb/a_id/50208#subject2), + then proceed with the following steps. Otherwise, no further action is required. +1. Check the firmware version, which may require the installation of `smartmontools`: + ``` + sudo apt install smartmontools + sudo smartctl --xall /dev/sda2 | grep -i firmware + ``` + If the firmware version is **v52046100**, no further action is required. Otherwise, + proceed with the remaining steps to update the firmware. + +#### How to update the firmware on affected SSDs + +1. Create an OS image backup of the SSD ([ROS 1 backup details here](/docs_robots/legacy/ros1_robots/outdoor_robots/husky/tutorials_husky#performing-a-backup), + [ROS 2 backup details here](/docs/ros/installation/upgrading#saving-a-hard-drive-image)). +1. Remove the SSD from the robot. Ensure that you use an ESD grounded wrist strap when handling SSD or PCB components. +1. Use a USB SSD dock and a Windows computer to perform the update by [following the vendor's instructions](https://support-en.sandisk.com/app/answers/detailweb/a_id/50208#subject2). +1. Re-install the SSD into the robot. 1. Verify all data is still present and that the SSD works as expected. \ No newline at end of file diff --git a/components/supported_platforms.mdx b/components/supported_platforms.mdx index bbab1b0a..edaab207 100644 --- a/components/supported_platforms.mdx +++ b/components/supported_platforms.mdx @@ -1,39 +1,39 @@ -## Supported Platforms {#supported-platforms} - -| Platform | Platform code | Humble (`amd64`) | Humble (`arm64`) | Jazzy (`amd64`) | Jazzy (`arm64`) | -|:--------- |:------------- |:---------------- |:---------------- |:--------------- |:--------------- | -| Husky | A200 | Yes (as of 0.1) | No | Yes (as of 2.0) | Coming Soon | -| | A300 | No | No | Yes (as of 2.0) | Coming Soon | -| Jackal | J100 | Yes (as of 0.1) | No | Yes (as of 2.3) | Coming Soon | -| Warthog | W200 | Yes (as of 0.2) | No | Yes (as of 2.6) | Coming Soon | -| Dingo | DD100 | Yes (as of 0.3) | No | Yes (as of 2.3) | Coming Soon | -| | DO100 | Yes (as of 1.0) | No | Yes (as of 2.3) | Coming Soon | -| | DD150 | Yes (as of 0.3) | No | Yes (as of 2.3) | Coming Soon | -| | DO150 | Yes (as of 1.0) | No | Yes (as of 2.3) | Coming Soon | -| Ridgeback | R100 | Yes (as of 0.3) | No | Yes (as of 2.3) | Coming Soon | -| Boxer | B250 | No | No | No | No | - -## Supported ROS 2 Middleware {#supported-middleware} - -:::note - -Most Clearpath platforms use Micro ROS in their MCU firmware, which limits the ability to use -middleware implementations other than `Fast DDS`. - -If you need your Clearpath robot to interact with systems that rely on unsupported middleware, please -refer to [ROS' middleware documentation](https://docs.ros.org/en/jazzy/Concepts/Intermediate/About-Different-Middleware-Vendors.html) -for information on cross-vendor commuication. - -::: - -| Platform | Platform code | Fast DDS | CycloneDDS | Connext DDS | GurumDDS | Zenoh | -|:--------- |:------------- |:----------- |:---------- |:----------- |:-------- | :-------- | -| Husky | A200 | Yes | Yes | No | No | Yes | -| | A300 | Yes | No | No | No | No | -| Jackal | J100 | Yes | No | No | No | No | -| Warthog | W200 | Yes | No | No | No | No | -| Dingo | DD100 | Yes | No | No | No | No | -| | DO100 | Yes | No | No | No | No | -| | DD150 | Yes | No | No | No | No | -| | DO150 | Yes | No | No | No | No | -| Ridgeback | R100 | Yes | No | No | No | No | +## Supported Platforms {#supported-platforms} + +| Platform | Platform code | Humble (`amd64`) | Humble (`arm64`) | Jazzy (`amd64`) | Jazzy (`arm64`) | +|:--------- |:------------- |:---------------- |:---------------- |:--------------- |:--------------- | +| Husky | A200 | Yes (as of 0.1) | No | Yes (as of 2.0) | Coming Soon | +| | A300 | No | No | Yes (as of 2.0) | Coming Soon | +| Jackal | J100 | Yes (as of 0.1) | No | Yes (as of 2.3) | Coming Soon | +| Warthog | W200 | Yes (as of 0.2) | No | Yes (as of 2.6) | Coming Soon | +| Dingo | DD100 | Yes (as of 0.3) | No | Yes (as of 2.3) | Coming Soon | +| | DO100 | Yes (as of 1.0) | No | Yes (as of 2.3) | Coming Soon | +| | DD150 | Yes (as of 0.3) | No | Yes (as of 2.3) | Coming Soon | +| | DO150 | Yes (as of 1.0) | No | Yes (as of 2.3) | Coming Soon | +| Ridgeback | R100 | Yes (as of 0.3) | No | Yes (as of 2.3) | Coming Soon | +| Boxer | B250 | No | No | No | No | + +## Supported ROS 2 Middleware {#supported-middleware} + +:::note + +Most Clearpath platforms use Micro ROS in their MCU firmware, which limits the ability to use +middleware implementations other than `Fast DDS`. + +If you need your Clearpath robot to interact with systems that rely on unsupported middleware, please +refer to [ROS' middleware documentation](https://docs.ros.org/en/jazzy/Concepts/Intermediate/About-Different-Middleware-Vendors.html) +for information on cross-vendor commuication. + +::: + +| Platform | Platform code | Fast DDS | CycloneDDS | Connext DDS | GurumDDS | Zenoh | +|:--------- |:------------- |:----------- |:---------- |:----------- |:-------- | :-------- | +| Husky | A200 | Yes | Yes | No | No | Yes | +| | A300 | Yes | No | No | No | No | +| Jackal | J100 | Yes | No | No | No | No | +| Warthog | W200 | Yes | No | No | No | No | +| Dingo | DD100 | Yes | No | No | No | No | +| | DO100 | Yes | No | No | No | No | +| | DD150 | Yes | No | No | No | No | +| | DO150 | Yes | No | No | No | No | +| Ridgeback | R100 | Yes | No | No | No | No | diff --git a/components/supported_sensors.mdx b/components/supported_sensors.mdx index a1116339..cdfa8757 100644 --- a/components/supported_sensors.mdx +++ b/components/supported_sensors.mdx @@ -1,80 +1,80 @@ -## Supported Sensors {#supported-sensors} - -:::note - -While some sensor drivers may support other sensor models, the table below represents the -sensors that have been validated by Clearpath. - -::: - -:::note - -Debian drivers are automatically installed on robots as part of the -[Clearpath Robot Metapackage](/docs/ros/installation/robot#clearpath-robot-metapackage). - -::: - -### 2D Lidars - -| Sensor | Humble (`amd64`) | Humble (`arm64`) | Jazzy (`amd64`) | Jazzy (`arm64`) | Source | -|:------------------------------------------------------------------------------------ |:---------------- |:---------------- |:--------------- |:--------------- |:----------------------------------------------------- | -| [SICK LMS-111/LMS-151](/docs_robots/accessories/sensors/lidar_2d/sick_lms111) | Debian | Debian | Debian | Debian | [LMS1xx](https://github.com/clearpathrobotics/LMS1xx) | -| [Hokuyo UST10-LX](/docs_robots/accessories/sensors/lidar_2d/hokuyo_ust10_lx) | Debian | Debian | Debian | Debian | [urg_node](https://github.com/ros-drivers/urg_node) | -| [Hokuyo UST20-LX](/docs_robots/accessories/sensors/lidar_2d/hokuyo_ust20_lx) | Debian | Debian | Debian | Debian | [urg_node](https://github.com/ros-drivers/urg_node) | -| [Hokuyo UST30-LX](/docs_robots/accessories/sensors/lidar_2d/hokuyo_ust30_lx) | Debian | Debian | Debian | Debian | [urg_node](https://github.com/ros-drivers/urg_node) | - -### 3D Lidars - -| Sensor | Humble (`amd64`) | Humble (`arm64`) | Jazzy (`amd64`) | Jazzy (`arm64`) | Source | -|:------------------------------------------------------------------------------------ |:---------------- |:---------------- |:--------------- |:--------------- |:--------------------------------------------------------- | -| [Velodyne Puck](/docs_robots/accessories/sensors/lidar_3d/velodyne_puck) | Debian | Debian | Debian | Debian | [Velodyne](https://github.com/ros-drivers/velodyne) | -| [Ouster OS-1](/docs_robots/accessories/sensors/lidar_3d/ouster) | Debian | Debian | Debian | Debian | [Ouster](https://github.com/ouster-lidar/ouster-ros) | -| Seyond Robin | Source | Source | Source | Source | [Seyond](https://github.com/Seyond-Inc/seyond_ros_driver) | - -### IMUs - -| Sensor | Humble (`amd64`) | Humble (`arm64`) | Jazzy (`amd64`) | Jazzy (`arm64`) | Source | -|:------------------------------------------------------------------------------------ |:---------------- |:---------------- |:--------------- |:--------------- |:------------------------------------------------------------------------- | -| [MicroStrain 3DM-GX5](/docs_robots/accessories/sensors/imu/microstrain_3dm_gx5) | Debian | Debian | Debian | Debian | [LORD Inertial](https://github.com/LORD-MicroStrain/microstrain_inertial) | -| [MicroStrain 3DM-GQ7](/docs_robots/accessories/sensors/gps/microstrain_gq7) | Debian | Debian | Debian | Debian | [LORD Inertial](https://github.com/LORD-MicroStrain/microstrain_inertial) | -| [Redshift Labs UM7](/docs_robots/accessories/sensors/imu/redshift_labs_um7) | Debian | Debian | Debian | Debian | [UM7](https://github.com/ros-drivers/um7) | -| CH Robotics UM6 | Debian | Debian | Debian | Debian | [UM7](https://github.com/ros-drivers/um7) | -| Phidgets IMU | Unsupported | Unsupported | Debian | Debian | [Phidgets](https://github.com/ros-drivers/phidgets_drivers) | - - -### GPS - -| Sensor | Humble (`amd64`) | Humble (`arm64`) | Jazzy (`amd64`) | Jazzy (`arm64`) | Source | -|:------------------------------------------------------------------------------------ |:---------------- |:---------------- |:--------------- |:--------------- |:------------------------------------------------------------------------- | -| [MicroStrain 3DM-GQ7](/docs_robots/accessories/sensors/gps/microstrain_gq7) | Debian | Debian | Debian | Debian | [LORD Inertial](https://github.com/LORD-MicroStrain/microstrain_inertial) | -| [Garmin GPS 18x](/docs_robots/accessories/sensors/gps/garmin_gps_18x) | Debian | Debian | Debian | Debian | [NMEA Navsat Driver](https://github.com/ros-drivers/nmea_navsat_driver) | -| [Swift Navigation Duro](/docs_robots/accessories/sensors/gps/swift_navigation_duro) | Source | Source | Source | Source | [Duro GPS Driver](https://github.com/szenergy/duro_gps_driver) | -| NovAtel SMART6 and SMART7 | Debian | Debian | Debian | Debian | [NMEA Navsat Driver](https://github.com/ros-drivers/nmea_navsat_driver) | - -### Inertial Navigation Sensors - -| Sensor | Humble (`amd64`) | Humble (`arm64`) | Jazzy (`amd64`) | Jazzy (`arm64`) | Source | -|:------------------------------------------------------------------------------------ |:---------------- |:---------------- |:--------------- |:--------------- |:----------------------------------------------------------------------- | -| [Fixposition Vision-RTK 2](/docs_robots/accessories/sensors/ins/fixposition) | Source | Source | Source | Source | [Fixposition Driver](https://github.com/fixposition/fixposition_driver) | - -### Optical Cameras - -| Sensor | Humble (`amd64`) | Humble (`arm64`) | Jazzy (`amd64`) | Jazzy (`arm64`) | Source | -|:------------------------------------------------------------------------------------ |:---------------- |:---------------- |:--------------- |:--------------- |:----------------------------------------------------- | -| [Axis F1035-E](/docs_robots/accessories/sensors/cameras/axis_f1035_e) | Debian | Debian | Debian | Debian | [axis_camera](https://github.com/ros-drivers/axis_camera.git) | -| [Axis M5525-E](/docs_robots/accessories/sensors/cameras/axis_m5525_e) | Debian | Debian | Debian | Debian | [axis_camera](https://github.com/ros-drivers/axis_camera.git) | -| [Axis M5526-E](/docs_robots/accessories/sensors/cameras/axis_m5526_e) | Debian | Debian | Debian | Debian | [axis_camera](https://github.com/ros-drivers/axis_camera.git) | -| [Axis Q6225-LE-E](/docs_robots/accessories/sensors/cameras/axis_q6225_le) | Debian | Debian | Debian | Debian | [axis_camera](https://github.com/ros-drivers/axis_camera.git) | -| [Flir Blackfly S](/docs_robots/accessories/sensors/cameras/flir_blackfly_s) | Debian | Debian | Debian | Debian | [flir_camera_driver](https://github.com/ros-drivers/flir_camera_driver) | - -### Depth Cameras - -| Sensor | Humble (`amd64`) | Humble (`arm64`) | Jazzy (`amd64`) | Jazzy (`arm64`) | Source | -|:------------------------------------------------------------------------------------ |:---------------- |:---------------- |:--------------- |:--------------- |:----------------------------------------------------- | -| [Intel Realsense D435](/docs_robots/accessories/sensors/cameras/realsense_d435) | Debian | Debian | Debian | Debian | [Realsense](https://github.com/clearpathrobotics/realsense_ros) | -| [Intel Realsense D435i](/docs_robots/accessories/sensors/cameras/realsense_d435) | Debian | Debian | Debian | Debian | [Realsense](https://github.com/clearpathrobotics/realsense_ros) | -| Intel Realsense D415 | Debian | Debian | Debian | Debian | [Realsense](https://github.com/clearpathrobotics/realsense_ros) | -| Intel Realsense D455 | Debian | Debian | Debian | Debian | [Realsense](https://github.com/clearpathrobotics/realsense_ros) | -| Intel Realsense D456 | Debian | Debian | Debian | Debian | [Realsense](https://github.com/clearpathrobotics/realsense_ros) | -| [Luxonis OAK-D](/docs_robots/accessories/sensors/cameras/luxonis_oakd) | Debian | Debian | Debian | Debian | [depthai-ros](https://github.com/luxonis/depthai-ros.git) | -| [Stereolabs Zed 2](/docs_robots/accessories/sensors/cameras/stereolabs_zed_2) | Source | Source | Source | Source | [zed-ros2-wrapper](https://github.com/stereolabs/zed-ros2-wrapper.git) | +## Supported Sensors {#supported-sensors} + +:::note + +While some sensor drivers may support other sensor models, the table below represents the +sensors that have been validated by Clearpath. + +::: + +:::note + +Debian drivers are automatically installed on robots as part of the +[Clearpath Robot Metapackage](/docs/ros/installation/robot#clearpath-robot-metapackage). + +::: + +### 2D Lidars + +| Sensor | Humble (`amd64`) | Humble (`arm64`) | Jazzy (`amd64`) | Jazzy (`arm64`) | Source | +|:------------------------------------------------------------------------------------ |:---------------- |:---------------- |:--------------- |:--------------- |:----------------------------------------------------- | +| [SICK LMS-111/LMS-151](/docs_robots/accessories/sensors/lidar_2d/sick_lms111) | Debian | Debian | Debian | Debian | [LMS1xx](https://github.com/clearpathrobotics/LMS1xx) | +| [Hokuyo UST10-LX](/docs_robots/accessories/sensors/lidar_2d/hokuyo_ust10_lx) | Debian | Debian | Debian | Debian | [urg_node](https://github.com/ros-drivers/urg_node) | +| [Hokuyo UST20-LX](/docs_robots/accessories/sensors/lidar_2d/hokuyo_ust20_lx) | Debian | Debian | Debian | Debian | [urg_node](https://github.com/ros-drivers/urg_node) | +| [Hokuyo UST30-LX](/docs_robots/accessories/sensors/lidar_2d/hokuyo_ust30_lx) | Debian | Debian | Debian | Debian | [urg_node](https://github.com/ros-drivers/urg_node) | + +### 3D Lidars + +| Sensor | Humble (`amd64`) | Humble (`arm64`) | Jazzy (`amd64`) | Jazzy (`arm64`) | Source | +|:------------------------------------------------------------------------------------ |:---------------- |:---------------- |:--------------- |:--------------- |:--------------------------------------------------------- | +| [Velodyne Puck](/docs_robots/accessories/sensors/lidar_3d/velodyne_puck) | Debian | Debian | Debian | Debian | [Velodyne](https://github.com/ros-drivers/velodyne) | +| [Ouster OS-1](/docs_robots/accessories/sensors/lidar_3d/ouster) | Debian | Debian | Debian | Debian | [Ouster](https://github.com/ouster-lidar/ouster-ros) | +| Seyond Robin | Source | Source | Source | Source | [Seyond](https://github.com/Seyond-Inc/seyond_ros_driver) | + +### IMUs + +| Sensor | Humble (`amd64`) | Humble (`arm64`) | Jazzy (`amd64`) | Jazzy (`arm64`) | Source | +|:------------------------------------------------------------------------------------ |:---------------- |:---------------- |:--------------- |:--------------- |:------------------------------------------------------------------------- | +| [MicroStrain 3DM-GX5](/docs_robots/accessories/sensors/imu/microstrain_3dm_gx5) | Debian | Debian | Debian | Debian | [LORD Inertial](https://github.com/LORD-MicroStrain/microstrain_inertial) | +| [MicroStrain 3DM-GQ7](/docs_robots/accessories/sensors/gps/microstrain_gq7) | Debian | Debian | Debian | Debian | [LORD Inertial](https://github.com/LORD-MicroStrain/microstrain_inertial) | +| [Redshift Labs UM7](/docs_robots/accessories/sensors/imu/redshift_labs_um7) | Debian | Debian | Debian | Debian | [UM7](https://github.com/ros-drivers/um7) | +| CH Robotics UM6 | Debian | Debian | Debian | Debian | [UM7](https://github.com/ros-drivers/um7) | +| Phidgets IMU | Unsupported | Unsupported | Debian | Debian | [Phidgets](https://github.com/ros-drivers/phidgets_drivers) | + + +### GPS + +| Sensor | Humble (`amd64`) | Humble (`arm64`) | Jazzy (`amd64`) | Jazzy (`arm64`) | Source | +|:------------------------------------------------------------------------------------ |:---------------- |:---------------- |:--------------- |:--------------- |:------------------------------------------------------------------------- | +| [MicroStrain 3DM-GQ7](/docs_robots/accessories/sensors/gps/microstrain_gq7) | Debian | Debian | Debian | Debian | [LORD Inertial](https://github.com/LORD-MicroStrain/microstrain_inertial) | +| [Garmin GPS 18x](/docs_robots/accessories/sensors/gps/garmin_gps_18x) | Debian | Debian | Debian | Debian | [NMEA Navsat Driver](https://github.com/ros-drivers/nmea_navsat_driver) | +| [Swift Navigation Duro](/docs_robots/accessories/sensors/gps/swift_navigation_duro) | Source | Source | Source | Source | [Duro GPS Driver](https://github.com/szenergy/duro_gps_driver) | +| NovAtel SMART6 and SMART7 | Debian | Debian | Debian | Debian | [NMEA Navsat Driver](https://github.com/ros-drivers/nmea_navsat_driver) | + +### Inertial Navigation Sensors + +| Sensor | Humble (`amd64`) | Humble (`arm64`) | Jazzy (`amd64`) | Jazzy (`arm64`) | Source | +|:------------------------------------------------------------------------------------ |:---------------- |:---------------- |:--------------- |:--------------- |:----------------------------------------------------------------------- | +| [Fixposition Vision-RTK 2](/docs_robots/accessories/sensors/ins/fixposition) | Source | Source | Source | Source | [Fixposition Driver](https://github.com/fixposition/fixposition_driver) | + +### Optical Cameras + +| Sensor | Humble (`amd64`) | Humble (`arm64`) | Jazzy (`amd64`) | Jazzy (`arm64`) | Source | +|:------------------------------------------------------------------------------------ |:---------------- |:---------------- |:--------------- |:--------------- |:----------------------------------------------------- | +| [Axis F1035-E](/docs_robots/accessories/sensors/cameras/axis_f1035_e) | Debian | Debian | Debian | Debian | [axis_camera](https://github.com/ros-drivers/axis_camera.git) | +| [Axis M5525-E](/docs_robots/accessories/sensors/cameras/axis_m5525_e) | Debian | Debian | Debian | Debian | [axis_camera](https://github.com/ros-drivers/axis_camera.git) | +| [Axis M5526-E](/docs_robots/accessories/sensors/cameras/axis_m5526_e) | Debian | Debian | Debian | Debian | [axis_camera](https://github.com/ros-drivers/axis_camera.git) | +| [Axis Q6225-LE-E](/docs_robots/accessories/sensors/cameras/axis_q6225_le) | Debian | Debian | Debian | Debian | [axis_camera](https://github.com/ros-drivers/axis_camera.git) | +| [Flir Blackfly S](/docs_robots/accessories/sensors/cameras/flir_blackfly_s) | Debian | Debian | Debian | Debian | [flir_camera_driver](https://github.com/ros-drivers/flir_camera_driver) | + +### Depth Cameras + +| Sensor | Humble (`amd64`) | Humble (`arm64`) | Jazzy (`amd64`) | Jazzy (`arm64`) | Source | +|:------------------------------------------------------------------------------------ |:---------------- |:---------------- |:--------------- |:--------------- |:----------------------------------------------------- | +| [Intel Realsense D435](/docs_robots/accessories/sensors/cameras/realsense_d435) | Debian | Debian | Debian | Debian | [Realsense](https://github.com/clearpathrobotics/realsense_ros) | +| [Intel Realsense D435i](/docs_robots/accessories/sensors/cameras/realsense_d435) | Debian | Debian | Debian | Debian | [Realsense](https://github.com/clearpathrobotics/realsense_ros) | +| Intel Realsense D415 | Debian | Debian | Debian | Debian | [Realsense](https://github.com/clearpathrobotics/realsense_ros) | +| Intel Realsense D455 | Debian | Debian | Debian | Debian | [Realsense](https://github.com/clearpathrobotics/realsense_ros) | +| Intel Realsense D456 | Debian | Debian | Debian | Debian | [Realsense](https://github.com/clearpathrobotics/realsense_ros) | +| [Luxonis OAK-D](/docs_robots/accessories/sensors/cameras/luxonis_oakd) | Debian | Debian | Debian | Debian | [depthai-ros](https://github.com/luxonis/depthai-ros.git) | +| [Stereolabs Zed 2](/docs_robots/accessories/sensors/cameras/stereolabs_zed_2) | Source | Source | Source | Source | [zed-ros2-wrapper](https://github.com/stereolabs/zed-ros2-wrapper.git) | diff --git a/docs_indoornav_user_manual/api.mdx b/docs_indoornav_user_manual/api.mdx index e0741f80..cb41c364 100644 --- a/docs_indoornav_user_manual/api.mdx +++ b/docs_indoornav_user_manual/api.mdx @@ -1,139 +1,139 @@ ---- -title: "Appendix A: IndoorNav ROS 2 API" -sidebar_label: "Appendix A: IndoorNav ROS 2 API" -sidebar_position: 6 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -In addition to the Web GUI, IndoorNav provides a ROS 2 API for -programmatic interactions. Documentation for this API is included in the -`clearpath-api` package, installable with `apt`: - -```bash -sudo apt install clearpath-api -``` - -Once the package is installed, the documentation can be found at -`/opt/clearpath/ros2-api-1.3.3/share/public`. Alternatively, the -documentation can be downloaded directly from -[docs.ottomotors.com](https://file-share.ottomotors.com/remote.php/webdav/OTTO%20Motors/Software%20Releases/v2.22/Clearpath_API_html_PDF_2.22.zip) -(requires an OTTO Motors account to log in). - -## API Summary - -The ROS 2 API is separated into 3 main categories, each operating on a -separate ROS 2 Domain, as outlined in the table below: - -_ROS 2 API Domain IDs_ - -| Domain ID | Description | -|-------------|--------------| -| 100 | Fleet API | -| 110 | Autonomy API | -| 95 | Platform API | - -The Fleet API is intended to allow the robot to be controlled by an -external fleet manager. - -The Autonomy API enables control of a single robot's autonomy and -navigation. - -The Platform API is not available for use with IndoorNav. Instead of -using the Platform API, developers should use the base robot's ROS 1 -nodes to interact with the robot hardware. - -Additional details on the Fleet, Autonomy, and Platform APIs can be -found on -[docs.ottomotors.com](https://docs.ottomotors.com/Archive/2-22/out/en/51722-52217-robot-fleet-api.html). - -## API Examples - -OTTO Motors provides examples of working with their ROS 2 API. These -examples can be found in -`/opt/clearpath/ros2-api-1.3.3/share/clearpath_api/examples/` - -To build the examples, create a Colcon workspace, copy (or symlink) the -examples folder into the `src` folder, and build using the -`colcon build` command: - -```bash -mkdir -p $HOME/example_ws/src -cd $HOME/example_ws/src -ln -s /opt/clearpath/ros2-api-1.3.3/share/clearpath_api/examples/ $(pwd)/examples -cd .. -source /opt/ros/foxy/setup.bash -source /opt/clearpath/ros2-api-1.3.3/local_setup.bash -colcon build -``` - -The `examples` folder contains 3 programs: - -- `send_move_goal`: command the robot to drive to an (X, Y, Yaw) position on the map -- `monitor_odom_intent`: print the robot's odometry and planning data as it navigates -- `get_map_info`: get information about the map saved on the robot - -:::note - -At the time of writing there is a known bug in the `get_map_info` -example; it always returns an empty array. This will be corrected ASAP. - -::: - -Refer to the source code for the examples for more information about -their use. All examples should be run using the Fleet API domain ID. - -## Accessing Noetic Topics in ROS 2 - -The Clearpath Robotics base platform is configured to bridge sensor -data, velocity control, wireless connection status, power information, -and other basic topics into ROS 2 on domain ID 121. The bridged topics -are prefaced with the robot's hostname (with any hyphens replaced with -underscores). For example: - -```bash -export ROS_DOMAIN_ID=121 -ros2 topic list -/cpr_dora/battery_status -/cpr_dora/cmd_vel -/cpr_dora/front/scan -/cpr_dora/gx5/imu/data -/cpr_dora/imu/data -/cpr_dora/navsat/fix -/cpr_dora/rear/scan -/cpr_dora/wireless/connected -``` - -Publishing to the `{hostname}/cmd_vel` topic will drive the robot: - -```bash -ros2 topic pub /cpr_dora/cmd_vel geometry_msgs/msg/Twist '{linear: {x: 0.1}}' -r 10 -``` - -All other topics are read-only and will publish sensor/power/wireless -information at the same rate as their ROS 1 topics. - -## Using the ROS 2 API with ROS Noetic - -:::note - -At present the ROS 2 API is unstable when bridged into ROS 1 Noetic. You -are welcome to experiment with developing ROS 1 nodes that use the -bridged topics, but Clearpath Robotics can only offer minimal support. - -::: - -To enable bridging the ROS 2 Fleet and Platform APIs into the ROS 1 Noetic -master, set the `INDOORNAV_ENABLE_ROS2_TO_ROS1_BRIDGE` envar to `1` in -`/etc/ros/setup.bash`: - -```bash -export INDOORNAV_ENABLE_ROS2_TO_ROS1_BRIDGE=1 -``` - -This will start 2 `ros1_bridge` nodes (one for domain 110 and one for -domain 95). Bridged topics will be visible in the `fleet_api` and -`autonomy_api` namespaces when `rostopic list` is run. - -You will need to build or install the `clearpath_api` messages and +--- +title: "Appendix A: IndoorNav ROS 2 API" +sidebar_label: "Appendix A: IndoorNav ROS 2 API" +sidebar_position: 6 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +In addition to the Web GUI, IndoorNav provides a ROS 2 API for +programmatic interactions. Documentation for this API is included in the +`clearpath-api` package, installable with `apt`: + +```bash +sudo apt install clearpath-api +``` + +Once the package is installed, the documentation can be found at +`/opt/clearpath/ros2-api-1.3.3/share/public`. Alternatively, the +documentation can be downloaded directly from +[docs.ottomotors.com](https://file-share.ottomotors.com/remote.php/webdav/OTTO%20Motors/Software%20Releases/v2.22/Clearpath_API_html_PDF_2.22.zip) +(requires an OTTO Motors account to log in). + +## API Summary + +The ROS 2 API is separated into 3 main categories, each operating on a +separate ROS 2 Domain, as outlined in the table below: + +_ROS 2 API Domain IDs_ + +| Domain ID | Description | +|-------------|--------------| +| 100 | Fleet API | +| 110 | Autonomy API | +| 95 | Platform API | + +The Fleet API is intended to allow the robot to be controlled by an +external fleet manager. + +The Autonomy API enables control of a single robot's autonomy and +navigation. + +The Platform API is not available for use with IndoorNav. Instead of +using the Platform API, developers should use the base robot's ROS 1 +nodes to interact with the robot hardware. + +Additional details on the Fleet, Autonomy, and Platform APIs can be +found on +[docs.ottomotors.com](https://docs.ottomotors.com/Archive/2-22/out/en/51722-52217-robot-fleet-api.html). + +## API Examples + +OTTO Motors provides examples of working with their ROS 2 API. These +examples can be found in +`/opt/clearpath/ros2-api-1.3.3/share/clearpath_api/examples/` + +To build the examples, create a Colcon workspace, copy (or symlink) the +examples folder into the `src` folder, and build using the +`colcon build` command: + +```bash +mkdir -p $HOME/example_ws/src +cd $HOME/example_ws/src +ln -s /opt/clearpath/ros2-api-1.3.3/share/clearpath_api/examples/ $(pwd)/examples +cd .. +source /opt/ros/foxy/setup.bash +source /opt/clearpath/ros2-api-1.3.3/local_setup.bash +colcon build +``` + +The `examples` folder contains 3 programs: + +- `send_move_goal`: command the robot to drive to an (X, Y, Yaw) position on the map +- `monitor_odom_intent`: print the robot's odometry and planning data as it navigates +- `get_map_info`: get information about the map saved on the robot + +:::note + +At the time of writing there is a known bug in the `get_map_info` +example; it always returns an empty array. This will be corrected ASAP. + +::: + +Refer to the source code for the examples for more information about +their use. All examples should be run using the Fleet API domain ID. + +## Accessing Noetic Topics in ROS 2 + +The Clearpath Robotics base platform is configured to bridge sensor +data, velocity control, wireless connection status, power information, +and other basic topics into ROS 2 on domain ID 121. The bridged topics +are prefaced with the robot's hostname (with any hyphens replaced with +underscores). For example: + +```bash +export ROS_DOMAIN_ID=121 +ros2 topic list +/cpr_dora/battery_status +/cpr_dora/cmd_vel +/cpr_dora/front/scan +/cpr_dora/gx5/imu/data +/cpr_dora/imu/data +/cpr_dora/navsat/fix +/cpr_dora/rear/scan +/cpr_dora/wireless/connected +``` + +Publishing to the `{hostname}/cmd_vel` topic will drive the robot: + +```bash +ros2 topic pub /cpr_dora/cmd_vel geometry_msgs/msg/Twist '{linear: {x: 0.1}}' -r 10 +``` + +All other topics are read-only and will publish sensor/power/wireless +information at the same rate as their ROS 1 topics. + +## Using the ROS 2 API with ROS Noetic + +:::note + +At present the ROS 2 API is unstable when bridged into ROS 1 Noetic. You +are welcome to experiment with developing ROS 1 nodes that use the +bridged topics, but Clearpath Robotics can only offer minimal support. + +::: + +To enable bridging the ROS 2 Fleet and Platform APIs into the ROS 1 Noetic +master, set the `INDOORNAV_ENABLE_ROS2_TO_ROS1_BRIDGE` envar to `1` in +`/etc/ros/setup.bash`: + +```bash +export INDOORNAV_ENABLE_ROS2_TO_ROS1_BRIDGE=1 +``` + +This will start 2 `ros1_bridge` nodes (one for domain 110 and one for +domain 95). Bridged topics will be visible in the `fleet_api` and +`autonomy_api` namespaces when `rostopic list` is run. + +You will need to build or install the `clearpath_api` messages and service definitions for Noetic. \ No newline at end of file diff --git a/docs_indoornav_user_manual/base_robot_config/_category_.json b/docs_indoornav_user_manual/base_robot_config/_category_.json index df114c9b..c79acf89 100644 --- a/docs_indoornav_user_manual/base_robot_config/_category_.json +++ b/docs_indoornav_user_manual/base_robot_config/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Base Robot Config", - "position": 3 +{ + "label": "Base Robot Config", + "position": 3 } \ No newline at end of file diff --git a/docs_indoornav_user_manual/base_robot_config/config_apt_rosdep.mdx b/docs_indoornav_user_manual/base_robot_config/config_apt_rosdep.mdx index ce76ca5b..e7891634 100644 --- a/docs_indoornav_user_manual/base_robot_config/config_apt_rosdep.mdx +++ b/docs_indoornav_user_manual/base_robot_config/config_apt_rosdep.mdx @@ -1,66 +1,66 @@ ---- -title: APT and Rosdep Configuration -sidebar_label: APT and Rosdep Configuration -sidebar_position: 2 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -To install the IndoorNav software on your robot you must add the ROS 1, -ROS 2, and Clearpath Robotics package servers to your apt configuration. -This is normally done automatically by Clearpath's OS installation -media, but if you are missing any of these sources, use the following -commands to add them - -**ROS 1 Noetic** - -```bash -sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list' -curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add - -sudo apt-get update -``` - -**ROS 2 Foxy** - -```bash -echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(source /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null -sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg -sudo apt-get update -``` - -**Clearpath Robotics** - -```bash -sudo sh -c 'echo "deb https://packages.clearpathrobotics.com/stable/ubuntu $(lsb_release -cs) main" > /etc/apt/sources.list.d/clearpath-latest.list' -wget https://packages.clearpathrobotics.com/public.key -O - | sudo apt-key add - -sudo apt-get update -``` - -Once you have enabled the necessary package sources, make sure rosdep -can resolve all the necessary dependencies: - -```bash -sudo wget https://raw.githubusercontent.com/clearpathrobotics/public-rosdistro/master/rosdep/50-clearpath.list -O /etc/ros/rosdep/sources.list.d/50-clearpath.list -rosdep update -``` - -:::note - -Complete ROS Noetic installation instructions can be found at -http://wiki.ros.org/noetic/Installation/Ubuntu - -::: - -:::note - -Complete ROS 2 Foxy installation instructions can be found at -https://docs.ros.org/en/foxy/Installation/Ubuntu-Install-Debians.html - -::: - -:::note - -Complete instructions for Clearpath APT sources can be found at -http://packages.clearpathrobotics.com - -::: +--- +title: APT and Rosdep Configuration +sidebar_label: APT and Rosdep Configuration +sidebar_position: 2 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +To install the IndoorNav software on your robot you must add the ROS 1, +ROS 2, and Clearpath Robotics package servers to your apt configuration. +This is normally done automatically by Clearpath's OS installation +media, but if you are missing any of these sources, use the following +commands to add them + +**ROS 1 Noetic** + +```bash +sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list' +curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add - +sudo apt-get update +``` + +**ROS 2 Foxy** + +```bash +echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(source /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null +sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg +sudo apt-get update +``` + +**Clearpath Robotics** + +```bash +sudo sh -c 'echo "deb https://packages.clearpathrobotics.com/stable/ubuntu $(lsb_release -cs) main" > /etc/apt/sources.list.d/clearpath-latest.list' +wget https://packages.clearpathrobotics.com/public.key -O - | sudo apt-key add - +sudo apt-get update +``` + +Once you have enabled the necessary package sources, make sure rosdep +can resolve all the necessary dependencies: + +```bash +sudo wget https://raw.githubusercontent.com/clearpathrobotics/public-rosdistro/master/rosdep/50-clearpath.list -O /etc/ros/rosdep/sources.list.d/50-clearpath.list +rosdep update +``` + +:::note + +Complete ROS Noetic installation instructions can be found at +http://wiki.ros.org/noetic/Installation/Ubuntu + +::: + +:::note + +Complete ROS 2 Foxy installation instructions can be found at +https://docs.ros.org/en/foxy/Installation/Ubuntu-Install-Debians.html + +::: + +:::note + +Complete instructions for Clearpath APT sources can be found at +http://packages.clearpathrobotics.com + +::: diff --git a/docs_indoornav_user_manual/base_robot_config/config_install_required_sw.mdx b/docs_indoornav_user_manual/base_robot_config/config_install_required_sw.mdx index 72977979..5f84f0d0 100644 --- a/docs_indoornav_user_manual/base_robot_config/config_install_required_sw.mdx +++ b/docs_indoornav_user_manual/base_robot_config/config_install_required_sw.mdx @@ -1,47 +1,47 @@ ---- -title: Installing Required Software -sidebar_label: Installing Required Software -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -Once you have configured apt and rosdep, you can install the IndoorNav -libraries and their dependencies on your robot by running: - -``` bash -sudo apt-get install ros-$ROS_DISTRO-cpr-indoornav-ROBOT -``` - -where _ROBOT_ is replaced with the model of Clearpath robot -you are installing: -- `dingo` for Dingo-O or Dingo-D, -- `husky` for Husky A200, -- `jackal` for Jackal J100, or -- `ridgeback` for Ridgeback. - -This will automatically install the required launch files and -dependencies. - -Once the packages are installed, run the following to configure the -IndoorNav software: - -```bash -rosrun cpr_indoornav setup -``` - -This script will install additional necessary packages, configure -`apache2` to act as a proxy server to the IndoorNav backpack, configure -SSH credentials to allow ROS to launch nodes on the backpack PC -automatically, and configure the networking between the main PC and -backpack to ensure the hostnames and IP addresses are configured -correctly. The `setup` script is interactive; you will be prompted to -enter your password more than once and select options from multiple -menus. - -Once you have finished running the setup script, reboot the robot to -finish. - -For more details on the networking configuration the -`cpr_indoornav setup` script performs, please see -[Configuring the Network Bridge](/docs_indoornav_user_manual/network_config.mdx#config-network-bridge). +--- +title: Installing Required Software +sidebar_label: Installing Required Software +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +Once you have configured apt and rosdep, you can install the IndoorNav +libraries and their dependencies on your robot by running: + +``` bash +sudo apt-get install ros-$ROS_DISTRO-cpr-indoornav-ROBOT +``` + +where _ROBOT_ is replaced with the model of Clearpath robot +you are installing: +- `dingo` for Dingo-O or Dingo-D, +- `husky` for Husky A200, +- `jackal` for Jackal J100, or +- `ridgeback` for Ridgeback. + +This will automatically install the required launch files and +dependencies. + +Once the packages are installed, run the following to configure the +IndoorNav software: + +```bash +rosrun cpr_indoornav setup +``` + +This script will install additional necessary packages, configure +`apache2` to act as a proxy server to the IndoorNav backpack, configure +SSH credentials to allow ROS to launch nodes on the backpack PC +automatically, and configure the networking between the main PC and +backpack to ensure the hostnames and IP addresses are configured +correctly. The `setup` script is interactive; you will be prompted to +enter your password more than once and select options from multiple +menus. + +Once you have finished running the setup script, reboot the robot to +finish. + +For more details on the networking configuration the +`cpr_indoornav setup` script performs, please see +[Configuring the Network Bridge](/docs_indoornav_user_manual/network_config.mdx#config-network-bridge). diff --git a/docs_indoornav_user_manual/base_robot_config/config_install_robot_os.mdx b/docs_indoornav_user_manual/base_robot_config/config_install_robot_os.mdx index 75468906..9865d7aa 100644 --- a/docs_indoornav_user_manual/base_robot_config/config_install_robot_os.mdx +++ b/docs_indoornav_user_manual/base_robot_config/config_install_robot_os.mdx @@ -1,40 +1,40 @@ ---- -title: Installing the Robot OS -sidebar_label: Installing the Robot OS -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -:::note - -Most users will not require this step as robots from Clearpath Robotics -will ship with the Robot OS installed and configured. Only users that -are upgrading an OS or restoring a robot to factory settings will need -to perform these steps so that their robot is compatible with IndoorNav. - -::: - -:::note - -IndoorNav is only supported on robots running ROS Noetic on Ubuntu -20.04. - -::: - -Follow the instructions in your robot's user manual to reinstall the -default OS. The links below contain the instructions for reinstalling -Ubuntu 20.04 and ROS Noetic on all robots that support IndoorNav: - -- Dingo: - [http://www.clearpathrobotics.com/assets/guides/noetic/dingo/](http://www.clearpathrobotics.com/assets/guides/noetic/dingo/Installing.html#installing-with-iso-image) -- Husky: - [http://www.clearpathrobotics.com/assets/guides/noetic/husky](http://www.clearpathrobotics.com/assets/guides/noetic/husky/InstallHuskySoftware.html) -- Jackal: - [http://www.clearpathrobotics.com/assets/guides/noetic/jackal/](http://www.clearpathrobotics.com/assets/guides/noetic/jackal/update.html#starting-from-scratch) -- Ridgeback: - [http://www.clearpathrobotics.com/assets/guides/noetic/ridgeback/](http://www.clearpathrobotics.com/assets/guides/noetic/ridgeback/Installing.html#installing-with-iso-image) - -You can download the latest version of Clearpath's ROS Noetic + Ubuntu -20.04 `Focal` installation media for 64-bit Intel or AMD CPUs here: -\. +--- +title: Installing the Robot OS +sidebar_label: Installing the Robot OS +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +:::note + +Most users will not require this step as robots from Clearpath Robotics +will ship with the Robot OS installed and configured. Only users that +are upgrading an OS or restoring a robot to factory settings will need +to perform these steps so that their robot is compatible with IndoorNav. + +::: + +:::note + +IndoorNav is only supported on robots running ROS Noetic on Ubuntu +20.04. + +::: + +Follow the instructions in your robot's user manual to reinstall the +default OS. The links below contain the instructions for reinstalling +Ubuntu 20.04 and ROS Noetic on all robots that support IndoorNav: + +- Dingo: + [http://www.clearpathrobotics.com/assets/guides/noetic/dingo/](http://www.clearpathrobotics.com/assets/guides/noetic/dingo/Installing.html#installing-with-iso-image) +- Husky: + [http://www.clearpathrobotics.com/assets/guides/noetic/husky](http://www.clearpathrobotics.com/assets/guides/noetic/husky/InstallHuskySoftware.html) +- Jackal: + [http://www.clearpathrobotics.com/assets/guides/noetic/jackal/](http://www.clearpathrobotics.com/assets/guides/noetic/jackal/update.html#starting-from-scratch) +- Ridgeback: + [http://www.clearpathrobotics.com/assets/guides/noetic/ridgeback/](http://www.clearpathrobotics.com/assets/guides/noetic/ridgeback/Installing.html#installing-with-iso-image) + +You can download the latest version of Clearpath's ROS Noetic + Ubuntu +20.04 `Focal` installation media for 64-bit Intel or AMD CPUs here: +\. diff --git a/docs_indoornav_user_manual/base_robot_config/config_starting_automatically.mdx b/docs_indoornav_user_manual/base_robot_config/config_starting_automatically.mdx index bf4afb9c..f737ac2f 100644 --- a/docs_indoornav_user_manual/base_robot_config/config_starting_automatically.mdx +++ b/docs_indoornav_user_manual/base_robot_config/config_starting_automatically.mdx @@ -1,32 +1,32 @@ ---- -title: Automatically Starting IndoorNav -sidebar_label: Automatically Starting IndoorNav -sidebar_position: 5 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -If you want IndoorNav to start automatically when the robot boots you -may create a systemd job to start it automatically: - -```bash -rosrun cpr_indoornav_ROBOT install -``` - -where `ROBOT` is your supported Clearpath platform: - -- `dingo` -- `husky` -- `jackal` -- `ridgeback` - -This command will create a new systemd job called `cpr-indoornav` which -will start automatically when the robot boots. This systemd job depends -on the robot's core `ros` systemd job. If you need to restart IndoorNav -it is recommended that you restart both services: - -```bash -sudo systemctl stop cpr-indoornav -sudo systemctl restart ros -sudo systemctl start cpr-indoornav -``` +--- +title: Automatically Starting IndoorNav +sidebar_label: Automatically Starting IndoorNav +sidebar_position: 5 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +If you want IndoorNav to start automatically when the robot boots you +may create a systemd job to start it automatically: + +```bash +rosrun cpr_indoornav_ROBOT install +``` + +where `ROBOT` is your supported Clearpath platform: + +- `dingo` +- `husky` +- `jackal` +- `ridgeback` + +This command will create a new systemd job called `cpr-indoornav` which +will start automatically when the robot boots. This systemd job depends +on the robot's core `ros` systemd job. If you need to restart IndoorNav +it is recommended that you restart both services: + +```bash +sudo systemctl stop cpr-indoornav +sudo systemctl restart ros +sudo systemctl start cpr-indoornav +``` diff --git a/docs_indoornav_user_manual/base_robot_config/config_starting_manually.mdx b/docs_indoornav_user_manual/base_robot_config/config_starting_manually.mdx index 26940cfe..730f284b 100644 --- a/docs_indoornav_user_manual/base_robot_config/config_starting_manually.mdx +++ b/docs_indoornav_user_manual/base_robot_config/config_starting_manually.mdx @@ -1,22 +1,22 @@ ---- -title: Manually Starting IndoorNav -sidebar_label: Manually Starting IndoorNav -sidebar_position: 4 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -# Manually Starting IndoorNav {#config-starting-manually} - -To manually start the IndoorNav software, you can run - -```bash -roslaunch cpr_indoornav_ROBOT indoornav.launch -``` - -where `ROBOT` is your supported Clearpath platform: - -- `dingo` -- `husky` -- `jackal` -- `ridgeback` +--- +title: Manually Starting IndoorNav +sidebar_label: Manually Starting IndoorNav +sidebar_position: 4 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +# Manually Starting IndoorNav {#config-starting-manually} + +To manually start the IndoorNav software, you can run + +```bash +roslaunch cpr_indoornav_ROBOT indoornav.launch +``` + +where `ROBOT` is your supported Clearpath platform: + +- `dingo` +- `husky` +- `jackal` +- `ridgeback` diff --git a/docs_indoornav_user_manual/base_robot_config/config_updating_software.mdx b/docs_indoornav_user_manual/base_robot_config/config_updating_software.mdx index 7cdbe7ca..9084c5a5 100644 --- a/docs_indoornav_user_manual/base_robot_config/config_updating_software.mdx +++ b/docs_indoornav_user_manual/base_robot_config/config_updating_software.mdx @@ -1,22 +1,22 @@ ---- -title: Updating Robot Software -sidebar_label: Updating Robot Software -sidebar_position: 6 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -Updating IndoorNav is split into two separate operations: minor updates -and major updates. - -Minor updates affect only the robot's main PC and can be done by -connecting the robot to the internet and running - -``` bash -sudo apt-get update -sudo apt-get upgrade -``` - -If you have been instructed by Clearpath Robotics' support team that -you should update your IndoorNav backpack PC, you should follow the +--- +title: Updating Robot Software +sidebar_label: Updating Robot Software +sidebar_position: 6 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +Updating IndoorNav is split into two separate operations: minor updates +and major updates. + +Minor updates affect only the robot's main PC and can be done by +connecting the robot to the internet and running + +``` bash +sudo apt-get update +sudo apt-get upgrade +``` + +If you have been instructed by Clearpath Robotics' support team that +you should update your IndoorNav backpack PC, you should follow the instructions at [Installing Backpack Software](/docs_indoornav_user_manual/installing_backpack_software.mdx). \ No newline at end of file diff --git a/docs_indoornav_user_manual/getting_started.mdx b/docs_indoornav_user_manual/getting_started.mdx index 28026ae8..ca2e76a6 100644 --- a/docs_indoornav_user_manual/getting_started.mdx +++ b/docs_indoornav_user_manual/getting_started.mdx @@ -1,59 +1,59 @@ ---- -title: Getting Started -sidebar_label: Getting Started -sidebar_position: 2 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -
-
- -
-
- -Clearpath Robotics' IndoorNav all-in-one package contains everything -you need to allow your robot to navigate autonomously in indoor -environments. IndoorNav is based on indoor autonomy software developed -by OTTO Motors and has been adapted to run on Clearpath Robotics' -robots. - -This document will explain how to set up and use the IndoorNav software -on your supported Clearpath Robotics robot. Supported robots include: - -- [Dingo-D](https://clearpathrobotics.com/dingo-indoor-mobile-robot/) - and [Dingo-O](https://clearpathrobotics.com/dingo-indoor-mobile-robot/) - -
-
- -
-
- -- [Husky](https://clearpathrobotics.com/husky-unmanned-ground-vehicle-robot/) - -
-
- -
-
- -- [Jackal](https://clearpathrobotics.com/jackal-small-unmanned-ground-vehicle/) - -
-
- -
-
- -- [Ridgeback](https://clearpathrobotics.com/ridgeback-indoor-robot-platform/). - -
-
- -
-
- -In addition, [Boxer](https://clearpathrobotics.com/boxer/), which is -based on the OTTO-100 robot, also includes an unmodified version of the +--- +title: Getting Started +sidebar_label: Getting Started +sidebar_position: 2 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +
+
+ +
+
+ +Clearpath Robotics' IndoorNav all-in-one package contains everything +you need to allow your robot to navigate autonomously in indoor +environments. IndoorNav is based on indoor autonomy software developed +by OTTO Motors and has been adapted to run on Clearpath Robotics' +robots. + +This document will explain how to set up and use the IndoorNav software +on your supported Clearpath Robotics robot. Supported robots include: + +- [Dingo-D](https://clearpathrobotics.com/dingo-indoor-mobile-robot/) + and [Dingo-O](https://clearpathrobotics.com/dingo-indoor-mobile-robot/) + +
+
+ +
+
+ +- [Husky](https://clearpathrobotics.com/husky-unmanned-ground-vehicle-robot/) + +
+
+ +
+
+ +- [Jackal](https://clearpathrobotics.com/jackal-small-unmanned-ground-vehicle/) + +
+
+ +
+
+ +- [Ridgeback](https://clearpathrobotics.com/ridgeback-indoor-robot-platform/). + +
+
+ +
+
+ +In addition, [Boxer](https://clearpathrobotics.com/boxer/), which is +based on the OTTO-100 robot, also includes an unmodified version of the OTTO Motors indoor autonomy software. \ No newline at end of file diff --git a/docs_indoornav_user_manual/index.mdx b/docs_indoornav_user_manual/index.mdx index 0c690278..bd51fb65 100644 --- a/docs_indoornav_user_manual/index.mdx +++ b/docs_indoornav_user_manual/index.mdx @@ -1,19 +1,19 @@ ---- -title: IndoorNav User Manual -sidebar_label: IndoorNav User Manual -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -
-
- -
-
- -IndoorNav is an all-in-one autonomy kit that enables robust point-to-point autonomous -navigation of mobile robots in indoor environments. It provides advanced software with -a powerful processor and sensor suite, and integrates seamlessly with Clearpath mobile -robotic development platforms. Designed for researchers in academia and corporate R&D, +--- +title: IndoorNav User Manual +sidebar_label: IndoorNav User Manual +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +
+
+ +
+
+ +IndoorNav is an all-in-one autonomy kit that enables robust point-to-point autonomous +navigation of mobile robots in indoor environments. It provides advanced software with +a powerful processor and sensor suite, and integrates seamlessly with Clearpath mobile +robotic development platforms. Designed for researchers in academia and corporate R&D, IndoorNav is ROS ready and fully extensible with a well documented developer API. \ No newline at end of file diff --git a/docs_indoornav_user_manual/installing_backpack_software.mdx b/docs_indoornav_user_manual/installing_backpack_software.mdx index e1c34798..7deefd28 100644 --- a/docs_indoornav_user_manual/installing_backpack_software.mdx +++ b/docs_indoornav_user_manual/installing_backpack_software.mdx @@ -1,61 +1,61 @@ ---- -title: "Appendix B: Installing Backpack Software" -sidebar_label: "Appendix B: Installing Backpack Software" -sidebar_position: 7 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -:::note - -Before you can configure the IndoorNav backpack, you must contact -Clearpath Robotics' customer support and ask to be sent an archive -containing additional files needed. You will need to copy this archive -onto the backpack PC as noted below. - -::: - -Your IndoorNav backpack PC comes with the latest supported version of -IndoorNav pre-installed. If you need to update or reinstall the software -on the backpack PC, first update the OS using the procedure outlined -here: \. - -Once the OS has been updated you will need to connect a monitor, -keyboard, and wired internet connection to backpack PC. Power-on the PC -and log in using the backpack's default username and password. - -After logging in you may now copy the `.tar.gz` file supplied by -Clearpath Robotics onto the backpack. Make a note of the path to this -file, as you will need it in the following steps. - -Run the following commands to establish a wired internet connection: - -```bash -sudo ip link delete sbr0 type bridge -sudo dhclient eno1 -``` - -You may need to replace `eno1` with a different interface ID, depending -on the physical ethernet port you have connected to your router. Other -common examples are `enp2s0`, `enp3s0`, and `eth0`. Running the `ip a` -command will show all available network interfaces. - -Run the following commands to download the setup script to complete the -rest of the backpack software installation: - -```bash -cd $HOME -git clone https://github.com/clearpathrobotics/cpr-indoornav-install.git -cd cpr-indoornav-install -bash install.sh -``` - -The `install.sh` script is interactive and will prompt you for the -following pieces of information (not necessarily in this order): - -- a new hostname for the backpack PC -- the hostname of your robot's primary PC -- the path to the `.tar.gz` file you copied onto the backpack earlier - -You must power-cycle the backpack PC after running +--- +title: "Appendix B: Installing Backpack Software" +sidebar_label: "Appendix B: Installing Backpack Software" +sidebar_position: 7 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +:::note + +Before you can configure the IndoorNav backpack, you must contact +Clearpath Robotics' customer support and ask to be sent an archive +containing additional files needed. You will need to copy this archive +onto the backpack PC as noted below. + +::: + +Your IndoorNav backpack PC comes with the latest supported version of +IndoorNav pre-installed. If you need to update or reinstall the software +on the backpack PC, first update the OS using the procedure outlined +here: \. + +Once the OS has been updated you will need to connect a monitor, +keyboard, and wired internet connection to backpack PC. Power-on the PC +and log in using the backpack's default username and password. + +After logging in you may now copy the `.tar.gz` file supplied by +Clearpath Robotics onto the backpack. Make a note of the path to this +file, as you will need it in the following steps. + +Run the following commands to establish a wired internet connection: + +```bash +sudo ip link delete sbr0 type bridge +sudo dhclient eno1 +``` + +You may need to replace `eno1` with a different interface ID, depending +on the physical ethernet port you have connected to your router. Other +common examples are `enp2s0`, `enp3s0`, and `eth0`. Running the `ip a` +command will show all available network interfaces. + +Run the following commands to download the setup script to complete the +rest of the backpack software installation: + +```bash +cd $HOME +git clone https://github.com/clearpathrobotics/cpr-indoornav-install.git +cd cpr-indoornav-install +bash install.sh +``` + +The `install.sh` script is interactive and will prompt you for the +following pieces of information (not necessarily in this order): + +- a new hostname for the backpack PC +- the hostname of your robot's primary PC +- the path to the `.tar.gz` file you copied onto the backpack earlier + +You must power-cycle the backpack PC after running `install.sh` to finalize the configuration. \ No newline at end of file diff --git a/docs_indoornav_user_manual/network_config.mdx b/docs_indoornav_user_manual/network_config.mdx index 5f79d4e8..c90b5455 100644 --- a/docs_indoornav_user_manual/network_config.mdx +++ b/docs_indoornav_user_manual/network_config.mdx @@ -1,286 +1,286 @@ ---- -title: "Appendix C: Network Configuration" -sidebar_label: "Appendix C: Network Configuration" -sidebar_position: 8 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -Normally the network bridge and port forwarding are configured -automatically when using the `cpr_indoornav setup` script (see -[Installing Required Software](/docs_indoornav_user_manual/base_robot_config/config_install_required_sw.mdx). This -appendix explains the network configuration of the robot's PC in more -detail. - -## Configuring the Network Bridge {#config-network-bridge} - -The first step to configure your robot for use with IndoorNav is to make -sure that the ethernet communication between the robot's PC and the -IndoorNav backpack works. All Clearpath robots are configured to bridge -their physical ethernet ports together. This allows all the ports on the -motherboard to operate on multiple subnets simultaneously. By default -Clearpath robots use the `192.168.131.0/24` subnet for their internal -network, with all IP-based sensors and peripherals operating on this -subnet. - -IndoorNav requires modifying the default bridge to remove a single -ethernet port, `eno1` by default, from the bridge and assigning it to -the `10.252.252.0/24` subnet. This physical port will be dedicated to -communicating with the IndoorNav backpack PC. - -To configure `eno1` to be used to communicate with the backpack PC, -modify `/etc/netplan/50-clearpath-bridge.yaml` as follows. The example -below bridges interfaces with the identifiers `eth*`, `enp*`, `enx*` and -`usb*` together on the `192.168.131.0/24` subnet. - -```yaml -network: - version: 2 - renderer: networkd - ethernets: - # dedicated port for communicating with the IndoorNav backpack - eno1: - dhcp4: no - dhcp6: no - addresses: - - 10.252.252.100/24 - - # bridge all other ports together on the 192.168.131.0/24 subnet - bridge_eth: - dhcp4: no - dhcp6: no - match: - name: eth* - bridge_enp: - dhcp4: no - dhcp6: no - match: - name: enp* - bridge_enx: - dhcp4: no - dhcp6: no - match: - name: enx* - bridge_usb: - dhcp4: no - dhcp6: no - match: - name: usb* - bridges: - br0: - dhcp4: yes - dhcp6: no - interfaces: [bridge_eth, bridge_enp, bridge_enx, bridge_usb] - addresses: - - 192.168.131.1/24 -``` - -Instead of using `eno1` you can use a specific USB to ethernet dongle, -for example: - -```yaml -network: - version: 2 - renderer: networkd - ethernets: - # dedicated port for communicating with the IndoorNav backpack - enx70886b8f17a5: - dhcp4: no - dhcp6: no - addresses: - - 10.252.252.100/24 - - # bridge all other ports together on the 192.168.131.0/24 subnet - bridge_eth: - dhcp4: no - dhcp6: no - match: - name: eth* - bridge_eno: - dhcp4: no - dhcp6: no - match: - name: eno* - bridge_enp: - dhcp4: no - dhcp6: no - match: - name: enp* - bridges: - br0: - dhcp4: yes - dhcp6: no - interfaces: [bridge_eth, bridge_eno, bridge_enp] - addresses: - - 192.168.131.1/24 -``` - -If you made any changes to the bridge configuration reboot the robot -now. Once the robot and backpack PC are both powered-on, connect them -with an ethernet cable connected to `eno1` on the backpack and the -IndoorNav port you configured above. Run the following command to check -that you can communicate with the backpack PC: - -```bash -ping 10.252.252.1 -``` - -Once you have configured the network interfaces and confirmed that the -communication works, ensure that the dedicated IndoorNav port is set in -the `cpr_indoornav` package's `config/cyclone_dds.xml` file: - -``` xml - - - - - - eno1 - true - - - 5 min - - - -``` - -## Configuring Apache2 Proxy Server - -IndoorNav operates a web-based mapping GUI that you can use to plan -routes, mark areas for specific tasks, view/edit the map, and the like. -To access this interface you should install the `apache2` package and -configure it to act as a proxy server for the IndoorNav backpack: - -```bash -sudo apt-get install apache2 -sudo a2enmod proxy -sudo a2enmod proxy_http -sudo a2enmod proxy_wstunnel -sudo a2enmod rewrite -``` - -Create (or edit) `/etc/apache2/conf-enabled/clearpath.conf` to contain -the following: - -``` -Listen 2000 -Listen 2001 -Listen 5000 -Listen 9091 - - - ProxyRequests On - ProxyVia On - - ProxyPass / http://10.252.252.1:2000/ - ProxyPassReverse / http://10.252.252.1:2000/ - - - - ServerName HOSTNAME # replace HOSTNAME with your robot's hostname!! - - RewriteEngine On - - RewriteCond %{HTTP:Upgrade} =websocket [NC] - RewriteRule /(.*) ws://10.252.252.1:2001/$1 [P,L] - - RewriteCond %{HTTP:Upgrade} !=websocket [NC] - RewriteRule /(.*) ws://10.252.252.1:2001/$1 [P,L] - - ProxyPass / http://10.252.252.1:2001/ - ProxyPassReverse / http://10.252.252.1:2001/ - - - - ProxyRequests On - ProxyVia On - - ProxyPass / http://10.252.252.1:5000/ - ProxyPassReverse / http://10.252.252.1:5000/ - - - - ServerName HOSTNAME # replace HOSTNAME with your robot's hostname!! - - RewriteEngine On - - RewriteCond %{HTTP:Upgrade} =websocket [NC] - RewriteRule /(.*) ws://10.252.252.1:9091/$1 [P,L] - - RewriteCond %{HTTP:Upgrade} !=websocket [NC] - RewriteRule /(.*) ws://10.252.252.1:9091/$1 [P,L] - - ProxyPass / http://10.252.252.1:9091/ - ProxyPassReverse / http://10.252.252.1:9091/ - -``` - -Make sure to replace the two instances of `HOSTNAME` in the file above -with your robot's hostname, e.g. `cpr-j100-1234` - -Once `/etc/apache2/conf-enabled/clearpath.conf` has been modified, -restart the `apache2` service: - -```bash -sudo systemctl restart apache2 -``` - -## Configuring IP Tables - -:::warning - -It has been observed that using `iptables` to enable port-forwarding may -cause errors with the ROS 2 daemon. We recommend using the Apache Proxy -Server method described above. - -::: - -Instead of using Apache2 to act as a proxy server, you can instead use -the Linux Kernel's `iptables` to enable port-forwarding. If you enable -`iptables` you should also disable the `apache2` service to prevent the -proxy server from also listening on these ports: - -```bash -sudo systemctl stop apache2 -sudo systemctl disable apache2 -``` - -To configure `iptables` run the following commands: - -```bash -sudo sysctl net.ipv4.ip_forward=1 -sudo iptables --policy FORWARD ACCEPT -sudo iptables -t nat -A PREROUTING -p tcp --dport 2000 -j DNAT --to-destination 10.252.252.1:2000 -sudo iptables -t nat -A PREROUTING -p tcp --dport 2001 -j DNAT --to-destination 10.252.252.1:2001 -sudo iptables -t nat -A PREROUTING -p tcp --dport 5000 -j DNAT --to-destination 10.252.252.1:5000 -sudo iptables -t nat -A PREROUTING -p tcp --dport 9091 -j DNAT --to-destination 10.252.252.1:9091 -sudo iptables -t nat -A POSTROUTING -j MASQUERADE -``` - -To make these changes permanent you should edit `/etc/sysctl.conf` and -make sure that IPv4 forwarding is enabled: - -```bash -net.ipv4.ip_forward=1 -``` - -and install the `iptables-persistent` package: - -```bash -sudo apt-get install iptables-persistent -``` - -If this package is already installed you can update the rules by running - -```bash -sudo dpkg-reconfigure iptables-persistent -``` - -Select **Yes** when asked if you want to save the IPv4 rules and **No** -if you want to save the IPv6 rules. +--- +title: "Appendix C: Network Configuration" +sidebar_label: "Appendix C: Network Configuration" +sidebar_position: 8 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +Normally the network bridge and port forwarding are configured +automatically when using the `cpr_indoornav setup` script (see +[Installing Required Software](/docs_indoornav_user_manual/base_robot_config/config_install_required_sw.mdx). This +appendix explains the network configuration of the robot's PC in more +detail. + +## Configuring the Network Bridge {#config-network-bridge} + +The first step to configure your robot for use with IndoorNav is to make +sure that the ethernet communication between the robot's PC and the +IndoorNav backpack works. All Clearpath robots are configured to bridge +their physical ethernet ports together. This allows all the ports on the +motherboard to operate on multiple subnets simultaneously. By default +Clearpath robots use the `192.168.131.0/24` subnet for their internal +network, with all IP-based sensors and peripherals operating on this +subnet. + +IndoorNav requires modifying the default bridge to remove a single +ethernet port, `eno1` by default, from the bridge and assigning it to +the `10.252.252.0/24` subnet. This physical port will be dedicated to +communicating with the IndoorNav backpack PC. + +To configure `eno1` to be used to communicate with the backpack PC, +modify `/etc/netplan/50-clearpath-bridge.yaml` as follows. The example +below bridges interfaces with the identifiers `eth*`, `enp*`, `enx*` and +`usb*` together on the `192.168.131.0/24` subnet. + +```yaml +network: + version: 2 + renderer: networkd + ethernets: + # dedicated port for communicating with the IndoorNav backpack + eno1: + dhcp4: no + dhcp6: no + addresses: + - 10.252.252.100/24 + + # bridge all other ports together on the 192.168.131.0/24 subnet + bridge_eth: + dhcp4: no + dhcp6: no + match: + name: eth* + bridge_enp: + dhcp4: no + dhcp6: no + match: + name: enp* + bridge_enx: + dhcp4: no + dhcp6: no + match: + name: enx* + bridge_usb: + dhcp4: no + dhcp6: no + match: + name: usb* + bridges: + br0: + dhcp4: yes + dhcp6: no + interfaces: [bridge_eth, bridge_enp, bridge_enx, bridge_usb] + addresses: + - 192.168.131.1/24 +``` + +Instead of using `eno1` you can use a specific USB to ethernet dongle, +for example: + +```yaml +network: + version: 2 + renderer: networkd + ethernets: + # dedicated port for communicating with the IndoorNav backpack + enx70886b8f17a5: + dhcp4: no + dhcp6: no + addresses: + - 10.252.252.100/24 + + # bridge all other ports together on the 192.168.131.0/24 subnet + bridge_eth: + dhcp4: no + dhcp6: no + match: + name: eth* + bridge_eno: + dhcp4: no + dhcp6: no + match: + name: eno* + bridge_enp: + dhcp4: no + dhcp6: no + match: + name: enp* + bridges: + br0: + dhcp4: yes + dhcp6: no + interfaces: [bridge_eth, bridge_eno, bridge_enp] + addresses: + - 192.168.131.1/24 +``` + +If you made any changes to the bridge configuration reboot the robot +now. Once the robot and backpack PC are both powered-on, connect them +with an ethernet cable connected to `eno1` on the backpack and the +IndoorNav port you configured above. Run the following command to check +that you can communicate with the backpack PC: + +```bash +ping 10.252.252.1 +``` + +Once you have configured the network interfaces and confirmed that the +communication works, ensure that the dedicated IndoorNav port is set in +the `cpr_indoornav` package's `config/cyclone_dds.xml` file: + +``` xml + + + + + + eno1 + true + + + 5 min + + + +``` + +## Configuring Apache2 Proxy Server + +IndoorNav operates a web-based mapping GUI that you can use to plan +routes, mark areas for specific tasks, view/edit the map, and the like. +To access this interface you should install the `apache2` package and +configure it to act as a proxy server for the IndoorNav backpack: + +```bash +sudo apt-get install apache2 +sudo a2enmod proxy +sudo a2enmod proxy_http +sudo a2enmod proxy_wstunnel +sudo a2enmod rewrite +``` + +Create (or edit) `/etc/apache2/conf-enabled/clearpath.conf` to contain +the following: + +``` +Listen 2000 +Listen 2001 +Listen 5000 +Listen 9091 + + + ProxyRequests On + ProxyVia On + + ProxyPass / http://10.252.252.1:2000/ + ProxyPassReverse / http://10.252.252.1:2000/ + + + + ServerName HOSTNAME # replace HOSTNAME with your robot's hostname!! + + RewriteEngine On + + RewriteCond %{HTTP:Upgrade} =websocket [NC] + RewriteRule /(.*) ws://10.252.252.1:2001/$1 [P,L] + + RewriteCond %{HTTP:Upgrade} !=websocket [NC] + RewriteRule /(.*) ws://10.252.252.1:2001/$1 [P,L] + + ProxyPass / http://10.252.252.1:2001/ + ProxyPassReverse / http://10.252.252.1:2001/ + + + + ProxyRequests On + ProxyVia On + + ProxyPass / http://10.252.252.1:5000/ + ProxyPassReverse / http://10.252.252.1:5000/ + + + + ServerName HOSTNAME # replace HOSTNAME with your robot's hostname!! + + RewriteEngine On + + RewriteCond %{HTTP:Upgrade} =websocket [NC] + RewriteRule /(.*) ws://10.252.252.1:9091/$1 [P,L] + + RewriteCond %{HTTP:Upgrade} !=websocket [NC] + RewriteRule /(.*) ws://10.252.252.1:9091/$1 [P,L] + + ProxyPass / http://10.252.252.1:9091/ + ProxyPassReverse / http://10.252.252.1:9091/ + +``` + +Make sure to replace the two instances of `HOSTNAME` in the file above +with your robot's hostname, e.g. `cpr-j100-1234` + +Once `/etc/apache2/conf-enabled/clearpath.conf` has been modified, +restart the `apache2` service: + +```bash +sudo systemctl restart apache2 +``` + +## Configuring IP Tables + +:::warning + +It has been observed that using `iptables` to enable port-forwarding may +cause errors with the ROS 2 daemon. We recommend using the Apache Proxy +Server method described above. + +::: + +Instead of using Apache2 to act as a proxy server, you can instead use +the Linux Kernel's `iptables` to enable port-forwarding. If you enable +`iptables` you should also disable the `apache2` service to prevent the +proxy server from also listening on these ports: + +```bash +sudo systemctl stop apache2 +sudo systemctl disable apache2 +``` + +To configure `iptables` run the following commands: + +```bash +sudo sysctl net.ipv4.ip_forward=1 +sudo iptables --policy FORWARD ACCEPT +sudo iptables -t nat -A PREROUTING -p tcp --dport 2000 -j DNAT --to-destination 10.252.252.1:2000 +sudo iptables -t nat -A PREROUTING -p tcp --dport 2001 -j DNAT --to-destination 10.252.252.1:2001 +sudo iptables -t nat -A PREROUTING -p tcp --dport 5000 -j DNAT --to-destination 10.252.252.1:5000 +sudo iptables -t nat -A PREROUTING -p tcp --dport 9091 -j DNAT --to-destination 10.252.252.1:9091 +sudo iptables -t nat -A POSTROUTING -j MASQUERADE +``` + +To make these changes permanent you should edit `/etc/sysctl.conf` and +make sure that IPv4 forwarding is enabled: + +```bash +net.ipv4.ip_forward=1 +``` + +and install the `iptables-persistent` package: + +```bash +sudo apt-get install iptables-persistent +``` + +If this package is already installed you can update the rules by running + +```bash +sudo dpkg-reconfigure iptables-persistent +``` + +Select **Yes** when asked if you want to save the IPv4 rules and **No** +if you want to save the IPv6 rules. diff --git a/docs_indoornav_user_manual/support.mdx b/docs_indoornav_user_manual/support.mdx index 23d3f71a..5ae86ff2 100644 --- a/docs_indoornav_user_manual/support.mdx +++ b/docs_indoornav_user_manual/support.mdx @@ -1,11 +1,11 @@ ---- -title: Support -sidebar_label: Support -sidebar_position: 5 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -import Support from "/components/support.mdx"; - +--- +title: Support +sidebar_label: Support +sidebar_position: 5 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +import Support from "/components/support.mdx"; + \ No newline at end of file diff --git a/docs_indoornav_user_manual/using_indoornav/_category_.json b/docs_indoornav_user_manual/using_indoornav/_category_.json index a6be182f..797147e5 100644 --- a/docs_indoornav_user_manual/using_indoornav/_category_.json +++ b/docs_indoornav_user_manual/using_indoornav/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Using IndoorNav Software", - "position": 4 +{ + "label": "Using IndoorNav Software", + "position": 4 } \ No newline at end of file diff --git a/docs_indoornav_user_manual/using_indoornav/driving_the_robot.mdx b/docs_indoornav_user_manual/using_indoornav/driving_the_robot.mdx index 2b86c98f..46077613 100644 --- a/docs_indoornav_user_manual/using_indoornav/driving_the_robot.mdx +++ b/docs_indoornav_user_manual/using_indoornav/driving_the_robot.mdx @@ -1,118 +1,118 @@ ---- -title: Driving the Robot -sidebar_label: Driving the Robot -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -IndoorNav offers several different methods to drive the robot, in -addition to using the included game controller, interactive markers in -Rviz, or publishing directly to `/cmd_vel`. - -:::warning - -CAUTION! Failure to follow these instructions may result in MINOR or -MODERATE INJURY or DAMAGE to the system or property. - -::: - -:::warning - -IMPACT HAZARD! Always maintain a safe distance from a robot in -operation. A robot being operated in manual mode should only be operated -by personnel who have been trained and authorized according to the -standards of the facility in which the robot is in use. Be aware of the -Emergency Stop button locations. - -::: - -## Driving the Robot in Manual Mode - -:::note - -See [detailed documentation on manual driving](https://docs.ottomotors.com/Archive/2-22/out/en/51722-51784-driving-a-robot-in-manual-mode.html) -for more information. - -::: - -The Web GUI allows teleoperation of the robot without using the included -game controller. To enable manual driving, select either the Drive or -Facility tab and use the on-screen controls in the lower-right corner, -as shown in the figure below. Moving the virtual joystick up/down will -drive the robot forward/backward, and moving it left/right will make the -robot turn. - -
-
- -
-
- -The first time you access the Web GUI after powering-on the robot, the -robot may be in neutral. Click the button to take the robot out of neutral. - -Clicking the will open the drive settings, allowing you to adjust the -robot's driving speed or disable manual driving, shown in the figure -below. - -
-
- -
-
- -## Driving the Robot in Autonomous Mode - -:::note - -See [detailed documentation on autonomous driving](https://docs.ottomotors.com/Archive/2-22/out/en/51722-51785-driving-a-robot-in-autonomous-mode.html) -for more information. - -::: - -To drive the robot in autonomous mode the steps are: - -1. Create a map. See [Making a Map](/docs_indoornav_user_manual/using_indoornav/maps.mdx#making-a-map) for - details. - -2. Confirm that the **Manual** toggle is disabled and manual driving - mode is OFF. When disabled, the **Drive Mode** toggle is gray and a - **Move** button will be displayed. - -3. Select **Move**. - -4. Select the location on the map to which the robot should drive. The - joystick button will turn green and the orientation circle will be - displayed at the selected location on the map. - -5. Move the green line inside the orientation circle to define the - direction in which the front of the robot should be directed when it - stops at the selected location. - -
-
- -
-
- -6. Select **Go** to send the robot on its way. Select **Stop** to stop - the robot at any time. - -## Driving Using Endpoints - -:::note - -See [detailed documentation on driving using endpoints](https://docs.ottomotors.com/Archive/2-22/out/en/51722-51786-driving-a-robot-using-endpoints.html) -for more information. - -::: - -To drive the robot using endpoints the steps are: - -1. Create a map. See [Making a Map](/docs_indoornav_user_manual/using_indoornav/maps.mdx#making-a-map) for - details. -2. Add Endpoints to the map. See [Adding Endpoints](/docs_indoornav_user_manual/using_indoornav/maps.mdx#adding-endpoints) for details. -3. Select an Endpoint. -4. Select **Go** to send the robot on its way. Select **Stop** to stop - the robot at any time. +--- +title: Driving the Robot +sidebar_label: Driving the Robot +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +IndoorNav offers several different methods to drive the robot, in +addition to using the included game controller, interactive markers in +Rviz, or publishing directly to `/cmd_vel`. + +:::warning + +CAUTION! Failure to follow these instructions may result in MINOR or +MODERATE INJURY or DAMAGE to the system or property. + +::: + +:::warning + +IMPACT HAZARD! Always maintain a safe distance from a robot in +operation. A robot being operated in manual mode should only be operated +by personnel who have been trained and authorized according to the +standards of the facility in which the robot is in use. Be aware of the +Emergency Stop button locations. + +::: + +## Driving the Robot in Manual Mode + +:::note + +See [detailed documentation on manual driving](https://docs.ottomotors.com/Archive/2-22/out/en/51722-51784-driving-a-robot-in-manual-mode.html) +for more information. + +::: + +The Web GUI allows teleoperation of the robot without using the included +game controller. To enable manual driving, select either the Drive or +Facility tab and use the on-screen controls in the lower-right corner, +as shown in the figure below. Moving the virtual joystick up/down will +drive the robot forward/backward, and moving it left/right will make the +robot turn. + +
+
+ +
+
+ +The first time you access the Web GUI after powering-on the robot, the +robot may be in neutral. Click the button to take the robot out of neutral. + +Clicking the will open the drive settings, allowing you to adjust the +robot's driving speed or disable manual driving, shown in the figure +below. + +
+
+ +
+
+ +## Driving the Robot in Autonomous Mode + +:::note + +See [detailed documentation on autonomous driving](https://docs.ottomotors.com/Archive/2-22/out/en/51722-51785-driving-a-robot-in-autonomous-mode.html) +for more information. + +::: + +To drive the robot in autonomous mode the steps are: + +1. Create a map. See [Making a Map](/docs_indoornav_user_manual/using_indoornav/maps.mdx#making-a-map) for + details. + +2. Confirm that the **Manual** toggle is disabled and manual driving + mode is OFF. When disabled, the **Drive Mode** toggle is gray and a + **Move** button will be displayed. + +3. Select **Move**. + +4. Select the location on the map to which the robot should drive. The + joystick button will turn green and the orientation circle will be + displayed at the selected location on the map. + +5. Move the green line inside the orientation circle to define the + direction in which the front of the robot should be directed when it + stops at the selected location. + +
+
+ +
+
+ +6. Select **Go** to send the robot on its way. Select **Stop** to stop + the robot at any time. + +## Driving Using Endpoints + +:::note + +See [detailed documentation on driving using endpoints](https://docs.ottomotors.com/Archive/2-22/out/en/51722-51786-driving-a-robot-using-endpoints.html) +for more information. + +::: + +To drive the robot using endpoints the steps are: + +1. Create a map. See [Making a Map](/docs_indoornav_user_manual/using_indoornav/maps.mdx#making-a-map) for + details. +2. Add Endpoints to the map. See [Adding Endpoints](/docs_indoornav_user_manual/using_indoornav/maps.mdx#adding-endpoints) for details. +3. Select an Endpoint. +4. Select **Go** to send the robot on its way. Select **Stop** to stop + the robot at any time. diff --git a/docs_indoornav_user_manual/using_indoornav/maps.mdx b/docs_indoornav_user_manual/using_indoornav/maps.mdx index ea617741..0ec7df86 100644 --- a/docs_indoornav_user_manual/using_indoornav/maps.mdx +++ b/docs_indoornav_user_manual/using_indoornav/maps.mdx @@ -1,331 +1,331 @@ ---- -title: Maps -sidebar_label: Maps -sidebar_position: 4 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -:::note - -See [detailed documentation on mapping a -facility](https://docs.ottomotors.com/Archive/2-22/out/en/51722-51848-mapping-a-facility.html) -for more information. - -::: - -A map is a digital representation of the facility around which your -robot needs to navigate. Maps are on a grid and X and Y axes are used to -define locations on that grid. The point at which a map recording begins -is located on the grid at 0m, 0m. Maps are always measured in meters. - -Maps are how robots become aware of traffic rules and key waypoints -within a facility. A robot determines which traffic rules to apply based -on its position estimate---this is not a safety rated system. If a robot -is in close proximity to an area where a drift in position may cause a -hazard, place physical barriers that the safety system is capable of -seeing. - -Robots require an accurate map of a facility in order to plan the best -routes for executing workflows. Map creation is done using your robot to -record the its surroundings while it drives around the facility. - -## Making a Map - -:::note - -When you first receive your robot with IndoorNav it may have a map of -Clearpath's building and testing facility already saved on it. This map -may be discarded. - -::: - -To create a new map: - -1. [Refer to the mapping guidelines](https://docs.ottomotors.com/Archive/2-22/out/en/51722-51849-mapping-guidelines.html). - -2. Open the Web GUI. - -3. Determine where map recording will begin and navigate the robot to - that position. Carefully select the starting position and alignment. - This point may be important in the future if updating a map or - remapping. A point that is central is recommended, but not required. - Note that the orientation of robot in relation to the facility when - beginning to record the map affects the orientation of the map as it - appears. When recording map data first beings, the direction in - which the front of the robot is facing will be the right side (east) - of the map. - -4. Select the **Facility** tab. - -5. From the upper toolbar, select **New Map**. The existing map (if - any) will disappear and be replaced with a new, blank map. To - download a copy of the current map click **Export Map.** To upload - an existing map, e.g. one saved from another robot, click **Import Map.** - -
-
- -
-
- -6. Select **REC** to begin recording the map. Select **Pause** at any - time to pause map data recording. - -
-
- -
-
- -7. Drive the robot through the facility manually, either using the web - GUI or the game controller. You will see light grey lines appear, - indicating where walls and other obstacles are. You should map all - locations where the robot is expected to navigate autonomously. - -8. To save the changes to the map, select **Save Map**. To cancel all - changes, select **Undo** or navigate to a new screen. - -# Using Map Features - -Once the map is made you can specify certain zones as off-limits to the -robot, designate certain areas as one-way traffic, restrict speed, or -simply add annotations to make the map easier to read. See -[Using Zones](#usage-zones) for more information about -creating zones on the map. - -To add zones and endpoints, use the menus found on the Facility -interface's main menu. - -
-
- -
-
- -:::note - -After adding, removing, or editing zones and endpoints, you must click -the -button on the main toolbar before navigating away from the page. Failing -to click this button may result in data being lost. - -::: - -## Adding Endpoints - -:::note - -See [detailed documentation on creating endpoints](https://docs.ottomotors.com/Archive/2-22/out/en/51722-51866-creating-endpoints.html) -for more information. - -::: - -An endpoint is a physical location that sometimes includes a collection -of tasks that define how a robot performs a workflow. To add an endpoint -to the map: - -1. From the **Facility** menu select **Endpoints**. - -2. Select the appropriate type of endpoint from the list. - -3. Select the desired location on the map where the endpoint will be - created. An endpoint details pane will appear on the right side of - the window. If desired, orient the endpoint using the orientation - circle. Select and drag the middle of the orientation circle to move - the endpoint to a different location on the map. Select the drag the - edge of the orientation circle to rotate the endpoint. - -
-
- -
-
- -4. Enter a **Name** for the endpoint. - -5. If desired, enter a **Description**. - -6. The **X** and **Y** coordinates and **Rotation** (in degrees) of the - endpoint will be pre-populated based on the placement of the - endpoint. Use these fields to finely position the endpoint on the - map. - -7. Select **Done** to add the endpoint to the map. - -8. Select **Save** to save the changes to the map. To cancel all - changes, select **Undo** or navigate to a new screen. - -## Using Zones {#usage-zones} - -:::note - -See [detailed documentation on using zones](https://docs.ottomotors.com/Archive/2-22/out/en/51722-51877-zones.html) -for more information. - -::: - -Zones define specific areas where robots can travel and their behavior -while within or near the zone such as maximum speed. - -Zones are polygons with three or more points making up a closed shape. -Zone placement isn't restricted by walls or other solid objects on the -map. - -To add a new zone to the map: - -1. Click the Map button on the main toolbar and select the desired type - of zone from the menu. -2. Click and drag on the map to add a new zone. Initially the zone will - be rectangular. -3. Update the zone shape as needed. You can add additional corners by - clicking on a segment and dragging it; a new corner will appear - under the mouse, allowing you to build more complex shapes. The - following figures show the process of creating a new zone and - editing its shape. - -
-
- -
Initial shape made by clicking and dragging
-
- -
- -
Zone in its default shape
-
- -
- -
Same zone after clicking and dragging on the zone edges to add additional corners
-
-
- -You can add further details about the zone using the configuration -tools, such as those shown for the Narrow Corridor Zone in the following -figure. - -
-
- -
-
- -Clicking on the -will allow you to change the type of zone, using the menu -shown in the figure below. When you have finished creating the zone -select **Done** on the upper toolbar. - -
-
- -
-
- -## Using Workflows - -:::note - -See [detailed documentation on creating workflows](https://docs.ottomotors.com/Archive/2-22/out/en/51722-51871-creating-workflows.html) -for more information. - -::: - -Workflows use endpoints to have a robot perform work automatically. When -a workflow is created, robots can execute them automatically when -autonomy is active. - -To create a workflow: - -1. From the **Facility** menu select **Endpoints**. -2. Select **A-B-C**. The workflow details pane will appear on the right - side of the window. -3. Enter a **Name** for the workflow. -4. Select **Add Task** to add a task to the workflow using endpoints - that have been created already. The tasks available for selection - are dependent on the endpoints that have been added to the map and - their types. -5. Select the desired tasks type. -6. Select the desired endpoint at which the selected task will be - performed. -7. Add additional tasks to the workflow as desired. -8. Select **Done** to add the workflow to the map. -9. Select **Save** to save the changes to the map. - -To execute a workflow: - -1. From the **Drive** menu select **Workflows**. -2. Select the desired workflow. -3. Select **GO**. The robot will attempt to execute the workflow. - Select **Stop** at any time to pause execution of the workflow. - Select **Resume** to continue the workflow. - -## Using Docking - -:::warning - -Keep the area around the dock free of objects and people. There is no -obstacle detection between pre-docking point and the dock; similarly, -there is no obstacle detection during the undocking operation. - -::: - -Docking is a feature for IndoorNav that requires the purchase of a dock -target. Refer to [Support](/docs_indoornav_user_manual/support.mdx) for -information on how to contact the sales team to purchase a dock. - -To include a dock in the workflow: - -1. **Mapping**: Position the dock in its intended position, then - proceed to map the area as usual, including the dock area. If the - dock was not included fully in the original map, remap the dock - area. - -
-
- -
-
- -2. **Placing Dock on the Map**: Once the map is created, overlay the - dock target onto the map as shown below by selecting "Charger - Endpoint" from the "Endpoints" menu and adding the charger on the - map such that it overlays the position from the mapping step. - -
-
- -
-
- -3. **Docking**: Select the "Dock Endpoint" and add it to the map so - that it is 2 metres away from the dock, positioned in the centre of - the dock, and oriented to point to the centre of the dock as shown - below. Then, update the desired workflow to make the "Dock - Endpoint" the last endpoint of the mission. - -
-
- -
-
- -4. **Undocking**: Add an "Undock Endpoint" at the position of the - robot when docked as shown below. Then, update the desired workflow - to make the "Undock Endpoint" the first endpoint of the mission. - -
-
- -
-
- -For clarity, when creating a mission that begins and ends with the robot -at the dock, use the Undock Endpoint as the first endpoint and the Dock -Endpoint as the last one. - -
-
- -
-
+--- +title: Maps +sidebar_label: Maps +sidebar_position: 4 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +:::note + +See [detailed documentation on mapping a +facility](https://docs.ottomotors.com/Archive/2-22/out/en/51722-51848-mapping-a-facility.html) +for more information. + +::: + +A map is a digital representation of the facility around which your +robot needs to navigate. Maps are on a grid and X and Y axes are used to +define locations on that grid. The point at which a map recording begins +is located on the grid at 0m, 0m. Maps are always measured in meters. + +Maps are how robots become aware of traffic rules and key waypoints +within a facility. A robot determines which traffic rules to apply based +on its position estimate---this is not a safety rated system. If a robot +is in close proximity to an area where a drift in position may cause a +hazard, place physical barriers that the safety system is capable of +seeing. + +Robots require an accurate map of a facility in order to plan the best +routes for executing workflows. Map creation is done using your robot to +record the its surroundings while it drives around the facility. + +## Making a Map + +:::note + +When you first receive your robot with IndoorNav it may have a map of +Clearpath's building and testing facility already saved on it. This map +may be discarded. + +::: + +To create a new map: + +1. [Refer to the mapping guidelines](https://docs.ottomotors.com/Archive/2-22/out/en/51722-51849-mapping-guidelines.html). + +2. Open the Web GUI. + +3. Determine where map recording will begin and navigate the robot to + that position. Carefully select the starting position and alignment. + This point may be important in the future if updating a map or + remapping. A point that is central is recommended, but not required. + Note that the orientation of robot in relation to the facility when + beginning to record the map affects the orientation of the map as it + appears. When recording map data first beings, the direction in + which the front of the robot is facing will be the right side (east) + of the map. + +4. Select the **Facility** tab. + +5. From the upper toolbar, select **New Map**. The existing map (if + any) will disappear and be replaced with a new, blank map. To + download a copy of the current map click **Export Map.** To upload + an existing map, e.g. one saved from another robot, click **Import Map.** + +
+
+ +
+
+ +6. Select **REC** to begin recording the map. Select **Pause** at any + time to pause map data recording. + +
+
+ +
+
+ +7. Drive the robot through the facility manually, either using the web + GUI or the game controller. You will see light grey lines appear, + indicating where walls and other obstacles are. You should map all + locations where the robot is expected to navigate autonomously. + +8. To save the changes to the map, select **Save Map**. To cancel all + changes, select **Undo** or navigate to a new screen. + +# Using Map Features + +Once the map is made you can specify certain zones as off-limits to the +robot, designate certain areas as one-way traffic, restrict speed, or +simply add annotations to make the map easier to read. See +[Using Zones](#usage-zones) for more information about +creating zones on the map. + +To add zones and endpoints, use the menus found on the Facility +interface's main menu. + +
+
+ +
+
+ +:::note + +After adding, removing, or editing zones and endpoints, you must click +the +button on the main toolbar before navigating away from the page. Failing +to click this button may result in data being lost. + +::: + +## Adding Endpoints + +:::note + +See [detailed documentation on creating endpoints](https://docs.ottomotors.com/Archive/2-22/out/en/51722-51866-creating-endpoints.html) +for more information. + +::: + +An endpoint is a physical location that sometimes includes a collection +of tasks that define how a robot performs a workflow. To add an endpoint +to the map: + +1. From the **Facility** menu select **Endpoints**. + +2. Select the appropriate type of endpoint from the list. + +3. Select the desired location on the map where the endpoint will be + created. An endpoint details pane will appear on the right side of + the window. If desired, orient the endpoint using the orientation + circle. Select and drag the middle of the orientation circle to move + the endpoint to a different location on the map. Select the drag the + edge of the orientation circle to rotate the endpoint. + +
+
+ +
+
+ +4. Enter a **Name** for the endpoint. + +5. If desired, enter a **Description**. + +6. The **X** and **Y** coordinates and **Rotation** (in degrees) of the + endpoint will be pre-populated based on the placement of the + endpoint. Use these fields to finely position the endpoint on the + map. + +7. Select **Done** to add the endpoint to the map. + +8. Select **Save** to save the changes to the map. To cancel all + changes, select **Undo** or navigate to a new screen. + +## Using Zones {#usage-zones} + +:::note + +See [detailed documentation on using zones](https://docs.ottomotors.com/Archive/2-22/out/en/51722-51877-zones.html) +for more information. + +::: + +Zones define specific areas where robots can travel and their behavior +while within or near the zone such as maximum speed. + +Zones are polygons with three or more points making up a closed shape. +Zone placement isn't restricted by walls or other solid objects on the +map. + +To add a new zone to the map: + +1. Click the Map button on the main toolbar and select the desired type + of zone from the menu. +2. Click and drag on the map to add a new zone. Initially the zone will + be rectangular. +3. Update the zone shape as needed. You can add additional corners by + clicking on a segment and dragging it; a new corner will appear + under the mouse, allowing you to build more complex shapes. The + following figures show the process of creating a new zone and + editing its shape. + +
+
+ +
Initial shape made by clicking and dragging
+
+ +
+ +
Zone in its default shape
+
+ +
+ +
Same zone after clicking and dragging on the zone edges to add additional corners
+
+
+ +You can add further details about the zone using the configuration +tools, such as those shown for the Narrow Corridor Zone in the following +figure. + +
+
+ +
+
+ +Clicking on the +will allow you to change the type of zone, using the menu +shown in the figure below. When you have finished creating the zone +select **Done** on the upper toolbar. + +
+
+ +
+
+ +## Using Workflows + +:::note + +See [detailed documentation on creating workflows](https://docs.ottomotors.com/Archive/2-22/out/en/51722-51871-creating-workflows.html) +for more information. + +::: + +Workflows use endpoints to have a robot perform work automatically. When +a workflow is created, robots can execute them automatically when +autonomy is active. + +To create a workflow: + +1. From the **Facility** menu select **Endpoints**. +2. Select **A-B-C**. The workflow details pane will appear on the right + side of the window. +3. Enter a **Name** for the workflow. +4. Select **Add Task** to add a task to the workflow using endpoints + that have been created already. The tasks available for selection + are dependent on the endpoints that have been added to the map and + their types. +5. Select the desired tasks type. +6. Select the desired endpoint at which the selected task will be + performed. +7. Add additional tasks to the workflow as desired. +8. Select **Done** to add the workflow to the map. +9. Select **Save** to save the changes to the map. + +To execute a workflow: + +1. From the **Drive** menu select **Workflows**. +2. Select the desired workflow. +3. Select **GO**. The robot will attempt to execute the workflow. + Select **Stop** at any time to pause execution of the workflow. + Select **Resume** to continue the workflow. + +## Using Docking + +:::warning + +Keep the area around the dock free of objects and people. There is no +obstacle detection between pre-docking point and the dock; similarly, +there is no obstacle detection during the undocking operation. + +::: + +Docking is a feature for IndoorNav that requires the purchase of a dock +target. Refer to [Support](/docs_indoornav_user_manual/support.mdx) for +information on how to contact the sales team to purchase a dock. + +To include a dock in the workflow: + +1. **Mapping**: Position the dock in its intended position, then + proceed to map the area as usual, including the dock area. If the + dock was not included fully in the original map, remap the dock + area. + +
+
+ +
+
+ +2. **Placing Dock on the Map**: Once the map is created, overlay the + dock target onto the map as shown below by selecting "Charger + Endpoint" from the "Endpoints" menu and adding the charger on the + map such that it overlays the position from the mapping step. + +
+
+ +
+
+ +3. **Docking**: Select the "Dock Endpoint" and add it to the map so + that it is 2 metres away from the dock, positioned in the centre of + the dock, and oriented to point to the centre of the dock as shown + below. Then, update the desired workflow to make the "Dock + Endpoint" the last endpoint of the mission. + +
+
+ +
+
+ +4. **Undocking**: Add an "Undock Endpoint" at the position of the + robot when docked as shown below. Then, update the desired workflow + to make the "Undock Endpoint" the first endpoint of the mission. + +
+
+ +
+
+ +For clarity, when creating a mission that begins and ends with the robot +at the dock, use the Undock Endpoint as the first endpoint and the Dock +Endpoint as the last one. + +
+
+ +
+
diff --git a/docs_indoornav_user_manual/using_indoornav/usage_background.mdx b/docs_indoornav_user_manual/using_indoornav/usage_background.mdx index 9ff252af..2b2f54fe 100644 --- a/docs_indoornav_user_manual/using_indoornav/usage_background.mdx +++ b/docs_indoornav_user_manual/using_indoornav/usage_background.mdx @@ -1,27 +1,27 @@ ---- -title: IndoorNav Software Overview -sidebar_label: IndoorNav Software Overview -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -This section will explain the basic usage of IndoorNav. For more -complete documentation, and a deeper dive into all of the available -features, please refer to the guides at -[http://docs.ottomotors.com](https://docs.ottomotors.com/Archive/2-22/out/index-222.html?lang=en). - -The following figure shows the basic layout of the networking for -IndoorNav. - - - -The robot's main PC is located inside the robot and runs the `roscore` -process. All sensors are connected to the robot's main PC over USB or -ethernet, as required by the specific sensor. - -The IndoorNav backpack PC communicates over an ethernet connection with -the main PC. All of the localization and path-planning is done on the -backpack PC. The backpack PC does not have any direct connection to the -wireless network; all traffic to/from the user's web browser is routed -via the robot's main PC. +--- +title: IndoorNav Software Overview +sidebar_label: IndoorNav Software Overview +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +This section will explain the basic usage of IndoorNav. For more +complete documentation, and a deeper dive into all of the available +features, please refer to the guides at +[http://docs.ottomotors.com](https://docs.ottomotors.com/Archive/2-22/out/index-222.html?lang=en). + +The following figure shows the basic layout of the networking for +IndoorNav. + + + +The robot's main PC is located inside the robot and runs the `roscore` +process. All sensors are connected to the robot's main PC over USB or +ethernet, as required by the specific sensor. + +The IndoorNav backpack PC communicates over an ethernet connection with +the main PC. All of the localization and path-planning is done on the +backpack PC. The backpack PC does not have any direct connection to the +wireless network; all traffic to/from the user's web browser is routed +via the robot's main PC. diff --git a/docs_indoornav_user_manual/using_indoornav/web_gui.mdx b/docs_indoornav_user_manual/using_indoornav/web_gui.mdx index 1c124259..a032726f 100644 --- a/docs_indoornav_user_manual/using_indoornav/web_gui.mdx +++ b/docs_indoornav_user_manual/using_indoornav/web_gui.mdx @@ -1,41 +1,41 @@ ---- -title: Web GUI -sidebar_label: Web GUI -sidebar_position: 2 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -The easiest method of interacting with IndoorNav is via the web GUI. The -following conditions must be met in order for the web GUI to function -correctly: - -1. IndoorNav is running (see [Manually Starting IndoorNav](/docs_indoornav_user_manual/base_robot_config/config_starting_manually.mdx) - or [Automatically Starting IndoorNav](/docs_indoornav_user_manual/base_robot_config/config_starting_automatically.mdx), -2. the robot is connected to a wireless access point, -3. your laptop or desktop is connected to the same network as the - robot, -4. you know the robot's IP address on the wireless network (or can - resolve its hostname to the wireless IP address), and -5. port-forwarding has been enabled on the robot. - -The web interface operates over `http` on port `TCP/5000`. - -
-
- -
-
- -To access the web interface, open your web browser and navigate to the -robot's IP address on port 5000, e.g.: ```http://192.168.0.197:5000``` - -:::note - -Google Chrome 62.x or later is recommended. Other modern browsers, such -as Firefox 95.x or later and Chromium 95.x or later will likely also -work, but have not been tested as thoroughly as Google Chrome. - -::: - -The following sections explain specific features of the Web GUI. +--- +title: Web GUI +sidebar_label: Web GUI +sidebar_position: 2 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +The easiest method of interacting with IndoorNav is via the web GUI. The +following conditions must be met in order for the web GUI to function +correctly: + +1. IndoorNav is running (see [Manually Starting IndoorNav](/docs_indoornav_user_manual/base_robot_config/config_starting_manually.mdx) + or [Automatically Starting IndoorNav](/docs_indoornav_user_manual/base_robot_config/config_starting_automatically.mdx), +2. the robot is connected to a wireless access point, +3. your laptop or desktop is connected to the same network as the + robot, +4. you know the robot's IP address on the wireless network (or can + resolve its hostname to the wireless IP address), and +5. port-forwarding has been enabled on the robot. + +The web interface operates over `http` on port `TCP/5000`. + +
+
+ +
+
+ +To access the web interface, open your web browser and navigate to the +robot's IP address on port 5000, e.g.: ```http://192.168.0.197:5000``` + +:::note + +Google Chrome 62.x or later is recommended. Other modern browsers, such +as Firefox 95.x or later and Chromium 95.x or later will likely also +work, but have not been tested as thoroughly as Google Chrome. + +::: + +The following sections explain specific features of the Web GUI. diff --git a/docs_outdoornav_user_manual/_category_.json b/docs_outdoornav_user_manual/_category_.json index c123e1bc..f5966a95 100644 --- a/docs_outdoornav_user_manual/_category_.json +++ b/docs_outdoornav_user_manual/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "OutdoorNav User Manual", - "position": 1 -} +{ + "label": "OutdoorNav User Manual", + "position": 1 +} diff --git a/docs_outdoornav_user_manual/api/_category_.json b/docs_outdoornav_user_manual/api/_category_.json index a6e53920..79c71658 100644 --- a/docs_outdoornav_user_manual/api/_category_.json +++ b/docs_outdoornav_user_manual/api/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Application Programming Interface", - "position": 7 -} +{ + "label": "Application Programming Interface", + "position": 7 +} diff --git a/docs_outdoornav_user_manual/api/api_overview.mdx b/docs_outdoornav_user_manual/api/api_overview.mdx index 4a56435b..3c6055d6 100644 --- a/docs_outdoornav_user_manual/api/api_overview.mdx +++ b/docs_outdoornav_user_manual/api/api_overview.mdx @@ -1,26 +1,26 @@ ---- -title: API Overview -sidebar_label: API Overview -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -While the Web User Interface provides a great way to get started quickly -with OutdoorNav Software, some users will want programmatic control or -may wish to develop their own graphical user interfaces \-- for those -users, the Application Programming Interface (API) provides the -flexibility to do so. This is illustrated in the figure below. - -
-
- -
Interconnection between OutdoorNav Software and UGV Controller
-
-
- -The API is, at present, a [ROS 2 Jazzy](https://docs.ros.org/en/jazzy/index.html) API. -The message and services types for the API are defined at: -https://github.com/clearpathrobotics/clearpath_msgs/tree/onav-ros2/clearpath_outdoornav_msgs - +--- +title: API Overview +sidebar_label: API Overview +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +While the Web User Interface provides a great way to get started quickly +with OutdoorNav Software, some users will want programmatic control or +may wish to develop their own graphical user interfaces \-- for those +users, the Application Programming Interface (API) provides the +flexibility to do so. This is illustrated in the figure below. + +
+
+ +
Interconnection between OutdoorNav Software and UGV Controller
+
+
+ +The API is, at present, a [ROS 2 Jazzy](https://docs.ros.org/en/jazzy/index.html) API. +The message and services types for the API are defined at: +https://github.com/clearpathrobotics/clearpath_msgs/tree/onav-ros2/clearpath_outdoornav_msgs + More details on the API will be provided in a future release of the documentation. \ No newline at end of file diff --git a/docs_outdoornav_user_manual/index.mdx b/docs_outdoornav_user_manual/index.mdx index 09a63a7f..3d1655b9 100644 --- a/docs_outdoornav_user_manual/index.mdx +++ b/docs_outdoornav_user_manual/index.mdx @@ -1,18 +1,18 @@ ---- -title: OutdoorNav User Manual -sidebar_label: OutdoorNav User Manual -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -
-
- -
-
- -OutdoorNav is an outdoor autonomy software platform designed for vehicle developers, -OEMs and robotics researchers. Compatible with Clearpath outdoor mobile platforms -and third-party vehicles, OutdoorNav provides reliable, industry-leading GPS-based +--- +title: OutdoorNav User Manual +sidebar_label: OutdoorNav User Manual +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +
+
+ +
+
+ +OutdoorNav is an outdoor autonomy software platform designed for vehicle developers, +OEMs and robotics researchers. Compatible with Clearpath outdoor mobile platforms +and third-party vehicles, OutdoorNav provides reliable, industry-leading GPS-based navigation for faster, more efficient autonomous vehicle development. \ No newline at end of file diff --git a/docs_outdoornav_user_manual/overview/_category_.json b/docs_outdoornav_user_manual/overview/_category_.json index 663e4088..8414dc7f 100644 --- a/docs_outdoornav_user_manual/overview/_category_.json +++ b/docs_outdoornav_user_manual/overview/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Overview", - "position": 4 -} +{ + "label": "Overview", + "position": 4 +} diff --git a/docs_outdoornav_user_manual/overview/overview_introduction.mdx b/docs_outdoornav_user_manual/overview/overview_introduction.mdx index 95c7e2f4..21a17e20 100644 --- a/docs_outdoornav_user_manual/overview/overview_introduction.mdx +++ b/docs_outdoornav_user_manual/overview/overview_introduction.mdx @@ -1,79 +1,79 @@ ---- -title: Introduction -sidebar_label: Introduction -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -## Summary - -OutdoorNav Software is a software package developed by Clearpath -Robotics for autonomous and manual navigation of Unmanned Ground -Vehicles (UGVs) in outdoor environments. - -
-
- -
Web UI Mission Planning View
-
-
- -
-
- -
Web UI Front Camera View
-
-
- -## Compatible Platforms - -While it has been optimized for use with OutdoorNav Hardware from -Clearpath Robotics -([Husky](https://clearpathrobotics.com/husky-unmanned-ground-vehicle-robot/), -[Jackal](https://clearpathrobotics.com/jackal-small-unmanned-ground-vehicle/), -and -[Warthog](https://clearpathrobotics.com/warthog-unmanned-ground-vehicle-robot/)), -it has been designed so that it can be added easily to third-party UGVs. - -## Key Features - -Key features of OutdoorNav Software include: - -- Mission Planning and Autonomous Navigation - - - Robust GPS-based localization with sensor fusion of camera, IMU, LiDAR - and platform odometry - - Autonomous path following through a network of paths - - Obstacle Detection and Avoidance: Stop and wait or - autonomously plan a collision-free path around obstacles - without the need to stop - -- Teleoperation - - - Operate the robot remotely using an on-screen or physical - joystick - - Visualize what the robot sees by displaying its network - cameras - -- Web User Interface (Web UI) - - - Build missions containing sets of paths, with optional task - execution on each path; tasks can be standard tasks (eg. save - camera image) or user provided functions - - View the robot's live position and attitude on the map - - Display robot data such as velocity, signal strength, status - of the motion stop, status of navigation system, and battery charge - - Save and export Missions - -- Application Programming Interface (API) - - - Build your own application and UI by accessing the navigation - API to control the UGV through software or implement fleet - management by accessing the autonomy API - -- Third Party Integration - - - The Web UI and API can be accessed through a network connection; - cloud-based services are available from third parties to - facilitate remote connections and networking to robot hardware +--- +title: Introduction +sidebar_label: Introduction +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +## Summary + +OutdoorNav Software is a software package developed by Clearpath +Robotics for autonomous and manual navigation of Unmanned Ground +Vehicles (UGVs) in outdoor environments. + +
+
+ +
Web UI Mission Planning View
+
+
+ +
+
+ +
Web UI Front Camera View
+
+
+ +## Compatible Platforms + +While it has been optimized for use with OutdoorNav Hardware from +Clearpath Robotics +([Husky](https://clearpathrobotics.com/husky-unmanned-ground-vehicle-robot/), +[Jackal](https://clearpathrobotics.com/jackal-small-unmanned-ground-vehicle/), +and +[Warthog](https://clearpathrobotics.com/warthog-unmanned-ground-vehicle-robot/)), +it has been designed so that it can be added easily to third-party UGVs. + +## Key Features + +Key features of OutdoorNav Software include: + +- Mission Planning and Autonomous Navigation + + - Robust GPS-based localization with sensor fusion of camera, IMU, LiDAR + and platform odometry + - Autonomous path following through a network of paths + - Obstacle Detection and Avoidance: Stop and wait or + autonomously plan a collision-free path around obstacles + without the need to stop + +- Teleoperation + + - Operate the robot remotely using an on-screen or physical + joystick + - Visualize what the robot sees by displaying its network + cameras + +- Web User Interface (Web UI) + + - Build missions containing sets of paths, with optional task + execution on each path; tasks can be standard tasks (eg. save + camera image) or user provided functions + - View the robot's live position and attitude on the map + - Display robot data such as velocity, signal strength, status + of the motion stop, status of navigation system, and battery charge + - Save and export Missions + +- Application Programming Interface (API) + + - Build your own application and UI by accessing the navigation + API to control the UGV through software or implement fleet + management by accessing the autonomy API + +- Third Party Integration + + - The Web UI and API can be accessed through a network connection; + cloud-based services are available from third parties to + facilitate remote connections and networking to robot hardware diff --git a/docs_outdoornav_user_manual/overview/overview_operating_conditions.mdx b/docs_outdoornav_user_manual/overview/overview_operating_conditions.mdx index 134fadcc..072e3180 100644 --- a/docs_outdoornav_user_manual/overview/overview_operating_conditions.mdx +++ b/docs_outdoornav_user_manual/overview/overview_operating_conditions.mdx @@ -1,113 +1,113 @@ ---- -title: Operating Conditions -sidebar_label: Operating Conditions -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -OutdoorNav Software is designed and tested for use in rugged outdoor -environments. - -## Operating Conditions - -### Terrain - -OutdoorNav Software is compatible with terrains in which the UGV can be -driven manually without excessive slipping. The performance limits will -be a function of the base UGV traction. - -Using Clearpath Robotics Husky, Jackal, and Warthog as a the base UGV, -OutdoorNav Software is suitable for use in the following terrains: - -- asphalt -- concrete -- grass -- snow - -:::note - -Grass should not exceed 30 cm in height if collision avoidance is -enabled. - -::: - -:::note - -Winter/studded tires may be required for proper traction on snow. - -::: - -OutdoorNav Software is currently **not** suitable in the following -terrains: - -- ice -- loose gravel - -The terrain capabilities of third-party UGVs will be dependent on a -variety of factors including the vehicle mass, the tire treading, and -motor power. - -### Environment - -OutdoorNav Software is suitable for use in the following environmental -conditions: - -- light rainfall (drizzle) -- light snowfall (powdery snow) - -:::note - -If erratic behavior, such as frequent replanning, is perceived in these -light precipitation conditions, disabling the "continuous planning" -feature may help. - -::: - -OutdoorNav Software is **not** suitable for use in the following -environmental conditions: - -- heavy rainfall -- heavy snowfall - -:::note - -If navigation is required in heavy rain or snow, disabling the collision -avoidance feature will allow the UGV to navigate properly. This should -be done with caution. - -![](/img/outdoornav_images/gps_danger.png) - -::: - -## Performance - -The performance of the system is highly dependent on both the base UGV, -the sensors, the system integration details, and the environment. With -standard sensors: - -- Location accuracy (position & heading): Less than 5 cm and less than 2° -- Path tracking accuracy (approximate): 10 cm - -## Limitations - -While OutdoorNav Software operates effectively in a range of rugged -outdoor environments, the operator should be aware of the following -limitations and plan accordingly. - -_OutdoorNav System Limitations_ - -| Limitation | Details | -|--------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| RTK accuracy | Localization accuracy for the Standard (RTK) configuration assumes the base station location has been accurately surveyed. | -| Localization accuracy | Localization accuracy is influenced by the quality of GNSS data that is available. Navigating in GNSS denied areas (e.g., under bridges, near tall buildings, etc.) will cause degradation in localization performance. | -| Negative obstacle detection not present | Outdoor Navigation Software does not have negative obstacle detection capability. Your UGV will not detect stairs, cliffs, potholes, depressions or edges and may drive into these obstacles causing harm to people or property. | -| Limited obstacle detection in vertical dimension | The small vertical field of view of 3D LiDARs limits the vertical obstacle detection capability of the OutdoorNav Software. | -| Low traction may cause UGV to get stuck | Your UGV may navigate itself into a situation where wheels slip or do not make contact with the ground. | -| Rain and snow may affect obstacle detection | Adverse weather conditions may obscure obstacle detection and avoidance data from 3D LiDARs. Obstacle detection and avoidance may not function in all weather conditions and must be disabled to navigate in heavy snow or rain. | -| WiFi range limits | The current configurations of the OutdoorNav Software will continue navigation if the WiFi disconnects or goes out of range. The Web UI will reconnect once the WiFi has reconnected but certain functions of the UI may be limited such as the ability to issue a pause/stop commands or sending new missions to the UGV. | -| Wireless motion stop range limits | The UGV will motion stop if the UGV is driven out of range of the wireless motion stop device. | -| RTK GPS limited by WiFi range | If WiFi goes out of range, your UGV will not receive RTK corrections from the Base Station. This can potentially decrease the accuracy of the GPS signal which can subsequently degrade path following performance of your system. | -| Obstacle detection may cause UGV to become stuck | The UGV may stop and become stuck if obstacles are detected and not cleared from its path. If obstacle avoidance is enabled, it may not be able to calculate an acceptable path to the next Viapoint or Goal Point under all circumstances. This will result in the UGV becoming stuck and failing its Mission. | -| Zones are not currently supported | It is not possible to define “keep-out” or “unsafe” zones that the UGV needs to avoid. Rather, careful use of Waypoint placement by the operator can be used to keep the UGV at a safe distance from unsafe zones. | -| No collision avoidance during teleoperation mode | When operating in Manual Mode (Teleoperation), no collision avoidance is enabled. The operator is responsible for avoiding collisions. | +--- +title: Operating Conditions +sidebar_label: Operating Conditions +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +OutdoorNav Software is designed and tested for use in rugged outdoor +environments. + +## Operating Conditions + +### Terrain + +OutdoorNav Software is compatible with terrains in which the UGV can be +driven manually without excessive slipping. The performance limits will +be a function of the base UGV traction. + +Using Clearpath Robotics Husky, Jackal, and Warthog as a the base UGV, +OutdoorNav Software is suitable for use in the following terrains: + +- asphalt +- concrete +- grass +- snow + +:::note + +Grass should not exceed 30 cm in height if collision avoidance is +enabled. + +::: + +:::note + +Winter/studded tires may be required for proper traction on snow. + +::: + +OutdoorNav Software is currently **not** suitable in the following +terrains: + +- ice +- loose gravel + +The terrain capabilities of third-party UGVs will be dependent on a +variety of factors including the vehicle mass, the tire treading, and +motor power. + +### Environment + +OutdoorNav Software is suitable for use in the following environmental +conditions: + +- light rainfall (drizzle) +- light snowfall (powdery snow) + +:::note + +If erratic behavior, such as frequent replanning, is perceived in these +light precipitation conditions, disabling the "continuous planning" +feature may help. + +::: + +OutdoorNav Software is **not** suitable for use in the following +environmental conditions: + +- heavy rainfall +- heavy snowfall + +:::note + +If navigation is required in heavy rain or snow, disabling the collision +avoidance feature will allow the UGV to navigate properly. This should +be done with caution. + +![](/img/outdoornav_images/gps_danger.png) + +::: + +## Performance + +The performance of the system is highly dependent on both the base UGV, +the sensors, the system integration details, and the environment. With +standard sensors: + +- Location accuracy (position & heading): Less than 5 cm and less than 2° +- Path tracking accuracy (approximate): 10 cm + +## Limitations + +While OutdoorNav Software operates effectively in a range of rugged +outdoor environments, the operator should be aware of the following +limitations and plan accordingly. + +_OutdoorNav System Limitations_ + +| Limitation | Details | +|--------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| RTK accuracy | Localization accuracy for the Standard (RTK) configuration assumes the base station location has been accurately surveyed. | +| Localization accuracy | Localization accuracy is influenced by the quality of GNSS data that is available. Navigating in GNSS denied areas (e.g., under bridges, near tall buildings, etc.) will cause degradation in localization performance. | +| Negative obstacle detection not present | Outdoor Navigation Software does not have negative obstacle detection capability. Your UGV will not detect stairs, cliffs, potholes, depressions or edges and may drive into these obstacles causing harm to people or property. | +| Limited obstacle detection in vertical dimension | The small vertical field of view of 3D LiDARs limits the vertical obstacle detection capability of the OutdoorNav Software. | +| Low traction may cause UGV to get stuck | Your UGV may navigate itself into a situation where wheels slip or do not make contact with the ground. | +| Rain and snow may affect obstacle detection | Adverse weather conditions may obscure obstacle detection and avoidance data from 3D LiDARs. Obstacle detection and avoidance may not function in all weather conditions and must be disabled to navigate in heavy snow or rain. | +| WiFi range limits | The current configurations of the OutdoorNav Software will continue navigation if the WiFi disconnects or goes out of range. The Web UI will reconnect once the WiFi has reconnected but certain functions of the UI may be limited such as the ability to issue a pause/stop commands or sending new missions to the UGV. | +| Wireless motion stop range limits | The UGV will motion stop if the UGV is driven out of range of the wireless motion stop device. | +| RTK GPS limited by WiFi range | If WiFi goes out of range, your UGV will not receive RTK corrections from the Base Station. This can potentially decrease the accuracy of the GPS signal which can subsequently degrade path following performance of your system. | +| Obstacle detection may cause UGV to become stuck | The UGV may stop and become stuck if obstacles are detected and not cleared from its path. If obstacle avoidance is enabled, it may not be able to calculate an acceptable path to the next Viapoint or Goal Point under all circumstances. This will result in the UGV becoming stuck and failing its Mission. | +| Zones are not currently supported | It is not possible to define “keep-out” or “unsafe” zones that the UGV needs to avoid. Rather, careful use of Waypoint placement by the operator can be used to keep the UGV at a safe distance from unsafe zones. | +| No collision avoidance during teleoperation mode | When operating in Manual Mode (Teleoperation), no collision avoidance is enabled. The operator is responsible for avoiding collisions. | diff --git a/docs_outdoornav_user_manual/overview/overview_scope.mdx b/docs_outdoornav_user_manual/overview/overview_scope.mdx index baf0b9f2..5b741ff5 100644 --- a/docs_outdoornav_user_manual/overview/overview_scope.mdx +++ b/docs_outdoornav_user_manual/overview/overview_scope.mdx @@ -1,13 +1,13 @@ ---- -title: Scope -sidebar_label: Scope -sidebar_position: 2 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -This documentation focuses on the OutdoorNav software itself, including -hardware dependencies and integration, but not the specifics of UGV -hardware. For details on compatible Clearpath Robotics UGVs and custom -hardware integrations, contact \ or check +--- +title: Scope +sidebar_label: Scope +sidebar_position: 2 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +This documentation focuses on the OutdoorNav software itself, including +hardware dependencies and integration, but not the specifics of UGV +hardware. For details on compatible Clearpath Robotics UGVs and custom +hardware integrations, contact \ or check out our [YouTube channel](https://www.youtube.com/channel/UCNPP3C-ZK3mwpG2x89VE-2Q). \ No newline at end of file diff --git a/docs_outdoornav_user_manual/quick_start/_category_.json b/docs_outdoornav_user_manual/quick_start/_category_.json index f92c8e91..6a14af93 100644 --- a/docs_outdoornav_user_manual/quick_start/_category_.json +++ b/docs_outdoornav_user_manual/quick_start/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Quick Start", - "position": 5 -} +{ + "label": "Quick Start", + "position": 5 +} diff --git a/docs_outdoornav_user_manual/safety.mdx b/docs_outdoornav_user_manual/safety.mdx index 1de70c90..3f2d6645 100644 --- a/docs_outdoornav_user_manual/safety.mdx +++ b/docs_outdoornav_user_manual/safety.mdx @@ -1,139 +1,139 @@ ---- -title: Safety -sidebar_label: Safety -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -## Important Safety Information - -The use of Unmanned Ground Vehicles (UGVs) can result in unexpected and -dangerous behavior. Although Clearpath Robotics endeavors to create safe -and reliable software and systems, autonomous outdoor UGVs should not be -considered safe for unsupervised use around humans or other obstacles. -No level of safety and reliability of software and non-safety rated -hardware components is guaranteed. - -Clearpath strongly recommends that users carry out a risk assessment -related to their application and deployment of autonomous UGVs. The -ISO-12100 standard [Risk assessment and risk reduction](https://www.iso.org/standard/51528.html) provides guidance on -performing risk assessments. - -Functional safety in robotics is often achieved through the use of -safety related parts and control systems to minimize risks such as -safety LiDARs for obstacle detection. These hardware components must be -designed into the UGV hardware and can be tightly integrated with -navigation software. Clearpath Robotics recommends that this process be -undertaken after the product or process has been fully defined. It can -be a significant design effort. - -## Safety Notice Levels - -For Clearpath Robotics hardware and software, the risk level is captured -using the following types of labels. - -![](/img/outdoornav_images/safety_information.png) - -## General Hazard Labels - -Review the following to learn more about the labels that may be used on -Clearpath Robotics products. Hazards can also apply to attachments and -accessories used in conjunction with a Clearpath Robotics product. UGVs -from other providers may present additional hazards and risks. - -_General Hazards_ - -| Label | Label Title | Label Description | -|--------------------------------------------------------------------------------------|----------------------|------------------------------------------| -|
| Automatic Motion Hazard | Clearpath Robotics UGVs may begin moving suddenly, either autonomously or when being driven manually. Always be aware of Clearpath Robotics products and their potential for movement. | -|
| Crushing Risk | Objects or personnel can be crushed between the Clearpath Robotics UGV and another object. Keep hands and other objects clear of crush points at all times. Keep clear of all docking Clearpath Robotics UGVs. | -|
| Electrical Shock Risk | Clearpath Robotics UGVs contain circuitry and batteries that may cause electrical shock if not properly insulated. | -|
| Entanglement Risk | Clearpath Robotics UGVs as well as their cameras can lead to entanglement of hair or dangling materials during their rotation. Keep hair and dangling materials away from Clearpath Robotics UGVs during motion. | -|
| Environmental Hazard | Clearpath Robotics UGVs contain batteries and materials that may require special disposal methods. Consult local regulations. | -|
| Falling Object Risk | Beware of objects that may have shifted in any Clearpath Robotics UGV crate as they pose a risk of falling when opened. | -|
| High Surface Temperature Risk | UGV computer heat sinks and UGV motors can become extremely hot during operation. | -|
| Impact Risk | Clearpath Robotics UGVs travelling through a facility can potentially impact objects and personnel. Keep clear of all docking Clearpath Robotics UGVs. | -|
| Laser Radiation Risk | Clearpath Robotics UGVs may use Class 1 laser products. These provide no hazard during normal use, however it is not recommended to stare directly into the beam(s). | -|
| Material Hazard - Lithium | Lithium UGV batteries contain harmful material. Always use proper handling procedures when handling UGV batteries. | -|
| Manual Load Lifting Risk | Always use ergonomic techniques when manually lifting loads. | -|
| Pinching Risk | Keep hands and other objects clear of pinch points at all times. Keep clear of all docking Clearpath Robotics UGVs. | -|
| Radio Frequency Risk | Clearpath Robotics UGVs and/or accessories may use radio frequency (RF) radiating antennas. These provide no hazard during normal use, however prolonged exposure around the antenna is not recommended. | -|
| Tripping Hazard | Clearpath Robotics products may pose a tripping hazard. | - -## Safety Awareness - -Personnel present during the operation of an Unmanned Ground Vehicle -(UGV) need to be made aware or be accompanied by personnel who are -familiar with the specific risks and hazards associated with autonomous -mobile robots (AMR). The following checklist identifies basic topics -that should be addressed by site-specific worker and visitor safety -orientation training. - -
- -
- -- Proper PPE must be worn, including safety footwear (ie. steel toe). -- Crossing into the path of a moving UGV should be avoided, as well as - placing or throwing obstacles into the path of a moving UGV. - -
- -
- -- Be aware that a UGV can be anywhere in the operating area of the - facility at any time, and may pose a tripping hazard even when not - in motion. -- Personnel need to be aware of the UGV docking and charging areas, - where detection fields are reduced. -- Personnel should be aware that Clearpath Robotics UGVs LiDAR safety - scanners use a class 1 laser and high intensity LED. -- Personnel should keep all loose clothing and body parts away from - UGVs, accessories, attachments, and payloads, while they are in - autonomous operation. Using an Emergency Stop button is the only - acceptable manner of interacting with a Clearpath Robotics UGV or - attachment while it is being operated autonomously. - -In addition to the preceding basic items for all workers and visitors, -the following should be considered for facility personnel, including -drivers of other UGVs: - -- When required to move a product manually, personnel must ensure it - is in an Emergency Stop state or shut down completely and should not - push manually for prolonged periods. -- Alert personnel that while operating a Clearpath Robotics UGV - outside of the Autonomy State, they are solely responsible for - obstacle and collision avoidance. -- Maintenance of a Clearpath UGV not outlined in either this document - or the operations and maintenance manual can only be performed by a - Clearpath Robotics Authorized Personnel. - -To reduce the risk of harming people or damaging properties, a trained -operator must monitor the behavior of the UGV under autonomous -navigation mode at all times. The operator should use the wireless -emergency stop device to immediately avert any possible damaging or -dangerous behavior from the UGV. Failure in proper use of the software -might result in collision of the UGV into objects. - -- Ensure that low-height obstacles are removed from the potential path - of the UGV prior to operation. -- OutdoorNav Software does not have negative obstacle detection - capability. This means that your UGV will not detect stairs, cliffs - or edges and may drive off these obstacles causing harm to people or - properties as well as potentially damage the UGV. -- Adverse weather conditions may obscure obstacle detection and - avoidance data from the VLP-16 LiDAR. Obstacle detection and - avoidance may not function properly in snow, rain or fog. -- The current configurations of the OutdoorNav Software will continue - navigation if the WiFi disconnects or goes out of range. The Web UI - will reconnect once the WiFi has reconnected but certain functions - of the Web UI may be limited such as the ability to issue a stop - command or send new missions to the UGV. -- If connection of the UGV to the base station is lost (e.g., WiFi - goes out of range, low battery level, etc), UGV will not receive RTK - corrections from the base station. This can potentially decrease the - accuracy of the GPS signal which can subsequently degrade path - following performance of your system. -- Obstacle detection and avoidance is disabled during the docking and - undocking operations. Keep this area clear of people and objects. +--- +title: Safety +sidebar_label: Safety +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +## Important Safety Information + +The use of Unmanned Ground Vehicles (UGVs) can result in unexpected and +dangerous behavior. Although Clearpath Robotics endeavors to create safe +and reliable software and systems, autonomous outdoor UGVs should not be +considered safe for unsupervised use around humans or other obstacles. +No level of safety and reliability of software and non-safety rated +hardware components is guaranteed. + +Clearpath strongly recommends that users carry out a risk assessment +related to their application and deployment of autonomous UGVs. The +ISO-12100 standard [Risk assessment and risk reduction](https://www.iso.org/standard/51528.html) provides guidance on +performing risk assessments. + +Functional safety in robotics is often achieved through the use of +safety related parts and control systems to minimize risks such as +safety LiDARs for obstacle detection. These hardware components must be +designed into the UGV hardware and can be tightly integrated with +navigation software. Clearpath Robotics recommends that this process be +undertaken after the product or process has been fully defined. It can +be a significant design effort. + +## Safety Notice Levels + +For Clearpath Robotics hardware and software, the risk level is captured +using the following types of labels. + +![](/img/outdoornav_images/safety_information.png) + +## General Hazard Labels + +Review the following to learn more about the labels that may be used on +Clearpath Robotics products. Hazards can also apply to attachments and +accessories used in conjunction with a Clearpath Robotics product. UGVs +from other providers may present additional hazards and risks. + +_General Hazards_ + +| Label | Label Title | Label Description | +|--------------------------------------------------------------------------------------|----------------------|------------------------------------------| +|
| Automatic Motion Hazard | Clearpath Robotics UGVs may begin moving suddenly, either autonomously or when being driven manually. Always be aware of Clearpath Robotics products and their potential for movement. | +|
| Crushing Risk | Objects or personnel can be crushed between the Clearpath Robotics UGV and another object. Keep hands and other objects clear of crush points at all times. Keep clear of all docking Clearpath Robotics UGVs. | +|
| Electrical Shock Risk | Clearpath Robotics UGVs contain circuitry and batteries that may cause electrical shock if not properly insulated. | +|
| Entanglement Risk | Clearpath Robotics UGVs as well as their cameras can lead to entanglement of hair or dangling materials during their rotation. Keep hair and dangling materials away from Clearpath Robotics UGVs during motion. | +|
| Environmental Hazard | Clearpath Robotics UGVs contain batteries and materials that may require special disposal methods. Consult local regulations. | +|
| Falling Object Risk | Beware of objects that may have shifted in any Clearpath Robotics UGV crate as they pose a risk of falling when opened. | +|
| High Surface Temperature Risk | UGV computer heat sinks and UGV motors can become extremely hot during operation. | +|
| Impact Risk | Clearpath Robotics UGVs travelling through a facility can potentially impact objects and personnel. Keep clear of all docking Clearpath Robotics UGVs. | +|
| Laser Radiation Risk | Clearpath Robotics UGVs may use Class 1 laser products. These provide no hazard during normal use, however it is not recommended to stare directly into the beam(s). | +|
| Material Hazard - Lithium | Lithium UGV batteries contain harmful material. Always use proper handling procedures when handling UGV batteries. | +|
| Manual Load Lifting Risk | Always use ergonomic techniques when manually lifting loads. | +|
| Pinching Risk | Keep hands and other objects clear of pinch points at all times. Keep clear of all docking Clearpath Robotics UGVs. | +|
| Radio Frequency Risk | Clearpath Robotics UGVs and/or accessories may use radio frequency (RF) radiating antennas. These provide no hazard during normal use, however prolonged exposure around the antenna is not recommended. | +|
| Tripping Hazard | Clearpath Robotics products may pose a tripping hazard. | + +## Safety Awareness + +Personnel present during the operation of an Unmanned Ground Vehicle +(UGV) need to be made aware or be accompanied by personnel who are +familiar with the specific risks and hazards associated with autonomous +mobile robots (AMR). The following checklist identifies basic topics +that should be addressed by site-specific worker and visitor safety +orientation training. + +
+ +
+ +- Proper PPE must be worn, including safety footwear (ie. steel toe). +- Crossing into the path of a moving UGV should be avoided, as well as + placing or throwing obstacles into the path of a moving UGV. + +
+ +
+ +- Be aware that a UGV can be anywhere in the operating area of the + facility at any time, and may pose a tripping hazard even when not + in motion. +- Personnel need to be aware of the UGV docking and charging areas, + where detection fields are reduced. +- Personnel should be aware that Clearpath Robotics UGVs LiDAR safety + scanners use a class 1 laser and high intensity LED. +- Personnel should keep all loose clothing and body parts away from + UGVs, accessories, attachments, and payloads, while they are in + autonomous operation. Using an Emergency Stop button is the only + acceptable manner of interacting with a Clearpath Robotics UGV or + attachment while it is being operated autonomously. + +In addition to the preceding basic items for all workers and visitors, +the following should be considered for facility personnel, including +drivers of other UGVs: + +- When required to move a product manually, personnel must ensure it + is in an Emergency Stop state or shut down completely and should not + push manually for prolonged periods. +- Alert personnel that while operating a Clearpath Robotics UGV + outside of the Autonomy State, they are solely responsible for + obstacle and collision avoidance. +- Maintenance of a Clearpath UGV not outlined in either this document + or the operations and maintenance manual can only be performed by a + Clearpath Robotics Authorized Personnel. + +To reduce the risk of harming people or damaging properties, a trained +operator must monitor the behavior of the UGV under autonomous +navigation mode at all times. The operator should use the wireless +emergency stop device to immediately avert any possible damaging or +dangerous behavior from the UGV. Failure in proper use of the software +might result in collision of the UGV into objects. + +- Ensure that low-height obstacles are removed from the potential path + of the UGV prior to operation. +- OutdoorNav Software does not have negative obstacle detection + capability. This means that your UGV will not detect stairs, cliffs + or edges and may drive off these obstacles causing harm to people or + properties as well as potentially damage the UGV. +- Adverse weather conditions may obscure obstacle detection and + avoidance data from the VLP-16 LiDAR. Obstacle detection and + avoidance may not function properly in snow, rain or fog. +- The current configurations of the OutdoorNav Software will continue + navigation if the WiFi disconnects or goes out of range. The Web UI + will reconnect once the WiFi has reconnected but certain functions + of the Web UI may be limited such as the ability to issue a stop + command or send new missions to the UGV. +- If connection of the UGV to the base station is lost (e.g., WiFi + goes out of range, low battery level, etc), UGV will not receive RTK + corrections from the base station. This can potentially decrease the + accuracy of the GPS signal which can subsequently degrade path + following performance of your system. +- Obstacle detection and avoidance is disabled during the docking and + undocking operations. Keep this area clear of people and objects. diff --git a/docs_robots/legacy/ros1_robots/solutions/husky_a200_observer/integration_husky_a200_observer.mdx b/docs_robots/legacy/ros1_robots/solutions/husky_a200_observer/integration_husky_a200_observer.mdx index b159fd32..c5bc8c6b 100644 --- a/docs_robots/legacy/ros1_robots/solutions/husky_a200_observer/integration_husky_a200_observer.mdx +++ b/docs_robots/legacy/ros1_robots/solutions/husky_a200_observer/integration_husky_a200_observer.mdx @@ -1,110 +1,110 @@ ---- -title: Husky A200 Observer Integration -sidebar_label: Integration -sidebar_position: 2 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -import Support from "/components/support.mdx"; -import ComponentCommonSoftwareIntegration from "/components/common_software_integration.mdx"; - -To attach custom hardware to Husky A200 Observer, you will have to take care of mechanical mounting, electrical -supply, and software integration. This guide aims to equip you with respect to these challenges. - -## Mechanical Mounting - -Husky A200 Observer has two PACS™-compatible mount points on the top of the robot, one at the front -and one at the rear, as outlined in the figures below. Each of the two mount points can support -a payload up to 5 kg. - -
-
- - -
Husky A200 Observer exterior, front view
-
-
- -[PACS™](../../accessories/pacs.mdx) is a Clearpath Robotics standard. -We add a grid of M5x0.8 holes onto the top plate of the robot. -This grid of holes has a 80 mm X 80 mm spacing. -You can create your own brackets to interface with these holes, or can use an existing Clearpath Robotics designed bracket. - -:::note - -Our [Sensors](../../accessories/sensors/sensors.mdx) and [Accessories](../../accessories/add-ons/add-ons.mdx) pages indicate the required bracket for the particular attachment. - -::: - -:::note - -When using the front and rear mount point, be careful to avoid blocking the field of view of -the 3D LiDAR. If you have any related questions, please contact [Support](#support). - -::: - ---- - -## Electrical Integration - -Except for bus-powered USB cameras, most payloads have separate leads for power and data. - -### Maintenance and Debugging Connections - -On the Husky A200 Observer lid, there are three data interfaces that can be used for system maintenance -and debugging: - -- One 1 Gbps Ethernet (RJ45 connector), connected to the Main Computer -- One USB 3.0 (Type A connector), connected to the Main Computer -- One HDMI, connected to the Main Computer - -### Custom Payload Connections - -On the Husky A200 Observer lid, there is an Icotek KEL-FG-ER-E3 connector with three cable glands that will allow the user to -create and route power cables from custom payloads on the lid to power sources inside the Husky A200 Observer -while still maintaining the IP rating of the robot. (See -[this video](https://www.youtube.com/watch?v=xVLlroSRH7E&t=1s&ab_channel=icotek) -for more details on using the Icotek cable glands system.) - -Inside the Husky A200 Observer, power is available from terminal blocks as outlined in the table below. -For each power source, 18 AWG wires with ferrules (DigiKey P/N 277-2156-ND) are recommended for power cables -at the end that gets inserted into the terminal blocks. Note that positive and negative wires are connected -to separate terminal blocks. - -| Power Source | Maximum Current | Terminal Blocks | -| :-------------------- | :-------------- | :--------------------------------- | -| VBAT (24.0 V minimum) | 3.75 A | Brown (positive), Black (negative) | -| 24 V | 2.5 A | Grey (positive), Black (negative) | -| 12 V | 3.5 A | White (positive), Black (negative) | - -
-
- -
Power distribution terminal blocks
-
-
- -In addition to the power connections, the cable glands can be used to make data connections to -available ports on the Ethernet switch or to available USB ports on the Main Computer. When -connecting a device to the Ethernet switch, the device should be configured with a static IP -address in the 192.168.131.80 to 192.168.131.89 range. - ---- - - - ---- - -## Support {#support} - - +--- +title: Husky A200 Observer Integration +sidebar_label: Integration +sidebar_position: 2 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +import Support from "/components/support.mdx"; +import ComponentCommonSoftwareIntegration from "/components/common_software_integration.mdx"; + +To attach custom hardware to Husky A200 Observer, you will have to take care of mechanical mounting, electrical +supply, and software integration. This guide aims to equip you with respect to these challenges. + +## Mechanical Mounting + +Husky A200 Observer has two PACS™-compatible mount points on the top of the robot, one at the front +and one at the rear, as outlined in the figures below. Each of the two mount points can support +a payload up to 5 kg. + +
+
+ + +
Husky A200 Observer exterior, front view
+
+
+ +[PACS™](../../accessories/pacs.mdx) is a Clearpath Robotics standard. +We add a grid of M5x0.8 holes onto the top plate of the robot. +This grid of holes has a 80 mm X 80 mm spacing. +You can create your own brackets to interface with these holes, or can use an existing Clearpath Robotics designed bracket. + +:::note + +Our [Sensors](../../accessories/sensors/sensors.mdx) and [Accessories](../../accessories/add-ons/add-ons.mdx) pages indicate the required bracket for the particular attachment. + +::: + +:::note + +When using the front and rear mount point, be careful to avoid blocking the field of view of +the 3D LiDAR. If you have any related questions, please contact [Support](#support). + +::: + +--- + +## Electrical Integration + +Except for bus-powered USB cameras, most payloads have separate leads for power and data. + +### Maintenance and Debugging Connections + +On the Husky A200 Observer lid, there are three data interfaces that can be used for system maintenance +and debugging: + +- One 1 Gbps Ethernet (RJ45 connector), connected to the Main Computer +- One USB 3.0 (Type A connector), connected to the Main Computer +- One HDMI, connected to the Main Computer + +### Custom Payload Connections + +On the Husky A200 Observer lid, there is an Icotek KEL-FG-ER-E3 connector with three cable glands that will allow the user to +create and route power cables from custom payloads on the lid to power sources inside the Husky A200 Observer +while still maintaining the IP rating of the robot. (See +[this video](https://www.youtube.com/watch?v=xVLlroSRH7E&t=1s&ab_channel=icotek) +for more details on using the Icotek cable glands system.) + +Inside the Husky A200 Observer, power is available from terminal blocks as outlined in the table below. +For each power source, 18 AWG wires with ferrules (DigiKey P/N 277-2156-ND) are recommended for power cables +at the end that gets inserted into the terminal blocks. Note that positive and negative wires are connected +to separate terminal blocks. + +| Power Source | Maximum Current | Terminal Blocks | +| :-------------------- | :-------------- | :--------------------------------- | +| VBAT (24.0 V minimum) | 3.75 A | Brown (positive), Black (negative) | +| 24 V | 2.5 A | Grey (positive), Black (negative) | +| 12 V | 3.5 A | White (positive), Black (negative) | + +
+
+ +
Power distribution terminal blocks
+
+
+ +In addition to the power connections, the cable glands can be used to make data connections to +available ports on the Ethernet switch or to available USB ports on the Main Computer. When +connecting a device to the Ethernet switch, the device should be configured with a static IP +address in the 192.168.131.80 to 192.168.131.89 range. + +--- + + + +--- + +## Support {#support} + + diff --git a/docs_robots/legacy/ros1_robots/solutions/husky_a200_observer/maintenance_husky_a200_observer.mdx b/docs_robots/legacy/ros1_robots/solutions/husky_a200_observer/maintenance_husky_a200_observer.mdx index e89ac140..f4dd8e54 100644 --- a/docs_robots/legacy/ros1_robots/solutions/husky_a200_observer/maintenance_husky_a200_observer.mdx +++ b/docs_robots/legacy/ros1_robots/solutions/husky_a200_observer/maintenance_husky_a200_observer.mdx @@ -1,337 +1,337 @@ ---- -title: Husky A200 Observer Maintenance -sidebar_label: Maintenance -sidebar_position: 4 ---- - -import GettingNewPackages from "/components/maintenance/getting_new_packages.mdx"; -import ComponentUpdatingPumaFirmware from "/components/maintenance/firmware_update_puma.mdx"; -import Support from "/components/support.mdx"; - -## Hardware Maintenance - -### Charging the Robot {#charging} - -The robot can be charged wirelessly with the Autocharge Dock or with a wired -connection with the Manual Charger. - -#### Autocharge Dock - -The operator can start charging the robot using the autocharge dock in two ways, -noting that the robot will only charge on the dock when the disconnect is in the -"ON" position. - -- Manually drive the robot to its position at the dock. The receiver on - the robot should be properly aligned with the circle on the dock transmitter. -- Use the OutdoorNav UI to dock the robot autonomously. Please consult - [Autonomous Missions](user_manual_husky_a200_observer#autonomous-missions) for further details. - This method requires that the [base station has been surveyed](user_manual_husky_a200_observer#survey-base-station), - the [Datum has been set to the coordinates of the test site](user_manual_husky_a200_observer#set-datum), - and that the [dock location has been set](user_manual_husky_a200_observer#set-dock-location). - -:::note - -At ambient temperatures above 35 °C, there may be some automatic throttling -of the charge rate when using the autocharge dock. No user intervention is -required as the system will charge at the maximum possible rate based on -the internal temperatures in the robot. - -::: - -:::note - -By default, the autocharge dock is configured to disable charging at ambient temperatures below -0 °C. It is possible to perform charging at ambient temperatures as low as -10 °C -in some cases. Contact [Support](#support) for details. - -::: - -#### Manual Charger - -The Manual Charger may be used when the robot is far from its wireless -charger or when a faster charge rate is desired. For fastest charging, -turn off the robot while charging. - -- Plug the manual charger into an AC outlet and wait for the power - light to turn solid **BLUE**. -- Remove the cap from the manual charging port (rear of robot) by - squeezing the two cap sides and lifting. -- Connect the manual charger plug into port. - -After a moment the **ORANGE** -"lightning bolt" will illuminate on the charger indicating that charging -has begun. The **GREEN** battery level -indicator on the charger will also flash. When both segments of this -indicator turn solid, charging is complete. - -Be sure to replace the charge port cap when charging is complete. This -will protect the connectors from environmental conditions. - -### Balancing Batteries - -The robot's batteries must be balanced on a regular basis to ensure accurate -feedback, consistent performance, and long life. If the batteries are -allowed to fall out of balance, they will become unevenly loaded. This can -lead to back-feeding between batteries, reduced charge-holding capacity -for the system as a whole, and increased stress on both batteries. -If the imbalance becomes severe enough, one of the system batteries -will enter a protective state and disconnect itself from the system. -Once the battery enters this state there is a limited time window to -recover it. If that window expires the battery will become irreversibly -damaged with no possibility of recovery. - -Battery balancing is a slow process that will occur automatically when -the fully-charged batteries are held at their float voltage. Because the -automatic charger will shut off when it determines that the batteries are -fully charged, the system cannot be balanced using the autocharge dock. -The manual charger must be used. - -To perform a "quick" balance, leave the robot plugged into the manual -charger overnight. A quick balance is recommended at least once per week. -A full balance of 24+ hours is recommended at least once per month. - -Contact Clearpath Robotics for assistance with recovering a battery that -has entered a protective state. - -### Checking Battery Health - -A regularly-balanced battery system can be recharged thousands of times -before degrading. Eventually, however, the batteries will degrade (their -usable capacity will decrease). This translates to reduced run-time and -range. The robot will need to be recharged more frequently and overall -system availability will be reduced. - -It is recommended that the system operator review runtime performance -once per year to determine whether battery replacement is required. -Runtime measurements should be taken immediately after a full balancing -operation. Battery replacement is performed by Clearpath Robotics and -is subject to battery availability. Replacement batteries may be -purchased in advance and warehoused at Clearpath for future use. - -### Checking Drivetrain Health - -Depending on the environment in which the robot is used in and duty cycle, -the robot drivetrain may require maintenance during its life. Maintenance -activities can include gearhead replacement, tire tread replacement, motor -brush replacement, belt replacement, bearing replacement, etc. - -It is recommended that the user perform an auditory inspection of the -robot drivetrain once per month. Take note of any clicking, grinding or -irregular skipping sounds while the robot is moving. Note that some clicking -in the gearheads is normal during stops and starts, due to backlash between -the gears. - -### Checking Wheels - -Tire pressure may change with temperature and should be checked monthly -with a pressure gauge. Inspecting tires, releasing pressure, and inflating -tires are completed through the tire's inflation stem. Tire pressure should -not exceed 138 kPa ( 20 psi ), and lower pressure may be desired based on -terrain requirements. - -A monthly visual inspection of the tire treads is also recommended. -Replacement wheel assemblies can be purchased from Clearpath Robotics and -can be installed by the user. - -If a tire must be removed, first unfasten the four -M5 Socket Head Cap Screws that join the wheel to the axle hub, then slide -the wheel off the axle. When replacing the wheel, screws should be -lubricated with Loctite® 243 and then tightened to 5 N·m ( 3.7 ft-lb ) -torque. - -### Cleaning LiDARs - -The lenses of both the 2D and 3D LiDARs must -be cleaned on a regular basis. Contamination of the 3D LiDAR -can result in a "stuck" robot and sub-optimal navigation performance. -Contamination of the 2D LiDAR can result in poor docking -performance and inability to automatically maintain battery charge. - -Once per week or as required, visually inspect the lenses for dust or -dirt. Use a clean microfiber cloth to gently wipe away any contaminants. -Do not use cleaners or chemicals on the LiDAR lenses, as they may damage -the optical coating. - -### Cleaning Cameras - -The robot's camera lenses should be cleaned at least once per month. -The cleaning procedure is the same as that for the LiDAR lenses. - -### Cleaning Dock Target - -During the autonomous docking process, the white material of the dock -target provides high remission from the Sick LMS-111 laser scanner. -Over time, as the material is exposed to the elements dust/particles -may build up on the white plastic part of the dock target and will -require some maintenance. - -This maintenance simply consists of cleaning the white plastic panels -with a microfiber cloth. Ensure that the surfaces are clear of any dust, -dirt and/or any other particulate matter. - -### Cleaning or Replacing Fan Filters - -#### Bottom Fan Filters - -The fans between the Husky A200 Observer wheels are intake fans with filters. -These filters require periodic maintenance to clean or replace the filters. -In very dusty off-road environments, these filters should be inspected -after every 20 hours of use and replaced as needed. In typical environments, -the fan filters should be inspected after every 50 hours of use and replaced -as needed. - -To replace the filters: - -1. Remove the four screws holding the fan cover panel in place as shown in the image below. -
-
- -
Bottom fan cover panel screws
-
-
-1. For each of the two fans, remove the 4 screws holding the fan filter in place. -1. Remove the fan filters and replace with new filters. (See Mouser P/N 562-09250-F/100) -1. Install the screws holding the fan filters in place. -1. Install the screws hold the fan cover panel in place. - -#### Top Fan Filters - -The top fans on the front side of Husky A200 Observer are intake fans with filters. -These filters require periodic maintenance to clean or replace the filters. -In very dusty off-road environments, these filters should be inspected -after every 50 hours of use and replaced as needed. In typical environments, -the fan filters should be inspected after every 100 hours of use and replaced -as needed. - -To replace the filters (repeat the steps below for each fan): - -1. Remove the four screws holding the fan cover screen in place as shown in the image below. -
-
- -
Top fan cover panel screws
-
-
-1. Remove the fan cover screen. -1. Open the top lid of Husky A200 Observer and pull out the fan assembly from the inside. -1. Remove the fan filter and replace with new filter. (See DigiKey P/N 1570-1461-ND) -1. Install the fan assembly from the inside. -1. Put the fan cover screen in place. -1. Install the four screws holding the assembly together. - -The top fans on the rear side of Husky A200 Observer are exhaust fans and, as such, -the filters on those fans do not require regular maintenance. - ---- - -## Software Maintenance {#software_maintenance} - -### Getting New Packages - - - -:::note - -In addition to the core software packages, which can be upgraded through the commands -noted above, Husky A200 Observer also includes OutdoorNav software, which can be -upgraded. -Contact [Support](#support) if you need more details on updating Husky A200 Observer software. - -::: - -### MCU Firmware Update - -Customer updates of Husky firmware are not supported at this time. Contact [Support](#support) if -Husky firmware updates are needed. - -### Motor Controller Firmware Update {#maintenance_husky_motor_controller_firmware} - - - ---- - -## Storage, Shipping, and Disposal - -### Storing Husky A200 Observer for Extended Periods - -All batteries self-discharge over time. To minimise the risk of battery -state-of-charge dropping to a dangerously low leve while in storage, the -robot should be fully-charged and fully-balanced before being put into storage. -In addition, batteries in long-term storage will need to be recharged -every 6 months. - -The rate of discharge should also be minimised by disconnecting the batteries -from the rest of the system. This is achieved by means of a disconnect switch -in the robot's rear panel. Turn this switch to "OFF" prior to storing the -robot for long periods. - -### Preparing Husky A200 Observer for Shipping - -The following should be considered when preparing to ship the robot and its -associated equipment: - -- Risk of equipment damage due to shock, vibration and impact -- Risk of equipment damage due to extreme temperatures -- Risk of equipment damage due to contamination, including liquid ingress -- Risk of equipment damage and injury due to over-charged or over-discharged lithium-ion batteries -- Risk of injury as a result of imbalanced or shifting loads -- Risk of environmental damage due to invasive species and/or hazardous material release - -Note the shipping temperature ranges and ingress protection ratings in the -[System Specifications](user_manual_husky_a200_observer.mdx#system-specifications). -Secure all equipment using appropriately-rated rigging. -Protect the equipment from mechanical damage, liquid ingress and exposure to -caustic environments (including sea air). If lumber is used, ensure that it -has been appropriately treated to prevent the spread of invasive species. - -Lithium-ion batteries (which includes the robot's integrated lithium iron -nanophosphate batteries) are considered dangerous goods in many jurisdictions. -Ensure that the appropriate dangerous goods signage and paperwork is in place -prior to shipping the robot (as applicable). Note that the wireless motion-stop -system includes two small stand-alone lithium-ion batteries, and the remote -control gamepad includes an integrated lithium-ion battery. - -Some jurisdictions require battery states of charge to remain within a certain -band during transport. Consult local regulations. - -For short-duration transports lasting up to several days, it is recommended -that all batteries be charged to the maximum state of charge permitted by -applicable regulations. Disconnection of the robot's internal batteries is not -required. - -For longer-duration transports more than several days, the guidelines for -extended storage should be followed (to the degree allowable by applicable -regulation). - -### Disposing of Husky A200 Observer - -
- -
- -The robot and associated equipment contain materials that should not be -disposed of in a landfill. These include lithium-ion batteries and leaded -solder, and may include cadmium, toxic lubricants and adhesives, and -other materials that can be harmful to people, animals and ecosystems. - -All printed circuit board assemblies, wiring harnesses and other -electronics components such as sensors, computers, human-machine -interface components, lights and motors should be treated as "e-waste" -and disposed of in accordance with local regulations. Lithium-ion -batteries should be treated as hazardous goods and disposed of in -accordance with local battery disposal regulations. - ---- - -## Support {#support} - - +--- +title: Husky A200 Observer Maintenance +sidebar_label: Maintenance +sidebar_position: 4 +--- + +import GettingNewPackages from "/components/maintenance/getting_new_packages.mdx"; +import ComponentUpdatingPumaFirmware from "/components/maintenance/firmware_update_puma.mdx"; +import Support from "/components/support.mdx"; + +## Hardware Maintenance + +### Charging the Robot {#charging} + +The robot can be charged wirelessly with the Autocharge Dock or with a wired +connection with the Manual Charger. + +#### Autocharge Dock + +The operator can start charging the robot using the autocharge dock in two ways, +noting that the robot will only charge on the dock when the disconnect is in the +"ON" position. + +- Manually drive the robot to its position at the dock. The receiver on + the robot should be properly aligned with the circle on the dock transmitter. +- Use the OutdoorNav UI to dock the robot autonomously. Please consult + [Autonomous Missions](user_manual_husky_a200_observer#autonomous-missions) for further details. + This method requires that the [base station has been surveyed](user_manual_husky_a200_observer#survey-base-station), + the [Datum has been set to the coordinates of the test site](user_manual_husky_a200_observer#set-datum), + and that the [dock location has been set](user_manual_husky_a200_observer#set-dock-location). + +:::note + +At ambient temperatures above 35 °C, there may be some automatic throttling +of the charge rate when using the autocharge dock. No user intervention is +required as the system will charge at the maximum possible rate based on +the internal temperatures in the robot. + +::: + +:::note + +By default, the autocharge dock is configured to disable charging at ambient temperatures below +0 °C. It is possible to perform charging at ambient temperatures as low as -10 °C +in some cases. Contact [Support](#support) for details. + +::: + +#### Manual Charger + +The Manual Charger may be used when the robot is far from its wireless +charger or when a faster charge rate is desired. For fastest charging, +turn off the robot while charging. + +- Plug the manual charger into an AC outlet and wait for the power + light to turn solid **BLUE**. +- Remove the cap from the manual charging port (rear of robot) by + squeezing the two cap sides and lifting. +- Connect the manual charger plug into port. + +After a moment the **ORANGE** +"lightning bolt" will illuminate on the charger indicating that charging +has begun. The **GREEN** battery level +indicator on the charger will also flash. When both segments of this +indicator turn solid, charging is complete. + +Be sure to replace the charge port cap when charging is complete. This +will protect the connectors from environmental conditions. + +### Balancing Batteries + +The robot's batteries must be balanced on a regular basis to ensure accurate +feedback, consistent performance, and long life. If the batteries are +allowed to fall out of balance, they will become unevenly loaded. This can +lead to back-feeding between batteries, reduced charge-holding capacity +for the system as a whole, and increased stress on both batteries. +If the imbalance becomes severe enough, one of the system batteries +will enter a protective state and disconnect itself from the system. +Once the battery enters this state there is a limited time window to +recover it. If that window expires the battery will become irreversibly +damaged with no possibility of recovery. + +Battery balancing is a slow process that will occur automatically when +the fully-charged batteries are held at their float voltage. Because the +automatic charger will shut off when it determines that the batteries are +fully charged, the system cannot be balanced using the autocharge dock. +The manual charger must be used. + +To perform a "quick" balance, leave the robot plugged into the manual +charger overnight. A quick balance is recommended at least once per week. +A full balance of 24+ hours is recommended at least once per month. + +Contact Clearpath Robotics for assistance with recovering a battery that +has entered a protective state. + +### Checking Battery Health + +A regularly-balanced battery system can be recharged thousands of times +before degrading. Eventually, however, the batteries will degrade (their +usable capacity will decrease). This translates to reduced run-time and +range. The robot will need to be recharged more frequently and overall +system availability will be reduced. + +It is recommended that the system operator review runtime performance +once per year to determine whether battery replacement is required. +Runtime measurements should be taken immediately after a full balancing +operation. Battery replacement is performed by Clearpath Robotics and +is subject to battery availability. Replacement batteries may be +purchased in advance and warehoused at Clearpath for future use. + +### Checking Drivetrain Health + +Depending on the environment in which the robot is used in and duty cycle, +the robot drivetrain may require maintenance during its life. Maintenance +activities can include gearhead replacement, tire tread replacement, motor +brush replacement, belt replacement, bearing replacement, etc. + +It is recommended that the user perform an auditory inspection of the +robot drivetrain once per month. Take note of any clicking, grinding or +irregular skipping sounds while the robot is moving. Note that some clicking +in the gearheads is normal during stops and starts, due to backlash between +the gears. + +### Checking Wheels + +Tire pressure may change with temperature and should be checked monthly +with a pressure gauge. Inspecting tires, releasing pressure, and inflating +tires are completed through the tire's inflation stem. Tire pressure should +not exceed 138 kPa ( 20 psi ), and lower pressure may be desired based on +terrain requirements. + +A monthly visual inspection of the tire treads is also recommended. +Replacement wheel assemblies can be purchased from Clearpath Robotics and +can be installed by the user. + +If a tire must be removed, first unfasten the four +M5 Socket Head Cap Screws that join the wheel to the axle hub, then slide +the wheel off the axle. When replacing the wheel, screws should be +lubricated with Loctite® 243 and then tightened to 5 N·m ( 3.7 ft-lb ) +torque. + +### Cleaning LiDARs + +The lenses of both the 2D and 3D LiDARs must +be cleaned on a regular basis. Contamination of the 3D LiDAR +can result in a "stuck" robot and sub-optimal navigation performance. +Contamination of the 2D LiDAR can result in poor docking +performance and inability to automatically maintain battery charge. + +Once per week or as required, visually inspect the lenses for dust or +dirt. Use a clean microfiber cloth to gently wipe away any contaminants. +Do not use cleaners or chemicals on the LiDAR lenses, as they may damage +the optical coating. + +### Cleaning Cameras + +The robot's camera lenses should be cleaned at least once per month. +The cleaning procedure is the same as that for the LiDAR lenses. + +### Cleaning Dock Target + +During the autonomous docking process, the white material of the dock +target provides high remission from the Sick LMS-111 laser scanner. +Over time, as the material is exposed to the elements dust/particles +may build up on the white plastic part of the dock target and will +require some maintenance. + +This maintenance simply consists of cleaning the white plastic panels +with a microfiber cloth. Ensure that the surfaces are clear of any dust, +dirt and/or any other particulate matter. + +### Cleaning or Replacing Fan Filters + +#### Bottom Fan Filters + +The fans between the Husky A200 Observer wheels are intake fans with filters. +These filters require periodic maintenance to clean or replace the filters. +In very dusty off-road environments, these filters should be inspected +after every 20 hours of use and replaced as needed. In typical environments, +the fan filters should be inspected after every 50 hours of use and replaced +as needed. + +To replace the filters: + +1. Remove the four screws holding the fan cover panel in place as shown in the image below. +
+
+ +
Bottom fan cover panel screws
+
+
+1. For each of the two fans, remove the 4 screws holding the fan filter in place. +1. Remove the fan filters and replace with new filters. (See Mouser P/N 562-09250-F/100) +1. Install the screws holding the fan filters in place. +1. Install the screws hold the fan cover panel in place. + +#### Top Fan Filters + +The top fans on the front side of Husky A200 Observer are intake fans with filters. +These filters require periodic maintenance to clean or replace the filters. +In very dusty off-road environments, these filters should be inspected +after every 50 hours of use and replaced as needed. In typical environments, +the fan filters should be inspected after every 100 hours of use and replaced +as needed. + +To replace the filters (repeat the steps below for each fan): + +1. Remove the four screws holding the fan cover screen in place as shown in the image below. +
+
+ +
Top fan cover panel screws
+
+
+1. Remove the fan cover screen. +1. Open the top lid of Husky A200 Observer and pull out the fan assembly from the inside. +1. Remove the fan filter and replace with new filter. (See DigiKey P/N 1570-1461-ND) +1. Install the fan assembly from the inside. +1. Put the fan cover screen in place. +1. Install the four screws holding the assembly together. + +The top fans on the rear side of Husky A200 Observer are exhaust fans and, as such, +the filters on those fans do not require regular maintenance. + +--- + +## Software Maintenance {#software_maintenance} + +### Getting New Packages + + + +:::note + +In addition to the core software packages, which can be upgraded through the commands +noted above, Husky A200 Observer also includes OutdoorNav software, which can be +upgraded. +Contact [Support](#support) if you need more details on updating Husky A200 Observer software. + +::: + +### MCU Firmware Update + +Customer updates of Husky firmware are not supported at this time. Contact [Support](#support) if +Husky firmware updates are needed. + +### Motor Controller Firmware Update {#maintenance_husky_motor_controller_firmware} + + + +--- + +## Storage, Shipping, and Disposal + +### Storing Husky A200 Observer for Extended Periods + +All batteries self-discharge over time. To minimise the risk of battery +state-of-charge dropping to a dangerously low leve while in storage, the +robot should be fully-charged and fully-balanced before being put into storage. +In addition, batteries in long-term storage will need to be recharged +every 6 months. + +The rate of discharge should also be minimised by disconnecting the batteries +from the rest of the system. This is achieved by means of a disconnect switch +in the robot's rear panel. Turn this switch to "OFF" prior to storing the +robot for long periods. + +### Preparing Husky A200 Observer for Shipping + +The following should be considered when preparing to ship the robot and its +associated equipment: + +- Risk of equipment damage due to shock, vibration and impact +- Risk of equipment damage due to extreme temperatures +- Risk of equipment damage due to contamination, including liquid ingress +- Risk of equipment damage and injury due to over-charged or over-discharged lithium-ion batteries +- Risk of injury as a result of imbalanced or shifting loads +- Risk of environmental damage due to invasive species and/or hazardous material release + +Note the shipping temperature ranges and ingress protection ratings in the +[System Specifications](user_manual_husky_a200_observer.mdx#system-specifications). +Secure all equipment using appropriately-rated rigging. +Protect the equipment from mechanical damage, liquid ingress and exposure to +caustic environments (including sea air). If lumber is used, ensure that it +has been appropriately treated to prevent the spread of invasive species. + +Lithium-ion batteries (which includes the robot's integrated lithium iron +nanophosphate batteries) are considered dangerous goods in many jurisdictions. +Ensure that the appropriate dangerous goods signage and paperwork is in place +prior to shipping the robot (as applicable). Note that the wireless motion-stop +system includes two small stand-alone lithium-ion batteries, and the remote +control gamepad includes an integrated lithium-ion battery. + +Some jurisdictions require battery states of charge to remain within a certain +band during transport. Consult local regulations. + +For short-duration transports lasting up to several days, it is recommended +that all batteries be charged to the maximum state of charge permitted by +applicable regulations. Disconnection of the robot's internal batteries is not +required. + +For longer-duration transports more than several days, the guidelines for +extended storage should be followed (to the degree allowable by applicable +regulation). + +### Disposing of Husky A200 Observer + +
+ +
+ +The robot and associated equipment contain materials that should not be +disposed of in a landfill. These include lithium-ion batteries and leaded +solder, and may include cadmium, toxic lubricants and adhesives, and +other materials that can be harmful to people, animals and ecosystems. + +All printed circuit board assemblies, wiring harnesses and other +electronics components such as sensors, computers, human-machine +interface components, lights and motors should be treated as "e-waste" +and disposed of in accordance with local regulations. Lithium-ion +batteries should be treated as hazardous goods and disposed of in +accordance with local battery disposal regulations. + +--- + +## Support {#support} + + diff --git a/docs_robots/legacy/ros1_robots/solutions/husky_a200_observer/tutorials_husky_a200_observer.mdx b/docs_robots/legacy/ros1_robots/solutions/husky_a200_observer/tutorials_husky_a200_observer.mdx index f9a439cb..6c61caf4 100644 --- a/docs_robots/legacy/ros1_robots/solutions/husky_a200_observer/tutorials_husky_a200_observer.mdx +++ b/docs_robots/legacy/ros1_robots/solutions/husky_a200_observer/tutorials_husky_a200_observer.mdx @@ -1,46 +1,46 @@ ---- -title: Husky A200 Observer Tutorials -sidebar_label: Tutorials -sidebar_position: 3 ---- - -import ComponentIntroductionHuskyObserver from "/components/introduction_husky_a200_observer.mdx"; -import Support from "/components/support.mdx"; - - - -## Husky A200 Observer Overview - -### Introduction - -Husky A200 Observer is a fully integrated system that enables robotics developers to accelerate inspection solutions. -It is built on top of the versatile [Husky](../../../ros1_robots/outdoor_robots/husky/user_manual_husky.mdx) base platform -The tutorial topics are listed in the right column and presented in the suggested reading order. - -For more information or to receive a quote, please [visit us online](http://clearpathrobotics.com/husky). - -:::note - -These tutorials assume that you are comfortable working with ROS. We recommend starting with our -[ROS tutorial](https://www.clearpathrobotics.com/assets/guides/noetic/ros/index.html) if you are not familiar with ROS already. - -::: - -:::note - -The Husky A200 Observer is built on the the Husky platform. See also the [Husky Tutorials](../../../ros1_robots/outdoor_robots/husky/tutorials_husky.mdx#husky-ros-packages). - -::: - ---- - -## Using Husky A200 Observer {#using-husky-observer} - -### Simulating Husky A200 -To simulate the Husky A200 Observer, including its full navigation stack, contact [Support](#support). - ---- - -## Support {#support} - - +--- +title: Husky A200 Observer Tutorials +sidebar_label: Tutorials +sidebar_position: 3 +--- + +import ComponentIntroductionHuskyObserver from "/components/introduction_husky_a200_observer.mdx"; +import Support from "/components/support.mdx"; + + + +## Husky A200 Observer Overview + +### Introduction + +Husky A200 Observer is a fully integrated system that enables robotics developers to accelerate inspection solutions. +It is built on top of the versatile [Husky](../../../ros1_robots/outdoor_robots/husky/user_manual_husky.mdx) base platform +The tutorial topics are listed in the right column and presented in the suggested reading order. + +For more information or to receive a quote, please [visit us online](http://clearpathrobotics.com/husky). + +:::note + +These tutorials assume that you are comfortable working with ROS. We recommend starting with our +[ROS tutorial](https://www.clearpathrobotics.com/assets/guides/noetic/ros/index.html) if you are not familiar with ROS already. + +::: + +:::note + +The Husky A200 Observer is built on the the Husky platform. See also the [Husky Tutorials](../../../ros1_robots/outdoor_robots/husky/tutorials_husky.mdx#husky-ros-packages). + +::: + +--- + +## Using Husky A200 Observer {#using-husky-observer} + +### Simulating Husky A200 +To simulate the Husky A200 Observer, including its full navigation stack, contact [Support](#support). + +--- + +## Support {#support} + + diff --git a/docs_robots/solutions/husky_a300_amp/_category_.json b/docs_robots/solutions/husky_a300_amp/_category_.json index 6ff9061f..5805b9f3 100644 --- a/docs_robots/solutions/husky_a300_amp/_category_.json +++ b/docs_robots/solutions/husky_a300_amp/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Husky A300 AMP", - "position": 1 -} +{ + "label": "Husky A300 AMP", + "position": 1 +} diff --git a/docs_robots/solutions/husky_a300_observer/_category_.json b/docs_robots/solutions/husky_a300_observer/_category_.json index 4a0a1624..f0fe1433 100644 --- a/docs_robots/solutions/husky_a300_observer/_category_.json +++ b/docs_robots/solutions/husky_a300_observer/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Husky A300 Observer", - "position": 2 -} +{ + "label": "Husky A300 Observer", + "position": 2 +} diff --git a/docs_versioned_docs/version-ros1noetic/components/maintenance/_wd_ssd_critical_update.mdx b/docs_versioned_docs/version-ros1noetic/components/maintenance/_wd_ssd_critical_update.mdx index af280c77..4085b081 100644 --- a/docs_versioned_docs/version-ros1noetic/components/maintenance/_wd_ssd_critical_update.mdx +++ b/docs_versioned_docs/version-ros1noetic/components/maintenance/_wd_ssd_critical_update.mdx @@ -1,12 +1,12 @@ -:::warning - -Some computers shipped with a WD Blue SA510 SATA SSD, for which -the manufacturer has posted a -[critical firmware update notice](https://support-en.sandisk.com/app/answers/detailweb/a_id/50208#subject2). - -Failure to perform the firmware update could result in permanent failure of the SSD. - -::: - -[See these instructions](../../accessories/computers/mini_itx#wd-firmware-update) to check if your SSD is +:::warning + +Some computers shipped with a WD Blue SA510 SATA SSD, for which +the manufacturer has posted a +[critical firmware update notice](https://support-en.sandisk.com/app/answers/detailweb/a_id/50208#subject2). + +Failure to perform the firmware update could result in permanent failure of the SSD. + +::: + +[See these instructions](../../accessories/computers/mini_itx#wd-firmware-update) to check if your SSD is affected and to perform the update. \ No newline at end of file diff --git a/docs_versioned_docs/version-ros2humble/components/maintenance/_wd_ssd_critical_update.mdx b/docs_versioned_docs/version-ros2humble/components/maintenance/_wd_ssd_critical_update.mdx index af280c77..4085b081 100644 --- a/docs_versioned_docs/version-ros2humble/components/maintenance/_wd_ssd_critical_update.mdx +++ b/docs_versioned_docs/version-ros2humble/components/maintenance/_wd_ssd_critical_update.mdx @@ -1,12 +1,12 @@ -:::warning - -Some computers shipped with a WD Blue SA510 SATA SSD, for which -the manufacturer has posted a -[critical firmware update notice](https://support-en.sandisk.com/app/answers/detailweb/a_id/50208#subject2). - -Failure to perform the firmware update could result in permanent failure of the SSD. - -::: - -[See these instructions](../../accessories/computers/mini_itx#wd-firmware-update) to check if your SSD is +:::warning + +Some computers shipped with a WD Blue SA510 SATA SSD, for which +the manufacturer has posted a +[critical firmware update notice](https://support-en.sandisk.com/app/answers/detailweb/a_id/50208#subject2). + +Failure to perform the firmware update could result in permanent failure of the SSD. + +::: + +[See these instructions](../../accessories/computers/mini_itx#wd-firmware-update) to check if your SSD is affected and to perform the update. \ No newline at end of file diff --git a/docusaurus.config.js b/docusaurus.config.js index 4c48edf2..686e00c3 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -1,265 +1,265 @@ -// @ts-check -// Note: type annotations allow type checking and IDEs autocompletion - -import {themes as prismThemes} from 'prism-react-renderer'; - -const lightCodeTheme = prismThemes.github; -const darkCodeTheme = prismThemes.dracula; -import remarkMath from 'remark-math'; -import rehypeKatex from 'rehype-katex'; - -/** @type {import('@docusaurus/types').Config} */ -const config = { - title: "Clearpath Robotics Documentation", - url: "https://docs.clearpathrobotics.com", - baseUrl: "/", - onBrokenLinks: "throw", - onBrokenMarkdownLinks: "throw", - onBrokenAnchors: "throw", - favicon: "img/website_images/favicon.ico", - - i18n: { - defaultLocale: "en", - locales: ["en"], - }, - - presets: [ - [ - "classic", - { - docs: false, - theme: { - customCss: require.resolve("./src/css/custom.css"), - }, - sitemap: { - ignorePatterns: ['**/components/**'], - }, - }, - ], - ], - - plugins: [ - [ - "@docusaurus/plugin-content-docs", - { - id: "docs", - path: "docs", - routeBasePath: "docs", - sidebarPath: require.resolve("./sidebars-docs.js"), - remarkPlugins: [remarkMath], - rehypePlugins: [rehypeKatex], - showLastUpdateTime: true, - versions: { - ros2jazzy: { - label: 'ROS 2 Jazzy', - }, - ros2humble: { - label: 'ROS 2 Humble', - }, - ros1noetic: { - label: 'ROS 1 Noetic', - } - }, - includeCurrentVersion: false, - admonitions: { - keywords: ['safety-danger', 'safety-warning', 'safety-caution'], - extendDefaults: true, - }, - }, - ], - [ - "@docusaurus/plugin-content-docs", - { - id: "docs_robots", - path: "docs_robots", - routeBasePath: "docs_robots", - sidebarPath: require.resolve("./sidebars.js"), - remarkPlugins: [remarkMath], - rehypePlugins: [rehypeKatex], - showLastUpdateTime: true, - admonitions: { - keywords: ['safety-danger', 'safety-warning', 'safety-caution'], - extendDefaults: true, - }, - }, - ], - [ - "@docusaurus/plugin-content-docs", - { - id: "indoornav_user_manual", - path: "docs_indoornav_user_manual", - routeBasePath: "docs_indoornav_user_manual", - sidebarPath: require.resolve("./sidebars.js"), - remarkPlugins: [remarkMath], - rehypePlugins: [rehypeKatex], - showLastUpdateTime: true, - }, - ], - [ - "@docusaurus/plugin-content-docs", - { - id: "outdoornav_user_manual", - path: "docs_outdoornav_user_manual", - routeBasePath: "docs_outdoornav_user_manual", - sidebarPath: require.resolve("./sidebars.js"), - remarkPlugins: [remarkMath], - rehypePlugins: [rehypeKatex], - showLastUpdateTime: true, - includeCurrentVersion: false, - }, - ], - [ - "@docusaurus/plugin-content-docs", - { - id: "components", - path: "components", - remarkPlugins: [remarkMath], - rehypePlugins: [rehypeKatex], - admonitions: { - keywords: ['safety-danger', 'safety-warning', 'safety-caution'], - extendDefaults: true, - }, - }, - ], - [ - "@docusaurus/theme-mermaid", - {} - ], - ], - - themeConfig: - /** @type {import('@docusaurus/preset-classic').ThemeConfig} */ - ({ - navbar: { - title: " ", - logo: { - alt: "Clearpath Robotics", - src: "img/website_images/logo_rockwell_pipe_clearpath_colour.png", - srcDark: "img/website_images/logo_rockwell_pipe_clearpath_white.png", - }, - items: [ - { - type: "doc", - docId: "robots", - label: "Robots", - position: "left", - docsPluginId: "docs_robots", - }, - { - type: "docsVersion", - to: "/docs/ros/", - label: "Software", - position: "left", - docsPluginId: "docs", - }, - { - type: "docsVersion", - label: "OutdoorNav", - position: "left", - docsPluginId: "outdoornav_user_manual", - }, - { - type: "doc", - docId: "index", - label: "IndoorNav", - position: "left", - docsPluginId: "indoornav_user_manual", - }, - { - type: 'docsVersionDropdown', - position: 'right', - dropdownActiveClassDisabled: true, - docsPluginId: "docs" - }, - { - type: 'docsVersionDropdown', - position: 'right', - dropdownActiveClassDisabled: true, - docsPluginId: "outdoornav_user_manual", - }, - { - to: "about", - label: "About", - position: "right", - }, - { - to: "https://github.com/clearpathrobotics/cpr-documentation", - label: "GitHub", - position: "right", - }, - { - to: "https://store.clearpathrobotics.com/", - label: "Store", - position: "right", - }, - { - to: "https://clearpathrobotics.com/", - label: "Home", - position: "right", - }, - ], - }, - docs: { - sidebar: { - autoCollapseCategories: true, - hideable: true, - }, - }, - footer: { - copyright: `Clearpath Robotics, by Rockwell Automation. All rights reserved. © Clearpath Robotics, Inc., a Rockwell Automation Company. All rights reserved.`, - }, - prism: { - theme: lightCodeTheme, - darkTheme: darkCodeTheme, - }, - mermaid: { - theme: {light: "default", dark: 'dark'}, - }, - markdown: { - mermaid: true, - }, - algolia: { - // The application ID provided by Algolia - appId: 'R6SHOZP2CR', - - // Public API key: it is safe to commit it - apiKey: '656811d089022bbc909acf46732dd073', - - indexName: 'clearpathrobotics', - - // Optional: see doc section below - contextualSearch: true, - - // Optional: Specify domains where the navigation should occur through window.location instead on history.push. Useful when our Algolia config crawls multiple documentation sites and we want to navigate with window.location.href to them. - //externalUrlRegex: 'external\\.com|domain\\.com', - - // Optional: Replace parts of the item URLs from Algolia. Useful when using the same search index for multiple deployments using a different baseUrl. You can use regexp or string in the `from` param. For example: localhost:3000 vs myCompany.com/docs - //replaceSearchResultPathname: { - // from: '/docs/', // or as RegExp: /\/docs\// - // to: '/', - //}, - - // Optional: Algolia search parameters - searchParameters: {}, - - // Optional: path for search page that enabled by default (`false` to disable it) - searchPagePath: 'search', - - // Optional: whether the insights feature is enabled or not on Docsearch (`false` by default) - insights: false, - - //... other Algolia params - }, - }), - - stylesheets: [ - { - href: "https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css", - type: "text/css", - integrity: "sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM", - crossorigin: "anonymous", - }, - ], -}; - -module.exports = config; +// @ts-check +// Note: type annotations allow type checking and IDEs autocompletion + +import {themes as prismThemes} from 'prism-react-renderer'; + +const lightCodeTheme = prismThemes.github; +const darkCodeTheme = prismThemes.dracula; +import remarkMath from 'remark-math'; +import rehypeKatex from 'rehype-katex'; + +/** @type {import('@docusaurus/types').Config} */ +const config = { + title: "Clearpath Robotics Documentation", + url: "https://docs.clearpathrobotics.com", + baseUrl: "/", + onBrokenLinks: "throw", + onBrokenMarkdownLinks: "throw", + onBrokenAnchors: "throw", + favicon: "img/website_images/favicon.ico", + + i18n: { + defaultLocale: "en", + locales: ["en"], + }, + + presets: [ + [ + "classic", + { + docs: false, + theme: { + customCss: require.resolve("./src/css/custom.css"), + }, + sitemap: { + ignorePatterns: ['**/components/**'], + }, + }, + ], + ], + + plugins: [ + [ + "@docusaurus/plugin-content-docs", + { + id: "docs", + path: "docs", + routeBasePath: "docs", + sidebarPath: require.resolve("./sidebars-docs.js"), + remarkPlugins: [remarkMath], + rehypePlugins: [rehypeKatex], + showLastUpdateTime: true, + versions: { + ros2jazzy: { + label: 'ROS 2 Jazzy', + }, + ros2humble: { + label: 'ROS 2 Humble', + }, + ros1noetic: { + label: 'ROS 1 Noetic', + } + }, + includeCurrentVersion: false, + admonitions: { + keywords: ['safety-danger', 'safety-warning', 'safety-caution'], + extendDefaults: true, + }, + }, + ], + [ + "@docusaurus/plugin-content-docs", + { + id: "docs_robots", + path: "docs_robots", + routeBasePath: "docs_robots", + sidebarPath: require.resolve("./sidebars.js"), + remarkPlugins: [remarkMath], + rehypePlugins: [rehypeKatex], + showLastUpdateTime: true, + admonitions: { + keywords: ['safety-danger', 'safety-warning', 'safety-caution'], + extendDefaults: true, + }, + }, + ], + [ + "@docusaurus/plugin-content-docs", + { + id: "indoornav_user_manual", + path: "docs_indoornav_user_manual", + routeBasePath: "docs_indoornav_user_manual", + sidebarPath: require.resolve("./sidebars.js"), + remarkPlugins: [remarkMath], + rehypePlugins: [rehypeKatex], + showLastUpdateTime: true, + }, + ], + [ + "@docusaurus/plugin-content-docs", + { + id: "outdoornav_user_manual", + path: "docs_outdoornav_user_manual", + routeBasePath: "docs_outdoornav_user_manual", + sidebarPath: require.resolve("./sidebars.js"), + remarkPlugins: [remarkMath], + rehypePlugins: [rehypeKatex], + showLastUpdateTime: true, + includeCurrentVersion: false, + }, + ], + [ + "@docusaurus/plugin-content-docs", + { + id: "components", + path: "components", + remarkPlugins: [remarkMath], + rehypePlugins: [rehypeKatex], + admonitions: { + keywords: ['safety-danger', 'safety-warning', 'safety-caution'], + extendDefaults: true, + }, + }, + ], + [ + "@docusaurus/theme-mermaid", + {} + ], + ], + + themeConfig: + /** @type {import('@docusaurus/preset-classic').ThemeConfig} */ + ({ + navbar: { + title: " ", + logo: { + alt: "Clearpath Robotics", + src: "img/website_images/logo_rockwell_pipe_clearpath_colour.png", + srcDark: "img/website_images/logo_rockwell_pipe_clearpath_white.png", + }, + items: [ + { + type: "doc", + docId: "robots", + label: "Robots", + position: "left", + docsPluginId: "docs_robots", + }, + { + type: "docsVersion", + to: "/docs/ros/", + label: "Software", + position: "left", + docsPluginId: "docs", + }, + { + type: "docsVersion", + label: "OutdoorNav", + position: "left", + docsPluginId: "outdoornav_user_manual", + }, + { + type: "doc", + docId: "index", + label: "IndoorNav", + position: "left", + docsPluginId: "indoornav_user_manual", + }, + { + type: 'docsVersionDropdown', + position: 'right', + dropdownActiveClassDisabled: true, + docsPluginId: "docs" + }, + { + type: 'docsVersionDropdown', + position: 'right', + dropdownActiveClassDisabled: true, + docsPluginId: "outdoornav_user_manual", + }, + { + to: "about", + label: "About", + position: "right", + }, + { + to: "https://github.com/clearpathrobotics/cpr-documentation", + label: "GitHub", + position: "right", + }, + { + to: "https://store.clearpathrobotics.com/", + label: "Store", + position: "right", + }, + { + to: "https://clearpathrobotics.com/", + label: "Home", + position: "right", + }, + ], + }, + docs: { + sidebar: { + autoCollapseCategories: true, + hideable: true, + }, + }, + footer: { + copyright: `Clearpath Robotics, by Rockwell Automation. All rights reserved. © Clearpath Robotics, Inc., a Rockwell Automation Company. All rights reserved.`, + }, + prism: { + theme: lightCodeTheme, + darkTheme: darkCodeTheme, + }, + mermaid: { + theme: {light: "default", dark: 'dark'}, + }, + markdown: { + mermaid: true, + }, + algolia: { + // The application ID provided by Algolia + appId: 'R6SHOZP2CR', + + // Public API key: it is safe to commit it + apiKey: '656811d089022bbc909acf46732dd073', + + indexName: 'clearpathrobotics', + + // Optional: see doc section below + contextualSearch: true, + + // Optional: Specify domains where the navigation should occur through window.location instead on history.push. Useful when our Algolia config crawls multiple documentation sites and we want to navigate with window.location.href to them. + //externalUrlRegex: 'external\\.com|domain\\.com', + + // Optional: Replace parts of the item URLs from Algolia. Useful when using the same search index for multiple deployments using a different baseUrl. You can use regexp or string in the `from` param. For example: localhost:3000 vs myCompany.com/docs + //replaceSearchResultPathname: { + // from: '/docs/', // or as RegExp: /\/docs\// + // to: '/', + //}, + + // Optional: Algolia search parameters + searchParameters: {}, + + // Optional: path for search page that enabled by default (`false` to disable it) + searchPagePath: 'search', + + // Optional: whether the insights feature is enabled or not on Docsearch (`false` by default) + insights: false, + + //... other Algolia params + }, + }), + + stylesheets: [ + { + href: "https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css", + type: "text/css", + integrity: "sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM", + crossorigin: "anonymous", + }, + ], +}; + +module.exports = config; diff --git a/outdoornav_user_manual_versioned_docs/version-0.10.0/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.10.0/_category_.json index c123e1bc..f5966a95 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.10.0/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.10.0/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "OutdoorNav User Manual", - "position": 1 -} +{ + "label": "OutdoorNav User Manual", + "position": 1 +} diff --git a/outdoornav_user_manual_versioned_docs/version-0.10.0/api/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.10.0/api/_category_.json index a6e53920..79c71658 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.10.0/api/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.10.0/api/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Application Programming Interface", - "position": 7 -} +{ + "label": "Application Programming Interface", + "position": 7 +} diff --git a/outdoornav_user_manual_versioned_docs/version-0.10.0/api/api_endpoints/api_endpoints.mdx b/outdoornav_user_manual_versioned_docs/version-0.10.0/api/api_endpoints/api_endpoints.mdx index c65c4150..e1169e6e 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.10.0/api/api_endpoints/api_endpoints.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.10.0/api/api_endpoints/api_endpoints.mdx @@ -1,16 +1,16 @@ ---- -title: API Endpoints -sidebar_label: API Endpoints -sidebar_position: 2 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -The ROS 1 Noetic API can be used to monitor and manage OutdoorNav Software. Details -are available through the child pages. - -- [Platform API](platform_api.mdx) -- [Autonomy API](autonomy_api.mdx) -- [Mission Manager API](mission_manager_api.mdx) -- [Definitions](definitions.mdx) - +--- +title: API Endpoints +sidebar_label: API Endpoints +sidebar_position: 2 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +The ROS 1 Noetic API can be used to monitor and manage OutdoorNav Software. Details +are available through the child pages. + +- [Platform API](platform_api.mdx) +- [Autonomy API](autonomy_api.mdx) +- [Mission Manager API](mission_manager_api.mdx) +- [Definitions](definitions.mdx) + diff --git a/outdoornav_user_manual_versioned_docs/version-0.10.0/api/api_examples/api_examples.mdx b/outdoornav_user_manual_versioned_docs/version-0.10.0/api/api_examples/api_examples.mdx index 32daf5e7..a8bdda37 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.10.0/api/api_examples/api_examples.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.10.0/api/api_examples/api_examples.mdx @@ -1,20 +1,20 @@ ---- -title: API Examples -sidebar_label: API Examples -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -The OutdoorNav API examples are now available and accesible to everyone. A -[Python API library](https://github.com/cpr-application/clearpath_onav_examples) along -with some example scripts are available to build and use for our application. - -A few examples scripts follow with detailed explanations: - -- [Execute Mission from File](./mission_from_file.mdx) -- [Execute Mission with Custom Task](./mission_with_custom_tasks.mdx) -- [Status Monitoring](./monitor_status.mdx) - -The documentation for the Python API library can be built following the -instructions in the above linked GitHub repository. +--- +title: API Examples +sidebar_label: API Examples +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +The OutdoorNav API examples are now available and accesible to everyone. A +[Python API library](https://github.com/cpr-application/clearpath_onav_examples) along +with some example scripts are available to build and use for our application. + +A few examples scripts follow with detailed explanations: + +- [Execute Mission from File](./mission_from_file.mdx) +- [Execute Mission with Custom Task](./mission_with_custom_tasks.mdx) +- [Status Monitoring](./monitor_status.mdx) + +The documentation for the Python API library can be built following the +instructions in the above linked GitHub repository. diff --git a/outdoornav_user_manual_versioned_docs/version-0.10.0/api/api_examples/mission_from_file.mdx b/outdoornav_user_manual_versioned_docs/version-0.10.0/api/api_examples/mission_from_file.mdx index eff0f768..0abb4ea9 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.10.0/api/api_examples/mission_from_file.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.10.0/api/api_examples/mission_from_file.mdx @@ -1,210 +1,210 @@ ---- -title: Mission from YAML File -sidebar_label: Mission from YAML File -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -## The Code - -``` python -#! /usr/bin/env python3 - -from cpr_outdoornav_api_examples_lib.ros_node import RosNode -from cpr_outdoornav_api_examples_lib.yaml_config import YamlConfig -import time -import os - -# The file containing the mission configuration (adjust as needed) -MISSION_YAML_FILE = os.environ.get("HOME", "administrator") + "/example_ws/src/" + \ - "CPR-OutdoorNav/src/cpr_outdoornav_api_examples/config/sample_mission.yaml" - -class MissionFromYamlFile(RosNode): - """ - Create and run a mission loaded from a YAML configuration file. - Be sure that your robot is within 3 meters of your first Waypoint prior to starting the mission. - """ - - def __init__(self): - """Initialize the mission details and server connection.""" - - RosNode.__init__(self, 'mission_from_yaml_file') - self.mission = YamlConfig.yamlFileToMission(MISSION_YAML_FILE) - - # NOTE: to save the configuration to file, uncomment the following lines: - # YamlConfig.missionToYamlFile('/tmp/test1.yaml', self.mission) - - def run(self): - """Execute the mission.""" - - if not self.mission.startMission(): - return False - while not self.mission.isMissionComplete(): - time.sleep(1.0) - return self.mission.getMissionSuccess() - - -if __name__ == '__main__': - if MissionFromYamlFile().run(): - print("Mission completed successfully") - else: - print("Mission failed") - -``` - -## The Code Explained - -Let's break down the code. - -``` python -#! /usr/bin/env python3 -``` - -Every Python ROS Node will have this declaration at the top. The first line makes sure your script is executed as a Python3 script. - - -``` python -from cpr_outdoornav_api_examples_lib.ros_node import RosNode -from cpr_outdoornav_api_examples_lib.yaml_config import YamlConfig -``` - -We provide a library of classes that can be used within your file for ease of use. In the above example, we import the RosNode and YamlConfig classes. -The RosNode class is used by all of our examples to initialize a ROS node that will execute the example mission. The YamlConfig class is used to import -a YAML file and convert it to a Mission object. - -``` python -MISSION_YAML_FILE = os.environ.get("HOME", "administrator") + "/example_ws/src/" + \ - "CPR-OutdoorNav/src/cpr_outdoornav_api_examples/config/sample_mission.yaml" -``` - -This defines the file path of the YAML file that contains the mission to be executed. See the [YAML file](#yaml-file) below for the example YAML file -that will be executed. - -``` python -class MissionFromYamlFile(RosNode): -``` - -Creates a class for your example, which inherits a RosNode object. All python mission files are requried to inherit the RosNode class. - -``` python - RosNode.__init__(self, 'mission_from_yaml_file') - self.mission = YamlConfig.yamlFileToMission(MISSION_YAML_FILE)``` -``` - -Initialize the ROS node with name `mission_from_yaml_file` and import the the mission from the yaml config file. The `YamlConfig.yamlFileToMission()` function -reads teh configuration you have created in the YAML file and converts it into a Mission object. - -``` python - if not self.mission.startMission(): - return False -``` - -Upon execution of the script, the `self.mission.startMission()` function creates the mission client if not yet created, connects to the mission action server -and sends the goal to the action server to begin the execution of the mission. - -``` python - while not self.mission.isMissionComplete(): - time.sleep(1.0) - return self.mission.getMissionSuccess() -``` - -`self.mission.isMissionComplete()` monitors the mission status and only proceeds to terminating the mission has completed or been cancelled. - - -## YAML File {#yaml-file} - -The following YAML file is used in the above example mission. - -``` python -mission: - header: - seq: 0 - stamp: - secs: 0 - nsecs: 0 - frame_id: '' - name: "Sample Mission" - uuid: "8f57fd20-8a8c-4748-85ef-be1495b3ee06" - waypoints: - - - name: "Waypoint: 60" - uuid: "3edcedd7-ae0d-47cf-bd23-f7988d2779b7" - latitude: 50.10950820165676 - longitude: -97.31898507913323 - heading: -1.0 - tasks: [] - position_tolerance: -1.0 - yaw_tolerance: -1.0 - - - name: "Waypoint: 61" - uuid: "ad23202e-7067-4f1c-8677-2dc07af1e729" - latitude: 50.1095698924641 - longitude: -97.31929487427445 - heading: -1.0 - tasks: [] - position_tolerance: -1.0 - yaw_tolerance: -1.0 - - - name: "Waypoint: 62" - uuid: "fe452e77-4a26-41b0-b4ab-ee1859612a60" - latitude: 50.109437123117864 - longitude: -97.31946787675591 - heading: -1.0 - tasks: - - - name: "Wait" - uuid: "ec1121a8-7481-420f-b532-c47ea86afcd7" - service_call: "/wait" - version: "0.0.0" - floats: [3.0] - strings: [] - position_tolerance: -1.0 - yaw_tolerance: -1.0 - - - name: "Waypoint: 63" - uuid: "5ed54c1f-1599-497a-9c16-93c7ca6c355e" - latitude: 50.109384820042074 - longitude: -97.3194477601883 - heading: -1.0 - tasks: [] - position_tolerance: -1.0 - yaw_tolerance: -1.0 - - - name: "Waypoint: 64" - uuid: "2e021345-636b-4bd3-81ba-4f6901fdc016" - latitude: 50.10934056359333 - longitude: -97.31936192949982 - heading: -1.0 - tasks: [] - position_tolerance: -1.0 - yaw_tolerance: -1.0 - - - name: "Waypoint: 65" - uuid: "00c041ee-2ca4-40ba-8e38-65ac900d5a1d" - latitude: 50.10946930962604 - longitude: -97.31921709021302 - heading: -1.0 - tasks: [] - position_tolerance: -1.0 - yaw_tolerance: -1.0 - - - name: "Waypoint: 66" - uuid: "a5826fc5-b696-4b63-82aa-cc2e7a426640" - latitude: 50.10949344950718 - longitude: -97.31911382516594 - heading: -1.0 - tasks: [] - position_tolerance: -1.0 - yaw_tolerance: -1.0 - - - name: "Waypoint: 67" - uuid: "7ff204b2-79a3-46da-a8c0-2c734b4c5314" - latitude: 50.10949613171619 - longitude: -97.31898910244675 - heading: -1.0 - tasks: [] - position_tolerance: -1.0 - yaw_tolerance: -1.0 - onav_config: "To be determined" -``` +--- +title: Mission from YAML File +sidebar_label: Mission from YAML File +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +## The Code + +``` python +#! /usr/bin/env python3 + +from cpr_outdoornav_api_examples_lib.ros_node import RosNode +from cpr_outdoornav_api_examples_lib.yaml_config import YamlConfig +import time +import os + +# The file containing the mission configuration (adjust as needed) +MISSION_YAML_FILE = os.environ.get("HOME", "administrator") + "/example_ws/src/" + \ + "CPR-OutdoorNav/src/cpr_outdoornav_api_examples/config/sample_mission.yaml" + +class MissionFromYamlFile(RosNode): + """ + Create and run a mission loaded from a YAML configuration file. + Be sure that your robot is within 3 meters of your first Waypoint prior to starting the mission. + """ + + def __init__(self): + """Initialize the mission details and server connection.""" + + RosNode.__init__(self, 'mission_from_yaml_file') + self.mission = YamlConfig.yamlFileToMission(MISSION_YAML_FILE) + + # NOTE: to save the configuration to file, uncomment the following lines: + # YamlConfig.missionToYamlFile('/tmp/test1.yaml', self.mission) + + def run(self): + """Execute the mission.""" + + if not self.mission.startMission(): + return False + while not self.mission.isMissionComplete(): + time.sleep(1.0) + return self.mission.getMissionSuccess() + + +if __name__ == '__main__': + if MissionFromYamlFile().run(): + print("Mission completed successfully") + else: + print("Mission failed") + +``` + +## The Code Explained + +Let's break down the code. + +``` python +#! /usr/bin/env python3 +``` + +Every Python ROS Node will have this declaration at the top. The first line makes sure your script is executed as a Python3 script. + + +``` python +from cpr_outdoornav_api_examples_lib.ros_node import RosNode +from cpr_outdoornav_api_examples_lib.yaml_config import YamlConfig +``` + +We provide a library of classes that can be used within your file for ease of use. In the above example, we import the RosNode and YamlConfig classes. +The RosNode class is used by all of our examples to initialize a ROS node that will execute the example mission. The YamlConfig class is used to import +a YAML file and convert it to a Mission object. + +``` python +MISSION_YAML_FILE = os.environ.get("HOME", "administrator") + "/example_ws/src/" + \ + "CPR-OutdoorNav/src/cpr_outdoornav_api_examples/config/sample_mission.yaml" +``` + +This defines the file path of the YAML file that contains the mission to be executed. See the [YAML file](#yaml-file) below for the example YAML file +that will be executed. + +``` python +class MissionFromYamlFile(RosNode): +``` + +Creates a class for your example, which inherits a RosNode object. All python mission files are requried to inherit the RosNode class. + +``` python + RosNode.__init__(self, 'mission_from_yaml_file') + self.mission = YamlConfig.yamlFileToMission(MISSION_YAML_FILE)``` +``` + +Initialize the ROS node with name `mission_from_yaml_file` and import the the mission from the yaml config file. The `YamlConfig.yamlFileToMission()` function +reads teh configuration you have created in the YAML file and converts it into a Mission object. + +``` python + if not self.mission.startMission(): + return False +``` + +Upon execution of the script, the `self.mission.startMission()` function creates the mission client if not yet created, connects to the mission action server +and sends the goal to the action server to begin the execution of the mission. + +``` python + while not self.mission.isMissionComplete(): + time.sleep(1.0) + return self.mission.getMissionSuccess() +``` + +`self.mission.isMissionComplete()` monitors the mission status and only proceeds to terminating the mission has completed or been cancelled. + + +## YAML File {#yaml-file} + +The following YAML file is used in the above example mission. + +``` python +mission: + header: + seq: 0 + stamp: + secs: 0 + nsecs: 0 + frame_id: '' + name: "Sample Mission" + uuid: "8f57fd20-8a8c-4748-85ef-be1495b3ee06" + waypoints: + - + name: "Waypoint: 60" + uuid: "3edcedd7-ae0d-47cf-bd23-f7988d2779b7" + latitude: 50.10950820165676 + longitude: -97.31898507913323 + heading: -1.0 + tasks: [] + position_tolerance: -1.0 + yaw_tolerance: -1.0 + - + name: "Waypoint: 61" + uuid: "ad23202e-7067-4f1c-8677-2dc07af1e729" + latitude: 50.1095698924641 + longitude: -97.31929487427445 + heading: -1.0 + tasks: [] + position_tolerance: -1.0 + yaw_tolerance: -1.0 + - + name: "Waypoint: 62" + uuid: "fe452e77-4a26-41b0-b4ab-ee1859612a60" + latitude: 50.109437123117864 + longitude: -97.31946787675591 + heading: -1.0 + tasks: + - + name: "Wait" + uuid: "ec1121a8-7481-420f-b532-c47ea86afcd7" + service_call: "/wait" + version: "0.0.0" + floats: [3.0] + strings: [] + position_tolerance: -1.0 + yaw_tolerance: -1.0 + - + name: "Waypoint: 63" + uuid: "5ed54c1f-1599-497a-9c16-93c7ca6c355e" + latitude: 50.109384820042074 + longitude: -97.3194477601883 + heading: -1.0 + tasks: [] + position_tolerance: -1.0 + yaw_tolerance: -1.0 + - + name: "Waypoint: 64" + uuid: "2e021345-636b-4bd3-81ba-4f6901fdc016" + latitude: 50.10934056359333 + longitude: -97.31936192949982 + heading: -1.0 + tasks: [] + position_tolerance: -1.0 + yaw_tolerance: -1.0 + - + name: "Waypoint: 65" + uuid: "00c041ee-2ca4-40ba-8e38-65ac900d5a1d" + latitude: 50.10946930962604 + longitude: -97.31921709021302 + heading: -1.0 + tasks: [] + position_tolerance: -1.0 + yaw_tolerance: -1.0 + - + name: "Waypoint: 66" + uuid: "a5826fc5-b696-4b63-82aa-cc2e7a426640" + latitude: 50.10949344950718 + longitude: -97.31911382516594 + heading: -1.0 + tasks: [] + position_tolerance: -1.0 + yaw_tolerance: -1.0 + - + name: "Waypoint: 67" + uuid: "7ff204b2-79a3-46da-a8c0-2c734b4c5314" + latitude: 50.10949613171619 + longitude: -97.31898910244675 + heading: -1.0 + tasks: [] + position_tolerance: -1.0 + yaw_tolerance: -1.0 + onav_config: "To be determined" +``` diff --git a/outdoornav_user_manual_versioned_docs/version-0.10.0/api/api_examples/mission_with_custom_tasks.mdx b/outdoornav_user_manual_versioned_docs/version-0.10.0/api/api_examples/mission_with_custom_tasks.mdx index 30ec477e..af8335aa 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.10.0/api/api_examples/mission_with_custom_tasks.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.10.0/api/api_examples/mission_with_custom_tasks.mdx @@ -1,233 +1,233 @@ ---- -title: Mission with Custom Tasks -sidebar_label: Mission with Custom Tasks -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -Before being able to run the examples similar to the one explained below, it is required that you have written your own custom tasks. See the -[Custom Tasks](../../features/custom_tasks.mdx) section for information on how to develop tasks for your application. - -## The Code - -``` python -#! /usr/bin/env python3 - -import rospy -import actionlib -from cpr_outdoornav_api_examples_lib.ros_node import RosNode -from cpr_outdoornav_api_examples_lib.waypoint import Waypoint -from cpr_outdoornav_api_examples_lib.mission import Mission -from clearpath_navigation_msgs.msg import Task, UITaskResult, UITaskAction - - -CUSTOM_ACTION_NAME = "/record_gnss" -UNSPECIFIED_HEADING = -1 - - -class MissionWithCustomTask(RosNode): - """Create and run a mission with 3 waypoints, each of which executes a custom task. - - Our goal is to set up 3 waypoints, then create a mission such that the robot drives - to each waypoint in order. In addition, at each of the waypoints, a custom task will be - called to record the timestamp, goal name, and GPS coordinates. Since this is a custom task, - it is necessary to create an actionlib server to implement the custom task. - - The main component of this example is the mission builder, which builds up the set of goals, - including information on the custom tasks, and runs the mission, to execute the custom task. - - The coordinates used in this example are based on the cpr_agriculture_gazebo - world and should be updated to match the location in which the user's - robot will be operating. - """ - - class MissionBuilder: - """Creates and runs the mission, including custom tasks.""" - - def __init__(self): - """Creates the mission with 3 waypoints and custom tasks.""" - - # First waypoint, with custom task - waypoint_a_name = "A" - custom_task_a = Task() - custom_task_a.name = "my_custom_task_a" # choose any name here - custom_task_a.action_server_name = CUSTOM_ACTION_NAME # must match server name - custom_task_a.version = "1.0" # choose any version - custom_task_a.floats = [1000] # param: unique ID - custom_task_a.strings = [waypoint_a_name] # param: goal name - - # Second waypoint, with custom task - waypoint_b_name = "B" - custom_task_b = Task() - custom_task_b.name = "my_custom_task_b" # choose any name here - custom_task_b.action_server_name = CUSTOM_ACTION_NAME # must match server name - custom_task_b.version = "1.0" # choose any version - custom_task_b.floats = [1001] # param: unique ID - custom_task_b.strings = [waypoint_b_name] # param: goal name - - # Third waypoint, with custom task - waypoint_c_name = "C" - custom_task_c = Task() - custom_task_c.name = "my_custom_task_c" # choose any name here - custom_task_c.action_server_name = CUSTOM_ACTION_NAME # must match server name - custom_task_c.version = "1.0" # choose any version - custom_task_c.floats = [1002] # param: unique ID - custom_task_c.strings = [waypoint_c_name] # param: goal name - - waypoints = [ - Waypoint(waypoint_a_name, "uuid-waypoint-01", 43.50076203007681, -80.546296281104, UNSPECIFIED_HEADING), - Waypoint(waypoint_b_name, "uuid-waypoint-02", 43.50073600330896, -80.54621215801687, UNSPECIFIED_HEADING, [custom_task_b]), - Waypoint(waypoint_c_name, "uuid-waypoint-03", 43.50067256664828, -80.5462159469465, UNSPECIFIED_HEADING, [custom_task_c]), - ] - - # Build mission from two waypoints with custom tasks - self._mission = Mission("Custom task mission", "uuid-mission-1", waypoints) - - def getMission(self): - """Gets a reference to the mission. - - Returns - ------- - A reference to the mission. - """ - return self._mission - - def __init__(self): - """Initializes ROS, the custom task server, GPS subscriber and mission.""" - - RosNode.__init__(self, 'mission_with_custom_task') - self._mission_builder = MissionWithCustomTask.MissionBuilder() - - - def run(self): - """Execute the mission. - - This function blocks until the mission is complete. - - Returns - ------- - True on successful execution of the mission; else False on any error. - """ - - if not self._mission_builder.getMission().startMission(): - return False - while not self._mission_builder.getMission().isMissionComplete(): - rospy.sleep(1.0) - return self._mission_builder.getMission().getMissionSuccess() - - -if __name__ == '__main__': - if MissionWithCustomTask().run(): - print("Mission completed successfully") - else: - print("Mission failed") - rospy.signal_shutdown('Done') -``` - -## The Code Explained - -``` python -import rospy -import actionlib -from cpr_outdoornav_api_examples_lib.ros_node import RosNode -from cpr_outdoornav_api_examples_lib.waypoint import Waypoint -from cpr_outdoornav_api_examples_lib.mission import Mission -from clearpath_navigation_msgs.msg import Task, UITaskResult, UITaskAction -``` - -Import the `RosNode`, `Waypoint` and `Mission` classes which will be used to create the mission to be executed. -We also import the `Task` and `UITask` messages which are used to generate the action servers. - -``` python - class MissionBuilder: - """Creates and runs the mission, including custom tasks.""" - - def __init__(self): - """Creates the mission with 3 waypoints and custom tasks.""" - - # First waypoint, with custom task - waypoint_a_name = "A" - custom_task_a = Task() - custom_task_a.name = "my_custom_task_a" # choose any name here - custom_task_a.action_server_name = CUSTOM_ACTION_NAME # must match server name - custom_task_a.version = "1.0" # choose any version - custom_task_a.floats = [1000] # param: unique ID - custom_task_a.strings = [waypoint_a_name] # param: goal name - - # Second waypoint, with custom task - waypoint_b_name = "B" - custom_task_b = Task() - custom_task_b.name = "my_custom_task_b" # choose any name here - custom_task_b.action_server_name = CUSTOM_ACTION_NAME # must match server name - custom_task_b.version = "1.0" # choose any version - custom_task_b.floats = [1001] # param: unique ID - custom_task_b.strings = [waypoint_b_name] # param: goal name - - # Third waypoint, with custom task - waypoint_c_name = "C" - custom_task_c = Task() - custom_task_c.name = "my_custom_task_c" # choose any name here - custom_task_c.action_server_name = CUSTOM_ACTION_NAME # must match server name - custom_task_c.version = "1.0" # choose any version - custom_task_c.floats = [1002] # param: unique ID - custom_task_c.strings = [waypoint_c_name] # param: goal name - - - waypoints = [ - Waypoint(waypoint_a_name, "uuid-waypoint-01", 50.1095255, -97.3192484, UNSPECIFIED_HEADING, [custom_task_a]), - Waypoint(waypoint_b_name, "uuid-waypoint-02", 50.1094938, -97.3191085, UNSPECIFIED_HEADING, [custom_task_b]), - Waypoint(waypoint_c_name, "uuid-waypoint-03", 50.1094600, -97.3192100, UNSPECIFIED_HEADING, [custom_task_c]), - ] - - # Build mission from two waypoints with custom tasks - self._mission = Mission("Custom task mission", "uuid-mission-1", waypoints) -``` - -We create the `MissionBuilder` subclass that will create the mission to be executed. We initialize custom task objects -where we specify the `action_server_name` field with the specific action of the custom task. These are then added to the -Waypoints as a list of tasks and the Mission object is created. - -``` python - def __init__(self): - """Initializes ROS, the custom task server, GPS subscriber and mission.""" - - RosNode.__init__(self, 'mission_with_custom_task') - self._mission_builder = MissionWithCustomTask.MissionBuilder() -``` - -We initialize the example class by starting a ROS node and initialize the mission to be executed. - -``` python - def run(self): - """Execute the mission. - - This function blocks until the mission is complete. - - Returns - ------- - True on successful execution of the mission; else False on any error. - """ - - if not self._mission_builder.getMission().startMission(): - return False - while not self._mission_builder.getMission().isMissionComplete(): - time.sleep(1.0) - return self._mission_builder.getMission().getMissionSuccess() -``` - -The `run()` function starts the mission and checks for completion. Once complete we terminate the example code. - -``` python -if __name__ == '__main__': - if MissionWithCustomTask().run(): - print("Mission completed successfully") - else: - print("Mission failed") - rospy.signal_shutdown('Done') -``` - -The main python execution block. We first initialize the example class (runs the __init__ function) and then execute the run() function which -executes the mission and outputs the status information. - - +--- +title: Mission with Custom Tasks +sidebar_label: Mission with Custom Tasks +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +Before being able to run the examples similar to the one explained below, it is required that you have written your own custom tasks. See the +[Custom Tasks](../../features/custom_tasks.mdx) section for information on how to develop tasks for your application. + +## The Code + +``` python +#! /usr/bin/env python3 + +import rospy +import actionlib +from cpr_outdoornav_api_examples_lib.ros_node import RosNode +from cpr_outdoornav_api_examples_lib.waypoint import Waypoint +from cpr_outdoornav_api_examples_lib.mission import Mission +from clearpath_navigation_msgs.msg import Task, UITaskResult, UITaskAction + + +CUSTOM_ACTION_NAME = "/record_gnss" +UNSPECIFIED_HEADING = -1 + + +class MissionWithCustomTask(RosNode): + """Create and run a mission with 3 waypoints, each of which executes a custom task. + + Our goal is to set up 3 waypoints, then create a mission such that the robot drives + to each waypoint in order. In addition, at each of the waypoints, a custom task will be + called to record the timestamp, goal name, and GPS coordinates. Since this is a custom task, + it is necessary to create an actionlib server to implement the custom task. + + The main component of this example is the mission builder, which builds up the set of goals, + including information on the custom tasks, and runs the mission, to execute the custom task. + + The coordinates used in this example are based on the cpr_agriculture_gazebo + world and should be updated to match the location in which the user's + robot will be operating. + """ + + class MissionBuilder: + """Creates and runs the mission, including custom tasks.""" + + def __init__(self): + """Creates the mission with 3 waypoints and custom tasks.""" + + # First waypoint, with custom task + waypoint_a_name = "A" + custom_task_a = Task() + custom_task_a.name = "my_custom_task_a" # choose any name here + custom_task_a.action_server_name = CUSTOM_ACTION_NAME # must match server name + custom_task_a.version = "1.0" # choose any version + custom_task_a.floats = [1000] # param: unique ID + custom_task_a.strings = [waypoint_a_name] # param: goal name + + # Second waypoint, with custom task + waypoint_b_name = "B" + custom_task_b = Task() + custom_task_b.name = "my_custom_task_b" # choose any name here + custom_task_b.action_server_name = CUSTOM_ACTION_NAME # must match server name + custom_task_b.version = "1.0" # choose any version + custom_task_b.floats = [1001] # param: unique ID + custom_task_b.strings = [waypoint_b_name] # param: goal name + + # Third waypoint, with custom task + waypoint_c_name = "C" + custom_task_c = Task() + custom_task_c.name = "my_custom_task_c" # choose any name here + custom_task_c.action_server_name = CUSTOM_ACTION_NAME # must match server name + custom_task_c.version = "1.0" # choose any version + custom_task_c.floats = [1002] # param: unique ID + custom_task_c.strings = [waypoint_c_name] # param: goal name + + waypoints = [ + Waypoint(waypoint_a_name, "uuid-waypoint-01", 43.50076203007681, -80.546296281104, UNSPECIFIED_HEADING), + Waypoint(waypoint_b_name, "uuid-waypoint-02", 43.50073600330896, -80.54621215801687, UNSPECIFIED_HEADING, [custom_task_b]), + Waypoint(waypoint_c_name, "uuid-waypoint-03", 43.50067256664828, -80.5462159469465, UNSPECIFIED_HEADING, [custom_task_c]), + ] + + # Build mission from two waypoints with custom tasks + self._mission = Mission("Custom task mission", "uuid-mission-1", waypoints) + + def getMission(self): + """Gets a reference to the mission. + + Returns + ------- + A reference to the mission. + """ + return self._mission + + def __init__(self): + """Initializes ROS, the custom task server, GPS subscriber and mission.""" + + RosNode.__init__(self, 'mission_with_custom_task') + self._mission_builder = MissionWithCustomTask.MissionBuilder() + + + def run(self): + """Execute the mission. + + This function blocks until the mission is complete. + + Returns + ------- + True on successful execution of the mission; else False on any error. + """ + + if not self._mission_builder.getMission().startMission(): + return False + while not self._mission_builder.getMission().isMissionComplete(): + rospy.sleep(1.0) + return self._mission_builder.getMission().getMissionSuccess() + + +if __name__ == '__main__': + if MissionWithCustomTask().run(): + print("Mission completed successfully") + else: + print("Mission failed") + rospy.signal_shutdown('Done') +``` + +## The Code Explained + +``` python +import rospy +import actionlib +from cpr_outdoornav_api_examples_lib.ros_node import RosNode +from cpr_outdoornav_api_examples_lib.waypoint import Waypoint +from cpr_outdoornav_api_examples_lib.mission import Mission +from clearpath_navigation_msgs.msg import Task, UITaskResult, UITaskAction +``` + +Import the `RosNode`, `Waypoint` and `Mission` classes which will be used to create the mission to be executed. +We also import the `Task` and `UITask` messages which are used to generate the action servers. + +``` python + class MissionBuilder: + """Creates and runs the mission, including custom tasks.""" + + def __init__(self): + """Creates the mission with 3 waypoints and custom tasks.""" + + # First waypoint, with custom task + waypoint_a_name = "A" + custom_task_a = Task() + custom_task_a.name = "my_custom_task_a" # choose any name here + custom_task_a.action_server_name = CUSTOM_ACTION_NAME # must match server name + custom_task_a.version = "1.0" # choose any version + custom_task_a.floats = [1000] # param: unique ID + custom_task_a.strings = [waypoint_a_name] # param: goal name + + # Second waypoint, with custom task + waypoint_b_name = "B" + custom_task_b = Task() + custom_task_b.name = "my_custom_task_b" # choose any name here + custom_task_b.action_server_name = CUSTOM_ACTION_NAME # must match server name + custom_task_b.version = "1.0" # choose any version + custom_task_b.floats = [1001] # param: unique ID + custom_task_b.strings = [waypoint_b_name] # param: goal name + + # Third waypoint, with custom task + waypoint_c_name = "C" + custom_task_c = Task() + custom_task_c.name = "my_custom_task_c" # choose any name here + custom_task_c.action_server_name = CUSTOM_ACTION_NAME # must match server name + custom_task_c.version = "1.0" # choose any version + custom_task_c.floats = [1002] # param: unique ID + custom_task_c.strings = [waypoint_c_name] # param: goal name + + + waypoints = [ + Waypoint(waypoint_a_name, "uuid-waypoint-01", 50.1095255, -97.3192484, UNSPECIFIED_HEADING, [custom_task_a]), + Waypoint(waypoint_b_name, "uuid-waypoint-02", 50.1094938, -97.3191085, UNSPECIFIED_HEADING, [custom_task_b]), + Waypoint(waypoint_c_name, "uuid-waypoint-03", 50.1094600, -97.3192100, UNSPECIFIED_HEADING, [custom_task_c]), + ] + + # Build mission from two waypoints with custom tasks + self._mission = Mission("Custom task mission", "uuid-mission-1", waypoints) +``` + +We create the `MissionBuilder` subclass that will create the mission to be executed. We initialize custom task objects +where we specify the `action_server_name` field with the specific action of the custom task. These are then added to the +Waypoints as a list of tasks and the Mission object is created. + +``` python + def __init__(self): + """Initializes ROS, the custom task server, GPS subscriber and mission.""" + + RosNode.__init__(self, 'mission_with_custom_task') + self._mission_builder = MissionWithCustomTask.MissionBuilder() +``` + +We initialize the example class by starting a ROS node and initialize the mission to be executed. + +``` python + def run(self): + """Execute the mission. + + This function blocks until the mission is complete. + + Returns + ------- + True on successful execution of the mission; else False on any error. + """ + + if not self._mission_builder.getMission().startMission(): + return False + while not self._mission_builder.getMission().isMissionComplete(): + time.sleep(1.0) + return self._mission_builder.getMission().getMissionSuccess() +``` + +The `run()` function starts the mission and checks for completion. Once complete we terminate the example code. + +``` python +if __name__ == '__main__': + if MissionWithCustomTask().run(): + print("Mission completed successfully") + else: + print("Mission failed") + rospy.signal_shutdown('Done') +``` + +The main python execution block. We first initialize the example class (runs the __init__ function) and then execute the run() function which +executes the mission and outputs the status information. + + diff --git a/outdoornav_user_manual_versioned_docs/version-0.10.0/api/api_examples/monitor_status.mdx b/outdoornav_user_manual_versioned_docs/version-0.10.0/api/api_examples/monitor_status.mdx index 077a9fcf..a6fb416c 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.10.0/api/api_examples/monitor_status.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.10.0/api/api_examples/monitor_status.mdx @@ -1,152 +1,152 @@ ---- -title: Monitor Status -sidebar_label: Monitor Status -sidebar_position: 2 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -## The Code - -``` python -#! /usr/bin/env python3 - -import rospy -from cpr_outdoornav_api_examples_lib.ros_node import RosNode -from cpr_outdoornav_api_examples_lib.waypoint import Waypoint -from cpr_outdoornav_api_examples_lib.mission import Mission -from cpr_outdoornav_api_examples_lib.platform_status import PlatformStatusMonitor -from cpr_outdoornav_api_examples_lib.control_status import ControlStatusMonitor -from cpr_outdoornav_api_examples_lib.localization_status import LocalizationStatusMonitor -from cpr_outdoornav_api_examples_lib.navigation_status import NavigationStatusMonitor - - -class MonitorStatus(RosNode): - """Run a simple mission and report status throughout. - - The coordinates used in this example are based on the cpr_agriculture_gazebo - world and should be updated to match the location in which the user's - robot will be operating. - """ - - def __init__(self): - """Initialize the mission details and server connection.""" - - RosNode.__init__(self, 'monitor_status') - waypoints = [ - Waypoint("A", "uuid-waypoint-1", 50.1094938, -97.3191085), - Waypoint("B", "uuid-waypoint-2", 50.1095100, -97.3192000), - Waypoint("C", "uuid-waypoint-3", 50.1095255, -97.3192484), - ] - self.mission = Mission("Monitor status mission", "uuid-mission-1", waypoints) - self._platform_status = PlatformStatusMonitor() - self._control_status = ControlStatusMonitor() - self._localization_status = LocalizationStatusMonitor() - self._navigation_status = NavigationStatusMonitor() - - def _reportStatus(self): - """Report the current status.""" - - rospy.loginfo("--------------------------------------------------------") - self._platform_status.report() - self._control_status.report() - self._localization_status.report() - self._navigation_status.report() - - def run(self): - """Execute the mission and report status.""" - - if not self.mission.startMission(): - rospy.logerr("Failed to start mission") - return False - while not self.mission.isMissionComplete(): - self._reportStatus() - rospy.sleep(1.0) - return self.mission.getMissionSuccess() - - -if __name__ == '__main__': - if MonitorStatus().run(): - print("Mission completed successfully") - else: - print("Mission failed") - -``` - -## The Code Explained - -``` python -import rospy -from cpr_outdoornav_api_examples_lib.ros_node import RosNode -from cpr_outdoornav_api_examples_lib.waypoint import Waypoint -from cpr_outdoornav_api_examples_lib.mission import Mission -from cpr_outdoornav_api_examples_lib.platform_status import PlatformStatusMonitor -from cpr_outdoornav_api_examples_lib.control_status import ControlStatusMonitor -from cpr_outdoornav_api_examples_lib.localization_status import LocalizationStatusMonitor -from cpr_outdoornav_api_examples_lib.navigation_status import NavigationStatusMonitor -``` - -Import the `RosNode`, `Waypoint`, `Mission` classes which will be used to create the mission to be executed. We also import the -`PlatformStatusMonitor`, `ControlStatusMonitor`, `LocalizationStatusMonitor`, `NavigationStatusMonitor` classes which are set up to monitor the topics -relavant to the platform, localization, contrle selection an navigation modules respectively. - -``` python - waypoints = [ - Waypoint("A", "uuid-waypoint-1", 50.1094938, -97.3191085), - Waypoint("B", "uuid-waypoint-2", 50.1095100, -97.3192000), - Waypoint("C", "uuid-waypoint-3", 50.1095255, -97.3192484), - ] - self.mission = Mission("Monitor status mission", "uuid-mission-1", waypoints) -``` - -After initializing the ROS node, we create a mission manually by first creating a list of Waypoint objects and then adding then using the waypoint list -to construct the Mission object. - -``` python - self._platform_status = PlatformStatusMonitor() - self._control_status = ControlStatusMonitor() - self._localization_status = LocalizationStatusMonitor() - self._navigation_status = NavigationStatusMonitor() -``` - -We then initialize the platform, control, localization and navigation monitors, which subscribes to several API topics. - -``` python - def _reportStatus(self): - """Report the current status.""" - - rospy.loginfo("--------------------------------------------------------") - self._platform_status.report() - self._control_status.report() - self._localization_status.report() - self._navigation_status.report() -``` - -The `_reportStatus()` function outputs the results of the monitors to the ROS logs. This includes both the internal ROS logs as well as terminal output. - -``` python - def run(self): - """Execute the mission and report status.""" - - if not self.mission.startMission(): - rospy.logerr("Failed to start mission") - return False - while not self.mission.isMissionComplete(): - self._reportStatus() - rospy.sleep(1.0) - return self.mission.getMissionSuccess() -``` - -The `run()` function starts the mission and checks for completion. Every seconds we run the `reportStatus()` function to output the status information. -Once complete we terminate the example code. - -``` python -if __name__ == '__main__': - if MonitorStatus().run(): - print("Mission completed successfully") - else: - print("Mission failed") -``` - -The main python execution block. We first initialize the example class (runs the __init__ function) and then execute the run() function which -executes the mission and outputs the status information. +--- +title: Monitor Status +sidebar_label: Monitor Status +sidebar_position: 2 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +## The Code + +``` python +#! /usr/bin/env python3 + +import rospy +from cpr_outdoornav_api_examples_lib.ros_node import RosNode +from cpr_outdoornav_api_examples_lib.waypoint import Waypoint +from cpr_outdoornav_api_examples_lib.mission import Mission +from cpr_outdoornav_api_examples_lib.platform_status import PlatformStatusMonitor +from cpr_outdoornav_api_examples_lib.control_status import ControlStatusMonitor +from cpr_outdoornav_api_examples_lib.localization_status import LocalizationStatusMonitor +from cpr_outdoornav_api_examples_lib.navigation_status import NavigationStatusMonitor + + +class MonitorStatus(RosNode): + """Run a simple mission and report status throughout. + + The coordinates used in this example are based on the cpr_agriculture_gazebo + world and should be updated to match the location in which the user's + robot will be operating. + """ + + def __init__(self): + """Initialize the mission details and server connection.""" + + RosNode.__init__(self, 'monitor_status') + waypoints = [ + Waypoint("A", "uuid-waypoint-1", 50.1094938, -97.3191085), + Waypoint("B", "uuid-waypoint-2", 50.1095100, -97.3192000), + Waypoint("C", "uuid-waypoint-3", 50.1095255, -97.3192484), + ] + self.mission = Mission("Monitor status mission", "uuid-mission-1", waypoints) + self._platform_status = PlatformStatusMonitor() + self._control_status = ControlStatusMonitor() + self._localization_status = LocalizationStatusMonitor() + self._navigation_status = NavigationStatusMonitor() + + def _reportStatus(self): + """Report the current status.""" + + rospy.loginfo("--------------------------------------------------------") + self._platform_status.report() + self._control_status.report() + self._localization_status.report() + self._navigation_status.report() + + def run(self): + """Execute the mission and report status.""" + + if not self.mission.startMission(): + rospy.logerr("Failed to start mission") + return False + while not self.mission.isMissionComplete(): + self._reportStatus() + rospy.sleep(1.0) + return self.mission.getMissionSuccess() + + +if __name__ == '__main__': + if MonitorStatus().run(): + print("Mission completed successfully") + else: + print("Mission failed") + +``` + +## The Code Explained + +``` python +import rospy +from cpr_outdoornav_api_examples_lib.ros_node import RosNode +from cpr_outdoornav_api_examples_lib.waypoint import Waypoint +from cpr_outdoornav_api_examples_lib.mission import Mission +from cpr_outdoornav_api_examples_lib.platform_status import PlatformStatusMonitor +from cpr_outdoornav_api_examples_lib.control_status import ControlStatusMonitor +from cpr_outdoornav_api_examples_lib.localization_status import LocalizationStatusMonitor +from cpr_outdoornav_api_examples_lib.navigation_status import NavigationStatusMonitor +``` + +Import the `RosNode`, `Waypoint`, `Mission` classes which will be used to create the mission to be executed. We also import the +`PlatformStatusMonitor`, `ControlStatusMonitor`, `LocalizationStatusMonitor`, `NavigationStatusMonitor` classes which are set up to monitor the topics +relavant to the platform, localization, contrle selection an navigation modules respectively. + +``` python + waypoints = [ + Waypoint("A", "uuid-waypoint-1", 50.1094938, -97.3191085), + Waypoint("B", "uuid-waypoint-2", 50.1095100, -97.3192000), + Waypoint("C", "uuid-waypoint-3", 50.1095255, -97.3192484), + ] + self.mission = Mission("Monitor status mission", "uuid-mission-1", waypoints) +``` + +After initializing the ROS node, we create a mission manually by first creating a list of Waypoint objects and then adding then using the waypoint list +to construct the Mission object. + +``` python + self._platform_status = PlatformStatusMonitor() + self._control_status = ControlStatusMonitor() + self._localization_status = LocalizationStatusMonitor() + self._navigation_status = NavigationStatusMonitor() +``` + +We then initialize the platform, control, localization and navigation monitors, which subscribes to several API topics. + +``` python + def _reportStatus(self): + """Report the current status.""" + + rospy.loginfo("--------------------------------------------------------") + self._platform_status.report() + self._control_status.report() + self._localization_status.report() + self._navigation_status.report() +``` + +The `_reportStatus()` function outputs the results of the monitors to the ROS logs. This includes both the internal ROS logs as well as terminal output. + +``` python + def run(self): + """Execute the mission and report status.""" + + if not self.mission.startMission(): + rospy.logerr("Failed to start mission") + return False + while not self.mission.isMissionComplete(): + self._reportStatus() + rospy.sleep(1.0) + return self.mission.getMissionSuccess() +``` + +The `run()` function starts the mission and checks for completion. Every seconds we run the `reportStatus()` function to output the status information. +Once complete we terminate the example code. + +``` python +if __name__ == '__main__': + if MonitorStatus().run(): + print("Mission completed successfully") + else: + print("Mission failed") +``` + +The main python execution block. We first initialize the example class (runs the __init__ function) and then execute the run() function which +executes the mission and outputs the status information. diff --git a/outdoornav_user_manual_versioned_docs/version-0.10.0/api/api_overview.mdx b/outdoornav_user_manual_versioned_docs/version-0.10.0/api/api_overview.mdx index 3b69afd0..503de14d 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.10.0/api/api_overview.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.10.0/api/api_overview.mdx @@ -1,61 +1,61 @@ ---- -title: API Overview -sidebar_label: API Overview -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -While the Web User Interface provides a great way to get started quickly -with OutdoorNav Software, some users will want programmatic control or -may wish to develop their own graphical user interfaces \-- for those -users, the Application Programming Interface (API) provides the -flexibility to do so. This is illustrated in the figure below. - -
-
- -
Interconnection between OutdoorNav Software and UGV Controller
-
-
- -The API is, at present, a [ROS 1 Noetic](http://wiki.ros.org/noetic) API, -but will soon be extended to a ROS 2 API. The API is divided into two -sections, whose details are provided below: - -- [Platform API](api_endpoints/platform_api.mdx): The set of [ROS - Topics](http://wiki.ros.org/Topics) are used to comminucate with the - hardware platform (eg. sensor data, wireless, battery state, command - velocity). This API can be used by autonomy software packages to - interface with the hardware platform. - - [Topics Published by UGV](api_endpoints/platform_api.mdx#topics-published-by-platform): - The set of topics that are published by the hardware platform. - - [Topics Subscribed to by UGV](api_endpoints/platform_api.mdx#topics-subscribed-by-platform): - The set of topics that are subscribed to by the hardware - platform. -- [Autonomy API](api_endpoints/autonomy_api.mdx): The set of [ROS - Topics](http://wiki.ros.org/Topics) that are used for monitoring and - controlling the the hardware platform through the OutdoorNav - autonomy software. - - [Topics Published by Autonomy](api_endpoints/autonomy_api.mdx#topics-published-by-autonomy): - The set of [ROS Topics](http://wiki.ros.org/Topics) published by - OutdoorNav Software, to be subscribed to by the UGV. - - [Topics Subscribed to by Autonomy](api_endpoints/autonomy_api.mdx#topics-subscribed-to-by-autonomy): - The set of [ROS Topics](http://wiki.ros.org/Topics) - subscribed to by OutdoorNav Software, typically published by the - client for directing OutdoorNav operation. - - [Services Exported by Autonomy](api_endpoints/autonomy_api.mdx#services-exported-by-autonomy): - The set of [ROS Services](http://wiki.ros.org/Services) provided - by OutdoorNav Software, for use by the client to modify/control - the behaviour of the Autonomy. - - [Actions Exported by Autonomy](api_endpoints/autonomy_api.mdx#actions-exported-by-autonomy): - The set of [ROS Actions](http://wiki.ros.org/actionlib) provided - by OutdoorNav Software, for use by the client to modify/control - the behaviour of the Autonomy. -- [Mission Manager API](api_endpoints/mission_manager_api.mdx): The set of [ROS - Services](http://wiki.ros.org/Services) that are used for creating, deleting, and modifying OutdoorNav missions -- [Definitions](api_endpoints/definitions.mdx): The set of custom - [ROS Message](http://wiki.ros.org/Messages), [ROS - Service](http://wiki.ros.org/Services), and [ROS - Action](http://wiki.ros.org/actionlib) definitions. -- API Examples: Example code to come. +--- +title: API Overview +sidebar_label: API Overview +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +While the Web User Interface provides a great way to get started quickly +with OutdoorNav Software, some users will want programmatic control or +may wish to develop their own graphical user interfaces \-- for those +users, the Application Programming Interface (API) provides the +flexibility to do so. This is illustrated in the figure below. + +
+
+ +
Interconnection between OutdoorNav Software and UGV Controller
+
+
+ +The API is, at present, a [ROS 1 Noetic](http://wiki.ros.org/noetic) API, +but will soon be extended to a ROS 2 API. The API is divided into two +sections, whose details are provided below: + +- [Platform API](api_endpoints/platform_api.mdx): The set of [ROS + Topics](http://wiki.ros.org/Topics) are used to comminucate with the + hardware platform (eg. sensor data, wireless, battery state, command + velocity). This API can be used by autonomy software packages to + interface with the hardware platform. + - [Topics Published by UGV](api_endpoints/platform_api.mdx#topics-published-by-platform): + The set of topics that are published by the hardware platform. + - [Topics Subscribed to by UGV](api_endpoints/platform_api.mdx#topics-subscribed-by-platform): + The set of topics that are subscribed to by the hardware + platform. +- [Autonomy API](api_endpoints/autonomy_api.mdx): The set of [ROS + Topics](http://wiki.ros.org/Topics) that are used for monitoring and + controlling the the hardware platform through the OutdoorNav + autonomy software. + - [Topics Published by Autonomy](api_endpoints/autonomy_api.mdx#topics-published-by-autonomy): + The set of [ROS Topics](http://wiki.ros.org/Topics) published by + OutdoorNav Software, to be subscribed to by the UGV. + - [Topics Subscribed to by Autonomy](api_endpoints/autonomy_api.mdx#topics-subscribed-to-by-autonomy): + The set of [ROS Topics](http://wiki.ros.org/Topics) + subscribed to by OutdoorNav Software, typically published by the + client for directing OutdoorNav operation. + - [Services Exported by Autonomy](api_endpoints/autonomy_api.mdx#services-exported-by-autonomy): + The set of [ROS Services](http://wiki.ros.org/Services) provided + by OutdoorNav Software, for use by the client to modify/control + the behaviour of the Autonomy. + - [Actions Exported by Autonomy](api_endpoints/autonomy_api.mdx#actions-exported-by-autonomy): + The set of [ROS Actions](http://wiki.ros.org/actionlib) provided + by OutdoorNav Software, for use by the client to modify/control + the behaviour of the Autonomy. +- [Mission Manager API](api_endpoints/mission_manager_api.mdx): The set of [ROS + Services](http://wiki.ros.org/Services) that are used for creating, deleting, and modifying OutdoorNav missions +- [Definitions](api_endpoints/definitions.mdx): The set of custom + [ROS Message](http://wiki.ros.org/Messages), [ROS + Service](http://wiki.ros.org/Services), and [ROS + Action](http://wiki.ros.org/actionlib) definitions. +- API Examples: Example code to come. diff --git a/outdoornav_user_manual_versioned_docs/version-0.10.0/cpr_hardware.mdx b/outdoornav_user_manual_versioned_docs/version-0.10.0/cpr_hardware.mdx index f60527ff..2d1efdd0 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.10.0/cpr_hardware.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.10.0/cpr_hardware.mdx @@ -1,405 +1,405 @@ ---- -title: "Appendix B: CPR Hardware" -sidebar_label: "Appendix B: CPR Hardware" -sidebar_position: 13 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -When using a Clearpath Robotics UGV and Base Station, the following -hardware setup may be required. - -## Calibrating the IMU - -Although IMU magnetometers are calibrated at the factory to remove any -internal magnetic influences in the device, measurements are still -subject to influence from external magnetic anomalies when the sensor is -installed. These anomalies are divided into two classes: hard iron -offsets and soft iron distortions. Hard iron offsets are created by -objects that produce a magnetic field. Soft iron distortions are -considered deflections or alterations in the existing magnetic field. -Ideally, these influences are mitigated by installing the sensor away -from magnetic sources, such as coils, magnets, and ferrous metal -structures and mounting hardware. However, often these sources are hard -to avoid or are hidden. To mitigate this effect when using the IMU -magnetometer to aid in heading estimations, a field calibration of the -magnetometer after final installation is highly recommended. This means -that the IMU must be calibrated in the same environment that you use -your UGV for autonomous navigation. - -### Microstrain IMU - -If your UGV has a 3DM-GX5-25 Microstrain IMU, the complete instruction -on calibration of your IMU can be found in section 5.4 of the -[datasheet](https://www.microstrain.com/sites/default/files/3dm-gx5-25_user_manual_8500-0012.pdf). -Note that you need a computer with Windows system and the LORD Sensing -MIP Hard and Soft Iron Calibration software installed which can be found -at the Microstrain website. - -### UM6/7 IMU - -If you are using UM6 or UM7 IMUs, you will need the magnetometer display -package which is located at the following address on your UGV: -`~/catkin_ws/Drivers/src/imu_tools/magnetometer_display`. - -Follow these steps to calibrate the IMU on your machine: - -1. Create a catkin workspace on your local machine and copy the package - `magnetometer_display` into your src folder. Build this package with - the `catkin_make` command. - -2. Perform the following command to make the calibration script - executable: - - ``` bash - $ sudo chmod +x calibration.py - ``` - -3. Connect the IMU to your computer and launch the driver. Or if you - are on the same network as your UGV, make your UGV the ROS master - and ensure that you can echo the IMU topic on your computer. - -4. Open the `magnetometer.launch` file in the `magnetometer_display` - package and change the sections shown in the figure below. - Specifically, set `use_mag_field` to true when the IMU is outputting - magnetometer measurements with a `sensor_msgs/MagneticField` - message, otherwise set to false. Microstrain is the only IMU which - uses the MagneticField message type. - -
-
- -
Magnetometer calibration, general launch settings
-
-
- -5. Launch the calibration using the following command: - - ``` bash - $ roslaunch magnetometer_display magnetometer.launch - ``` - -6. Move the IMU around to get good coverage. RViz will display - magnetometer points (red) and will plot current ellipsoid fit - (green) as shown in the figure below. - -
-
- -
Magnetometer calibration, ellipsoid fit plot
-
-
- -7. Ellipsoid fit parameters are displayed in terminal as shown in the - figure below. - -
-
- -
Magnetometer calibration, ellipsoid fit - parameters
-
-
- -8. Once there are enough red points on your fitted ellipsoid, enter the - above calibrations in the IMU driver launch file. Open the - `sensor.launch` file in the `cpr_gps_localization` package and go to - the UM7 (or UM6) section of the launch file. The figure below shows - this section for the UM7. - -
-
- -
Magnetometer calibration, ellipsoid fit settings in launch file
-
-
- - You should enter the parameters generated in the Ellipsoid fit step - as follows (to account for the NED to ENU transform the driver - applies): - - - Launch file X = Terminal Y - - Launch file Y = Terminal X - - Launch file Z = -Terminal Z - -## RTK Positioning GPS Setup - -:::note - -Please skip this section if your robot does not have RTK GPS. - -::: - -The following configuration is for establishing communications between -the Base Station and the UGV using TCP/IP for the purpose of -transmitting RTK corrections. Before starting this procedure, make sure -that you have installed the [SwiftNav -console](https://support.swiftnav.com/support/solutions/articles/44001903699-installing-swift-console). - -### Base Station GPS Configuration - -- Connect the Swift Navigation device to a computer via USB or the USB - to Serial Adapter cable. - -- Open Swift Console and connect to the device. - -- Set the following options in the **ethernet** section as shown in - the figure below. - - 1. ip_config_mode: `Static` - 2. ip_address: `192.168.131.30` - 3. netmask: `255.255.255.0` - -
-
- -
Base Station Ethernet settings
-
-
- -- Set the following options in the **tcp_server1** section as show in - the figure below. - - 1. mode: `SBP` - 2. port: `55556` - 3. enabled_sbp_messages: `72,74,117,65535` - -
-
- -
Base Station TCP1 Server settings
-
-
- -- Set the following options in the **solution** section as shown in - the figure below. - - 1. soln_freq: `10` - 2. correction_age_max: `30` - 3. output_every_n_obs: `10` - 4. dgnss_solution_mode: `Low Latency` - -
-
- -
Base Station Solution settings
-
-
- -- Next the Base Station has to be surveyed. There are two ways of - doing this which are explained in [RTK Survey Positioning](#base-station-survey). -- Click Save to Flash. -- Close Swift Console. -- Disconnect the device from the computer. - -### UGV Position GPS Configuration {#ugv-position-gps-config} - -- Connect the Swift Navigation device to a computer via USB or the USB - to Serial Adapter cable. - -- Open Swift Console and connect to the device. - -- Set the following options in the **ethernet** section as shown in - the figure below. - - 1. ip_config_mode: `Static` - 2. ip_address: `192.168.131.31` - 3. netmask: `255.255.255.0` - -
-
- -
UGV GPS Ethernet settings
-
-
- -- Set the following options in the **tcp_client0** section as show in - the figure below. - - 1. mode: `SBP` - 2. port: `192.168.131.30:55556` - 3. enabled_sbp_messages: `0` - -
-
- -
UGV GPS TCP Client0 settings
-
-
- -- Set the following options in the **solution** section as show in the - figure below. - - 1. soln_freq: `10` - 2. correction_age_max: `30` - 3. output_every_n_obs: `10` - 4. dgnss_solution_mode: `Low Latency` - -
-
- -
UGV GPS Solution settings
-
-
- -- Click Save to Flash. - -- Close Swift Console. - -- Disconnect the device from the computer. - -Once you have entered these settings. Connect your computer to the Wi-Fi -network of the Base Station. Also make sure that the UGC (which is -connected to the UGV GPS unit) is also connected to the Base Station -Wifi. The you should be able to verify connectivity across the devices. -To check the Base Station, complete the following steps. - -- Open Swift Console on you computer -- Select **TCP/IP** -- For IP Address enter `192.168.131.30` -- For IP Port enter `55555` -- Click **OK** -- Select the **Observations** tab -- In the **Remote** section you should see observation data from your - UGV. - -To check the UGV, complete the following steps. - -- Open Swift Console -- Select **TCP/IP** -- For IP Address enter `192.168.131.31` -- For IP Port enter `55555` -- Click **OK** -- Select the **Observations** tab -- In the **Remote** section you should see observation data from your - Base Station. - -Further information on [RTK setup](https://swiftnav.freshdesk.com/support/solutions/articles/44001904334-piksi-multi-gnss-rtk-position-with-stationary-base%7D%7Bhttps://swiftnav.freshdesk.com/support/solutions/articles/44001904334-piksi-multi-gnss-rtk-position-with-stationary-base) -is available from SwiftNav. - -## RTK Survey Positioning {#base-station-survey} - -:::note - -Please skip this section if your UGV does not have RTK GPS. - -::: - -:::warning - -Once you have surveyed the location of the Base Station, you **cannot** -relocate the Base Station throughout your tests. Otherwise, this step -has to be repeated. - -::: - -There are three ways to survey the Base Station location: - -1. OutdoorNav Web User Interface (easiest/accurate), -2. Swiftnav console autosurvey (fastest/least accurate), -3. ROS launch file geodetic survey (for debug output display). - -Using the OutdoorNav Web UI is the easiest and most accurate way to do -this since it runs the ROS geodetic survey tool which uses more samples -to compute the final position of the Base Station than the Swiftnav -console. Using the geodetic ROS survey launch file directly would allow -the user to visualize the output log directly but requires preliminary -knowledge in ROS. - -### Base Station Survey: Web UI - -Using the OutdoorNav Web UI to survey the Base Station is very simple. -See [Survey Base Station](getting_started/system_setup.mdx#survey_base_station) for details. - -### Base Station Survey: Piksi Console - -Use the Piksi console connect the base station GPS. Go to "Settings -\> -surveyed position", click to any field in this section and then click -the button on the top right corner "Auto Survey". The figure below -shows these steps. The last 1000 GPS points will be used to compute the -position of the Base Station. - -
-
- -
Auto Survey
-
-
- -After that, make sure the four fields in "surveyed position" -(broadcast, surveyed lat, surveyed lon, surveyed alt) are consistent -with your location. - -### Base Station Survey: ROS Geodetic Survey - -The `ethz_piksi_ros` repository should be installed in the UGV's -`catkin_ws`. To run the surveying process simply connect your PC to the -Base Station network, `ssh` into the UGV's computer and run the -following: - -``` bash -roslaunch {robot_name}_gps_navigation geodetic_survey.launch -``` - -where `robot_name` is either `jackal`, `husky`, or `warthog` depending -on your UGV. The surveying will begin and you will see a running tally -of the collected data. - -## RTK Heading Setup - -For the rest of this section, it is assumed that a third Swiftnav Duro -device is available with IP address of 192.168.131.32. Note that in -order to change the IP address of a Swiftnav Duro, you need to use the -Swiftnav console and connect to the device with the serial port. - -:::note - -The instructions in this section will overwrite some of the settings set -in [UGV Position GPS Configuration](#ugv-position-gps-config) on the -Position/Reference Duro receiver. This is normal since the configuration -in [UGV Position GPS Configuration](#ugv-position-gps-config) is for a UGV -with only the position Duro receiver. If the heading receiver is -connected as well, please continue with the instructions below. - -::: - -The two Swiftnav Duro GPS device on the UGV are connected via serial -cable. They are also both connected via Ethernet cable to the computer -on the UGV. For computing the heading, on Duro (the one on the rear with -IP address 192.168.131.31) operates only to provide GNSS Observations to -the other Duro that computes an RTK derived heading (the Duro on the -front with IP address 192.168.131.32). For the purposes of this -document, we will call the Duro/Piksi that operates to provide the raw -GNSS observations only the "Reference Receiver" and the Duro/Piksi -producing heading measurements the "Attitude Receiver." - -Use the Swiftnav console to connect to the Reference Receiver (with IP -address of 192.168.131.31) and insert the settings shown in the figure -below. - -
-
- -
Reference Receiver settings
-
-
- -Next, connect to the Attitude Receiver (with IP address of -192.168.131.32) and change the configuration as shown in the figure -below. - -
-
- -
Attitude Receiver settings
-
-
- -For further information please refer to [these instructions](https://swiftnav.freshdesk.com/support/solutions/articles/44001907898-rtk-heading-gnss-compass-configuration%7D%7Bhttps://swiftnav.freshdesk.com/support/solutions/articles/44001907898-rtk-heading-gnss-compass-configuration). - -## Wireless Motion Stop - -Please refer to the hardware user manual of the motion stop device for proper -usage. A trained operator should be used to supervise navigation of the -UGV under autonomous control at all times. The Operator should be -familiar with the use of the wireless motion stop device. +--- +title: "Appendix B: CPR Hardware" +sidebar_label: "Appendix B: CPR Hardware" +sidebar_position: 13 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +When using a Clearpath Robotics UGV and Base Station, the following +hardware setup may be required. + +## Calibrating the IMU + +Although IMU magnetometers are calibrated at the factory to remove any +internal magnetic influences in the device, measurements are still +subject to influence from external magnetic anomalies when the sensor is +installed. These anomalies are divided into two classes: hard iron +offsets and soft iron distortions. Hard iron offsets are created by +objects that produce a magnetic field. Soft iron distortions are +considered deflections or alterations in the existing magnetic field. +Ideally, these influences are mitigated by installing the sensor away +from magnetic sources, such as coils, magnets, and ferrous metal +structures and mounting hardware. However, often these sources are hard +to avoid or are hidden. To mitigate this effect when using the IMU +magnetometer to aid in heading estimations, a field calibration of the +magnetometer after final installation is highly recommended. This means +that the IMU must be calibrated in the same environment that you use +your UGV for autonomous navigation. + +### Microstrain IMU + +If your UGV has a 3DM-GX5-25 Microstrain IMU, the complete instruction +on calibration of your IMU can be found in section 5.4 of the +[datasheet](https://www.microstrain.com/sites/default/files/3dm-gx5-25_user_manual_8500-0012.pdf). +Note that you need a computer with Windows system and the LORD Sensing +MIP Hard and Soft Iron Calibration software installed which can be found +at the Microstrain website. + +### UM6/7 IMU + +If you are using UM6 or UM7 IMUs, you will need the magnetometer display +package which is located at the following address on your UGV: +`~/catkin_ws/Drivers/src/imu_tools/magnetometer_display`. + +Follow these steps to calibrate the IMU on your machine: + +1. Create a catkin workspace on your local machine and copy the package + `magnetometer_display` into your src folder. Build this package with + the `catkin_make` command. + +2. Perform the following command to make the calibration script + executable: + + ``` bash + $ sudo chmod +x calibration.py + ``` + +3. Connect the IMU to your computer and launch the driver. Or if you + are on the same network as your UGV, make your UGV the ROS master + and ensure that you can echo the IMU topic on your computer. + +4. Open the `magnetometer.launch` file in the `magnetometer_display` + package and change the sections shown in the figure below. + Specifically, set `use_mag_field` to true when the IMU is outputting + magnetometer measurements with a `sensor_msgs/MagneticField` + message, otherwise set to false. Microstrain is the only IMU which + uses the MagneticField message type. + +
+
+ +
Magnetometer calibration, general launch settings
+
+
+ +5. Launch the calibration using the following command: + + ``` bash + $ roslaunch magnetometer_display magnetometer.launch + ``` + +6. Move the IMU around to get good coverage. RViz will display + magnetometer points (red) and will plot current ellipsoid fit + (green) as shown in the figure below. + +
+
+ +
Magnetometer calibration, ellipsoid fit plot
+
+
+ +7. Ellipsoid fit parameters are displayed in terminal as shown in the + figure below. + +
+
+ +
Magnetometer calibration, ellipsoid fit + parameters
+
+
+ +8. Once there are enough red points on your fitted ellipsoid, enter the + above calibrations in the IMU driver launch file. Open the + `sensor.launch` file in the `cpr_gps_localization` package and go to + the UM7 (or UM6) section of the launch file. The figure below shows + this section for the UM7. + +
+
+ +
Magnetometer calibration, ellipsoid fit settings in launch file
+
+
+ + You should enter the parameters generated in the Ellipsoid fit step + as follows (to account for the NED to ENU transform the driver + applies): + + - Launch file X = Terminal Y + - Launch file Y = Terminal X + - Launch file Z = -Terminal Z + +## RTK Positioning GPS Setup + +:::note + +Please skip this section if your robot does not have RTK GPS. + +::: + +The following configuration is for establishing communications between +the Base Station and the UGV using TCP/IP for the purpose of +transmitting RTK corrections. Before starting this procedure, make sure +that you have installed the [SwiftNav +console](https://support.swiftnav.com/support/solutions/articles/44001903699-installing-swift-console). + +### Base Station GPS Configuration + +- Connect the Swift Navigation device to a computer via USB or the USB + to Serial Adapter cable. + +- Open Swift Console and connect to the device. + +- Set the following options in the **ethernet** section as shown in + the figure below. + + 1. ip_config_mode: `Static` + 2. ip_address: `192.168.131.30` + 3. netmask: `255.255.255.0` + +
+
+ +
Base Station Ethernet settings
+
+
+ +- Set the following options in the **tcp_server1** section as show in + the figure below. + + 1. mode: `SBP` + 2. port: `55556` + 3. enabled_sbp_messages: `72,74,117,65535` + +
+
+ +
Base Station TCP1 Server settings
+
+
+ +- Set the following options in the **solution** section as shown in + the figure below. + + 1. soln_freq: `10` + 2. correction_age_max: `30` + 3. output_every_n_obs: `10` + 4. dgnss_solution_mode: `Low Latency` + +
+
+ +
Base Station Solution settings
+
+
+ +- Next the Base Station has to be surveyed. There are two ways of + doing this which are explained in [RTK Survey Positioning](#base-station-survey). +- Click Save to Flash. +- Close Swift Console. +- Disconnect the device from the computer. + +### UGV Position GPS Configuration {#ugv-position-gps-config} + +- Connect the Swift Navigation device to a computer via USB or the USB + to Serial Adapter cable. + +- Open Swift Console and connect to the device. + +- Set the following options in the **ethernet** section as shown in + the figure below. + + 1. ip_config_mode: `Static` + 2. ip_address: `192.168.131.31` + 3. netmask: `255.255.255.0` + +
+
+ +
UGV GPS Ethernet settings
+
+
+ +- Set the following options in the **tcp_client0** section as show in + the figure below. + + 1. mode: `SBP` + 2. port: `192.168.131.30:55556` + 3. enabled_sbp_messages: `0` + +
+
+ +
UGV GPS TCP Client0 settings
+
+
+ +- Set the following options in the **solution** section as show in the + figure below. + + 1. soln_freq: `10` + 2. correction_age_max: `30` + 3. output_every_n_obs: `10` + 4. dgnss_solution_mode: `Low Latency` + +
+
+ +
UGV GPS Solution settings
+
+
+ +- Click Save to Flash. + +- Close Swift Console. + +- Disconnect the device from the computer. + +Once you have entered these settings. Connect your computer to the Wi-Fi +network of the Base Station. Also make sure that the UGC (which is +connected to the UGV GPS unit) is also connected to the Base Station +Wifi. The you should be able to verify connectivity across the devices. +To check the Base Station, complete the following steps. + +- Open Swift Console on you computer +- Select **TCP/IP** +- For IP Address enter `192.168.131.30` +- For IP Port enter `55555` +- Click **OK** +- Select the **Observations** tab +- In the **Remote** section you should see observation data from your + UGV. + +To check the UGV, complete the following steps. + +- Open Swift Console +- Select **TCP/IP** +- For IP Address enter `192.168.131.31` +- For IP Port enter `55555` +- Click **OK** +- Select the **Observations** tab +- In the **Remote** section you should see observation data from your + Base Station. + +Further information on [RTK setup](https://swiftnav.freshdesk.com/support/solutions/articles/44001904334-piksi-multi-gnss-rtk-position-with-stationary-base%7D%7Bhttps://swiftnav.freshdesk.com/support/solutions/articles/44001904334-piksi-multi-gnss-rtk-position-with-stationary-base) +is available from SwiftNav. + +## RTK Survey Positioning {#base-station-survey} + +:::note + +Please skip this section if your UGV does not have RTK GPS. + +::: + +:::warning + +Once you have surveyed the location of the Base Station, you **cannot** +relocate the Base Station throughout your tests. Otherwise, this step +has to be repeated. + +::: + +There are three ways to survey the Base Station location: + +1. OutdoorNav Web User Interface (easiest/accurate), +2. Swiftnav console autosurvey (fastest/least accurate), +3. ROS launch file geodetic survey (for debug output display). + +Using the OutdoorNav Web UI is the easiest and most accurate way to do +this since it runs the ROS geodetic survey tool which uses more samples +to compute the final position of the Base Station than the Swiftnav +console. Using the geodetic ROS survey launch file directly would allow +the user to visualize the output log directly but requires preliminary +knowledge in ROS. + +### Base Station Survey: Web UI + +Using the OutdoorNav Web UI to survey the Base Station is very simple. +See [Survey Base Station](getting_started/system_setup.mdx#survey_base_station) for details. + +### Base Station Survey: Piksi Console + +Use the Piksi console connect the base station GPS. Go to "Settings -\> +surveyed position", click to any field in this section and then click +the button on the top right corner "Auto Survey". The figure below +shows these steps. The last 1000 GPS points will be used to compute the +position of the Base Station. + +
+
+ +
Auto Survey
+
+
+ +After that, make sure the four fields in "surveyed position" +(broadcast, surveyed lat, surveyed lon, surveyed alt) are consistent +with your location. + +### Base Station Survey: ROS Geodetic Survey + +The `ethz_piksi_ros` repository should be installed in the UGV's +`catkin_ws`. To run the surveying process simply connect your PC to the +Base Station network, `ssh` into the UGV's computer and run the +following: + +``` bash +roslaunch {robot_name}_gps_navigation geodetic_survey.launch +``` + +where `robot_name` is either `jackal`, `husky`, or `warthog` depending +on your UGV. The surveying will begin and you will see a running tally +of the collected data. + +## RTK Heading Setup + +For the rest of this section, it is assumed that a third Swiftnav Duro +device is available with IP address of 192.168.131.32. Note that in +order to change the IP address of a Swiftnav Duro, you need to use the +Swiftnav console and connect to the device with the serial port. + +:::note + +The instructions in this section will overwrite some of the settings set +in [UGV Position GPS Configuration](#ugv-position-gps-config) on the +Position/Reference Duro receiver. This is normal since the configuration +in [UGV Position GPS Configuration](#ugv-position-gps-config) is for a UGV +with only the position Duro receiver. If the heading receiver is +connected as well, please continue with the instructions below. + +::: + +The two Swiftnav Duro GPS device on the UGV are connected via serial +cable. They are also both connected via Ethernet cable to the computer +on the UGV. For computing the heading, on Duro (the one on the rear with +IP address 192.168.131.31) operates only to provide GNSS Observations to +the other Duro that computes an RTK derived heading (the Duro on the +front with IP address 192.168.131.32). For the purposes of this +document, we will call the Duro/Piksi that operates to provide the raw +GNSS observations only the "Reference Receiver" and the Duro/Piksi +producing heading measurements the "Attitude Receiver." + +Use the Swiftnav console to connect to the Reference Receiver (with IP +address of 192.168.131.31) and insert the settings shown in the figure +below. + +
+
+ +
Reference Receiver settings
+
+
+ +Next, connect to the Attitude Receiver (with IP address of +192.168.131.32) and change the configuration as shown in the figure +below. + +
+
+ +
Attitude Receiver settings
+
+
+ +For further information please refer to [these instructions](https://swiftnav.freshdesk.com/support/solutions/articles/44001907898-rtk-heading-gnss-compass-configuration%7D%7Bhttps://swiftnav.freshdesk.com/support/solutions/articles/44001907898-rtk-heading-gnss-compass-configuration). + +## Wireless Motion Stop + +Please refer to the hardware user manual of the motion stop device for proper +usage. A trained operator should be used to supervise navigation of the +UGV under autonomous control at all times. The Operator should be +familiar with the use of the wireless motion stop device. diff --git a/outdoornav_user_manual_versioned_docs/version-0.10.0/customized_tuning/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.10.0/customized_tuning/_category_.json index 4c27a4d9..d38b7f55 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.10.0/customized_tuning/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.10.0/customized_tuning/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Appendix C: Tuning & Customization", - "position": 14 +{ + "label": "Appendix C: Tuning & Customization", + "position": 14 } \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.10.0/customized_tuning/sensor_customization.mdx b/outdoornav_user_manual_versioned_docs/version-0.10.0/customized_tuning/sensor_customization.mdx index 9d9f115a..f2cce53a 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.10.0/customized_tuning/sensor_customization.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.10.0/customized_tuning/sensor_customization.mdx @@ -1,9 +1,9 @@ ---- -title: "Sensor Customization" -sidebar_label: "Sensor Customization" -sidebar_position: 4 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -Information incoming in a future release. Please contact Clearpath customer support at \ to discuss any related issue. +--- +title: "Sensor Customization" +sidebar_label: "Sensor Customization" +sidebar_position: 4 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +Information incoming in a future release. Please contact Clearpath customer support at \ to discuss any related issue. diff --git a/outdoornav_user_manual_versioned_docs/version-0.10.0/customized_tuning/tuning_instructions/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.10.0/customized_tuning/tuning_instructions/_category_.json index d62e291a..4b3e7b59 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.10.0/customized_tuning/tuning_instructions/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.10.0/customized_tuning/tuning_instructions/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Tuning Instructions", - "position": 2 -} +{ + "label": "Tuning Instructions", + "position": 2 +} diff --git a/outdoornav_user_manual_versioned_docs/version-0.10.0/customized_tuning/tuning_instructions/ackermann_drive_dynamics.mdx b/outdoornav_user_manual_versioned_docs/version-0.10.0/customized_tuning/tuning_instructions/ackermann_drive_dynamics.mdx index 51639337..0125d8dd 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.10.0/customized_tuning/tuning_instructions/ackermann_drive_dynamics.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.10.0/customized_tuning/tuning_instructions/ackermann_drive_dynamics.mdx @@ -1,9 +1,9 @@ ---- -title: "Ackermann Drive" -sidebar_label: "Ackermann Drive" -sidebar_position: 4 -toc_min_heading_level: 2 -toc_max_heading_level: 2 ---- - -Information incoming in release 0.10.0. Please contact Clearpath customer support at support@clearpathrobotics.com to discuss any related issue. +--- +title: "Ackermann Drive" +sidebar_label: "Ackermann Drive" +sidebar_position: 4 +toc_min_heading_level: 2 +toc_max_heading_level: 2 +--- + +Information incoming in release 0.10.0. Please contact Clearpath customer support at support@clearpathrobotics.com to discuss any related issue. diff --git a/outdoornav_user_manual_versioned_docs/version-0.10.0/customized_tuning/tuning_instructions/footprint_tuning.mdx b/outdoornav_user_manual_versioned_docs/version-0.10.0/customized_tuning/tuning_instructions/footprint_tuning.mdx index 4b90f600..6b105ecb 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.10.0/customized_tuning/tuning_instructions/footprint_tuning.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.10.0/customized_tuning/tuning_instructions/footprint_tuning.mdx @@ -1,9 +1,9 @@ ---- -title: "Footprint Tuning" -sidebar_label: "Footprint Tuning" -sidebar_position: 5 -toc_min_heading_level: 2 -toc_max_heading_level: 2 ---- - -Information incoming in release 0.9.0. Please contact Clearpath customer support at \ to discuss any related issue. +--- +title: "Footprint Tuning" +sidebar_label: "Footprint Tuning" +sidebar_position: 5 +toc_min_heading_level: 2 +toc_max_heading_level: 2 +--- + +Information incoming in release 0.9.0. Please contact Clearpath customer support at \ to discuss any related issue. diff --git a/outdoornav_user_manual_versioned_docs/version-0.10.0/customized_tuning/tuning_overview.mdx b/outdoornav_user_manual_versioned_docs/version-0.10.0/customized_tuning/tuning_overview.mdx index 851df29b..77fbabeb 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.10.0/customized_tuning/tuning_overview.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.10.0/customized_tuning/tuning_overview.mdx @@ -1,25 +1,25 @@ ---- -title: "Tuning Overview" -sidebar_label: "Tuning Overview" -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -The scope of Appendix C is to provide information on how to tune the various components of -OutdoorNav. - -Instructions for tuning specific platform types can be found here: - -- [Differential Drive (Skid-Steer) Dynamics](tuning_instructions/differential_drive_dynamics.mdx) -- [Ackermann Drive Dynamics](tuning_instructions/ackermann_drive_dynamics.mdx) - - -Lists of parameters related to each component of the autonomy can be found here: - -- [Localization Parameters](tuning_parameters/localization_parameters.mdx) -- [Navigation Parameters](tuning_parameters/navigation_parameters.mdx) -- [Collision Avoidance Parameters](tuning_parameters/collision_avoidance_parameters.mdx) - -In future releases, we will describe how the user can [Customize their UI](user_interface_customization.mdx) +--- +title: "Tuning Overview" +sidebar_label: "Tuning Overview" +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +The scope of Appendix C is to provide information on how to tune the various components of +OutdoorNav. + +Instructions for tuning specific platform types can be found here: + +- [Differential Drive (Skid-Steer) Dynamics](tuning_instructions/differential_drive_dynamics.mdx) +- [Ackermann Drive Dynamics](tuning_instructions/ackermann_drive_dynamics.mdx) + + +Lists of parameters related to each component of the autonomy can be found here: + +- [Localization Parameters](tuning_parameters/localization_parameters.mdx) +- [Navigation Parameters](tuning_parameters/navigation_parameters.mdx) +- [Collision Avoidance Parameters](tuning_parameters/collision_avoidance_parameters.mdx) + +In future releases, we will describe how the user can [Customize their UI](user_interface_customization.mdx) as well as how to [Customize which Sensors](sensor_customization.mdx) are input into OutdoorNav. \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.10.0/customized_tuning/tuning_parameters/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.10.0/customized_tuning/tuning_parameters/_category_.json index fb6592a9..0e2dc60a 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.10.0/customized_tuning/tuning_parameters/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.10.0/customized_tuning/tuning_parameters/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Tuning Parameters", - "position": 3 -} +{ + "label": "Tuning Parameters", + "position": 3 +} diff --git a/outdoornav_user_manual_versioned_docs/version-0.10.0/customized_tuning/tuning_parameters/navigation_parameters.mdx b/outdoornav_user_manual_versioned_docs/version-0.10.0/customized_tuning/tuning_parameters/navigation_parameters.mdx index 8c986090..7cd7b144 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.10.0/customized_tuning/tuning_parameters/navigation_parameters.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.10.0/customized_tuning/tuning_parameters/navigation_parameters.mdx @@ -1,167 +1,167 @@ ---- -title: "Navigation Parameters" -sidebar_label: "Navigation Parameters" -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 3 ---- - -import versions from "@site/static/versions.js" - -## Controllers {#controllers} - -### Determine the file location of the parameter {#file_location} - -The parameters related to the controller, can be found here: - -``` bash -~/cpr_outdoornav_launch/onav_robots/params//navigation/controls_general.yaml -``` - -If they are not listed in the above file, it is because they are using the default values and are not being overwritten. - -### MPC Controller {#controller} - -#### MBF Plugins - -Currently we have implemented a Move-Base Flex controller plugin named: **OnavMbfMpcController** - -Two instances of this plugin are loaded at runtime by our navigation node (as seen in the table below). The parameters are equivalent for each instance of the plugin but the values of certain of these parameters are different. - -| Controller name | Description | -|-----------------|-------------| -| **`mpc_controller`** | The controller used during normal navigation and applies to tracking the paths generated between all the mission waypoints. | -| **`mpc_dock_controller`** | The controller used during docking and applies only to tracking the dock and undock paths. | - -#### MPC State Machine - -The MPC controller operates as a state machine that contains the following states: - -| MPC State | Description | Condition | -|-----------|-------------|-----------| -| **`DEFAULT`** | Standard tracking behavior. | Will revert to this state if none of the other state conditions are met. | -| **`GOAL`** | Tracking behavior as the UGV approaches the goal. | Will enter GOAL mode when the `goal_horizon_threshold` parameter distance to the goal has been reached.| -| **`PRECISE`** | State when more precision is required in the tracking. | At the start of the path, we begin in Precise mode to ensure that we have a good start to tracking.| -| **`RESCUE`** | State to rescue the tracker when the UGV is stuck. | Will enter RESCUE mode when UGV is appraching a condition that make it stuck.| -| **`HYSTERESIS`** | State when you the UGV requires compensation for tire flexion. | Will enter HYSTERESIS mode when the UGV detects that it will begin oscillating due to tire deformation. | -| **`CORNER`** | State when there is a curve or a corner ahead. | Will enter CORNER mode when the UGV approaches, within a `corner_lookahead` parameter distance, to a corner with at least `corner_detection_threshold` of a curvature.| - -#### Default State Parameters {#default_state_params} - -The following list defines the default parameters that the MPC controller uses. -For the most part, they apply to all states of the MPC controller. - -| Parameter | Description | Namespace | SI Units | -|-----------|-------------|-----------|:--------:| -| `vehicle_length` | The length (longitudinally) of the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | -| `mpc_horizon` | The prediction horizon of the MPC. | [/navigation/*<controller>*/path_tracker](#file_location) | **s** | -| `max_lookahead` | Maximum distance along the path we seek to follow. Affects how far we do collision checks as well as the maximum velocity of the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | -| `min_lookahead` | Minimum distance along the path we seek to follow. Affects how far we do collision checks as well as the maximum velocity of the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | -| `lookahead_smoother` | Factor between 0 and 1 that determines the smoothness of the change in lookahead distance: 0 means only maximum velocity is used to determine the horizon (can be jumpy but speeds up the UGV faster); 1 means only averaged planned velocity is used to determine the horizon (smoother but speeds up the UGV slowly). | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `lookahead_factor` | How aggressively do we want to increase the lookahead from min_lookahead to max_lookahead | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `mpc_opt_maxiteration` | The maximum number of iterations that the solver will run. Increase this value for better performance, decrease for shorter computation time. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `discretization_steps` | Number of grid points along the MPC prediction; Lower: less accuracy, but faster | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `max_fwd_velocity` | The maximum allowable linear velocity that the MPC controller can compute. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | -| `min_fwd_velocity` | The minimum allowable linear velocity, in any mode, that the MPC controller can compute. This can be used to overcome the different deadbands that different UGVs may have. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | -| `max_rev_velocity` | The maximum allowable reverse linear velocity (ie. positive value), in any mode, that the MPC controller can compute. By default this is set to the `max_fwd_velocity`, so only needed if your maximum linear reverse velocity is different than the forward linear velocity.| [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | -| `max_ang_velocity` | The maximum allowable angular velocity, in any mode, that the MPC controller can compute. This parameter bounds both positive and negative angular velocities. | [/navigation/*<controller>*/path_tracker](#file_location) | **rad/s** | -| `max_accel` | The maximum allowable linear acceleration, in normal navigation mode, that the MPC controller can compute. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s/s** | -| `max_decel` | The maximum allowable linear deceleration (ie. negative value), in any mode, that the MPC controller can compute. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s/s** | -| `max_ang_accel` | The maximum allowable angular acceleration, in any mode, that the MPC controller can compute. This parameter bounds both positive and negative angular accelerations. | [/navigation/*<controller>*/path_tracker](#file_location) | **rad/s/s** | -| `max_lateral_accel` | The maximum allowable lateral acceleration, in any mode, that the MPC controller can compute. This parameter bounds both positive and negative lateral accelerations. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s/s** | -| `stiction_compensator_fwd` | The minimum linear velocity for movement of the UGV. This should typically be the minimum linear velocity that the UGV requires for it to move. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | -| `stiction_compensator_yaw` | The minimum angular velocity for movement of the UGV. This should typically be the minimum angular velocity that the UGV requires for it to move. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | -| `x_weight` | Weight for state x in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `y_weight` | Weight for state y in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `yaw_weight` | Weight for state yaw in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `fwd_v_weight` | Weight for state ẋ (forward velocity) in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `yaw_d_weight` | Weight for state (yaw velocity) in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `fwd_a_weight` | Weight for state ẍ (forward acceleration) in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `yaw_a_weight` | Weight for state (yaw acceleration) in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `horizon_percent_change` | The percentage factor used when shortening the MPC horizon. This will affect how quickly we want to speed up after a curvature slowdown. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `error_slowdown_multiplier` | The amount by which to increase the MPC horizon based on the crosstrack and/or heading error. This should be greater than 1.0 since increasing the MPC horizon will decrease the maximum MPC velocity. ** Less than 1.0 will result in the opposite behaviour which is not the expected behaviour for this parameter. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `crosstrackerror_slowdown` | Threshold on the amount of crosstrack error, above which to a slowdown the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `headingerror_slowdown` | Threshold on the amount of heading error, above which to a slowdown the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `curvature_slowdown` | Threshold on the path curvature, above which to a slowdown the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `endpoint_multiplier` | Weight multiplier of the very last point along the local plan segment in MPC state: DEFAULT. This value ensures convergence/stability of the optimizer by mimicking the MPCs infinite horizon by applying a terminal cost. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `shrinking_horizon_min` | The minimum horizon that will be used in the computation. This value will prevent the horizon from dropping below this value during all the horizon adjustments. | [/navigation/*<controller>*/path_tracker](#file_location) | **s** | -| `crosstrack_tolerance` | The amount of lateral error that the controller will handle before stopping the UGV and replanning a new path. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | -| `reference_trajectory_factor` | A factor that will skew the path parameter. This value should be between 0 and 1. Values closer to 0.0 will skew the path param closer to the UGV, decreasing speed but increasing the accuracy of the path tracking, and vice versa as you approach 1.0. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | - -#### Goal State Parameters {#goal_state_params} - -The following parameters can be modified to tune the controller as it approaches -the goal point as well as its behavior around the goal point. - -| Parameter | Description | Namespace | SI Units | -|-----------|-------------|-----------|:--------:| -| `goal_horizon_threshold` | The distance from the goal point which the MPC state will switch into state: GOAL , and begin reducing the horizon accordingly. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | -| `goal_slowdown_multiplier` | The multiplier by which to increase the MPC horizon during the MPCs GOAL state in order to slow the UGV down from its top speed. This value should be greater than 1.0. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `max_speed_at_goal` | The maximum allowable speed at the goal point for the controller to stop and consider the goal complete. On OEM UGVs, this value should be increased. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | -| `x_weight_goal` | Weight for state x in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `y_weight_goal` | Weight for state y in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `yaw_weight_goal` | Weight for state yaw in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `fwd_v_weight_goal` | Weight for state ẋ (forward velocity) in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `yaw_d_weight_goal` | Weight for state (yaw velocity) in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `fwd_a_weight_goal` | Weight for state ẍ (forward acceleration) in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `yaw_a_weight_goal` | Weight for state (yaw acceleration) in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `endpoint_multiplier_goal` | Weight multiplier of the very last point along the local plan segment in MPC state: GOAL. This value ensures convergence/stability of the optimizer by mimicking the MPCs infinite horizon by applying a terminal cost. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `goal_tolerance_xy_rtk` | The (x, y) tolerance value (ie. radius) assigned to a goal, when RTK is enabled, in order to determine whether or not to consider the goal complete. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | -| `goal_tolerance_yaw_rtk` | The yaw tolerance value (ie. heading) assigned to a goal, when RTK is enabled, in order to determine whether or not to consider the goal complete. | [/navigation/*<controller>*/path_tracker](#file_location) | **rad** | -| `goal_tolerance_xy_nortk` | The (x, y) tolerance value (ie. radius) assigned to a goal, when RTK is disabled, in order to determine whether or not to consider the goal complete. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | -| `goal_tolerance_yaw_nortk` | The yaw tolerance value (ie. heading) assigned to a goal, when RTK is disabled, in order to determine whether or not to consider the goal complete. | [/navigation/*<controller>*/path_tracker](#file_location) | **rad** | - -#### Corner State Parameters {#corner_state_params} - -The following parameters can be modified to tune the behavior of the controller during and as it -as it approaches corners. - -| Parameter | Description | Namespace | SI Units | -|-----------|-------------|-----------|:--------:| -| `corner_segment_slowdown` | Flag to enable/disable the slowdown behaviour in MPC state: CORNER | [/navigation/*<controller>*/path_tracker](#file_location)| **bool** | -| `corner_lookahead` | The distance on the reference path from the UGVs current location, along which to determine if a corner is present. If a corner is present the MPC state will switch to CORNER state and begin reducing the horizon accordingly. | [/navigation/*<controller>*/path_tracker](#file_location)| **m** | -| `corner_detection_threshold` | Threshold on the path curvature, between the UGVs current location and the end of the corner_lookahead distance, above which to switch the MPC in state: CORNER, and begin reducing the horizon accordingly. | [/navigation/*<controller>*/path_tracker](#file_location)| **rad** | -| `corner_slowdown_multiplier` | The multiplier by which to increase the MPC horizon during the MPCs CORNER state in order to slow the UGV down from its top speed. This value should be greater than 1.0. | [/navigation/*<controller>*/path_tracker](#file_location)| **--** | -| `endpoint_multiplier_corner` | Weight multiplier of the very last point along the local plan segment in MPC state: CORNER. This value ensures convergence/stability of the optimizer by mimicking the MPCs infinite horizon by applying a terminal cost. | [/navigation/*<controller>*/path_tracker](#file_location)| **--** | - -#### OEM Specific Parameters {#oem_tuning_params} - -When tuning the controller on a third-party OEM UGV, there are several other considerations -that we will not have taken into account during the tuning of our UGVs. Below, we define -parameters that may be modified to tune the controller for your third-party OEM UGV. - -##### UGV Dynamics {#platform_dynamics_params} - -The following parameters can be used to modify the dynamics model that the contrller uses to -compute command velocities. - -| Parameter | Description | Namespace | SI Units | -|-----------|-------------|-----------|:--------:| -| `no_turn_on_spot_motion` | Flag to enable/disable turn on spot motion. By default, the MPC motion model is represented by a differential drive kinematics. This parameter will modify the MPC motion model to remove turn in place motions and bias the motion in the forward direction. | [/navigation/*<controller>*/path_tracker](#file_location) | - | -| `min_fwd_turn` | | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `pivot_point_offset_x` | The longitudinal offset that can be applied to the MPC model in order to account for a particular UGVs center of rotation | [/navigation/*<controller>*/path_tracker](#file_location) | - | -| `pivot_point_offset_y` | The lateral offset that can be applied to the MPC model in order to account for a particular UGVs center of rotation | [/navigation/*<controller>*/path_tracker](#file_location) | - | -| `min_fwd_turn` | | [/navigation/*<controller>*/path_tracker](#file_location) | **--**| - -##### Delay Compensation {#delay_compensation_params} - -The following parameters can be used to compensate for any delays that are present in the system. - -| Parameter | Description | Namespace | SI Units | -|-----------|-------------|-----------|:--------:| -| `enable_delay_compensation` | A boolean flag to enable/disable the delay compensation feature. The delay compensation feature is used to compensate for low-level dynamics delays that may be present in the UGV to be controlled. The user can apply an input controller delay and the feature will compute command velocities that compensate for such a delay. | [/navigation/*<controller>*/path_tracker](#file_location) | **bool** | -| `controller_delay` | The amount of controller delay that the delay compensation feature will attempt to compensate for, in ms. | [/navigation/*<controller>*/path_tracker](#file_location) | **ms** | - -##### Stop Distance {#stop_distance_params} - -The following parameters can be used to set a specific stop distance away from obstacles. - -| Parameter | Description | Namespace | SI Units | -|-----------|-------------|-----------|:--------:| -| `enable_stop_distance` | A flag to use enable/disable the stop distance feature. The stop distance feature forces the UGV to stop a specified distance in front of obstacles. | [/navigation/*<controller>*/path_tracker](#file_location) | **bool** | -| `obstacle_stop_distance` | The distance at which the UGV will stop in front of a detected obstacle. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | - - -## Path Planners {#path_planners} - -Information incoming in release 0.9. Please contact Clearpath customer support at \ to discuss the issue. +--- +title: "Navigation Parameters" +sidebar_label: "Navigation Parameters" +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 3 +--- + +import versions from "@site/static/versions.js" + +## Controllers {#controllers} + +### Determine the file location of the parameter {#file_location} + +The parameters related to the controller, can be found here: + +``` bash +~/cpr_outdoornav_launch/onav_robots/params//navigation/controls_general.yaml +``` + +If they are not listed in the above file, it is because they are using the default values and are not being overwritten. + +### MPC Controller {#controller} + +#### MBF Plugins + +Currently we have implemented a Move-Base Flex controller plugin named: **OnavMbfMpcController** + +Two instances of this plugin are loaded at runtime by our navigation node (as seen in the table below). The parameters are equivalent for each instance of the plugin but the values of certain of these parameters are different. + +| Controller name | Description | +|-----------------|-------------| +| **`mpc_controller`** | The controller used during normal navigation and applies to tracking the paths generated between all the mission waypoints. | +| **`mpc_dock_controller`** | The controller used during docking and applies only to tracking the dock and undock paths. | + +#### MPC State Machine + +The MPC controller operates as a state machine that contains the following states: + +| MPC State | Description | Condition | +|-----------|-------------|-----------| +| **`DEFAULT`** | Standard tracking behavior. | Will revert to this state if none of the other state conditions are met. | +| **`GOAL`** | Tracking behavior as the UGV approaches the goal. | Will enter GOAL mode when the `goal_horizon_threshold` parameter distance to the goal has been reached.| +| **`PRECISE`** | State when more precision is required in the tracking. | At the start of the path, we begin in Precise mode to ensure that we have a good start to tracking.| +| **`RESCUE`** | State to rescue the tracker when the UGV is stuck. | Will enter RESCUE mode when UGV is appraching a condition that make it stuck.| +| **`HYSTERESIS`** | State when you the UGV requires compensation for tire flexion. | Will enter HYSTERESIS mode when the UGV detects that it will begin oscillating due to tire deformation. | +| **`CORNER`** | State when there is a curve or a corner ahead. | Will enter CORNER mode when the UGV approaches, within a `corner_lookahead` parameter distance, to a corner with at least `corner_detection_threshold` of a curvature.| + +#### Default State Parameters {#default_state_params} + +The following list defines the default parameters that the MPC controller uses. +For the most part, they apply to all states of the MPC controller. + +| Parameter | Description | Namespace | SI Units | +|-----------|-------------|-----------|:--------:| +| `vehicle_length` | The length (longitudinally) of the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | +| `mpc_horizon` | The prediction horizon of the MPC. | [/navigation/*<controller>*/path_tracker](#file_location) | **s** | +| `max_lookahead` | Maximum distance along the path we seek to follow. Affects how far we do collision checks as well as the maximum velocity of the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | +| `min_lookahead` | Minimum distance along the path we seek to follow. Affects how far we do collision checks as well as the maximum velocity of the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | +| `lookahead_smoother` | Factor between 0 and 1 that determines the smoothness of the change in lookahead distance: 0 means only maximum velocity is used to determine the horizon (can be jumpy but speeds up the UGV faster); 1 means only averaged planned velocity is used to determine the horizon (smoother but speeds up the UGV slowly). | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `lookahead_factor` | How aggressively do we want to increase the lookahead from min_lookahead to max_lookahead | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `mpc_opt_maxiteration` | The maximum number of iterations that the solver will run. Increase this value for better performance, decrease for shorter computation time. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `discretization_steps` | Number of grid points along the MPC prediction; Lower: less accuracy, but faster | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `max_fwd_velocity` | The maximum allowable linear velocity that the MPC controller can compute. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | +| `min_fwd_velocity` | The minimum allowable linear velocity, in any mode, that the MPC controller can compute. This can be used to overcome the different deadbands that different UGVs may have. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | +| `max_rev_velocity` | The maximum allowable reverse linear velocity (ie. positive value), in any mode, that the MPC controller can compute. By default this is set to the `max_fwd_velocity`, so only needed if your maximum linear reverse velocity is different than the forward linear velocity.| [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | +| `max_ang_velocity` | The maximum allowable angular velocity, in any mode, that the MPC controller can compute. This parameter bounds both positive and negative angular velocities. | [/navigation/*<controller>*/path_tracker](#file_location) | **rad/s** | +| `max_accel` | The maximum allowable linear acceleration, in normal navigation mode, that the MPC controller can compute. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s/s** | +| `max_decel` | The maximum allowable linear deceleration (ie. negative value), in any mode, that the MPC controller can compute. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s/s** | +| `max_ang_accel` | The maximum allowable angular acceleration, in any mode, that the MPC controller can compute. This parameter bounds both positive and negative angular accelerations. | [/navigation/*<controller>*/path_tracker](#file_location) | **rad/s/s** | +| `max_lateral_accel` | The maximum allowable lateral acceleration, in any mode, that the MPC controller can compute. This parameter bounds both positive and negative lateral accelerations. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s/s** | +| `stiction_compensator_fwd` | The minimum linear velocity for movement of the UGV. This should typically be the minimum linear velocity that the UGV requires for it to move. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | +| `stiction_compensator_yaw` | The minimum angular velocity for movement of the UGV. This should typically be the minimum angular velocity that the UGV requires for it to move. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | +| `x_weight` | Weight for state x in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `y_weight` | Weight for state y in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `yaw_weight` | Weight for state yaw in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `fwd_v_weight` | Weight for state ẋ (forward velocity) in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `yaw_d_weight` | Weight for state (yaw velocity) in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `fwd_a_weight` | Weight for state ẍ (forward acceleration) in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `yaw_a_weight` | Weight for state (yaw acceleration) in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `horizon_percent_change` | The percentage factor used when shortening the MPC horizon. This will affect how quickly we want to speed up after a curvature slowdown. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `error_slowdown_multiplier` | The amount by which to increase the MPC horizon based on the crosstrack and/or heading error. This should be greater than 1.0 since increasing the MPC horizon will decrease the maximum MPC velocity. ** Less than 1.0 will result in the opposite behaviour which is not the expected behaviour for this parameter. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `crosstrackerror_slowdown` | Threshold on the amount of crosstrack error, above which to a slowdown the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `headingerror_slowdown` | Threshold on the amount of heading error, above which to a slowdown the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `curvature_slowdown` | Threshold on the path curvature, above which to a slowdown the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `endpoint_multiplier` | Weight multiplier of the very last point along the local plan segment in MPC state: DEFAULT. This value ensures convergence/stability of the optimizer by mimicking the MPCs infinite horizon by applying a terminal cost. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `shrinking_horizon_min` | The minimum horizon that will be used in the computation. This value will prevent the horizon from dropping below this value during all the horizon adjustments. | [/navigation/*<controller>*/path_tracker](#file_location) | **s** | +| `crosstrack_tolerance` | The amount of lateral error that the controller will handle before stopping the UGV and replanning a new path. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | +| `reference_trajectory_factor` | A factor that will skew the path parameter. This value should be between 0 and 1. Values closer to 0.0 will skew the path param closer to the UGV, decreasing speed but increasing the accuracy of the path tracking, and vice versa as you approach 1.0. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | + +#### Goal State Parameters {#goal_state_params} + +The following parameters can be modified to tune the controller as it approaches +the goal point as well as its behavior around the goal point. + +| Parameter | Description | Namespace | SI Units | +|-----------|-------------|-----------|:--------:| +| `goal_horizon_threshold` | The distance from the goal point which the MPC state will switch into state: GOAL , and begin reducing the horizon accordingly. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | +| `goal_slowdown_multiplier` | The multiplier by which to increase the MPC horizon during the MPCs GOAL state in order to slow the UGV down from its top speed. This value should be greater than 1.0. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `max_speed_at_goal` | The maximum allowable speed at the goal point for the controller to stop and consider the goal complete. On OEM UGVs, this value should be increased. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | +| `x_weight_goal` | Weight for state x in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `y_weight_goal` | Weight for state y in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `yaw_weight_goal` | Weight for state yaw in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `fwd_v_weight_goal` | Weight for state ẋ (forward velocity) in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `yaw_d_weight_goal` | Weight for state (yaw velocity) in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `fwd_a_weight_goal` | Weight for state ẍ (forward acceleration) in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `yaw_a_weight_goal` | Weight for state (yaw acceleration) in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `endpoint_multiplier_goal` | Weight multiplier of the very last point along the local plan segment in MPC state: GOAL. This value ensures convergence/stability of the optimizer by mimicking the MPCs infinite horizon by applying a terminal cost. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `goal_tolerance_xy_rtk` | The (x, y) tolerance value (ie. radius) assigned to a goal, when RTK is enabled, in order to determine whether or not to consider the goal complete. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | +| `goal_tolerance_yaw_rtk` | The yaw tolerance value (ie. heading) assigned to a goal, when RTK is enabled, in order to determine whether or not to consider the goal complete. | [/navigation/*<controller>*/path_tracker](#file_location) | **rad** | +| `goal_tolerance_xy_nortk` | The (x, y) tolerance value (ie. radius) assigned to a goal, when RTK is disabled, in order to determine whether or not to consider the goal complete. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | +| `goal_tolerance_yaw_nortk` | The yaw tolerance value (ie. heading) assigned to a goal, when RTK is disabled, in order to determine whether or not to consider the goal complete. | [/navigation/*<controller>*/path_tracker](#file_location) | **rad** | + +#### Corner State Parameters {#corner_state_params} + +The following parameters can be modified to tune the behavior of the controller during and as it +as it approaches corners. + +| Parameter | Description | Namespace | SI Units | +|-----------|-------------|-----------|:--------:| +| `corner_segment_slowdown` | Flag to enable/disable the slowdown behaviour in MPC state: CORNER | [/navigation/*<controller>*/path_tracker](#file_location)| **bool** | +| `corner_lookahead` | The distance on the reference path from the UGVs current location, along which to determine if a corner is present. If a corner is present the MPC state will switch to CORNER state and begin reducing the horizon accordingly. | [/navigation/*<controller>*/path_tracker](#file_location)| **m** | +| `corner_detection_threshold` | Threshold on the path curvature, between the UGVs current location and the end of the corner_lookahead distance, above which to switch the MPC in state: CORNER, and begin reducing the horizon accordingly. | [/navigation/*<controller>*/path_tracker](#file_location)| **rad** | +| `corner_slowdown_multiplier` | The multiplier by which to increase the MPC horizon during the MPCs CORNER state in order to slow the UGV down from its top speed. This value should be greater than 1.0. | [/navigation/*<controller>*/path_tracker](#file_location)| **--** | +| `endpoint_multiplier_corner` | Weight multiplier of the very last point along the local plan segment in MPC state: CORNER. This value ensures convergence/stability of the optimizer by mimicking the MPCs infinite horizon by applying a terminal cost. | [/navigation/*<controller>*/path_tracker](#file_location)| **--** | + +#### OEM Specific Parameters {#oem_tuning_params} + +When tuning the controller on a third-party OEM UGV, there are several other considerations +that we will not have taken into account during the tuning of our UGVs. Below, we define +parameters that may be modified to tune the controller for your third-party OEM UGV. + +##### UGV Dynamics {#platform_dynamics_params} + +The following parameters can be used to modify the dynamics model that the contrller uses to +compute command velocities. + +| Parameter | Description | Namespace | SI Units | +|-----------|-------------|-----------|:--------:| +| `no_turn_on_spot_motion` | Flag to enable/disable turn on spot motion. By default, the MPC motion model is represented by a differential drive kinematics. This parameter will modify the MPC motion model to remove turn in place motions and bias the motion in the forward direction. | [/navigation/*<controller>*/path_tracker](#file_location) | - | +| `min_fwd_turn` | | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `pivot_point_offset_x` | The longitudinal offset that can be applied to the MPC model in order to account for a particular UGVs center of rotation | [/navigation/*<controller>*/path_tracker](#file_location) | - | +| `pivot_point_offset_y` | The lateral offset that can be applied to the MPC model in order to account for a particular UGVs center of rotation | [/navigation/*<controller>*/path_tracker](#file_location) | - | +| `min_fwd_turn` | | [/navigation/*<controller>*/path_tracker](#file_location) | **--**| + +##### Delay Compensation {#delay_compensation_params} + +The following parameters can be used to compensate for any delays that are present in the system. + +| Parameter | Description | Namespace | SI Units | +|-----------|-------------|-----------|:--------:| +| `enable_delay_compensation` | A boolean flag to enable/disable the delay compensation feature. The delay compensation feature is used to compensate for low-level dynamics delays that may be present in the UGV to be controlled. The user can apply an input controller delay and the feature will compute command velocities that compensate for such a delay. | [/navigation/*<controller>*/path_tracker](#file_location) | **bool** | +| `controller_delay` | The amount of controller delay that the delay compensation feature will attempt to compensate for, in ms. | [/navigation/*<controller>*/path_tracker](#file_location) | **ms** | + +##### Stop Distance {#stop_distance_params} + +The following parameters can be used to set a specific stop distance away from obstacles. + +| Parameter | Description | Namespace | SI Units | +|-----------|-------------|-----------|:--------:| +| `enable_stop_distance` | A flag to use enable/disable the stop distance feature. The stop distance feature forces the UGV to stop a specified distance in front of obstacles. | [/navigation/*<controller>*/path_tracker](#file_location) | **bool** | +| `obstacle_stop_distance` | The distance at which the UGV will stop in front of a detected obstacle. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | + + +## Path Planners {#path_planners} + +Information incoming in release 0.9. Please contact Clearpath customer support at \ to discuss the issue. diff --git a/outdoornav_user_manual_versioned_docs/version-0.10.0/customized_tuning/user_interface_customization.mdx b/outdoornav_user_manual_versioned_docs/version-0.10.0/customized_tuning/user_interface_customization.mdx index c67bca22..1e7d39c9 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.10.0/customized_tuning/user_interface_customization.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.10.0/customized_tuning/user_interface_customization.mdx @@ -1,9 +1,9 @@ ---- -title: "UI Customization" -sidebar_label: "UI Customization" -sidebar_position: 4 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -Information incoming in a future release. Please contact Clearpath customer support at \ to discuss any related issue. +--- +title: "UI Customization" +sidebar_label: "UI Customization" +sidebar_position: 4 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +Information incoming in a future release. Please contact Clearpath customer support at \ to discuss any related issue. diff --git a/outdoornav_user_manual_versioned_docs/version-0.10.0/faq.mdx b/outdoornav_user_manual_versioned_docs/version-0.10.0/faq.mdx index 82d0a296..cbdd33dc 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.10.0/faq.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.10.0/faq.mdx @@ -1,194 +1,194 @@ ---- -title: Frequently Asked Questions -sidebar_label: Frequently Asked Questions -sidebar_position: 10 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -## General - -1. **How do I start, pause or stop a mission?** - - A mission can be started in a few different ways, i) through the web user interface (See [Mission Execution](./web_user_interface/ui_autonomous_mode.mdx#mission-execution)) or, - ii) through the ROS API (See [API Examples](./api/api_examples/api_examples.mdx)). - -2. **When I start a mission the UGV does not move. What could be the - problem?** - - There could be one of several reasons for why this is happening: - - 1. Check that none of the onboard Motion-Stop actuators are - activated. - 2. Check that none of the wireless Motion-Stops are engaged. This - can be checked via the UI (a red Status Indicator means - Motion-Stop is engaged) or the onboard UGV lights (will flash - when Motion-Stop is engaged). - 3. If OutdoorNav is running on a Clearpath Robotics Warthog UGV - that is programmed with a Futaba controller, then ensure that - the controller is turned off. If it is on then it will be - sending "no motion" commands that will be overriding the - autonomy commands. - 4. Check the task settings for each Waypoint in the Mission. - A missing task setting for a Move PTZ task will block the - execution of the Mission it is in. - -3. **What version of ROS is compatible with OutdoorNav?** - - Currently OutdoorNav is developed in ROS 1 (and is built in Docker containers on top of ROS 1 Noetic). - So, the recommended ROS version is ROS 1 Noetic. However, although not recommended, it is still - possible to use ROS 1 Melodic. Some issues may arise related to the mismatched message types. - Also, if trying to run any python scripts as Melodic targets Python2, whereas Noetic targets Python3. - - Finally, official ROS 2 compatibility is currently unsupported. In theory, if you only have ROS 2 installed - on your system, you can try to install ROS 1 Noetic as well and set up a ros1_to_ros2 bridge. Since the - OutdoorNav software is packaged in Dockers, it will communicate directly ROS 1 and then the data can be - redirected by the ros1_to_ros2 bridge to ROS 2. - -4. **How can I record ROS data?** - - There are two ways to record ROS data. The first is [through the UI](./features/rosbag_recorder.mdx) and the - second is the more traditional method of accessing the command line of the UGV's computer and running - [rosbag record commands](http://wiki.ros.org/rosbag/Commandline). - -5. **Where do all the video/audio/images get saved from the mission tasks?** - - All of the data that gets saved (ROSbags, video recordings, audio recordings, and saved images) get stored on - UGV's computer at the following location: `~/clearpath_files/...` - -## Autonomy - -1. **Am I able to send the UGV on a repeated loop?** - - When generating a single mission on the UI or through the API, it is not possible for the - mission to start at the location of the robot and end at the location of the robot. This has to do with - the navigation thinking that the UGV has already arrived at its goal and will not generate a path through - the Waypoints. However, it is possible to split the mission into two missions (ie. one to go to a - location and the second to return to the starting point). With these two missions you will then either be - able to send each mission one after the other or you can use the [Mission Scheduler](./features/mission_scheduler.mdx). - Add the two missions to the schedule and you will have the ability to also repeat this loop as many times as needed. - -2. **Why is surveying failing?** - - There are several checks that should be done: - - - Check that the base station is powered on, and that all the devices inside are powered on. - - From the UGV's computer, check that you can ping the base station. - -``` bash -ping 192.168.131.30 -``` - -  If all of these tests PASS, contact [Support](./support.mdx). - -3. **Is it possible to increase the maximum velocity of the UGV?** - - The OutdoorNav software has been tune for specific maximum velocities depending on the platform, - 1.2 m/s, 1.0 m/s and 2.0 m/s for Jackal, Husky and Warthog UGVs, respectively. The Husky maximum velocity - is 1.0 m/s so increasing above this is not possible however if you would like to increase the maximum - velocity for either the Jackal or the Warthog, further tuning may be required. Consult the - [tuning guide](./customized_tuning/tuning_instructions/differential_drive_dynamics.mdx) and contact - [Support](./support.mdx) if required. - -4. **My robot it detecting too many obstacles and replanning too frequently. How can I resolve this?** - - Please consult the [Limitations](./features/collision_avoidance.mdx#limitations) section of the collisison - avoidance feature. It will describe some limits to the obstaacle detection and can help you improve the - smoothness of the navigation. - -5. **I am getting a 'Robot too far off path warning'. What should I do?** - - These types of warnings appear on the UI under two conditions: - i) If the robot indicator (blue arrow on the UI) is not within 3.0 meters of the first Waypoint (the Green one on the UI). - ii) If the robot is outside of the allowable navigable space (defined by the path contraint, default: 3.0 meters around the reference path). - Enable the visualization of the [path contraint](./web_user_interface/ui_autonomous_mode.mdx#constrained_path) and Teleop the robot back into the - navigable space. - -6. **How can I remove certain sensors from the collision avoidance pipeline?** - - If your robot is equipped with collision avoidance sensors (eg. Velodyne, Hokuyo, Sick LMS), it is - possible to enable/disable the throughput of each sensor data into the collision avoidance pipeline. - Consult the [Collision Avoidance](./features/collision_avoidance.mdx) section for these instructions. - -7. **Can I use OutdoorNav without using the UI?** - - We empower customers to send mission via either the UI or our [ROS 1 API](./api/api_overview.mdx). Through this - API, you are enabled to write either CPP code or Python scripts where you would generate your mission, survey the base station, - set the datum, assign [custom tasks](./features/custom_tasks.mdx) to your mission. If using Python, we provide a set of libraries that - speed up the develpment process. See some of the [example codes](./api/api_examples/api_examples.mdx) for an idea of how to generate these scripts. - -## Web User Interface - -1. **How do I delete a waypoint on the UI?** - - Make sure the **Edit Missions** toggle is enabled, then click the - **Waypoint Mode** button. Now you can click the Waypoint you wish to - delete. A drop down list will appear. Select **Delete**. - -2. **How do I add a Task to a Waypoint on the UI?** - - See [Add Task to Waypoint](./web_user_interface/ui_autonomous_mode.mdx#add-task) for information on how - to add a Task to a Waypoint. - -3. **Why is the "Save Image" Task failing?** - - Check the Waypoints that have a **Save Image** task in the Waypoint panel. - If you see a red warning triangle beside the **Save Image** task it means - that the settings for this task were not properly set. Set them and rerun - the mission. - -4. **Are we able to make any changes to the UI?** - - Unfortunately, users are not currently enabled to make modifications to the user interface. - This feature will be available in a future release. Please direct any feature requests to [Support](./support.mdx). - -5. **What to do if my custom task is not working?** - - Ensure that you have followed the [Custom Tasks](./features/custom_tasks.mdx) instructions. When adding the - custom task to a Waypoint, it is important to double check that all the [fields](./web_user_interface/ui_autonomous_mode.mdx#add-task) - for your custom task are correct. - -6. **Why are either of the GNSS Status indicator (POS and/or DIR) on the UI not Green?** - - i) If the **POS** indicator is YELLOW, and you are using an RTK base station: - - Check communication between the robot and the base station by pinging 192.168.131.30 (from the UGV's computer) - - Re-survey the base station - - Access the [Swift Console](https://support.swiftnav.com/support/solutions/articles/44001391679-swift-console) using - the both the base station IP (192.168.131.30) and the position unit IP (192.168.131.31) and ensure that certain - settings are set correctly: - On the base station unit: - 1) surveyed_position/broadcast = True - tcp_server1/mode = SBP - tcp_server1/enabled sbp messages = 72,74,117,65535,114 - tcp_server1/address = 55556 - On the position unit: - 2) tcp_client0/mode = SBP - tcp_client0/enabled sbp messages = 0 - tcp_client0/address = 192.168.131.30:55556 - ii) If the **POS** indicator is RED: - - Check communication between the robot and the position GNSS unit by pinging 192.168.131.31 (from the UGV's computer) - - Access the [Swift Console](https://support.swiftnav.com/support/solutions/articles/44001391679-swift-console) using - the position unit IP (192.168.131.31) and ensure that the unit is working by checking that satellites are being - tracked in the "Tracking" tab. - - iii) If the **DIR** indicator is YELLOW, - - Access the [Swift Console](https://support.swiftnav.com/support/solutions/articles/44001391679-swift-console) using - the position unit IP (192.168.131.31) and the heading unit IP (192.168.131.32), and ensure that certain - settings are set correctly: - On the position unit: - 1) tcp_server1/mode = SBP - tcp_server1/enabled sbp messages = 74,117 - tcp_server1/address = 55556 - On the heading unit: - 2) tcp_client0/mode = SBP - tcp_client0/enabled sbp messages = 0 - tcp_client0/address = 192.168.131.31:55556 - solution/dgnss_solution_mode = Time Matched - solution/heading offset = 0 - solution/send heading = True - solution/soln freq = 5 - solution/output ever n obs = 1 - - iv) If the **DIR** indicator is RED: - - Check communication between the robot and the position GNSS unit by pinging 192.168.131.31 (from the UGV's computer) - +--- +title: Frequently Asked Questions +sidebar_label: Frequently Asked Questions +sidebar_position: 10 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +## General + +1. **How do I start, pause or stop a mission?** + + A mission can be started in a few different ways, i) through the web user interface (See [Mission Execution](./web_user_interface/ui_autonomous_mode.mdx#mission-execution)) or, + ii) through the ROS API (See [API Examples](./api/api_examples/api_examples.mdx)). + +2. **When I start a mission the UGV does not move. What could be the + problem?** + + There could be one of several reasons for why this is happening: + + 1. Check that none of the onboard Motion-Stop actuators are + activated. + 2. Check that none of the wireless Motion-Stops are engaged. This + can be checked via the UI (a red Status Indicator means + Motion-Stop is engaged) or the onboard UGV lights (will flash + when Motion-Stop is engaged). + 3. If OutdoorNav is running on a Clearpath Robotics Warthog UGV + that is programmed with a Futaba controller, then ensure that + the controller is turned off. If it is on then it will be + sending "no motion" commands that will be overriding the + autonomy commands. + 4. Check the task settings for each Waypoint in the Mission. + A missing task setting for a Move PTZ task will block the + execution of the Mission it is in. + +3. **What version of ROS is compatible with OutdoorNav?** + + Currently OutdoorNav is developed in ROS 1 (and is built in Docker containers on top of ROS 1 Noetic). + So, the recommended ROS version is ROS 1 Noetic. However, although not recommended, it is still + possible to use ROS 1 Melodic. Some issues may arise related to the mismatched message types. + Also, if trying to run any python scripts as Melodic targets Python2, whereas Noetic targets Python3. + + Finally, official ROS 2 compatibility is currently unsupported. In theory, if you only have ROS 2 installed + on your system, you can try to install ROS 1 Noetic as well and set up a ros1_to_ros2 bridge. Since the + OutdoorNav software is packaged in Dockers, it will communicate directly ROS 1 and then the data can be + redirected by the ros1_to_ros2 bridge to ROS 2. + +4. **How can I record ROS data?** + + There are two ways to record ROS data. The first is [through the UI](./features/rosbag_recorder.mdx) and the + second is the more traditional method of accessing the command line of the UGV's computer and running + [rosbag record commands](http://wiki.ros.org/rosbag/Commandline). + +5. **Where do all the video/audio/images get saved from the mission tasks?** + + All of the data that gets saved (ROSbags, video recordings, audio recordings, and saved images) get stored on + UGV's computer at the following location: `~/clearpath_files/...` + +## Autonomy + +1. **Am I able to send the UGV on a repeated loop?** + + When generating a single mission on the UI or through the API, it is not possible for the + mission to start at the location of the robot and end at the location of the robot. This has to do with + the navigation thinking that the UGV has already arrived at its goal and will not generate a path through + the Waypoints. However, it is possible to split the mission into two missions (ie. one to go to a + location and the second to return to the starting point). With these two missions you will then either be + able to send each mission one after the other or you can use the [Mission Scheduler](./features/mission_scheduler.mdx). + Add the two missions to the schedule and you will have the ability to also repeat this loop as many times as needed. + +2. **Why is surveying failing?** + + There are several checks that should be done: + + - Check that the base station is powered on, and that all the devices inside are powered on. + - From the UGV's computer, check that you can ping the base station. + +``` bash +ping 192.168.131.30 +``` + +  If all of these tests PASS, contact [Support](./support.mdx). + +3. **Is it possible to increase the maximum velocity of the UGV?** + + The OutdoorNav software has been tune for specific maximum velocities depending on the platform, + 1.2 m/s, 1.0 m/s and 2.0 m/s for Jackal, Husky and Warthog UGVs, respectively. The Husky maximum velocity + is 1.0 m/s so increasing above this is not possible however if you would like to increase the maximum + velocity for either the Jackal or the Warthog, further tuning may be required. Consult the + [tuning guide](./customized_tuning/tuning_instructions/differential_drive_dynamics.mdx) and contact + [Support](./support.mdx) if required. + +4. **My robot it detecting too many obstacles and replanning too frequently. How can I resolve this?** + + Please consult the [Limitations](./features/collision_avoidance.mdx#limitations) section of the collisison + avoidance feature. It will describe some limits to the obstaacle detection and can help you improve the + smoothness of the navigation. + +5. **I am getting a 'Robot too far off path warning'. What should I do?** + + These types of warnings appear on the UI under two conditions: + i) If the robot indicator (blue arrow on the UI) is not within 3.0 meters of the first Waypoint (the Green one on the UI). + ii) If the robot is outside of the allowable navigable space (defined by the path contraint, default: 3.0 meters around the reference path). + Enable the visualization of the [path contraint](./web_user_interface/ui_autonomous_mode.mdx#constrained_path) and Teleop the robot back into the + navigable space. + +6. **How can I remove certain sensors from the collision avoidance pipeline?** + + If your robot is equipped with collision avoidance sensors (eg. Velodyne, Hokuyo, Sick LMS), it is + possible to enable/disable the throughput of each sensor data into the collision avoidance pipeline. + Consult the [Collision Avoidance](./features/collision_avoidance.mdx) section for these instructions. + +7. **Can I use OutdoorNav without using the UI?** + + We empower customers to send mission via either the UI or our [ROS 1 API](./api/api_overview.mdx). Through this + API, you are enabled to write either CPP code or Python scripts where you would generate your mission, survey the base station, + set the datum, assign [custom tasks](./features/custom_tasks.mdx) to your mission. If using Python, we provide a set of libraries that + speed up the develpment process. See some of the [example codes](./api/api_examples/api_examples.mdx) for an idea of how to generate these scripts. + +## Web User Interface + +1. **How do I delete a waypoint on the UI?** + + Make sure the **Edit Missions** toggle is enabled, then click the + **Waypoint Mode** button. Now you can click the Waypoint you wish to + delete. A drop down list will appear. Select **Delete**. + +2. **How do I add a Task to a Waypoint on the UI?** + + See [Add Task to Waypoint](./web_user_interface/ui_autonomous_mode.mdx#add-task) for information on how + to add a Task to a Waypoint. + +3. **Why is the "Save Image" Task failing?** + + Check the Waypoints that have a **Save Image** task in the Waypoint panel. + If you see a red warning triangle beside the **Save Image** task it means + that the settings for this task were not properly set. Set them and rerun + the mission. + +4. **Are we able to make any changes to the UI?** + + Unfortunately, users are not currently enabled to make modifications to the user interface. + This feature will be available in a future release. Please direct any feature requests to [Support](./support.mdx). + +5. **What to do if my custom task is not working?** + + Ensure that you have followed the [Custom Tasks](./features/custom_tasks.mdx) instructions. When adding the + custom task to a Waypoint, it is important to double check that all the [fields](./web_user_interface/ui_autonomous_mode.mdx#add-task) + for your custom task are correct. + +6. **Why are either of the GNSS Status indicator (POS and/or DIR) on the UI not Green?** + + i) If the **POS** indicator is YELLOW, and you are using an RTK base station: + - Check communication between the robot and the base station by pinging 192.168.131.30 (from the UGV's computer) + - Re-survey the base station + - Access the [Swift Console](https://support.swiftnav.com/support/solutions/articles/44001391679-swift-console) using + the both the base station IP (192.168.131.30) and the position unit IP (192.168.131.31) and ensure that certain + settings are set correctly: + On the base station unit: + 1) surveyed_position/broadcast = True + tcp_server1/mode = SBP + tcp_server1/enabled sbp messages = 72,74,117,65535,114 + tcp_server1/address = 55556 + On the position unit: + 2) tcp_client0/mode = SBP + tcp_client0/enabled sbp messages = 0 + tcp_client0/address = 192.168.131.30:55556 + ii) If the **POS** indicator is RED: + - Check communication between the robot and the position GNSS unit by pinging 192.168.131.31 (from the UGV's computer) + - Access the [Swift Console](https://support.swiftnav.com/support/solutions/articles/44001391679-swift-console) using + the position unit IP (192.168.131.31) and ensure that the unit is working by checking that satellites are being + tracked in the "Tracking" tab. + + iii) If the **DIR** indicator is YELLOW, + - Access the [Swift Console](https://support.swiftnav.com/support/solutions/articles/44001391679-swift-console) using + the position unit IP (192.168.131.31) and the heading unit IP (192.168.131.32), and ensure that certain + settings are set correctly: + On the position unit: + 1) tcp_server1/mode = SBP + tcp_server1/enabled sbp messages = 74,117 + tcp_server1/address = 55556 + On the heading unit: + 2) tcp_client0/mode = SBP + tcp_client0/enabled sbp messages = 0 + tcp_client0/address = 192.168.131.31:55556 + solution/dgnss_solution_mode = Time Matched + solution/heading offset = 0 + solution/send heading = True + solution/soln freq = 5 + solution/output ever n obs = 1 + + iv) If the **DIR** indicator is RED: + - Check communication between the robot and the position GNSS unit by pinging 192.168.131.31 (from the UGV's computer) + diff --git a/outdoornav_user_manual_versioned_docs/version-0.10.0/features/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.10.0/features/_category_.json index 732c6cb7..3bf04f17 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.10.0/features/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.10.0/features/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "OutdoorNav Features", - "position": 8 -} +{ + "label": "OutdoorNav Features", + "position": 8 +} diff --git a/outdoornav_user_manual_versioned_docs/version-0.10.0/features/custom_tasks.mdx b/outdoornav_user_manual_versioned_docs/version-0.10.0/features/custom_tasks.mdx index 32c3115e..de2c855a 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.10.0/features/custom_tasks.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.10.0/features/custom_tasks.mdx @@ -1,203 +1,203 @@ ---- -title: Custom Tasks -sidebar_label: Custom Tasks -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -Users can create their custom tasks for their application following a specific template. When creating these tasks, the user should begin by creating a python file in the **~/cpr_outdoornav_launch/custom_tasks** directory. The file should be written following -the instructions provided below: - -1. Import the `custom_task_base` package. - -```python -#!/usr/bin/python3 - -from onav_tasks.custom_task_base import * -``` - -2. The user should then create a class name to replace `CustomTask` and initialize it with the -`CustomTaskBase`'s __init__ function and the action server name for the task. - -```python -class CustomTask(CustomTaskBase): - def __init__(self): - # The derived class must always call the super() and provide the action server name. - # This name will need to be unique among custom tasks and must match what is in the - # UI. - super().__init__("custom_task_name") -``` - -:::note - -The `CustomTaskBase` exposes a `SimpleActionServer` (see here -for further details) object as `_as`, a `UITaskFeedback` object as `_feedback` and a `UITaskResults` object as `_result` to be used as part of -the tasks functionality. - -::: - -3. The last requirement is that the `CustomTask` needs to have the `run_task(self, goal)` function be defined, -which takes in the UITaskGoal. - -```python - def run_task(self, goal): -``` - -:::note - -When running the task users may handle errors through the action servers `set_aborted()` function. When this function is called the entire mission -will be aborted. - -::: - -4. Restarting the UGV will trigger the system to load the custom task that was created, making it available for mission use. -If a custom task is not configured properly the custom task manager will ignore the task and proceed loading in the next task while logging an error with ROS. - - -## Sample Custom Tasks - -### Input Looper - -Below is a sample template file named "input_looper.py" which iterates throught the two data variables and publishes them to the feedback -topic. If neither of the variables have any data in them the task is aborted. - -```python -#!/usr/bin/python3 - -from onav_tasks.custom_task_base import * - -class InputLooperTask(CustomTaskBase): - def __init__(self): - # The derived class must always call the super() and provide the action server name. - # This name will need to be unique among custom tasks and must match what is in the - # UI. - super().__init__("input_looper") - - def run_task(self, goal): - if len(goal.strings) == 0 and len(goal.floats) == 0: - # Task and running mission will be aborted in this case - self._as.set_aborted() - return False - - # Loop through the strings and float values and publish them each to the /input_looper/feedback topic - for string in goal.strings: - self._feedback.state = string - self._as.publish_feedback(self._feedback) - - for num in goal.floats: - self._feedback.state = str(num) - self._as.publish_feedback(self._feedback) - - # Returning True or False will not currently impact the mission but will write the current state to the - # /task/result topic accordingly. - return True -``` - -### Record GNSS Data - -Below is a sample custom task file named "record_gnss.py" which outputs the current GNSS data to the console. - -```python -#!/usr/bin/python3 - -from onav_tasks.custom_task_base import * -from sensor_msgs.msg import NavSatFix -from threading import Lock -import rospy - -class RecorGNSSTask(CustomTaskBase): - def __init__(self): - super().__init__("record_gnss") - self._sub = rospy.Subscriber("/sensors/gps_0/fix", NavSatFix, self.gpsSubscriberCallback) - self.gps_lat = 0.0 - self.gps_lon = 0.0 - self._gps_coordinates_lock = Lock() - - def run_task(self, goal): - feedback = UITaskFeedback() - feedback.state = 'Recording GNSS lat/lon' - self._as.publish_feedback(feedback) - msg = "" - with self._gps_coordinates_lock: - msg = "ID: %f Name: %s Latitude: %f Longitude: %f" % ( - goal.floats[0], goal.strings[0], self.gps_lat, self.gps_lon) - rospy.loginfo(msg) - return True - - def gpsSubscriberCallback(self, msg): - with self._gps_coordinates_lock: - self.gps_lat = msg.latitude - self.gps_lon = msg.longitude -``` - - -### Move PTZ camera to a Lat/Lon - -Below is a more advanced custom task. The file is "move_ptz_lat_lon.py" which pans a PTZ camera to point to a specific lat/lon coordinate. - -```python -from onav_tasks.custom_task_base import * -import actionlib -from clearpath_localization_msgs.srv import * -from clearpath_navigation_msgs.msg import * -from nav_msgs.msg import Odometry -from ptz_action_server_msgs.msg import PtzAction -import ptz_action_server_msgs.msg -import math -from math import remainder, tau -import rospy -from sensor_msgs import * -from tf.transformations import euler_from_quaternion, quaternion_from_euler - - - -class MovePtzLatLon(CustomTaskBase): - def __init__(self): - super().__init__("move_ptz_lat_lon") - self.localization_subscriber_ = rospy.Subscriber("/localization/odom", Odometry, self.localizationCallback) - self.move_ptz_client_ = actionlib.SimpleActionClient('/sensors/camera_0/move_ptz', PtzAction) - self.service_ = rospy.ServiceProxy('/localization/lat_lon_to_xy', ConvertLatLonToCartesian) - self.current_pose = Odometry() - - def localizationCallback(self, odom_msg): - self.current_pose = odom_msg - - def run_task(self, goal): - if len(goal.strings) == 0 and len(goal.floats) == 0: - rospy.logwarn('Warning') - self._as.set_aborted() - return False - goal_latitude = goal.floats[0] - goal_longitude = goal.floats[1] - goal_zoom = goal.floats[2] - str2 = 'Received goal latitude: ' + str(goal_latitude) + ', goal longitude: ' + str(goal_longitude) + ', zoom: ' + str(goal_zoom) - feedback = UITaskFeedback() - feedback.state = 'Aiming camera at lat-lon (' + str(goal_latitude) + ', ' + str(goal_longitude)+')' - self._as.publish_feedback(feedback) - orientation_q = self.current_pose.pose.pose.orientation - orientation_list = [orientation_q.x, orientation_q.y, orientation_q.z, orientation_q.w] - (roll, pitch, yaw) = euler_from_quaternion (orientation_list) - - gps_msg = sensor_msgs.msg.NavSatFix() - gps_msg.latitude = goal_latitude - gps_msg.longitude = goal_longitude - goal_utm = self.service_(gps_msg) - - goal_x = goal_utm.pose.pose.position.x - goal_y = goal_utm.pose.pose.position.y - - goal_angle = math.atan2(goal_y - self.current_pose.pose.pose.position.y, goal_x - self.current_pose.pose.pose.position.x) - pan_angle = math.remainder(goal_angle - yaw, math.tau) - print(pan_angle) - - self.move_ptz_client_.wait_for_server() - goal = ptz_action_server_msgs.msg.PtzGoal() - goal.pan=pan_angle - goal.tilt=0 - goal.zoom=goal_zoom - self.move_ptz_client_.send_goal(goal) - self.move_ptz_client_.wait_for_result() - print(self.move_ptz_client_.get_result()) - return True -``` +--- +title: Custom Tasks +sidebar_label: Custom Tasks +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +Users can create their custom tasks for their application following a specific template. When creating these tasks, the user should begin by creating a python file in the **~/cpr_outdoornav_launch/custom_tasks** directory. The file should be written following +the instructions provided below: + +1. Import the `custom_task_base` package. + +```python +#!/usr/bin/python3 + +from onav_tasks.custom_task_base import * +``` + +2. The user should then create a class name to replace `CustomTask` and initialize it with the +`CustomTaskBase`'s __init__ function and the action server name for the task. + +```python +class CustomTask(CustomTaskBase): + def __init__(self): + # The derived class must always call the super() and provide the action server name. + # This name will need to be unique among custom tasks and must match what is in the + # UI. + super().__init__("custom_task_name") +``` + +:::note + +The `CustomTaskBase` exposes a `SimpleActionServer` (see here +for further details) object as `_as`, a `UITaskFeedback` object as `_feedback` and a `UITaskResults` object as `_result` to be used as part of +the tasks functionality. + +::: + +3. The last requirement is that the `CustomTask` needs to have the `run_task(self, goal)` function be defined, +which takes in the UITaskGoal. + +```python + def run_task(self, goal): +``` + +:::note + +When running the task users may handle errors through the action servers `set_aborted()` function. When this function is called the entire mission +will be aborted. + +::: + +4. Restarting the UGV will trigger the system to load the custom task that was created, making it available for mission use. +If a custom task is not configured properly the custom task manager will ignore the task and proceed loading in the next task while logging an error with ROS. + + +## Sample Custom Tasks + +### Input Looper + +Below is a sample template file named "input_looper.py" which iterates throught the two data variables and publishes them to the feedback +topic. If neither of the variables have any data in them the task is aborted. + +```python +#!/usr/bin/python3 + +from onav_tasks.custom_task_base import * + +class InputLooperTask(CustomTaskBase): + def __init__(self): + # The derived class must always call the super() and provide the action server name. + # This name will need to be unique among custom tasks and must match what is in the + # UI. + super().__init__("input_looper") + + def run_task(self, goal): + if len(goal.strings) == 0 and len(goal.floats) == 0: + # Task and running mission will be aborted in this case + self._as.set_aborted() + return False + + # Loop through the strings and float values and publish them each to the /input_looper/feedback topic + for string in goal.strings: + self._feedback.state = string + self._as.publish_feedback(self._feedback) + + for num in goal.floats: + self._feedback.state = str(num) + self._as.publish_feedback(self._feedback) + + # Returning True or False will not currently impact the mission but will write the current state to the + # /task/result topic accordingly. + return True +``` + +### Record GNSS Data + +Below is a sample custom task file named "record_gnss.py" which outputs the current GNSS data to the console. + +```python +#!/usr/bin/python3 + +from onav_tasks.custom_task_base import * +from sensor_msgs.msg import NavSatFix +from threading import Lock +import rospy + +class RecorGNSSTask(CustomTaskBase): + def __init__(self): + super().__init__("record_gnss") + self._sub = rospy.Subscriber("/sensors/gps_0/fix", NavSatFix, self.gpsSubscriberCallback) + self.gps_lat = 0.0 + self.gps_lon = 0.0 + self._gps_coordinates_lock = Lock() + + def run_task(self, goal): + feedback = UITaskFeedback() + feedback.state = 'Recording GNSS lat/lon' + self._as.publish_feedback(feedback) + msg = "" + with self._gps_coordinates_lock: + msg = "ID: %f Name: %s Latitude: %f Longitude: %f" % ( + goal.floats[0], goal.strings[0], self.gps_lat, self.gps_lon) + rospy.loginfo(msg) + return True + + def gpsSubscriberCallback(self, msg): + with self._gps_coordinates_lock: + self.gps_lat = msg.latitude + self.gps_lon = msg.longitude +``` + + +### Move PTZ camera to a Lat/Lon + +Below is a more advanced custom task. The file is "move_ptz_lat_lon.py" which pans a PTZ camera to point to a specific lat/lon coordinate. + +```python +from onav_tasks.custom_task_base import * +import actionlib +from clearpath_localization_msgs.srv import * +from clearpath_navigation_msgs.msg import * +from nav_msgs.msg import Odometry +from ptz_action_server_msgs.msg import PtzAction +import ptz_action_server_msgs.msg +import math +from math import remainder, tau +import rospy +from sensor_msgs import * +from tf.transformations import euler_from_quaternion, quaternion_from_euler + + + +class MovePtzLatLon(CustomTaskBase): + def __init__(self): + super().__init__("move_ptz_lat_lon") + self.localization_subscriber_ = rospy.Subscriber("/localization/odom", Odometry, self.localizationCallback) + self.move_ptz_client_ = actionlib.SimpleActionClient('/sensors/camera_0/move_ptz', PtzAction) + self.service_ = rospy.ServiceProxy('/localization/lat_lon_to_xy', ConvertLatLonToCartesian) + self.current_pose = Odometry() + + def localizationCallback(self, odom_msg): + self.current_pose = odom_msg + + def run_task(self, goal): + if len(goal.strings) == 0 and len(goal.floats) == 0: + rospy.logwarn('Warning') + self._as.set_aborted() + return False + goal_latitude = goal.floats[0] + goal_longitude = goal.floats[1] + goal_zoom = goal.floats[2] + str2 = 'Received goal latitude: ' + str(goal_latitude) + ', goal longitude: ' + str(goal_longitude) + ', zoom: ' + str(goal_zoom) + feedback = UITaskFeedback() + feedback.state = 'Aiming camera at lat-lon (' + str(goal_latitude) + ', ' + str(goal_longitude)+')' + self._as.publish_feedback(feedback) + orientation_q = self.current_pose.pose.pose.orientation + orientation_list = [orientation_q.x, orientation_q.y, orientation_q.z, orientation_q.w] + (roll, pitch, yaw) = euler_from_quaternion (orientation_list) + + gps_msg = sensor_msgs.msg.NavSatFix() + gps_msg.latitude = goal_latitude + gps_msg.longitude = goal_longitude + goal_utm = self.service_(gps_msg) + + goal_x = goal_utm.pose.pose.position.x + goal_y = goal_utm.pose.pose.position.y + + goal_angle = math.atan2(goal_y - self.current_pose.pose.pose.position.y, goal_x - self.current_pose.pose.pose.position.x) + pan_angle = math.remainder(goal_angle - yaw, math.tau) + print(pan_angle) + + self.move_ptz_client_.wait_for_server() + goal = ptz_action_server_msgs.msg.PtzGoal() + goal.pan=pan_angle + goal.tilt=0 + goal.zoom=goal_zoom + self.move_ptz_client_.send_goal(goal) + self.move_ptz_client_.wait_for_result() + print(self.move_ptz_client_.get_result()) + return True +``` diff --git a/outdoornav_user_manual_versioned_docs/version-0.10.0/features/mission_scheduler.mdx b/outdoornav_user_manual_versioned_docs/version-0.10.0/features/mission_scheduler.mdx index 95c87061..0afdfcaf 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.10.0/features/mission_scheduler.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.10.0/features/mission_scheduler.mdx @@ -1,43 +1,43 @@ ---- -title: Mission Scheduler -sidebar_label: Mission Scheduler -sidebar_position: 4 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -### Scheduling missions - -By selecting the "SCHEDULER" option from the upper left hand menu, the user can open the Mission Scheduler interface. This interface -allows users to schedule groups of missions to run at a later time. These schedules can be set to run only once or to be looped over a period of time. -For example, a user could create a schedule that will run 3 missions starting at 9 AM and run every hour 8 times. Once the last iteration is run, the -schedule will disable itself and can be re-enabled to run again later. The view itself can be found in the image below and is elaborated further afterwards. - -
-
- -
Mission Scheduler View
-
-
- -#### Adding/Updating a Schedule - -The user can either create a new schedule by filling in the appropriate fields or edit a schedule by selecting the pencil icon for that schedule -in the bottom table. The input fields are outlined as follows: - -- Name: The name of the schedule. -- Start Time: The browser's local time that the schedule will start. This is stored as UTC time on the robot. -- Enabled: Enables/Disables the schedule. When schedules are completed they will disable themselves. -- Missions: The list of missions that will run. The schedule will run the missions in the order that they are added. -- Schedule Mode: Sets the kind of schedule mode to be either "Run Once" or "Looped". If it is set to run once, the next 2 inputs will be disabled. -- Loops: The number of iterations the schedule should run for. If for example it is set to Loop 5 times then the schedule will run 5 times (instead of run once and then re-runs 5 times). -- Loop Interval: The amount of time between the start of successive loop iterations. This is independent of the mission duration. -- Minimum Battery Charge: The minimum battery percentage that the UGV should be at to run the schedule. -- Timeout: The maximum amount of time to spend on running a single loop of the schedule. If a loop exceeds this timeout value the schedule is assumed to have failed and alerts the user - accordingly. This can be set to 0 to disable the timeout feature. - -#### Schedule Table - -Schedules found in the database are displayed in a simple table at the bottom of the screen. Schedules can be enabled, edited or deleted from this table through the -icons on the right hand side. The schedules can also be sorted by name or start time in ascending/descending order. The next schedule to run (if one is available) will have +--- +title: Mission Scheduler +sidebar_label: Mission Scheduler +sidebar_position: 4 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +### Scheduling missions + +By selecting the "SCHEDULER" option from the upper left hand menu, the user can open the Mission Scheduler interface. This interface +allows users to schedule groups of missions to run at a later time. These schedules can be set to run only once or to be looped over a period of time. +For example, a user could create a schedule that will run 3 missions starting at 9 AM and run every hour 8 times. Once the last iteration is run, the +schedule will disable itself and can be re-enabled to run again later. The view itself can be found in the image below and is elaborated further afterwards. + +
+
+ +
Mission Scheduler View
+
+
+ +#### Adding/Updating a Schedule + +The user can either create a new schedule by filling in the appropriate fields or edit a schedule by selecting the pencil icon for that schedule +in the bottom table. The input fields are outlined as follows: + +- Name: The name of the schedule. +- Start Time: The browser's local time that the schedule will start. This is stored as UTC time on the robot. +- Enabled: Enables/Disables the schedule. When schedules are completed they will disable themselves. +- Missions: The list of missions that will run. The schedule will run the missions in the order that they are added. +- Schedule Mode: Sets the kind of schedule mode to be either "Run Once" or "Looped". If it is set to run once, the next 2 inputs will be disabled. +- Loops: The number of iterations the schedule should run for. If for example it is set to Loop 5 times then the schedule will run 5 times (instead of run once and then re-runs 5 times). +- Loop Interval: The amount of time between the start of successive loop iterations. This is independent of the mission duration. +- Minimum Battery Charge: The minimum battery percentage that the UGV should be at to run the schedule. +- Timeout: The maximum amount of time to spend on running a single loop of the schedule. If a loop exceeds this timeout value the schedule is assumed to have failed and alerts the user + accordingly. This can be set to 0 to disable the timeout feature. + +#### Schedule Table + +Schedules found in the database are displayed in a simple table at the bottom of the screen. Schedules can be enabled, edited or deleted from this table through the +icons on the right hand side. The schedules can also be sorted by name or start time in ascending/descending order. The next schedule to run (if one is available) will have a small information icon next to it's name and will also be reported at the top of the screen. \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.10.0/features/navigation.mdx b/outdoornav_user_manual_versioned_docs/version-0.10.0/features/navigation.mdx index e4c0b864..a5548250 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.10.0/features/navigation.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.10.0/features/navigation.mdx @@ -1,38 +1,38 @@ ---- -title: Navigation Features -sidebar_label: Navigation Features -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -:::danger SAFETY WARNING - -Making changes to any of the following variables may decrease system safety. It is recommended that users -only modify these parameters in consultation with Clearpath Robotics Support. - -::: - -:::note - -Changes to any of the following variables will only take effect after power cycling the UGV. - -::: - -The OutdoorNav Software contains a set of features that can be enabled -or disabled according to your required application requirements. These -features can be enabled or disabled through the use of environment -variables, which should be added to the -`~/cpr_outdoornav_launch/env/autonomy_customization.env` file. The -following table describes the available features, their default state -and any additional parameters that we expose that may also be included -to tune the feature. - -| Feature | Description | -|-----------------------------|----------------------------------------| -| **Collision Avoidance** | Collision avoidance is the UGV's ability to detect obstacles and stop/maneuver around the obstacle without any collisions. If `true`, the UGV will detect obstacles and if `false` no obstacles will be detected. Setting to `false` is not recommended and may cause harm to property or to individuals.

Environment Variable: `ENABLE_COLLISION_AVOIDANCE` (Default: `true`). | -| **Constrained Planning** | The constrained replanning feature, which is always enabled, restricts the area in which the UGV can plan paths. For example, if the default `PATH_CONSTRAINT` of 3.0 m is used, the UGV will not be allowed to 1) produce paths that drives it more than 3.0 meters from the initial path, and 2) fail to compute paths if the UGV is further than 3.0 meters from the any of the Waypoints. This allowable planning/navigation area can be shown on the map over the connecting lines between Waypoints. See [Constrained Replanning](../web_user_interface/ui_autonomous_mode.mdx#constrained_path) for further details.

Use the `PATH_CONSTRAINT` environment variable to modify the path constraint (in meters). | -| **Path Smoothing** | Generate paths according to a specified turning radius.

Environment Variable: `ENABLE_DUBINS_PATH_SMOOTHER` (Default: `false`).

Use the `TURN_RADIUS` environment variable to modify the radius of the planned paths (in meters). | -| **Stop Distance** | The stop distance feature allows the UGV to stop a predefined distance away from obstacles. This is useful if a UGV cannot drive in reverse and needs the required room in front of it to replan around an obstacle.

Environment Variable: `ENABLE_STOP_DISTANCE` (Default: `false`)

Use the `STOP_DISTANCE` environment variable to modify the stop distance (in meters). Note that if the stop distance is larger than 4.5 meters for the Clearpath Robotics Jackal and Husky UGVs, or 10.0 meters for the Clearpath Robotics Warthog UGV, the computational load will increase and may cause a decrease in performance in the navigation. | -| **Delay Compensation** | The delay compensation feature is able to compensate for mechanical delay on UGVs where either the accelerator introduces delay into the linear velocity or the steering introduces delay in the angular velocity. This feature is not required for Clearpath Robotics UGVs as negligible delay is present in our system.

Environment Variable: `ENABLE_DELAY_COMPENSATION` (Default: `false`)

Use the `CONTROLLER_DELAY` environment variable to modify the amount of delay to be compensated (in milliseconds). | -| **Docking** | If purchased, autonomous docking will allow the user to autonomously dock/undock their UGV. If not purchased, enabling this environment variable will do nothing.

Environment Variable: `OUTDORRNAV_ENABLE_DOCKING` (Default: `false`).| +--- +title: Navigation Features +sidebar_label: Navigation Features +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +:::danger SAFETY WARNING + +Making changes to any of the following variables may decrease system safety. It is recommended that users +only modify these parameters in consultation with Clearpath Robotics Support. + +::: + +:::note + +Changes to any of the following variables will only take effect after power cycling the UGV. + +::: + +The OutdoorNav Software contains a set of features that can be enabled +or disabled according to your required application requirements. These +features can be enabled or disabled through the use of environment +variables, which should be added to the +`~/cpr_outdoornav_launch/env/autonomy_customization.env` file. The +following table describes the available features, their default state +and any additional parameters that we expose that may also be included +to tune the feature. + +| Feature | Description | +|-----------------------------|----------------------------------------| +| **Collision Avoidance** | Collision avoidance is the UGV's ability to detect obstacles and stop/maneuver around the obstacle without any collisions. If `true`, the UGV will detect obstacles and if `false` no obstacles will be detected. Setting to `false` is not recommended and may cause harm to property or to individuals.

Environment Variable: `ENABLE_COLLISION_AVOIDANCE` (Default: `true`). | +| **Constrained Planning** | The constrained replanning feature, which is always enabled, restricts the area in which the UGV can plan paths. For example, if the default `PATH_CONSTRAINT` of 3.0 m is used, the UGV will not be allowed to 1) produce paths that drives it more than 3.0 meters from the initial path, and 2) fail to compute paths if the UGV is further than 3.0 meters from the any of the Waypoints. This allowable planning/navigation area can be shown on the map over the connecting lines between Waypoints. See [Constrained Replanning](../web_user_interface/ui_autonomous_mode.mdx#constrained_path) for further details.

Use the `PATH_CONSTRAINT` environment variable to modify the path constraint (in meters). | +| **Path Smoothing** | Generate paths according to a specified turning radius.

Environment Variable: `ENABLE_DUBINS_PATH_SMOOTHER` (Default: `false`).

Use the `TURN_RADIUS` environment variable to modify the radius of the planned paths (in meters). | +| **Stop Distance** | The stop distance feature allows the UGV to stop a predefined distance away from obstacles. This is useful if a UGV cannot drive in reverse and needs the required room in front of it to replan around an obstacle.

Environment Variable: `ENABLE_STOP_DISTANCE` (Default: `false`)

Use the `STOP_DISTANCE` environment variable to modify the stop distance (in meters). Note that if the stop distance is larger than 4.5 meters for the Clearpath Robotics Jackal and Husky UGVs, or 10.0 meters for the Clearpath Robotics Warthog UGV, the computational load will increase and may cause a decrease in performance in the navigation. | +| **Delay Compensation** | The delay compensation feature is able to compensate for mechanical delay on UGVs where either the accelerator introduces delay into the linear velocity or the steering introduces delay in the angular velocity. This feature is not required for Clearpath Robotics UGVs as negligible delay is present in our system.

Environment Variable: `ENABLE_DELAY_COMPENSATION` (Default: `false`)

Use the `CONTROLLER_DELAY` environment variable to modify the amount of delay to be compensated (in milliseconds). | +| **Docking** | If purchased, autonomous docking will allow the user to autonomously dock/undock their UGV. If not purchased, enabling this environment variable will do nothing.

Environment Variable: `OUTDORRNAV_ENABLE_DOCKING` (Default: `false`).| diff --git a/outdoornav_user_manual_versioned_docs/version-0.10.0/features/rosbag_recorder.mdx b/outdoornav_user_manual_versioned_docs/version-0.10.0/features/rosbag_recorder.mdx index 503d94ae..f102726e 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.10.0/features/rosbag_recorder.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.10.0/features/rosbag_recorder.mdx @@ -1,34 +1,34 @@ ---- -title: ROSbag Recorder -sidebar_label: ROSbag Recorder -sidebar_position: 5 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -If you need to perform a quick rosbag recording from the UI you can do -so by navigating to the Settings dropdown in the upper left hand menu and -select **Start rosbag recording**. This will record a rosbag of the -following topics (or all the topics in the namespace if followed by a -`/*`): - -- '/rosout(.*)' -- '/twist_marker_server/(.*)' -- '/dock/(.*)' -- '/laser_target_tracker/(.*)' -- '/localization/(.*)' -- '/localization_core/(.*)' -- '/localization_helper/(.*)' -- '/mission/(.*)' -- '/navigation/(.*)' -- '/onboard_systems/(.*)' -- '/platform/(.*)' -- '/swiftnav/(.*)' -- '/sensors/gps(.*)' -- '/sensors/imu(.*)' -- '/target/(.*)' -- '/tf(.*)' - -To stop the recording navigate to the Settings drop down and select -**Stop rosbag recording**. This will save the rosbag with the date and -time as its file name in the `~/clearpath_files/rosbag_data` folder. +--- +title: ROSbag Recorder +sidebar_label: ROSbag Recorder +sidebar_position: 5 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +If you need to perform a quick rosbag recording from the UI you can do +so by navigating to the Settings dropdown in the upper left hand menu and +select **Start rosbag recording**. This will record a rosbag of the +following topics (or all the topics in the namespace if followed by a +`/*`): + +- '/rosout(.*)' +- '/twist_marker_server/(.*)' +- '/dock/(.*)' +- '/laser_target_tracker/(.*)' +- '/localization/(.*)' +- '/localization_core/(.*)' +- '/localization_helper/(.*)' +- '/mission/(.*)' +- '/navigation/(.*)' +- '/onboard_systems/(.*)' +- '/platform/(.*)' +- '/swiftnav/(.*)' +- '/sensors/gps(.*)' +- '/sensors/imu(.*)' +- '/target/(.*)' +- '/tf(.*)' + +To stop the recording navigate to the Settings drop down and select +**Stop rosbag recording**. This will save the rosbag with the date and +time as its file name in the `~/clearpath_files/rosbag_data` folder. diff --git a/outdoornav_user_manual_versioned_docs/version-0.10.0/getting_started/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.10.0/getting_started/_category_.json index 8b4a486d..9a9747ef 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.10.0/getting_started/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.10.0/getting_started/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Getting Started", - "position": 5 -} +{ + "label": "Getting Started", + "position": 5 +} diff --git a/outdoornav_user_manual_versioned_docs/version-0.10.0/getting_started/first_time_checklist.mdx b/outdoornav_user_manual_versioned_docs/version-0.10.0/getting_started/first_time_checklist.mdx index c4d9dece..d90e0c8e 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.10.0/getting_started/first_time_checklist.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.10.0/getting_started/first_time_checklist.mdx @@ -1,114 +1,114 @@ ---- -title: First Time Use Checklist -sidebar_label: First Time Use Checklist -sidebar_position: 2 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -## Hardware Setup - -### ☐ Has the Base Station been set up? - -Ensure that the Base Station has been set up approximately 5 meters -away from any buildings and is currently powered on. See -[System Startup](system_setup.mdx) for further -instructions related to setting up the Base Station. - -### ☐ Is the UGV connected to the Base Station? - -Check to see that the UGV can be pinged from the Base Station network. -See [Connecting to Web UI](system_setup.mdx#connecting_to_web_ui) for further -details. - -## Software Setup - -### ☐ Is ROS running on the UGV? - -SSH into the UGV and run `rostopic list` to generate a list of the -rostopics that are currently available. The list is generally fairly -long so if you are looking for any specific topic please refer to -[API Endpoints](../api/api_endpoints/api_endpoints.mdx). You can also check the -ROS status through the OutdoorNAV UI by referring to the diagnostics section -on the Status page. - -### ☐ Is the OutdoorNAV software running? - -Check to see if the relevant dockers are running (ssh into the UGV and -run `docker ps` which should show at least 5 separate docker containers -running). - -### ☐ Is the computer using the UI connected to the Base Station network? - -This can be confirmed by following the steps found in -[Connecting to Web UI](system_setup.mdx#connecting_to_web_ui). - -### ☐ Have you surveyed the Base Station? - -See [RTK Survey Positioning](../cpr_hardware.mdx#base-station-survey) for -information on how and when to survey the Base station. - -### ☐ Do you have a strong GPS signal? - -After surveying the Base Station check the upper right hand corner of -the UI to confirm that you have a strong GPS signal (the POS and DIR -icons should be green). If either of these icons are not green refer -to [Checking GPS RTK Fix](../cpr_hardware.mdx#base-station-survey) for further -troubleshooting information. - -### ☐ Is the map loading correctly? - -Currently the map requires internet access to load. Refer to -[Loading Map Tiles](system_setup.mdx#loading_map_tiles) for more details -related to setting up the map. - -### ☐ Has the Datum been set? - -See [Set Datum](system_setup.mdx#set-datum) for information on how -to set the Datum variables. - -### ☐ If docking is enabled has the location been set? - -If the Clearpath Robotics autonomous docking package was purchased the -docking location will need to be set. See -[Set Dock Location](system_setup.mdx#set-dock-location) for information on -how to set the docking location. - -### ☐ Is the Navbar status icon functioning? - -To check if the Navbar icon is functioning, trigger the UGV's motion stop -and check to see if it has turned to a red icon. Clicking the icon -will bring up the status information as well as any recent messages -(see below). - -![](/img/outdoornav_images/ugvStatusMessages.png) - -## Using the UI - -The following items are general checks to ensure that the UI is working -properly. - -### ☐ Can the virtual joystick drive the UGV? - -See [Web UI Manual Mode](../web_user_interface/ui_manual_mode.mdx) for further details -related to this. - -### ☐ Can you create a new mission? - -Select the mission list and then click on `Add Mission` to create a -new mission. To add new waypoints for the mission refer to -[Mission Creation](../web_user_interface/ui_autonomous_mode.mdx#mission-creation). - -### ☐ After creating a new mission, can you execute the mission? - -To execute a mission refer to [Mission Execution](../web_user_interface/ui_autonomous_mode.mdx#mission-execution). - -### ☐ Are the cameras (if present) active in the view bar section when running the mission? - -For more information related to camera views see -[Camera Views](../web_user_interface/ui_overview.mdx#camera-views). - -### ☐ Can you select a camera and save an image after it loads on the main screen? - -See [Pan-Tilt-Zoom (PTZ) View ](../web_user_interface/ui_overview.mdx#ptz-view) for more details related +--- +title: First Time Use Checklist +sidebar_label: First Time Use Checklist +sidebar_position: 2 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +## Hardware Setup + +### ☐ Has the Base Station been set up? + +Ensure that the Base Station has been set up approximately 5 meters +away from any buildings and is currently powered on. See +[System Startup](system_setup.mdx) for further +instructions related to setting up the Base Station. + +### ☐ Is the UGV connected to the Base Station? + +Check to see that the UGV can be pinged from the Base Station network. +See [Connecting to Web UI](system_setup.mdx#connecting_to_web_ui) for further +details. + +## Software Setup + +### ☐ Is ROS running on the UGV? + +SSH into the UGV and run `rostopic list` to generate a list of the +rostopics that are currently available. The list is generally fairly +long so if you are looking for any specific topic please refer to +[API Endpoints](../api/api_endpoints/api_endpoints.mdx). You can also check the +ROS status through the OutdoorNAV UI by referring to the diagnostics section +on the Status page. + +### ☐ Is the OutdoorNAV software running? + +Check to see if the relevant dockers are running (ssh into the UGV and +run `docker ps` which should show at least 5 separate docker containers +running). + +### ☐ Is the computer using the UI connected to the Base Station network? + +This can be confirmed by following the steps found in +[Connecting to Web UI](system_setup.mdx#connecting_to_web_ui). + +### ☐ Have you surveyed the Base Station? + +See [RTK Survey Positioning](../cpr_hardware.mdx#base-station-survey) for +information on how and when to survey the Base station. + +### ☐ Do you have a strong GPS signal? + +After surveying the Base Station check the upper right hand corner of +the UI to confirm that you have a strong GPS signal (the POS and DIR +icons should be green). If either of these icons are not green refer +to [Checking GPS RTK Fix](../cpr_hardware.mdx#base-station-survey) for further +troubleshooting information. + +### ☐ Is the map loading correctly? + +Currently the map requires internet access to load. Refer to +[Loading Map Tiles](system_setup.mdx#loading_map_tiles) for more details +related to setting up the map. + +### ☐ Has the Datum been set? + +See [Set Datum](system_setup.mdx#set-datum) for information on how +to set the Datum variables. + +### ☐ If docking is enabled has the location been set? + +If the Clearpath Robotics autonomous docking package was purchased the +docking location will need to be set. See +[Set Dock Location](system_setup.mdx#set-dock-location) for information on +how to set the docking location. + +### ☐ Is the Navbar status icon functioning? + +To check if the Navbar icon is functioning, trigger the UGV's motion stop +and check to see if it has turned to a red icon. Clicking the icon +will bring up the status information as well as any recent messages +(see below). + +![](/img/outdoornav_images/ugvStatusMessages.png) + +## Using the UI + +The following items are general checks to ensure that the UI is working +properly. + +### ☐ Can the virtual joystick drive the UGV? + +See [Web UI Manual Mode](../web_user_interface/ui_manual_mode.mdx) for further details +related to this. + +### ☐ Can you create a new mission? + +Select the mission list and then click on `Add Mission` to create a +new mission. To add new waypoints for the mission refer to +[Mission Creation](../web_user_interface/ui_autonomous_mode.mdx#mission-creation). + +### ☐ After creating a new mission, can you execute the mission? + +To execute a mission refer to [Mission Execution](../web_user_interface/ui_autonomous_mode.mdx#mission-execution). + +### ☐ Are the cameras (if present) active in the view bar section when running the mission? + +For more information related to camera views see +[Camera Views](../web_user_interface/ui_overview.mdx#camera-views). + +### ☐ Can you select a camera and save an image after it loads on the main screen? + +See [Pan-Tilt-Zoom (PTZ) View ](../web_user_interface/ui_overview.mdx#ptz-view) for more details related to saving images. \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.10.0/getting_started/system_setup.mdx b/outdoornav_user_manual_versioned_docs/version-0.10.0/getting_started/system_setup.mdx index e5062958..79397185 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.10.0/getting_started/system_setup.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.10.0/getting_started/system_setup.mdx @@ -1,236 +1,236 @@ ---- -title: System Setup -sidebar_label: System Setup -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -This section outlines how to set up your OutdoorNav system for some -preliminary testing with the OutdoorNav Software on a UGV. For details -on simulation, refer to [Simulation](../simulation.mdx). - -These instructions assume that the UGV is already powered ON. - - - -## Connecting to Web UI {#connecting_to_web_ui} - -The web server for the UI typically runs on a computer on the UGV. As -such, it is necessary for the networking setup on the UGV to be complete -and for all related hardware to be powered on. - -:::note - -In the case of Clearpath Robotics OutdoorNav Hardware, ensure that the -Base Station is powered ON. - -::: - -Follow the steps below to connect to the Web UI. - -1. Connect your computer to the same network as the UGV. - - :::note - - For Clearpath Robotics OutdoorNav Hardware, use the Base Station - network. Enter the network list and find the wireless network - related for your UGV. The SSID of the network is located in the - Robosmith manual that was shipped with your UGV. - - ::: - -2. Open an Internet browser (preferably Chrome) on your computer. - -3. Enter the UGV's IP address followed by a forward slash in the - search bar. A bookmark of this page can also be created for future - sessions. - - :::note - - For Clearpath Robotics OutdoorNav Hardware, this will be - **192.168.131.1/** for normal use cases and **192.168.131.5/** for - systems with a separate OutdoorNav computer (including the - OutdoorNav Starter Kit and the OutdoorNav Backpack. - - ::: - -The above steps will open the Web UI, which will allow the user to -operate the UGV in Manual Mode (teleoperation) or in Autonomous Mode -(missions). - -## Loading Map Tiles {#loading_map_tiles} - -The Web UI does not cache map tiles on the browser; therefore, the user -will need to ensure their computer has a connection to an Internet -source to load the map tiles. There are a several options to achieve -this: - -1. If the system includes a Base Station that is connected to the - Internet, you will be able to access the Internet and therefore map - tiles over the base station network without needing any further - updates. -2. Connect your phone via USB to your computer (or tablet) and enable - USB tethering on your phone to share the Internet from your phone. -3. Switch your computer (or tablet) to a network that is connected to - the Internet, zoom in/out of the map to load the tiles then switch - back to the original network. - -## Survey Base Station {#survey_base_station} - -If your system includes a Base Station, it must be surveyed using the -steps below to be able to to operate the UGV autonomously. - -1. Access the Menu → Settings → Map. -2. In the **Survey Base Station** section, click the **Start** button - begin the surveying process. - -During surveying, the Status Indicator will turn orange -and return to its green default state when surveying is -done . -Only then should the UGV be sent on autonomous missions. -The entire surveying will take approximately 5 minutes. A feedback bar -will also be displayed showing the current progress of the surveying. Do -not refresh the page or you will lose the feedback bar. - -:::warning - -For an accurate survey, do NOT move the Base Station during this -process. After the surveying has completed, the Base Station should not -be moved unless required. If you need to move the Base Station or it has -been moved accidentally, the surveying process needs to be run again. - -::: - -## Set Datum - -Before operating the UGV autonomously, the user will need to set the -datum, which is the reference point in the world coordinate frame. - -1. Access the Menu → Settings → Map. - -2. In the **Change Datum** section, enter the latitude and longitude of - a location close to the test site (within 10km). Decimal lat/lon are - expected. Use a minimum of 6 decimal places. - -3. Click **Set Datum** button to set the new datum. - - The user should see the blue dot (datum) and the blue arrow (UGV) - move to the test site. If the GPS status indicators are green, the - UGV should be at its correct position on the map as well as facing - in the correct direction. - -## Set Dock Location - -:::note - -If the Clearpath Robotics autonomous docking package has been purchased, -follow these instructions to set up the dock location. Otherwise, this -section can be skipped. - -::: - -:::warning - -Keep the area around the dock free of objects and people. There is no -obstacle detection between the pre-docking point and the dock; -similarly, there is no obstacle detection during the undocking -operation. - -::: - -
-
- -
Autocharge Dock
-
-
- -Before being able to dock the UGV autonomously, set up the dock -location. Follow these steps to position the UGV in its correct position -and orientation. - -1. Power ON the UGV and computer and wait for the system to finish - booting. For example, on the Clearpath Robotics Husky, booting is - complete when the COMM indicator turns green. - -2. Start by manually driving the UGV to the dock target and align it as - straight and centered as possible so that it begins charging. The - Wibotic receiver on the UGV should be centered longitudinally and - laterally with the circle on the Wibotic transmitter (TR-300). - -3. Let the UGV sit in this position for 2 minutes to acquire an RTK GPS - fix. The POS (position) and DIR (heading) GPS status indicators on - the UI should read as follows: . - - **If the GPS status indicators are yellow or red, the selected - location of the dock is NOT appropriate. Please change the dock - location such that the GPS antennas have a clearer visibility.** - -4. On the UI, access the drop down menu on the top-left of the page, - select **Settings** and click the **Add New Dock Location** button. The - dock location will be stored in 5 - 10 seconds as data is collected. - -If the Base Station has been moved (and therefore been resurveyed), or -if the dock has been moved to a new location, the user will need to -reset the location of the dock. This is done in the following manner: - -1. Repeat the previous set of instructions from step 1 to 4. - -2. While in **Edit Mode** select the dock on the UI. A drop down should appear - with the option to reset the dock location. Select that option. - -3. After approximately 5 - 10 seconds the dock location should be updated and the UI will - reflect the change accordingly. - -## Checking GPS RTK Fix {#checking-gpt-rtk-fix} - -Each time the UGV has been powered up (or moved from a GPS-denied -environment to a GPS-available environment), let the UGV sit in this -position for 2 minutes to acquire an RTK GPS fix. The POS (position) and -DIR (heading) GPS status indicators on the UI should be green: . - -**If the GPS status indicators are yellow or red, the selected location -does not have an adequate GPS signal. Move the UGV such that the GPS -antennas have a clearer visibility.** - -If using Switft Navigation Duros and/or a Clearpath Robotics Base -Station, each of these will have a solid blue LED on all of them when -the RTK GPS fix is acquired. - -## Recording a Rosbag - -See the [ROSbag Recorder](../features/rosbag_recorder.mdx) section for details on recording ROS data either. - -## Subsequent Sections - -The following sections of this manual will outline the instructions for -different tasks that can be accomplished while operating the UGV. - -1. **Web User Interface:** - - Overview of the Web UI components as well as the available views - and icons/buttons associated with them. - - - Overview of the buttons required to operate the UGV in Manual - Mode (teleoperation). - - - Instructions to send the UGV on autonomous navigation missions, - including: - - > - Adding Waypoints to the map - > - Creating missions - > - Viewing and updating missions - > - Adding task to missions, such as **Move PTZ** camera, - > **Save Image**, **Dock/Undock** UGV, **Wait**, etc.... - > - Start/Stop/Pause missions - - - Description of the docking procedures allowing the user to dock - and undock the UGV autonomously. Recovery instructions are also - described. -2. **Application Programming Interface:** Details on how to control the - UGV programmatically. -3. **OutdoorNav Features** Details on the features available as part of the - navigation software. -4. **Simulation:** Details on how to simulate autonomous operation of - the UGV. -5. **FAQs:** A list of frequently asked questions. +--- +title: System Setup +sidebar_label: System Setup +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +This section outlines how to set up your OutdoorNav system for some +preliminary testing with the OutdoorNav Software on a UGV. For details +on simulation, refer to [Simulation](../simulation.mdx). + +These instructions assume that the UGV is already powered ON. + + + +## Connecting to Web UI {#connecting_to_web_ui} + +The web server for the UI typically runs on a computer on the UGV. As +such, it is necessary for the networking setup on the UGV to be complete +and for all related hardware to be powered on. + +:::note + +In the case of Clearpath Robotics OutdoorNav Hardware, ensure that the +Base Station is powered ON. + +::: + +Follow the steps below to connect to the Web UI. + +1. Connect your computer to the same network as the UGV. + + :::note + + For Clearpath Robotics OutdoorNav Hardware, use the Base Station + network. Enter the network list and find the wireless network + related for your UGV. The SSID of the network is located in the + Robosmith manual that was shipped with your UGV. + + ::: + +2. Open an Internet browser (preferably Chrome) on your computer. + +3. Enter the UGV's IP address followed by a forward slash in the + search bar. A bookmark of this page can also be created for future + sessions. + + :::note + + For Clearpath Robotics OutdoorNav Hardware, this will be + **192.168.131.1/** for normal use cases and **192.168.131.5/** for + systems with a separate OutdoorNav computer (including the + OutdoorNav Starter Kit and the OutdoorNav Backpack. + + ::: + +The above steps will open the Web UI, which will allow the user to +operate the UGV in Manual Mode (teleoperation) or in Autonomous Mode +(missions). + +## Loading Map Tiles {#loading_map_tiles} + +The Web UI does not cache map tiles on the browser; therefore, the user +will need to ensure their computer has a connection to an Internet +source to load the map tiles. There are a several options to achieve +this: + +1. If the system includes a Base Station that is connected to the + Internet, you will be able to access the Internet and therefore map + tiles over the base station network without needing any further + updates. +2. Connect your phone via USB to your computer (or tablet) and enable + USB tethering on your phone to share the Internet from your phone. +3. Switch your computer (or tablet) to a network that is connected to + the Internet, zoom in/out of the map to load the tiles then switch + back to the original network. + +## Survey Base Station {#survey_base_station} + +If your system includes a Base Station, it must be surveyed using the +steps below to be able to to operate the UGV autonomously. + +1. Access the Menu → Settings → Map. +2. In the **Survey Base Station** section, click the **Start** button + begin the surveying process. + +During surveying, the Status Indicator will turn orange +and return to its green default state when surveying is +done . +Only then should the UGV be sent on autonomous missions. +The entire surveying will take approximately 5 minutes. A feedback bar +will also be displayed showing the current progress of the surveying. Do +not refresh the page or you will lose the feedback bar. + +:::warning + +For an accurate survey, do NOT move the Base Station during this +process. After the surveying has completed, the Base Station should not +be moved unless required. If you need to move the Base Station or it has +been moved accidentally, the surveying process needs to be run again. + +::: + +## Set Datum + +Before operating the UGV autonomously, the user will need to set the +datum, which is the reference point in the world coordinate frame. + +1. Access the Menu → Settings → Map. + +2. In the **Change Datum** section, enter the latitude and longitude of + a location close to the test site (within 10km). Decimal lat/lon are + expected. Use a minimum of 6 decimal places. + +3. Click **Set Datum** button to set the new datum. + + The user should see the blue dot (datum) and the blue arrow (UGV) + move to the test site. If the GPS status indicators are green, the + UGV should be at its correct position on the map as well as facing + in the correct direction. + +## Set Dock Location + +:::note + +If the Clearpath Robotics autonomous docking package has been purchased, +follow these instructions to set up the dock location. Otherwise, this +section can be skipped. + +::: + +:::warning + +Keep the area around the dock free of objects and people. There is no +obstacle detection between the pre-docking point and the dock; +similarly, there is no obstacle detection during the undocking +operation. + +::: + +
+
+ +
Autocharge Dock
+
+
+ +Before being able to dock the UGV autonomously, set up the dock +location. Follow these steps to position the UGV in its correct position +and orientation. + +1. Power ON the UGV and computer and wait for the system to finish + booting. For example, on the Clearpath Robotics Husky, booting is + complete when the COMM indicator turns green. + +2. Start by manually driving the UGV to the dock target and align it as + straight and centered as possible so that it begins charging. The + Wibotic receiver on the UGV should be centered longitudinally and + laterally with the circle on the Wibotic transmitter (TR-300). + +3. Let the UGV sit in this position for 2 minutes to acquire an RTK GPS + fix. The POS (position) and DIR (heading) GPS status indicators on + the UI should read as follows: . + + **If the GPS status indicators are yellow or red, the selected + location of the dock is NOT appropriate. Please change the dock + location such that the GPS antennas have a clearer visibility.** + +4. On the UI, access the drop down menu on the top-left of the page, + select **Settings** and click the **Add New Dock Location** button. The + dock location will be stored in 5 - 10 seconds as data is collected. + +If the Base Station has been moved (and therefore been resurveyed), or +if the dock has been moved to a new location, the user will need to +reset the location of the dock. This is done in the following manner: + +1. Repeat the previous set of instructions from step 1 to 4. + +2. While in **Edit Mode** select the dock on the UI. A drop down should appear + with the option to reset the dock location. Select that option. + +3. After approximately 5 - 10 seconds the dock location should be updated and the UI will + reflect the change accordingly. + +## Checking GPS RTK Fix {#checking-gpt-rtk-fix} + +Each time the UGV has been powered up (or moved from a GPS-denied +environment to a GPS-available environment), let the UGV sit in this +position for 2 minutes to acquire an RTK GPS fix. The POS (position) and +DIR (heading) GPS status indicators on the UI should be green: . + +**If the GPS status indicators are yellow or red, the selected location +does not have an adequate GPS signal. Move the UGV such that the GPS +antennas have a clearer visibility.** + +If using Switft Navigation Duros and/or a Clearpath Robotics Base +Station, each of these will have a solid blue LED on all of them when +the RTK GPS fix is acquired. + +## Recording a Rosbag + +See the [ROSbag Recorder](../features/rosbag_recorder.mdx) section for details on recording ROS data either. + +## Subsequent Sections + +The following sections of this manual will outline the instructions for +different tasks that can be accomplished while operating the UGV. + +1. **Web User Interface:** + - Overview of the Web UI components as well as the available views + and icons/buttons associated with them. + + - Overview of the buttons required to operate the UGV in Manual + Mode (teleoperation). + + - Instructions to send the UGV on autonomous navigation missions, + including: + + > - Adding Waypoints to the map + > - Creating missions + > - Viewing and updating missions + > - Adding task to missions, such as **Move PTZ** camera, + > **Save Image**, **Dock/Undock** UGV, **Wait**, etc.... + > - Start/Stop/Pause missions + + - Description of the docking procedures allowing the user to dock + and undock the UGV autonomously. Recovery instructions are also + described. +2. **Application Programming Interface:** Details on how to control the + UGV programmatically. +3. **OutdoorNav Features** Details on the features available as part of the + navigation software. +4. **Simulation:** Details on how to simulate autonomous operation of + the UGV. +5. **FAQs:** A list of frequently asked questions. diff --git a/outdoornav_user_manual_versioned_docs/version-0.10.0/getting_started/terminal_interface.mdx b/outdoornav_user_manual_versioned_docs/version-0.10.0/getting_started/terminal_interface.mdx index 43e9dedc..76de4f41 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.10.0/getting_started/terminal_interface.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.10.0/getting_started/terminal_interface.mdx @@ -1,141 +1,141 @@ ---- -title: Terminal Interface -sidebar_label: Terminal Interface -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -## Command Line Operation - -By default the OutdoorNav Software, including the Navigation component, -begins automatically when the system is powered on. This section -outlines the commands that can be used by developers who are debugging -the system or who want more precise control for managing the Navigation -component. - -### Connecting to the OutdoorNav Computer {#connecting-to-outdoornav-computer} - -To connect to your UGV, consult its corresponding user manual. - -If you are using a Clearpath Robotics UGV with a seperate OutdoorNav computer, -first `ssh` to the UGV using the details provided in the UGV user -manual. If you have a wired connection to the Clearpath Robotics UGV, -use the following command. If using wifi, you can replace the IP address -with the wifi-assigned IP address or the hostname of the UGV. - -``` bash -ssh administrator@192.168.131.1 -``` - -Then, connect to the OutdoorNav Computer: - -``` bash -ssh administrator@192.168.131.5 -``` - -### Starting the Navigation Software {#starting-outdoornav} - -Begin by connecting to the OutdoorNav Computer as outlined above. - -On UGV startup, all the sensors, the user interface, as well as the -Navigation software are set to start automatically through a Docker -container. You can check the Docker container's status by running -`docker ps` and checking for: - -- onav-web (Docker image containing the web interface) -- onav-web-ros (Docker image containing the ROS web bridge nodes) -- onav-sensors (Docker image that launches the ROS sensor drivers) -- onav-power (Docker image that launches the ROS nodes related to - the power system of the UGV) -- onav-autonomy (Docker image that launches the ROS nodes related - to the autonomy) - -The docker compose file located at `~/cpr_outdoornav_launch/docker-compose.yml` -provides the description for each the docker images that are being generated -on startup. In here, you can find that there are profiles set up as part of the -docker compose structure. They are: - -- ui: starts the onav-web and onav-web-ros containers -- sensors: starts the onav-sensors container -- power: starts the onav-power container -- autonomy: starts the onav-autonomy container -- outdoornav: starts all of the containers -- teleop: start only the ui and sensor related containers (no autonomy) - -If the Docker containers are not running, they can all be started with: - -``` bash -cd ~/cpr_outdoornav_launch/ # directory with docker-compose.yaml -docker compose --profile outdoornav up -d -``` - -### Stopping/Restarting all of OutdoorNav - -Each individual profile can also be brought down. For example to use the UGV without -the OutdoorNav software. The following command brings down OutdoorNav and is persistent -accross reboots/power cylces. - -``` bash -cd ~/cpr_outdoornav_launch/ # directory with docker-compose.yaml -docker compose --profile outdoornav down -``` - -If the OutdoorNav software has been brought down, it can be restarted by running: - -``` bash -cd ~/cpr_outdoornav_launch/ # directory with docker-compose.yaml -docker compose --profile outdoornav up -d -``` - -### Stopping/Restarting the Autonomy - -To use the UGV without the autonomy core of OutdoorNav, use these -commands to stop the nodes and prevent them from automatic startup: - -``` bash -cd ~/cpr_outdoornav_launch/ # directory with docker-compose.yaml -docker compose --profile autonomy down -``` - -The autonomy core can be restarted by running: - -``` bash -cd ~/cpr_outdoornav_launch/ # directory with docker-compose.yaml -docker compose --profile autonomy up -d -``` - -### Stopping/Restarting the Sensors - -To use the UGV without the sensors, use these commands to disable the -nodes and prevent them from automatic startup: - -``` bash -cd ~/cpr_outdoornav_launch/ # directory with docker-compose.yaml -docker compose --profile sensors down -``` - -::: note - -This command will only disable the drivers for the sensors that are started -by the OutdoorNv software. This includes the GNSS units, the Microstrain IMU, -and any LiDAR/Stereo detection sources (not limited to Velodyne LiDARs, Realsense -cameras, 2D Lidars) - -::: - -### Accessing the Navigation Software Logs - -To check the logs of the Navigation software: - -``` bash -cd ~/cpr_outdoornav_launch/ # The directory with docker-compose.yaml -docker compose logs -f -``` - -Optionally, specify the specific container you would like to view logs for: - -``` bash -cd ~/cpr_outdoornav_launch/ # The directory with docker-compose.yaml -docker compose logs -f onav-autonomy +--- +title: Terminal Interface +sidebar_label: Terminal Interface +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +## Command Line Operation + +By default the OutdoorNav Software, including the Navigation component, +begins automatically when the system is powered on. This section +outlines the commands that can be used by developers who are debugging +the system or who want more precise control for managing the Navigation +component. + +### Connecting to the OutdoorNav Computer {#connecting-to-outdoornav-computer} + +To connect to your UGV, consult its corresponding user manual. + +If you are using a Clearpath Robotics UGV with a seperate OutdoorNav computer, +first `ssh` to the UGV using the details provided in the UGV user +manual. If you have a wired connection to the Clearpath Robotics UGV, +use the following command. If using wifi, you can replace the IP address +with the wifi-assigned IP address or the hostname of the UGV. + +``` bash +ssh administrator@192.168.131.1 +``` + +Then, connect to the OutdoorNav Computer: + +``` bash +ssh administrator@192.168.131.5 +``` + +### Starting the Navigation Software {#starting-outdoornav} + +Begin by connecting to the OutdoorNav Computer as outlined above. + +On UGV startup, all the sensors, the user interface, as well as the +Navigation software are set to start automatically through a Docker +container. You can check the Docker container's status by running +`docker ps` and checking for: + +- onav-web (Docker image containing the web interface) +- onav-web-ros (Docker image containing the ROS web bridge nodes) +- onav-sensors (Docker image that launches the ROS sensor drivers) +- onav-power (Docker image that launches the ROS nodes related to + the power system of the UGV) +- onav-autonomy (Docker image that launches the ROS nodes related + to the autonomy) + +The docker compose file located at `~/cpr_outdoornav_launch/docker-compose.yml` +provides the description for each the docker images that are being generated +on startup. In here, you can find that there are profiles set up as part of the +docker compose structure. They are: + +- ui: starts the onav-web and onav-web-ros containers +- sensors: starts the onav-sensors container +- power: starts the onav-power container +- autonomy: starts the onav-autonomy container +- outdoornav: starts all of the containers +- teleop: start only the ui and sensor related containers (no autonomy) + +If the Docker containers are not running, they can all be started with: + +``` bash +cd ~/cpr_outdoornav_launch/ # directory with docker-compose.yaml +docker compose --profile outdoornav up -d +``` + +### Stopping/Restarting all of OutdoorNav + +Each individual profile can also be brought down. For example to use the UGV without +the OutdoorNav software. The following command brings down OutdoorNav and is persistent +accross reboots/power cylces. + +``` bash +cd ~/cpr_outdoornav_launch/ # directory with docker-compose.yaml +docker compose --profile outdoornav down +``` + +If the OutdoorNav software has been brought down, it can be restarted by running: + +``` bash +cd ~/cpr_outdoornav_launch/ # directory with docker-compose.yaml +docker compose --profile outdoornav up -d +``` + +### Stopping/Restarting the Autonomy + +To use the UGV without the autonomy core of OutdoorNav, use these +commands to stop the nodes and prevent them from automatic startup: + +``` bash +cd ~/cpr_outdoornav_launch/ # directory with docker-compose.yaml +docker compose --profile autonomy down +``` + +The autonomy core can be restarted by running: + +``` bash +cd ~/cpr_outdoornav_launch/ # directory with docker-compose.yaml +docker compose --profile autonomy up -d +``` + +### Stopping/Restarting the Sensors + +To use the UGV without the sensors, use these commands to disable the +nodes and prevent them from automatic startup: + +``` bash +cd ~/cpr_outdoornav_launch/ # directory with docker-compose.yaml +docker compose --profile sensors down +``` + +::: note + +This command will only disable the drivers for the sensors that are started +by the OutdoorNv software. This includes the GNSS units, the Microstrain IMU, +and any LiDAR/Stereo detection sources (not limited to Velodyne LiDARs, Realsense +cameras, 2D Lidars) + +::: + +### Accessing the Navigation Software Logs + +To check the logs of the Navigation software: + +``` bash +cd ~/cpr_outdoornav_launch/ # The directory with docker-compose.yaml +docker compose logs -f +``` + +Optionally, specify the specific container you would like to view logs for: + +``` bash +cd ~/cpr_outdoornav_launch/ # The directory with docker-compose.yaml +docker compose logs -f onav-autonomy ``` \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.10.0/getting_started/tf_validation.mdx b/outdoornav_user_manual_versioned_docs/version-0.10.0/getting_started/tf_validation.mdx index 72327dbc..ab05b15f 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.10.0/getting_started/tf_validation.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.10.0/getting_started/tf_validation.mdx @@ -1,80 +1,80 @@ ---- -title: TF Validation -sidebar_label: TF Validation -sidebar_position: 4 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -:::note - -Sensor transform (TF) validation should only be required if the performance -is noticeably poor, such as when the UGV drifts off of the planned path or -oscillations occur around the path). - -::: - -The coordinate transformation of the two GPS antennas, the IMU, the 2D -and 3D Lidars to the base_link of the UGV should have already been set -prior to receiving the UGV. However, ensure that they are set correctly. - -The ROS coordinate frame base_link, shown in the figure below, is -located at the center of the bottom plate of the UGV. The environment -variables below should be taken with respect to this coordinate frame. -The X axis is in red (and pointing towards the front of the UGV), Y in -green (pointing towards the left of the UGV) and Z in blue (pointing -towards the sky). - -You can check the current value of the environment variables by running -the following on the robot (host) computer (and setting \ -to the names listed in the table below). - -``` bash -printenv | grep -``` - -The environment variables for the position and orientation of each -sensor are provided in the table below. - -_OutdoorNav sensor position and orientation environment variables_ - -| Environment Variable | Function | -|----------------------|---------------------------------------| -| POSITION_GPS_XYZ | [X,Y,Z] position, in meters, of the position GNSS antenna with respect to the base_link coordinate frame. | -| POSITION_GPS_RPY | [Roll,Pitch,Yaw], in radians, of the position GNSS antenna with respect to the base_link coordinate frame. | -| HEADING_GPS_XYZ | [X,Y,Z] position, in meters, of the heading GNSS antenna with respect to the base_link coordinate frame. | -| HEADING_GPS_RPY | [Roll,Pitch,Yaw], in radians, of the heading GNSS antenna with respect to the base_link coordinate frame. | -| MICROSTRAIN_XYZ | [X,Y,Z] position, in meters, of the IMU with respect to the base_link coordinate frame. | -| MICROSTRAIN_RPY | [Roll,Pitch,Yaw], in radians, of the IMU with respect to the base_link coordinate frame. | -| VLP_XYZ | [X,Y,Z] position, in meters, of the 3D Lidar with respect to the base_link coordinate frame. | -| VLP_RPY | [Roll,Pitch,Yaw], in radians, of the 3D Lidar with respect to the base_link coordinate frame. | -| LMS1XX_XYZ | [X,Y,Z] position, in meters, of the 2D Lidar with respect to the base_link coordinate frame. | -| LMS1XX_RPY | [Roll,Pitch,Yaw], in radians, of the 2D Lidar with respect to the base_link coordinate frame. | -| HOKUYO_XYZ | [X,Y,Z] position, in meters, of the 2D Lidar with respect to the base_link coordinate frame. | -| HOKUYO_RPY | [Roll,Pitch,Yaw], in radians, of the 2D Lidar with respect to the base_link coordinate frame. | -| D435_XYZ | [X,Y,Z] position, in meters, of the 2D Lidar with respect to the base_link coordinate frame. | -| D435_RPY | [Roll,Pitch,Yaw], in radians, of the 2D Lidar with respect to the base_link coordinate frame. | - -There may also be 2 of each of these detection sensors. The corresponding environment -variable is prefixed with `REAR_`. - -:::note - -When the printed Y axis on the IMU is pointing towards the front of the -robot (i.e., aligned to X axis of base_link), MICROSTRAIN_RPY = [0, 0, 0]. - -::: - -:::warning - -If you decide to move any of these sensors, you must modify these -variables accordingly in the `/opt/onav/outdoornav_host_setup.sh` file (on the host). - -
-
- -
base_link coordinate frame
-
-
- -::: +--- +title: TF Validation +sidebar_label: TF Validation +sidebar_position: 4 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +:::note + +Sensor transform (TF) validation should only be required if the performance +is noticeably poor, such as when the UGV drifts off of the planned path or +oscillations occur around the path). + +::: + +The coordinate transformation of the two GPS antennas, the IMU, the 2D +and 3D Lidars to the base_link of the UGV should have already been set +prior to receiving the UGV. However, ensure that they are set correctly. + +The ROS coordinate frame base_link, shown in the figure below, is +located at the center of the bottom plate of the UGV. The environment +variables below should be taken with respect to this coordinate frame. +The X axis is in red (and pointing towards the front of the UGV), Y in +green (pointing towards the left of the UGV) and Z in blue (pointing +towards the sky). + +You can check the current value of the environment variables by running +the following on the robot (host) computer (and setting \ +to the names listed in the table below). + +``` bash +printenv | grep +``` + +The environment variables for the position and orientation of each +sensor are provided in the table below. + +_OutdoorNav sensor position and orientation environment variables_ + +| Environment Variable | Function | +|----------------------|---------------------------------------| +| POSITION_GPS_XYZ | [X,Y,Z] position, in meters, of the position GNSS antenna with respect to the base_link coordinate frame. | +| POSITION_GPS_RPY | [Roll,Pitch,Yaw], in radians, of the position GNSS antenna with respect to the base_link coordinate frame. | +| HEADING_GPS_XYZ | [X,Y,Z] position, in meters, of the heading GNSS antenna with respect to the base_link coordinate frame. | +| HEADING_GPS_RPY | [Roll,Pitch,Yaw], in radians, of the heading GNSS antenna with respect to the base_link coordinate frame. | +| MICROSTRAIN_XYZ | [X,Y,Z] position, in meters, of the IMU with respect to the base_link coordinate frame. | +| MICROSTRAIN_RPY | [Roll,Pitch,Yaw], in radians, of the IMU with respect to the base_link coordinate frame. | +| VLP_XYZ | [X,Y,Z] position, in meters, of the 3D Lidar with respect to the base_link coordinate frame. | +| VLP_RPY | [Roll,Pitch,Yaw], in radians, of the 3D Lidar with respect to the base_link coordinate frame. | +| LMS1XX_XYZ | [X,Y,Z] position, in meters, of the 2D Lidar with respect to the base_link coordinate frame. | +| LMS1XX_RPY | [Roll,Pitch,Yaw], in radians, of the 2D Lidar with respect to the base_link coordinate frame. | +| HOKUYO_XYZ | [X,Y,Z] position, in meters, of the 2D Lidar with respect to the base_link coordinate frame. | +| HOKUYO_RPY | [Roll,Pitch,Yaw], in radians, of the 2D Lidar with respect to the base_link coordinate frame. | +| D435_XYZ | [X,Y,Z] position, in meters, of the 2D Lidar with respect to the base_link coordinate frame. | +| D435_RPY | [Roll,Pitch,Yaw], in radians, of the 2D Lidar with respect to the base_link coordinate frame. | + +There may also be 2 of each of these detection sensors. The corresponding environment +variable is prefixed with `REAR_`. + +:::note + +When the printed Y axis on the IMU is pointing towards the front of the +robot (i.e., aligned to X axis of base_link), MICROSTRAIN_RPY = [0, 0, 0]. + +::: + +:::warning + +If you decide to move any of these sensors, you must modify these +variables accordingly in the `/opt/onav/outdoornav_host_setup.sh` file (on the host). + +
+
+ +
base_link coordinate frame
+
+
+ +::: diff --git a/outdoornav_user_manual_versioned_docs/version-0.10.0/index.mdx b/outdoornav_user_manual_versioned_docs/version-0.10.0/index.mdx index 09a63a7f..3d1655b9 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.10.0/index.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.10.0/index.mdx @@ -1,18 +1,18 @@ ---- -title: OutdoorNav User Manual -sidebar_label: OutdoorNav User Manual -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -
-
- -
-
- -OutdoorNav is an outdoor autonomy software platform designed for vehicle developers, -OEMs and robotics researchers. Compatible with Clearpath outdoor mobile platforms -and third-party vehicles, OutdoorNav provides reliable, industry-leading GPS-based +--- +title: OutdoorNav User Manual +sidebar_label: OutdoorNav User Manual +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +
+
+ +
+
+ +OutdoorNav is an outdoor autonomy software platform designed for vehicle developers, +OEMs and robotics researchers. Compatible with Clearpath outdoor mobile platforms +and third-party vehicles, OutdoorNav provides reliable, industry-leading GPS-based navigation for faster, more efficient autonomous vehicle development. \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.10.0/integration_requirements/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.10.0/integration_requirements/_category_.json index e9e0ff1d..adbe22cb 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.10.0/integration_requirements/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.10.0/integration_requirements/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Appendix A: UGV Integration Requirements", - "position": 12 +{ + "label": "Appendix A: UGV Integration Requirements", + "position": 12 } \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.10.0/integration_requirements/hardware_integration_requirements/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.10.0/integration_requirements/hardware_integration_requirements/_category_.json index 75ebaf1b..7950de6b 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.10.0/integration_requirements/hardware_integration_requirements/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.10.0/integration_requirements/hardware_integration_requirements/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Hardware Kit Installation", - "position": 2 -} +{ + "label": "Hardware Kit Installation", + "position": 2 +} diff --git a/outdoornav_user_manual_versioned_docs/version-0.10.0/integration_requirements/integration_overview.mdx b/outdoornav_user_manual_versioned_docs/version-0.10.0/integration_requirements/integration_overview.mdx index 00cf8a07..72d78ae3 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.10.0/integration_requirements/integration_overview.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.10.0/integration_requirements/integration_overview.mdx @@ -1,34 +1,34 @@ ---- -title: "Integration Overview" -sidebar_label: "Integration Overview" -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -The scope of work to transform a non-autonomous UGV into an autonomous -one will vary depending on the exact hardware capabilities and software -interfaces of the UGV. Development work will be required by Clearpath -Robotics, the end user, or a third party developer to bring the UGV into -compliance with the requirements listed in the table below. This may -involve implementing encoders and controllers to provide velocity -control of the UGV and implementing a CAN bus to ROS interface with -kinematic control. The table below provides a general outline of the -requirements; the detailed requirements are covered in the following -sections. - -_Navigation hardware and software general integration scope of work_ - -| \# | Task | Note | -|-----|----------------------------------|---------------------------------| -| 1 | **Convert UGV to drive by wire** | If required; can be a significant electromechanical integration | -| 1.1 | Implement actuated steering and throttle control if necessary | | -| 1.2 | Implement the encoder and controller hardware to provide wheel velocity control and odometry feedback | May require electronic power steering position feedback and controller | -| 2 | **Create a ROS interface** | | -| 2.1 | Commission an OutdoorNav computer running Ubuntu 20.04 and ROS Noetic | | -| 2.2 | Create a ROS interface to the UGV Often interfacing via CAN bus motor controllers and UGV controller | | -| 2.3 | Create a ROS driver including UGV kinematics with ROS-control | Accepts velocity input, commands motor controllers, provides other status feedback | -| 3 | **Install and configure OutdoorNav Hardware and Software** | | -| 3.1 | Install OutdoorNav computer and sensors on the UGV | Provide mechanical mounting, power and ethernet communication to UGV computer | -| 3.2 | Install, update and configure OutdoorNav Software on computer | Configure for sensor mounting locations, UGV kinematics and data topics. Can be done remotely with assistance from Clearpath Robotics Engineering. Approximately 1-2 days. | -| 3.3 | Tune the path planning and following controllers for new UGV | Can be done at a Clearpath Robotics facility. Can often be done at end user facility via remote login from Clearpath Robotics Engineering. Approximately 2-5 days. | +--- +title: "Integration Overview" +sidebar_label: "Integration Overview" +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +The scope of work to transform a non-autonomous UGV into an autonomous +one will vary depending on the exact hardware capabilities and software +interfaces of the UGV. Development work will be required by Clearpath +Robotics, the end user, or a third party developer to bring the UGV into +compliance with the requirements listed in the table below. This may +involve implementing encoders and controllers to provide velocity +control of the UGV and implementing a CAN bus to ROS interface with +kinematic control. The table below provides a general outline of the +requirements; the detailed requirements are covered in the following +sections. + +_Navigation hardware and software general integration scope of work_ + +| \# | Task | Note | +|-----|----------------------------------|---------------------------------| +| 1 | **Convert UGV to drive by wire** | If required; can be a significant electromechanical integration | +| 1.1 | Implement actuated steering and throttle control if necessary | | +| 1.2 | Implement the encoder and controller hardware to provide wheel velocity control and odometry feedback | May require electronic power steering position feedback and controller | +| 2 | **Create a ROS interface** | | +| 2.1 | Commission an OutdoorNav computer running Ubuntu 20.04 and ROS Noetic | | +| 2.2 | Create a ROS interface to the UGV Often interfacing via CAN bus motor controllers and UGV controller | | +| 2.3 | Create a ROS driver including UGV kinematics with ROS-control | Accepts velocity input, commands motor controllers, provides other status feedback | +| 3 | **Install and configure OutdoorNav Hardware and Software** | | +| 3.1 | Install OutdoorNav computer and sensors on the UGV | Provide mechanical mounting, power and ethernet communication to UGV computer | +| 3.2 | Install, update and configure OutdoorNav Software on computer | Configure for sensor mounting locations, UGV kinematics and data topics. Can be done remotely with assistance from Clearpath Robotics Engineering. Approximately 1-2 days. | +| 3.3 | Tune the path planning and following controllers for new UGV | Can be done at a Clearpath Robotics facility. Can often be done at end user facility via remote login from Clearpath Robotics Engineering. Approximately 2-5 days. | diff --git a/outdoornav_user_manual_versioned_docs/version-0.10.0/integration_requirements/interface_control_requirements.mdx b/outdoornav_user_manual_versioned_docs/version-0.10.0/integration_requirements/interface_control_requirements.mdx index a603485b..d9906ed6 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.10.0/integration_requirements/interface_control_requirements.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.10.0/integration_requirements/interface_control_requirements.mdx @@ -1,119 +1,119 @@ ---- -title: "ROS Interface Control Requirements" -sidebar_label: "ROS Interface Control Requirements" -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -## ROS Interface Control Checklist - -Prior to the installation and tuning of Clearpath Robotics (CPR) -OutdoorNav software on your platform (robot computer), CPR requires that the platform's -ROS interface satisfies the conditions listed below. Ensure that all of the requirements -are satisfied for a smooth installation and tuning process. - -![](/img/outdoornav_images/onav_interface_control.png) - -| | Requirement | -|------|------------------------------------------------------------------| -| | The platform computer is on the 192.168.131.xxx subnet (ideally in the range 1-4). | -| | The platform computer has an installation of [ROS 1 Noetic](http://wiki.ros.org/noetic/Installation). | -| | A URDF is supplied to CPR by the customer, in which the `base_link` coordinate frame is defined according to the [REP-105 base-link](https://www.ros.org/reps/rep-0105.html#base-link) ROS standard. | -| | The platform outputs [tf2_msgs/TFMessage](http://docs.ros.org/en/jade/api/tf2_msgs/html/msg/TFMessage.html) messages on the ROS standard `/tf` topic, at a minimum rate of **30 Hz**. | -| | The platform outputs a latched [tf2_msgs/TFMessage](http://docs.ros.org/en/jade/api/tf2_msgs/html/msg/TFMessage.html) message on the ROS standard `/tf_static` topic. This should include any fixed frames of ROS enabled devices/sensors that are available on your platform. | -| | The platform computer has a velocity controller that accepts, as input, [geometry_msgs/Twist](http://docs.ros.org/en/melodic/api/geometry_msgs/html/msg/Twist.html) messages on the ROS standard `/cmd_vel` topic, at a minimum rate of **10 Hz**. | -| | The platform computer has a velocity controller that tracks the input velocity and outputs the resulting platform velocity on the `/platform/cmd_vel` topic. | -| | The platform outputs [nav_msgs/Odometry](http://docs.ros.org/en/noetic/api/nav_msgs/html/msg/Odometry.html) messages on the `/platform/odom` topic, at a minimum rate of **10 Hz**. | -| | The `/platform/odom` topic publishes its data with the header.frame_id = `odom` and the child_frame_id = `base_link`, as per the [REP-105 odom](https://www.ros.org/reps/rep-0105.html#odom) ROS standard. **IMPORTANT**: The platform should however not broadcast the `odom` --> `base_link` transformation since the OutdoorNav software will do so. | -| | If available, the platform odometry output has less than ±5% linear position error. | -| | If available, the platform odometry output has less than ±5% orientation error. | -| | The platform outputs [std_msgs/Bool](http://docs.ros.org/en/noetic/api/std_msgs/html/msg/Bool.html) messages on the `/platform/emergency_stop` topic, at a minimum rate of **5 Hz**, indicating whether or not the platform is in a stopped state. | -| | Perform the validation tests described in [Interface Control Validation Test](#interface-control-validation) section and [record a rosbag](http://wiki.ros.org/rosbag/Commandline#rosbag_record) of all of your topics. The linear and angular velocities of the three trial runs recorded should be noted here:

Trial #1: Linear x: , Angular z:
Trial #2: Linear x: , Angular z:
Trial #3: Linear x: , Angular z:
| - -:::note - -Consult the [Platform API](../api/api_endpoints/platform_api.mdx#topics-published-by-platform) for -detailed information on the published/subscribed platform topics. - -::: - -If the platform is an Ackermann (or double Ackermann) drive vehicle: - -| | Requirement | -|------|------------------------------------------------------------------| -| | A conversion from [geometry_msgs/Twist](http://docs.ros.org/en/melodic/api/geometry_msgs/html/msg/Twist.html) messages to Ackermann inputs is provided. | - -:::note - -Ackermann drive platforms require both steering and throttle inputs to -drive the platform. It is required that our OutdoorNav output `/cmd_vel` -be converted into a message suitable to your platform. An example of an -Ackermann message type can be found -[here](http://wiki.ros.org/teb_local_planner/Tutorials/Planning%20for%20car-like%20robots). -This may satisfy your particular platform, and is only a starting point -on how to do this conversion. - -::: - -If the platform computer is running a version of ROS 2: - -| | Requirement | -|------|------------------------------------------------------------------| -| | The platform computer has a [ROS 2 to ROS 1 bridge](https://github.com/ros2/ros1_bridge) is installed to enable the exchange of messages between the two ROS versions. | - -Signature: Date: - -## Interface Control Validation Test {#interface-control-validation} - -The following test is designed to validate the platforms velocity -controller. It will be required that you command the robot to drive in -three circles, of varying radii, by applying the following command to -the platform. - -``` bash -rostopic pub -r 10 /cmd_vel geometry_msgs/Twist "linear: -x: ___ -y: 0.0 -z: 0.0 -angular: -x: 0.0 -y: 0.0 -z: ___" -``` - -The three trials that we request will vary between platforms depending -on the its maximum linear $(v_\{max\})$ and angular velocities -$(\omega_\{max\})$, minimum linear $(v_\{min\})$ and angular velocities -$(\omega_\{min\})$, as well as limitations due to the minimum allowable -turning radius $(r_\{min\})$. Of these three trials, we would like to see -data within three linear velocity bands, as seen in the table below, -resulting in three different turning radii. For the purpose of these -tests, the following formula can be used when determining the required -linear and angular velocities to apply: $r = v/\omega$. - -| Trial \# | Linear X Bands \[m/s\] | Example Linear X Band \[m/s\] | -| ---------|--------------------------------------------|-------------------------------------| -| 1 | $v_\{min\} \cdot [1.0, 1.5]$ | $[0.5, 0.75]$ | -| 2 | $((v_\{max\} - v_\{min\})/2) \cdot [0.9, 1.1]$ | $[2.025, 2.475]$ | -| 3 | $v_\{max\} \cdot [0.9, 1.0]$ | $[4.5, 5.0]$ | - -As an example, a platform with specs $v \in [0.5, 5.0]$, $r_\{min\} = 3$ -would have linear x velocity bands as listed in the table above. The -trials could then be as outlined in the table below. - -| Trial \# | Linear X \[m/s\] | Angular Z \[rad/s\] |Turn Radius \[m\] | -|-----------|--------------------|---------------------|------------------| -| 1 | 0.75 | 0.25 | 3 | -| 2 | 2.25 | 0.5 | 4.5 | -| 3 | 4.5 | 0.75 | 6 | - -Finally, the test data in the collected ROSbag should include the -following: - -1. `/tf` and `/tf_static` -2. `/platform/cmd_vel` -3. `/platform/odom` -4. `/cmd_vel` -5. `/platform/emergency_stop` (if available) -6. raw NavSatFix data from a GPS unit (if possible). +--- +title: "ROS Interface Control Requirements" +sidebar_label: "ROS Interface Control Requirements" +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +## ROS Interface Control Checklist + +Prior to the installation and tuning of Clearpath Robotics (CPR) +OutdoorNav software on your platform (robot computer), CPR requires that the platform's +ROS interface satisfies the conditions listed below. Ensure that all of the requirements +are satisfied for a smooth installation and tuning process. + +![](/img/outdoornav_images/onav_interface_control.png) + +| | Requirement | +|------|------------------------------------------------------------------| +| | The platform computer is on the 192.168.131.xxx subnet (ideally in the range 1-4). | +| | The platform computer has an installation of [ROS 1 Noetic](http://wiki.ros.org/noetic/Installation). | +| | A URDF is supplied to CPR by the customer, in which the `base_link` coordinate frame is defined according to the [REP-105 base-link](https://www.ros.org/reps/rep-0105.html#base-link) ROS standard. | +| | The platform outputs [tf2_msgs/TFMessage](http://docs.ros.org/en/jade/api/tf2_msgs/html/msg/TFMessage.html) messages on the ROS standard `/tf` topic, at a minimum rate of **30 Hz**. | +| | The platform outputs a latched [tf2_msgs/TFMessage](http://docs.ros.org/en/jade/api/tf2_msgs/html/msg/TFMessage.html) message on the ROS standard `/tf_static` topic. This should include any fixed frames of ROS enabled devices/sensors that are available on your platform. | +| | The platform computer has a velocity controller that accepts, as input, [geometry_msgs/Twist](http://docs.ros.org/en/melodic/api/geometry_msgs/html/msg/Twist.html) messages on the ROS standard `/cmd_vel` topic, at a minimum rate of **10 Hz**. | +| | The platform computer has a velocity controller that tracks the input velocity and outputs the resulting platform velocity on the `/platform/cmd_vel` topic. | +| | The platform outputs [nav_msgs/Odometry](http://docs.ros.org/en/noetic/api/nav_msgs/html/msg/Odometry.html) messages on the `/platform/odom` topic, at a minimum rate of **10 Hz**. | +| | The `/platform/odom` topic publishes its data with the header.frame_id = `odom` and the child_frame_id = `base_link`, as per the [REP-105 odom](https://www.ros.org/reps/rep-0105.html#odom) ROS standard. **IMPORTANT**: The platform should however not broadcast the `odom` --> `base_link` transformation since the OutdoorNav software will do so. | +| | If available, the platform odometry output has less than ±5% linear position error. | +| | If available, the platform odometry output has less than ±5% orientation error. | +| | The platform outputs [std_msgs/Bool](http://docs.ros.org/en/noetic/api/std_msgs/html/msg/Bool.html) messages on the `/platform/emergency_stop` topic, at a minimum rate of **5 Hz**, indicating whether or not the platform is in a stopped state. | +| | Perform the validation tests described in [Interface Control Validation Test](#interface-control-validation) section and [record a rosbag](http://wiki.ros.org/rosbag/Commandline#rosbag_record) of all of your topics. The linear and angular velocities of the three trial runs recorded should be noted here:

Trial #1: Linear x: , Angular z:
Trial #2: Linear x: , Angular z:
Trial #3: Linear x: , Angular z:
| + +:::note + +Consult the [Platform API](../api/api_endpoints/platform_api.mdx#topics-published-by-platform) for +detailed information on the published/subscribed platform topics. + +::: + +If the platform is an Ackermann (or double Ackermann) drive vehicle: + +| | Requirement | +|------|------------------------------------------------------------------| +| | A conversion from [geometry_msgs/Twist](http://docs.ros.org/en/melodic/api/geometry_msgs/html/msg/Twist.html) messages to Ackermann inputs is provided. | + +:::note + +Ackermann drive platforms require both steering and throttle inputs to +drive the platform. It is required that our OutdoorNav output `/cmd_vel` +be converted into a message suitable to your platform. An example of an +Ackermann message type can be found +[here](http://wiki.ros.org/teb_local_planner/Tutorials/Planning%20for%20car-like%20robots). +This may satisfy your particular platform, and is only a starting point +on how to do this conversion. + +::: + +If the platform computer is running a version of ROS 2: + +| | Requirement | +|------|------------------------------------------------------------------| +| | The platform computer has a [ROS 2 to ROS 1 bridge](https://github.com/ros2/ros1_bridge) is installed to enable the exchange of messages between the two ROS versions. | + +Signature: Date: + +## Interface Control Validation Test {#interface-control-validation} + +The following test is designed to validate the platforms velocity +controller. It will be required that you command the robot to drive in +three circles, of varying radii, by applying the following command to +the platform. + +``` bash +rostopic pub -r 10 /cmd_vel geometry_msgs/Twist "linear: +x: ___ +y: 0.0 +z: 0.0 +angular: +x: 0.0 +y: 0.0 +z: ___" +``` + +The three trials that we request will vary between platforms depending +on the its maximum linear $(v_\{max\})$ and angular velocities +$(\omega_\{max\})$, minimum linear $(v_\{min\})$ and angular velocities +$(\omega_\{min\})$, as well as limitations due to the minimum allowable +turning radius $(r_\{min\})$. Of these three trials, we would like to see +data within three linear velocity bands, as seen in the table below, +resulting in three different turning radii. For the purpose of these +tests, the following formula can be used when determining the required +linear and angular velocities to apply: $r = v/\omega$. + +| Trial \# | Linear X Bands \[m/s\] | Example Linear X Band \[m/s\] | +| ---------|--------------------------------------------|-------------------------------------| +| 1 | $v_\{min\} \cdot [1.0, 1.5]$ | $[0.5, 0.75]$ | +| 2 | $((v_\{max\} - v_\{min\})/2) \cdot [0.9, 1.1]$ | $[2.025, 2.475]$ | +| 3 | $v_\{max\} \cdot [0.9, 1.0]$ | $[4.5, 5.0]$ | + +As an example, a platform with specs $v \in [0.5, 5.0]$, $r_\{min\} = 3$ +would have linear x velocity bands as listed in the table above. The +trials could then be as outlined in the table below. + +| Trial \# | Linear X \[m/s\] | Angular Z \[rad/s\] |Turn Radius \[m\] | +|-----------|--------------------|---------------------|------------------| +| 1 | 0.75 | 0.25 | 3 | +| 2 | 2.25 | 0.5 | 4.5 | +| 3 | 4.5 | 0.75 | 6 | + +Finally, the test data in the collected ROSbag should include the +following: + +1. `/tf` and `/tf_static` +2. `/platform/cmd_vel` +3. `/platform/odom` +4. `/cmd_vel` +5. `/platform/emergency_stop` (if available) +6. raw NavSatFix data from a GPS unit (if possible). diff --git a/outdoornav_user_manual_versioned_docs/version-0.10.0/integration_requirements/software_integration_instructions.mdx b/outdoornav_user_manual_versioned_docs/version-0.10.0/integration_requirements/software_integration_instructions.mdx index 41efff44..454f93c9 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.10.0/integration_requirements/software_integration_instructions.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.10.0/integration_requirements/software_integration_instructions.mdx @@ -1,145 +1,145 @@ ---- -title: "Software Integration Instructions" -sidebar_label: "Software Integration Instructions" -sidebar_position: 4 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -import versions from "@site/static/versions.js" - -Prior to installing the OutdoorNav software, ensure that you have completed the relevant [Hardware Kit Checklist](hardware_integration_requirements/hardware_integration_requirements.mdx). If installing on a secondary/backpack/Starter Kit computer, ensure to have also completed the: -- [Interface Control Checklist](interface_control_requirements.mdx) - -All the following instructions, unless otherwise specified, are to be run on the OutdoorNav computer. - -### Clone OutdoorNav Repository {#clone-install-repo} - -The following repository is required to run the instructions in the subsequent sections. - - -{` -cd ~/ -git clone -b ${versions.outdoornav} https://gitlab.clearpathrobotics.com/cpr-outdoornav/cpr_outdoornav_launch.git -`} - - -For remote installations, please contact Clearpath Robotics customer support in order to obtain the relevant information required to proceed. - -### Install Docker {#install-docker} - -``` bash -cd ~/cpr_outdoornav_launch/scripts/ -./install_docker.sh -``` - -### Configure OutdoorNav Sensors {#configure-outdoornav-sensors} - -Prior to configuring the sensors, ensure that you have measured the position (XYZ) and orientation (RPY) of each of your sensors with respect to the `base_link`. See your results from the [Integration Requirements](hardware_integration_requirements/hardware_integration_requirements.mdx). - -``` bash -cd ~/cpr_outdoornav_launch/scripts/ -./configure_outdoornav.sh -``` - -### Finalize Setup {#final-setup} - -The script in the sections below will reboot the computer it is run on. - -##### UGV Computer - -For installations of the OutdoorNav software on the UGV computer (not a secondary or Starter Kit computer), run the following: - -``` bash -cd ~/cpr_outdoornav_launch/scripts -sudo ./setup_computers.sh -``` -##### Secondary or Starter Kit Computer - -Prior to running the script on the secondary or Starter Kit computer, ensure that you have the user and IP of the UGV computer that the secondary/starter kit computer is connected to. Run the following: - -``` bash -cd ~/cpr_outdoornav_launch/scripts -sudo ./setup_computers.sh -b -``` - -### Install OutdoorNav Software {#install-outdoornav} - -``` bash -cd ~/cpr_outdoornav_launch/scripts/ -docker compose --profile outdoornav pull -``` - -:::note -If you are installing the OutdoorNav software on a secondary or Starter Kit computer, you must also complete the [UGV Computer Checklist](platform_computer_checklist.mdx) -::: - -### Configure UGV Footprint {#configure-platform-footprint} - -If the UGV has sensors and/or parts that protrude outside of the UGV body, then a few environment variables will need to be modified to adjust the footprint of the robot. Things that could be extending past the footprint could include but are not limited to: - -- GPS antennae, -- Charging receivers, -- Arms, -- etc... - -Change the environment variables from the Table below, in the following file: - -``` -cd ~/cpr_outdoornav_launch -nano outdoornav_tuning.env -``` - -| Environment Variable | Description | Default | -|-----------------------------|----------------------------------------|---------| -| **FOOTPRINT_OFFSET_POS_X** | Distance from base_link to the furthest edge of any part/sensor at the front of the robot | 0.5 | -| **FOOTPRINT_OFFSET_NEG_X** | Distance from base_link to the furthest edge of any part/sensor at the rear of the robot | -0.5 | -| **FOOTPRINT_OFFSET_POS_Y** | Distance from base_link to the furthest edge of any part/sensor at the left of the robot | 0.35 | -| **FOOTPRINT_OFFSET_NEG_Y** | Distance from base_link to the furthest edge of any part/sensor at the right of the robot | -0.35 | - - - -### Start OutdoorNav - -``` bash -cd ~/cpr_outdoornav_launch/ # directory with docker-compose.yaml -docker compose --profile outdoornav up -d --build -``` - -### Test OutdoorNav Installation - -1. Ping all of the network sensors to ensure proper communication with the UGV or secondary computer. - -2. Check the following topics and make sure there is data being published to them: - -``` bash -rostopic echo -n 1 /platform/odom -rostopic echo -n 1 /platform/cmd_vel - -# IMU 1 (if included) -rostopic echo -n 1 /sensors/imu_0/data - -rostopic echo -n 1 /localization/odom - -# Velodyne/Ouster/LMS1XX/Hokuyo/OutdoorScan (if included) -rostopic echo /sensors/lidar_/pointcloud -rostopic echo /sensors/lidar_/scan - -# Realsense D435 Front (if included) -rostopic echo -n 1 /sensors/stereo_0/pointcloud -rostopic echo -n 1 /sensors/stereo_0/depth/image_rect_raw - -# Realsense D435 Rear (if included) -rostopic echo -n 1 /sensors/stereo_1/pointcloud -rostopic echo -n 1 /sensors/stereo_1/depth/image_rect_raw -``` - -\ will be the number of the sensor as it was loaded into the software. Eg. If you have a VLP and an LMS1XX, then the VLP will be lidar_0, and the LMS1XX will be lidar_1. If we only have an LMS1XX, then it would be lidar_0. Ie. the 3D lidars have a higher "priority" and therefore will be loaded first. - -:::note - -The 2D LiDARs (LMS1XX, Hokuyo) will not have a pointcloud topic. - -::: - -Once installation is complete, you can proceed to [Getting Started](../getting_started/system_setup.mdx) to start using the software. +--- +title: "Software Integration Instructions" +sidebar_label: "Software Integration Instructions" +sidebar_position: 4 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +import versions from "@site/static/versions.js" + +Prior to installing the OutdoorNav software, ensure that you have completed the relevant [Hardware Kit Checklist](hardware_integration_requirements/hardware_integration_requirements.mdx). If installing on a secondary/backpack/Starter Kit computer, ensure to have also completed the: +- [Interface Control Checklist](interface_control_requirements.mdx) + +All the following instructions, unless otherwise specified, are to be run on the OutdoorNav computer. + +### Clone OutdoorNav Repository {#clone-install-repo} + +The following repository is required to run the instructions in the subsequent sections. + + +{` +cd ~/ +git clone -b ${versions.outdoornav} https://gitlab.clearpathrobotics.com/cpr-outdoornav/cpr_outdoornav_launch.git +`} + + +For remote installations, please contact Clearpath Robotics customer support in order to obtain the relevant information required to proceed. + +### Install Docker {#install-docker} + +``` bash +cd ~/cpr_outdoornav_launch/scripts/ +./install_docker.sh +``` + +### Configure OutdoorNav Sensors {#configure-outdoornav-sensors} + +Prior to configuring the sensors, ensure that you have measured the position (XYZ) and orientation (RPY) of each of your sensors with respect to the `base_link`. See your results from the [Integration Requirements](hardware_integration_requirements/hardware_integration_requirements.mdx). + +``` bash +cd ~/cpr_outdoornav_launch/scripts/ +./configure_outdoornav.sh +``` + +### Finalize Setup {#final-setup} + +The script in the sections below will reboot the computer it is run on. + +##### UGV Computer + +For installations of the OutdoorNav software on the UGV computer (not a secondary or Starter Kit computer), run the following: + +``` bash +cd ~/cpr_outdoornav_launch/scripts +sudo ./setup_computers.sh +``` +##### Secondary or Starter Kit Computer + +Prior to running the script on the secondary or Starter Kit computer, ensure that you have the user and IP of the UGV computer that the secondary/starter kit computer is connected to. Run the following: + +``` bash +cd ~/cpr_outdoornav_launch/scripts +sudo ./setup_computers.sh -b +``` + +### Install OutdoorNav Software {#install-outdoornav} + +``` bash +cd ~/cpr_outdoornav_launch/scripts/ +docker compose --profile outdoornav pull +``` + +:::note +If you are installing the OutdoorNav software on a secondary or Starter Kit computer, you must also complete the [UGV Computer Checklist](platform_computer_checklist.mdx) +::: + +### Configure UGV Footprint {#configure-platform-footprint} + +If the UGV has sensors and/or parts that protrude outside of the UGV body, then a few environment variables will need to be modified to adjust the footprint of the robot. Things that could be extending past the footprint could include but are not limited to: + +- GPS antennae, +- Charging receivers, +- Arms, +- etc... + +Change the environment variables from the Table below, in the following file: + +``` +cd ~/cpr_outdoornav_launch +nano outdoornav_tuning.env +``` + +| Environment Variable | Description | Default | +|-----------------------------|----------------------------------------|---------| +| **FOOTPRINT_OFFSET_POS_X** | Distance from base_link to the furthest edge of any part/sensor at the front of the robot | 0.5 | +| **FOOTPRINT_OFFSET_NEG_X** | Distance from base_link to the furthest edge of any part/sensor at the rear of the robot | -0.5 | +| **FOOTPRINT_OFFSET_POS_Y** | Distance from base_link to the furthest edge of any part/sensor at the left of the robot | 0.35 | +| **FOOTPRINT_OFFSET_NEG_Y** | Distance from base_link to the furthest edge of any part/sensor at the right of the robot | -0.35 | + + + +### Start OutdoorNav + +``` bash +cd ~/cpr_outdoornav_launch/ # directory with docker-compose.yaml +docker compose --profile outdoornav up -d --build +``` + +### Test OutdoorNav Installation + +1. Ping all of the network sensors to ensure proper communication with the UGV or secondary computer. + +2. Check the following topics and make sure there is data being published to them: + +``` bash +rostopic echo -n 1 /platform/odom +rostopic echo -n 1 /platform/cmd_vel + +# IMU 1 (if included) +rostopic echo -n 1 /sensors/imu_0/data + +rostopic echo -n 1 /localization/odom + +# Velodyne/Ouster/LMS1XX/Hokuyo/OutdoorScan (if included) +rostopic echo /sensors/lidar_/pointcloud +rostopic echo /sensors/lidar_/scan + +# Realsense D435 Front (if included) +rostopic echo -n 1 /sensors/stereo_0/pointcloud +rostopic echo -n 1 /sensors/stereo_0/depth/image_rect_raw + +# Realsense D435 Rear (if included) +rostopic echo -n 1 /sensors/stereo_1/pointcloud +rostopic echo -n 1 /sensors/stereo_1/depth/image_rect_raw +``` + +\ will be the number of the sensor as it was loaded into the software. Eg. If you have a VLP and an LMS1XX, then the VLP will be lidar_0, and the LMS1XX will be lidar_1. If we only have an LMS1XX, then it would be lidar_0. Ie. the 3D lidars have a higher "priority" and therefore will be loaded first. + +:::note + +The 2D LiDARs (LMS1XX, Hokuyo) will not have a pointcloud topic. + +::: + +Once installation is complete, you can proceed to [Getting Started](../getting_started/system_setup.mdx) to start using the software. diff --git a/outdoornav_user_manual_versioned_docs/version-0.10.0/overview/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.10.0/overview/_category_.json index 663e4088..8414dc7f 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.10.0/overview/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.10.0/overview/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Overview", - "position": 4 -} +{ + "label": "Overview", + "position": 4 +} diff --git a/outdoornav_user_manual_versioned_docs/version-0.10.0/overview/overview_hardware_requirements.mdx b/outdoornav_user_manual_versioned_docs/version-0.10.0/overview/overview_hardware_requirements.mdx index b6abe65e..0883eba8 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.10.0/overview/overview_hardware_requirements.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.10.0/overview/overview_hardware_requirements.mdx @@ -1,44 +1,44 @@ ---- -title: Hardware Requirements -sidebar_label: Hardware Requirements -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -OutdoorNav Software works with compatible UGVs, either from Clearpath -Robotics or third parties. High level requirements for compatible UGVs -are outlined below. Detailed qualification requirements are outlined in -[UGV Integration Requirements](../integration_requirements/integration_overview.mdx). - -## Requirements - -OutdoorNav software does not communicate directly with the UGV motors. -Rather, it publishes target linear and angular velocities packaged in -the [ROS Twist message](http://docs.ros.org/en/noetic/api/geometry_msgs/html/msg/Twist.html) -format and relies on the low level velocity controller of the vehicle to -translate these velocities into correct motor control commands. -Therefore, OutdoorNav Software requires that the UGV must accept the -control commands sent in the [ROS Twist message](http://docs.ros.org/en/noetic/api/geometry_msgs/html/msg/Twist.html) -format. More detailed requirements are outlined in the following table. - -| # | Requirement | Notes | -| - | --------------------------------- | ----------------------------------- | -| 1 | The UGV must be a differential drive or Ackermann drive configuration | Ackerman drive is currently available as a custom implementation; standard in 2023 | -| 2 | The UGV must have velocity control of the wheels and provide kinematic control of the platform | | -| 3 | The UGV shall provide odometry feedback of the wheel direction and velocities and/or steering position | Recommended encoder resolution of 500 ticks per revolution or greater | -| 4 | The UGV should have an emergency stop system with status feedback | | -| 5 | The UGV must accept ROS 1 Twist Commands on the `/cmd_vel` topic | See [API Endpoints](../api/api_endpoints/api_endpoints.mdx); ROS 2 interface available in future release | -| 6 | The UGV must provide odometry and status feedback through ROS topics | See [API Endpoints](../api/api_endpoints/api_endpoints.mdx) | - -## Typical Hardware - -While a variety of different sensors and equipment can be used with -OutdoorNav Software, the following are used most commonly: - -- Clearpath Robotics UGV: Jackal, Husky or Warthog -- GPS System: Dual DURO RTK system or NovAtel Terrastar -- IMU: Microstrain 3DM-GX5-25 -- 3D Laser Sensor: Velodyne VLP-16 -- Tablet Computer: Getac F110 -- Clearpath Long Range Network Station with RTK corrections ("Base Station") +--- +title: Hardware Requirements +sidebar_label: Hardware Requirements +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +OutdoorNav Software works with compatible UGVs, either from Clearpath +Robotics or third parties. High level requirements for compatible UGVs +are outlined below. Detailed qualification requirements are outlined in +[UGV Integration Requirements](../integration_requirements/integration_overview.mdx). + +## Requirements + +OutdoorNav software does not communicate directly with the UGV motors. +Rather, it publishes target linear and angular velocities packaged in +the [ROS Twist message](http://docs.ros.org/en/noetic/api/geometry_msgs/html/msg/Twist.html) +format and relies on the low level velocity controller of the vehicle to +translate these velocities into correct motor control commands. +Therefore, OutdoorNav Software requires that the UGV must accept the +control commands sent in the [ROS Twist message](http://docs.ros.org/en/noetic/api/geometry_msgs/html/msg/Twist.html) +format. More detailed requirements are outlined in the following table. + +| # | Requirement | Notes | +| - | --------------------------------- | ----------------------------------- | +| 1 | The UGV must be a differential drive or Ackermann drive configuration | Ackerman drive is currently available as a custom implementation; standard in 2023 | +| 2 | The UGV must have velocity control of the wheels and provide kinematic control of the platform | | +| 3 | The UGV shall provide odometry feedback of the wheel direction and velocities and/or steering position | Recommended encoder resolution of 500 ticks per revolution or greater | +| 4 | The UGV should have an emergency stop system with status feedback | | +| 5 | The UGV must accept ROS 1 Twist Commands on the `/cmd_vel` topic | See [API Endpoints](../api/api_endpoints/api_endpoints.mdx); ROS 2 interface available in future release | +| 6 | The UGV must provide odometry and status feedback through ROS topics | See [API Endpoints](../api/api_endpoints/api_endpoints.mdx) | + +## Typical Hardware + +While a variety of different sensors and equipment can be used with +OutdoorNav Software, the following are used most commonly: + +- Clearpath Robotics UGV: Jackal, Husky or Warthog +- GPS System: Dual DURO RTK system or NovAtel Terrastar +- IMU: Microstrain 3DM-GX5-25 +- 3D Laser Sensor: Velodyne VLP-16 +- Tablet Computer: Getac F110 +- Clearpath Long Range Network Station with RTK corrections ("Base Station") diff --git a/outdoornav_user_manual_versioned_docs/version-0.10.0/overview/overview_introduction.mdx b/outdoornav_user_manual_versioned_docs/version-0.10.0/overview/overview_introduction.mdx index 83bfa1d6..4f3f1bf7 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.10.0/overview/overview_introduction.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.10.0/overview/overview_introduction.mdx @@ -1,93 +1,93 @@ ---- -title: Introduction -sidebar_label: Introduction -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -## Summary - -OutdoorNav Software is a software package developed by Clearpath -Robotics for autonomous and manual navigation of Unmanned Ground -Vehicles (UGVs) in outdoor environments. - -
-
- -
Web UI Mission Planning View
-
-
- -
-
- -
Web UI Front Camera View
-
-
- -## Compatible Platforms - -While it has been optimized for use with OutdoorNav Hardware from -Clearpath Robotics -([Husky](https://clearpathrobotics.com/husky-unmanned-ground-vehicle-robot/), -[Jackal](https://clearpathrobotics.com/jackal-small-unmanned-ground-vehicle/), -and -[Warthog](https://clearpathrobotics.com/warthog-unmanned-ground-vehicle-robot/)), -it has been designed so that it can be added easily to third-party UGVs. - -
-
- -
Clearpath Robotics Warthog UGV with navigation equipment and operator control unit
-
-
- -## Key Features - -Key features of OutdoorNav Software include: - -- Mission Planning and Autonomous Navigation - - - Robust GPS-based localization with sensor fusion of IMU, LiDAR - and platform odometry - - Autonomous path following via waypoints - - Obstacle Detection and Avoidance: Stop and wait or - autonomously plan a collision-free path around obstacles - without the need to stop - -- Teleoperation - - - Operate the robot remotely using an on-screen or physical - joystick - - Visualize what the robot sees by displaying its network - cameras and LiDAR data - -- Web User Interface (Web UI) - - - Build missions containing sets of paths, with optional task - execution on each path; tasks can be standard tasks (eg. save - camera image) or user provided functions - - View the robot's live position and attitude on the map - - Display robot data such as velocity, signal strength, status - of the motion stop, status of navigation system, and battery charge - - Save and export Missions - -- Application Programming Interface (API) - - - Build your own application and UI by accessing the navigation - API to control the UGV through software or implement fleet - management by accessing the mission API - -- Simulation - - - Begin development of your application prior to purchasing - licenses or commissioning hardware with OutdoorNav software and - the ROS Gazebo simulator - -- Third Party Integration - - - The Web UI and API can be accessed through a network connection; - cloud-based services are available from third parties to - facilitate remote connections and networking to robot hardware - such as Formant.io and Freedom Robotics +--- +title: Introduction +sidebar_label: Introduction +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +## Summary + +OutdoorNav Software is a software package developed by Clearpath +Robotics for autonomous and manual navigation of Unmanned Ground +Vehicles (UGVs) in outdoor environments. + +
+
+ +
Web UI Mission Planning View
+
+
+ +
+
+ +
Web UI Front Camera View
+
+
+ +## Compatible Platforms + +While it has been optimized for use with OutdoorNav Hardware from +Clearpath Robotics +([Husky](https://clearpathrobotics.com/husky-unmanned-ground-vehicle-robot/), +[Jackal](https://clearpathrobotics.com/jackal-small-unmanned-ground-vehicle/), +and +[Warthog](https://clearpathrobotics.com/warthog-unmanned-ground-vehicle-robot/)), +it has been designed so that it can be added easily to third-party UGVs. + +
+
+ +
Clearpath Robotics Warthog UGV with navigation equipment and operator control unit
+
+
+ +## Key Features + +Key features of OutdoorNav Software include: + +- Mission Planning and Autonomous Navigation + + - Robust GPS-based localization with sensor fusion of IMU, LiDAR + and platform odometry + - Autonomous path following via waypoints + - Obstacle Detection and Avoidance: Stop and wait or + autonomously plan a collision-free path around obstacles + without the need to stop + +- Teleoperation + + - Operate the robot remotely using an on-screen or physical + joystick + - Visualize what the robot sees by displaying its network + cameras and LiDAR data + +- Web User Interface (Web UI) + + - Build missions containing sets of paths, with optional task + execution on each path; tasks can be standard tasks (eg. save + camera image) or user provided functions + - View the robot's live position and attitude on the map + - Display robot data such as velocity, signal strength, status + of the motion stop, status of navigation system, and battery charge + - Save and export Missions + +- Application Programming Interface (API) + + - Build your own application and UI by accessing the navigation + API to control the UGV through software or implement fleet + management by accessing the mission API + +- Simulation + + - Begin development of your application prior to purchasing + licenses or commissioning hardware with OutdoorNav software and + the ROS Gazebo simulator + +- Third Party Integration + + - The Web UI and API can be accessed through a network connection; + cloud-based services are available from third parties to + facilitate remote connections and networking to robot hardware + such as Formant.io and Freedom Robotics diff --git a/outdoornav_user_manual_versioned_docs/version-0.10.0/overview/overview_operating_conditions.mdx b/outdoornav_user_manual_versioned_docs/version-0.10.0/overview/overview_operating_conditions.mdx index c02228aa..6e0b17a5 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.10.0/overview/overview_operating_conditions.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.10.0/overview/overview_operating_conditions.mdx @@ -1,177 +1,177 @@ ---- -title: Operating Conditions -sidebar_label: Operating Conditions -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -OutdoorNav Software is designed and tested for use in rugged outdoor -environments. - -## Operating Conditions - -### Terrain - -OutdoorNav Software is compatible with terrains in which the UGV can be -driven manually without excessive slipping. The performance limits will -be a function of the base UGV traction. - -Using Clearpath Robotics Husky, Jackal, and Warthog as a the base UGV, -OutdoorNav Software is suitable for use in the following terrains: - -- asphalt -- concrete -- grass -- snow - -:::note - -Grass should not exceed 30 cm in height if collision avoidance is -enabled. - -::: - -:::note - -Winter/studded tires may be required for proper traction on snow. - -::: - -OutdoorNav Software is currently **not** suitable in the following -terrains: - -- ice -- loose gravel - -:::note - -Support for loose gravel environments is currently being tested and is -expected to be available in late 2023. - -::: - -The terrain capabilities of third-party UGVs will be dependent on a -variety of factors including the vehicle mass, the tire treading, and -motor power. - -### Environment - -OutdoorNav Software is suitable for use in the following environmental -conditions: - -- light rainfall (drizzle) -- light snowfall (powdery snow) - -:::note - -If erratic behavior, such as frequent replanning, is perceived in these -light precipitation conditions, disabling the "continuous planning" -feature may help. - -::: - -OutdoorNav Software is **not** suitable for use in the following -environmental conditions: - -- heavy rainfall -- heavy snowfall - -:::note - -If navigation is required in heavy rain or snow, disabling the collision -avoidance feature will allow the UGV to navigate properly. This should -be done with caution. - -![](/img/outdoornav_images/gps_danger.png) - -::: - -## Performance - -The performance of the system is highly dependent on both the base UGV, -the sensors, the system integration details, and the environment. The -following table provides typical performance metrics for Clearpath -Robotics Jackal and Husky UGVs. - -_System Performance for Husky/Jackal with Typical Sensors_ - -| | Starter Sensor Kit | Standard Sensor Kit (No RTK) | Standard Sensor Kit (RTK) | -|----------------------------------------|-----------------------------------|----------------------------------|----------------------------------| -| GPS sensors | UBlox F9P | 2x SwiftNav Duro | 2x SwiftNav Duro | -| Location accuracy (position & heading) | Less than 60 cm
Less than 10° | Less than 30 cm
Less than 5° | Less than 5 cm
Less than 2° | -| Path tracking accuracy (approximate) | 20 cm | 15 cm | 10 cm | - -## Limitations - -While OutdoorNav Software operates effectively in a range of rugged -outdoor environments, the operator should be aware of the following -limitations and plan accordingly. - -_OutdoorNav System Limitations_ - -| Limitation | Details | -|--------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| RTK accuracy | Localization accuracy for the Standard (RTK) configuration assumes the base station location has been accurately surveyed. | -| Localization accuracy | Localization accuracy is influenced by the quality of GNSS data that is available. Navigating in GNSS denied areas (e.g., under bridges, near tall buildings, etc.) will cause degradation in localization performance. | -| Negative obstacle detection not present | Outdoor Navigation Software does not have negative obstacle detection capability. Your UGV will not detect stairs, cliffs, potholes, depressions or edges and may drive into these obstacles causing harm to people or property. | -| Limited obstacle detection in vertical dimension | The small vertical field of view of 3D LiDARs limits the vertical obstacle detection capability of the OutdoorNav Software. See [Obstacle Detection Limitations](#obstacle-detection-limitations) for details. | -| Low traction may cause UGV to get stuck | Your UGV may navigate itself into a situation where wheels slip or do not make contact with the ground. | -| Rain and snow may affect obstacle detection | Adverse weather conditions may obscure obstacle detection and avoidance data from the VLP-16 LiDAR. Obstacle detection and avoidance may not function in all weather conditions and must be disabled to navigate in heavy snow or rain. | -| Maximum distance between two Viapoints | Distance between any two consecutive Viapoints of a Mission should be less than 20 meters. This will ensure that the global planner can find a valid path to the next Viapoint for the UGV in case there is an obstacle on the path of the UGV. | -| WiFi range limits | The current configurations of the OutdoorNav Software will continue navigation if the WiFi disconnects or goes out of range. The Web UI will reconnect once the WiFi has reconnected but certain functions of the UI may be limited such as the ability to issue a pause/stop commands or sending new missions to the UGV. | -| Wireless motion stop range limits | The UGV will motion stop if the UGV is driven out of range of the wireless motion stop device. | -| RTK GPS limited by WiFi range | If WiFi goes out of range, your UGV will not receive RTK corrections from the Base Station. This can potentially decrease the accuracy of the GPS signal which can subsequently degrade path following performance of your system. | -| Obstacle detection may cause UGV to become stuck | The UGV may stop and become stuck if obstacles are detected and not cleared from its path. If obstacle avoidance is enabled, it may not be able to calculate an acceptable path to the next Viapoint or Goal Point under all circumstances. This will result in the UGV becoming stuck and failing its Mission. | -| Failure to set Datum causes undefined behavior | If the Datum is not set or is not synchronized with the navigation module, the UGV's driven path is undefined and will move unpredictably if Missions are sent in this state. | -| Zones are not currently supported | It is not possible to define “keep-out” or “unsafe” zones that the UGV needs to avoid. Rather, careful use of Waypoint placement by the operator can be used to keep the UGV at a safe distance from unsafe zones. | -| No collision avoidance during teleoperation mode | When operating in Manual Mode (Teleoperation), no collision avoidance is enabled. The operator is responsible for avoiding collisions. | - -### Obstacle Detection Limitations {#obstacle-detection-limitations} - -The maximum collision avoidance range for the OutdoorNav Software is -UGV-dependent and is related to the maximum speed of the UGV. These -ranges for Clearpath Robotics UGVs are: - -- Jackal UGV: 4.5 meters -- Husky UGV: 4.5 meters -- Warthog UGV: 15.0 meters - -While the sensors are able to detect objects at further distances, the -OutdoorNav Software only considers obstacles detected within these -distances for collision avoidance. That is, the UGV will only begin to -decelerate as it detects obstacles within this range. - -The detection itself is also related to the horizontal size -(width/diameter) of the obstacle. The limitations in detecting objects -with small horizontal size are described in the table below. - -_Maximum Reliable Obstacle Detection Distance from UGV, according to Obstacle Horizontal Size_ - -| Object Size (Horizontal) | Starter Sensor Kit | Standard Sensor Kit | -|--------------------------|----------------------------------------------------------------|----------------------------------------------------------------| -| Less than 0.6 cm | No reliable detection | No reliable detection | -| 0.6 to 1.0 cm | 0.8 m | No reliable detection | -| 1.0 to 3.0 cm | 2.0 m | 1.75 m | -| Greater than 3.0 cm | Maximum collision avoidance distance (UGV-specific; see above) | Maximum collision avoidance distance (UGV-specific; see above) | - -Finally, the OutdoorNav Software bounds the obstacle detection to -prevent ground hits and to remove detections above the UGV body. The -following bounds are relative to the ground, assuming a flat surface. -Obstacles that are entirely below the lower bound or entirely above the -upper bound are not considered obstacles and will not be avoided. - -_Obstacle Detection Vertical Bounds_ - -| Vertical Bound | Jackal UGV | Husky UGV | Warthog UGV | -|-----------------------|------------|-----------|-------------| -| Lower Detection Bound | 0.3 m | 0.3 m | 0.3 m | -| Upper Detection Bound | 0.8 m | 1.3 m | 1.8 m | - -:::note - -The vertical detection bounds above are for the Standard Sensor Kit or a -custom sensor configuration that includes a Velodyne. The vertical -detection bounds for the Starter Sensor Kit have yet to be determined. - +--- +title: Operating Conditions +sidebar_label: Operating Conditions +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +OutdoorNav Software is designed and tested for use in rugged outdoor +environments. + +## Operating Conditions + +### Terrain + +OutdoorNav Software is compatible with terrains in which the UGV can be +driven manually without excessive slipping. The performance limits will +be a function of the base UGV traction. + +Using Clearpath Robotics Husky, Jackal, and Warthog as a the base UGV, +OutdoorNav Software is suitable for use in the following terrains: + +- asphalt +- concrete +- grass +- snow + +:::note + +Grass should not exceed 30 cm in height if collision avoidance is +enabled. + +::: + +:::note + +Winter/studded tires may be required for proper traction on snow. + +::: + +OutdoorNav Software is currently **not** suitable in the following +terrains: + +- ice +- loose gravel + +:::note + +Support for loose gravel environments is currently being tested and is +expected to be available in late 2023. + +::: + +The terrain capabilities of third-party UGVs will be dependent on a +variety of factors including the vehicle mass, the tire treading, and +motor power. + +### Environment + +OutdoorNav Software is suitable for use in the following environmental +conditions: + +- light rainfall (drizzle) +- light snowfall (powdery snow) + +:::note + +If erratic behavior, such as frequent replanning, is perceived in these +light precipitation conditions, disabling the "continuous planning" +feature may help. + +::: + +OutdoorNav Software is **not** suitable for use in the following +environmental conditions: + +- heavy rainfall +- heavy snowfall + +:::note + +If navigation is required in heavy rain or snow, disabling the collision +avoidance feature will allow the UGV to navigate properly. This should +be done with caution. + +![](/img/outdoornav_images/gps_danger.png) + +::: + +## Performance + +The performance of the system is highly dependent on both the base UGV, +the sensors, the system integration details, and the environment. The +following table provides typical performance metrics for Clearpath +Robotics Jackal and Husky UGVs. + +_System Performance for Husky/Jackal with Typical Sensors_ + +| | Starter Sensor Kit | Standard Sensor Kit (No RTK) | Standard Sensor Kit (RTK) | +|----------------------------------------|-----------------------------------|----------------------------------|----------------------------------| +| GPS sensors | UBlox F9P | 2x SwiftNav Duro | 2x SwiftNav Duro | +| Location accuracy (position & heading) | Less than 60 cm
Less than 10° | Less than 30 cm
Less than 5° | Less than 5 cm
Less than 2° | +| Path tracking accuracy (approximate) | 20 cm | 15 cm | 10 cm | + +## Limitations + +While OutdoorNav Software operates effectively in a range of rugged +outdoor environments, the operator should be aware of the following +limitations and plan accordingly. + +_OutdoorNav System Limitations_ + +| Limitation | Details | +|--------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| RTK accuracy | Localization accuracy for the Standard (RTK) configuration assumes the base station location has been accurately surveyed. | +| Localization accuracy | Localization accuracy is influenced by the quality of GNSS data that is available. Navigating in GNSS denied areas (e.g., under bridges, near tall buildings, etc.) will cause degradation in localization performance. | +| Negative obstacle detection not present | Outdoor Navigation Software does not have negative obstacle detection capability. Your UGV will not detect stairs, cliffs, potholes, depressions or edges and may drive into these obstacles causing harm to people or property. | +| Limited obstacle detection in vertical dimension | The small vertical field of view of 3D LiDARs limits the vertical obstacle detection capability of the OutdoorNav Software. See [Obstacle Detection Limitations](#obstacle-detection-limitations) for details. | +| Low traction may cause UGV to get stuck | Your UGV may navigate itself into a situation where wheels slip or do not make contact with the ground. | +| Rain and snow may affect obstacle detection | Adverse weather conditions may obscure obstacle detection and avoidance data from the VLP-16 LiDAR. Obstacle detection and avoidance may not function in all weather conditions and must be disabled to navigate in heavy snow or rain. | +| Maximum distance between two Viapoints | Distance between any two consecutive Viapoints of a Mission should be less than 20 meters. This will ensure that the global planner can find a valid path to the next Viapoint for the UGV in case there is an obstacle on the path of the UGV. | +| WiFi range limits | The current configurations of the OutdoorNav Software will continue navigation if the WiFi disconnects or goes out of range. The Web UI will reconnect once the WiFi has reconnected but certain functions of the UI may be limited such as the ability to issue a pause/stop commands or sending new missions to the UGV. | +| Wireless motion stop range limits | The UGV will motion stop if the UGV is driven out of range of the wireless motion stop device. | +| RTK GPS limited by WiFi range | If WiFi goes out of range, your UGV will not receive RTK corrections from the Base Station. This can potentially decrease the accuracy of the GPS signal which can subsequently degrade path following performance of your system. | +| Obstacle detection may cause UGV to become stuck | The UGV may stop and become stuck if obstacles are detected and not cleared from its path. If obstacle avoidance is enabled, it may not be able to calculate an acceptable path to the next Viapoint or Goal Point under all circumstances. This will result in the UGV becoming stuck and failing its Mission. | +| Failure to set Datum causes undefined behavior | If the Datum is not set or is not synchronized with the navigation module, the UGV's driven path is undefined and will move unpredictably if Missions are sent in this state. | +| Zones are not currently supported | It is not possible to define “keep-out” or “unsafe” zones that the UGV needs to avoid. Rather, careful use of Waypoint placement by the operator can be used to keep the UGV at a safe distance from unsafe zones. | +| No collision avoidance during teleoperation mode | When operating in Manual Mode (Teleoperation), no collision avoidance is enabled. The operator is responsible for avoiding collisions. | + +### Obstacle Detection Limitations {#obstacle-detection-limitations} + +The maximum collision avoidance range for the OutdoorNav Software is +UGV-dependent and is related to the maximum speed of the UGV. These +ranges for Clearpath Robotics UGVs are: + +- Jackal UGV: 4.5 meters +- Husky UGV: 4.5 meters +- Warthog UGV: 15.0 meters + +While the sensors are able to detect objects at further distances, the +OutdoorNav Software only considers obstacles detected within these +distances for collision avoidance. That is, the UGV will only begin to +decelerate as it detects obstacles within this range. + +The detection itself is also related to the horizontal size +(width/diameter) of the obstacle. The limitations in detecting objects +with small horizontal size are described in the table below. + +_Maximum Reliable Obstacle Detection Distance from UGV, according to Obstacle Horizontal Size_ + +| Object Size (Horizontal) | Starter Sensor Kit | Standard Sensor Kit | +|--------------------------|----------------------------------------------------------------|----------------------------------------------------------------| +| Less than 0.6 cm | No reliable detection | No reliable detection | +| 0.6 to 1.0 cm | 0.8 m | No reliable detection | +| 1.0 to 3.0 cm | 2.0 m | 1.75 m | +| Greater than 3.0 cm | Maximum collision avoidance distance (UGV-specific; see above) | Maximum collision avoidance distance (UGV-specific; see above) | + +Finally, the OutdoorNav Software bounds the obstacle detection to +prevent ground hits and to remove detections above the UGV body. The +following bounds are relative to the ground, assuming a flat surface. +Obstacles that are entirely below the lower bound or entirely above the +upper bound are not considered obstacles and will not be avoided. + +_Obstacle Detection Vertical Bounds_ + +| Vertical Bound | Jackal UGV | Husky UGV | Warthog UGV | +|-----------------------|------------|-----------|-------------| +| Lower Detection Bound | 0.3 m | 0.3 m | 0.3 m | +| Upper Detection Bound | 0.8 m | 1.3 m | 1.8 m | + +:::note + +The vertical detection bounds above are for the Standard Sensor Kit or a +custom sensor configuration that includes a Velodyne. The vertical +detection bounds for the Starter Sensor Kit have yet to be determined. + ::: \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.10.0/overview/overview_scope.mdx b/outdoornav_user_manual_versioned_docs/version-0.10.0/overview/overview_scope.mdx index ba0092f1..f1a32607 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.10.0/overview/overview_scope.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.10.0/overview/overview_scope.mdx @@ -1,15 +1,15 @@ ---- -title: Scope -sidebar_label: Scope -sidebar_position: 2 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -This documentation focuses on the OutdoorNav Software itself, including -hardware dependencies and integration, but not the specifics of UGV -hardware. For details on compatible Clearpath Robotics UGVs and custom -hardware integrations, contact \ or check -out our [YouTube channel](https://www.youtube.com/channel/UCNPP3C-ZK3mwpG2x89VE-2Q). - - +--- +title: Scope +sidebar_label: Scope +sidebar_position: 2 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +This documentation focuses on the OutdoorNav Software itself, including +hardware dependencies and integration, but not the specifics of UGV +hardware. For details on compatible Clearpath Robotics UGVs and custom +hardware integrations, contact \ or check +out our [YouTube channel](https://www.youtube.com/channel/UCNPP3C-ZK3mwpG2x89VE-2Q). + + diff --git a/outdoornav_user_manual_versioned_docs/version-0.10.0/release_notes.mdx b/outdoornav_user_manual_versioned_docs/version-0.10.0/release_notes.mdx index 104d2707..34f127db 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.10.0/release_notes.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.10.0/release_notes.mdx @@ -1,253 +1,253 @@ ---- -title: Release Notes -sidebar_label: Release Notes -sidebar_position: 2 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -import Style from '/assets/css/changelog.css'; - -
- -## 0.10.0 - -### New Features - -- Added the ability to start mission from a specific Waypoint -- Added the ability to resume mission from current location -- Added the option to include on-start and on-stop tasks to a Mission -- Added the option to continue a Mission if a Task should fail -- Full release of the API examples repository to the public (link API examples top level page) - -### API Features - -- Action definition changes (see [API Endpoints](./api/api_endpoints/autonomy_api)) - - Mission.action added from_start and *start_waypoint_uuid* fields - - ExecuteMissionByUuid.action: added from_start and *start_waypoint_uuid* fields -- Message Definition changes - - Mission.msg: added an array of on_start and and array of on_stop tasks fields - - Task.msg: added a boolean allow_failure field -- Updated /safety/safety_stop message type (see [Definitions](./api/api_endpoints/definitions.mdx#msg-safety)) -- Added import/export services for /dock, /mission_manager/ and /mission_scheduler features - -### Bug Fixes - -- 1546: Robot cannot start mission part-way through if a task is assigned on any Waypoint prior to its location -- 1764: Importing missions with docking tasks fails to bring in docks - -### Known Issues - -- 1396: Robot gets temporarily stuck at start of mission when near a Waypoint -- 1844: [MPC] Maximum acceleration param doesn't appear to have any effect - -## 0.9.0 - -### New Features - -- Operators can now Schedule Missions to run at specific times (see [Mission Scheduler](./features/mission_scheduler.mdx)) -- Added in support for BulletCat12 Microhard WiFi and Cellular connections -- Allow Audio recording as both tasks and manual operations if UGV has Microphones -- Create custom tasks that can be run during missions (see [Custom Tasks](./features/custom_tasks.mdx)) -- If installed with PDU, UGV can be set to Low Power mode to better conserve power -- New navigation topics added to ROS Autonomy API (see [API Endpoints](./api/api_endpoints/autonomy_api.mdx)): - - /navigation/progress - - /navigation/motion_state - - /navigation/metrics -- Improved precision of docking -- Improved autonomy feedback when something goes wrong in the mission to increase the diagnosability of the error -- Updated Navigation features available to the customer: - - Continuous Replanning renamed to Continuous Planning and is always enabled. - - Constrained Planning is always enabled. Environment Variable to update the path constraint has been modified - (see [Navigation](./features/navigation.mdx)) - - Removed Obstacle Avoidance Mode. The UGV will always attempt to avoid obstacles. - - Removed Path Smoothing. This is always enabled. - - Docking feature added for customers who have purchased a dock. - -### Bug Fixes - -- 1324: Allow single Waypoint missions and/or tasks on first waypoint (required for undocking through tasks). -- 1340: Undocking not working through tasks -- 1607: Fixed MovePTZ task failures - -### Known Issues - -- 131: Software upgrade process not documented fully. -- 609: Realsense D435 collision avoidance not fully tuned. -- 751: Wireless icon in UI doesn't work for Ubiquity hardware. -- 1396: Robot gets temporarily stuck at start of mission when near a Waypoint. -- 1546: Robot cannot start mission part-way through if a task is assigned on any Waypoint prior to its location. - -## 0.8.0 - -### New Features - -- Inertial Measurement Units (IMUs) integrated into localization. -- Added localization status topic (see [API Endpoints](./api/api_endpoints/autonomy_api.mdx#localizationstatus)). -- Added re-localization service (see [API Endpoints](./api/api_endpoints/definitions.mdx#srv-reset-localization)). -- Additional diagnostic information in the status view. -- Docking improvements including: multiple docks, visual representation of docks on map, - local docking/undocking through teleop view. Docking only functional with 2D LiDARs. -- Customization & Tuning Appendix C added. Lists of tuning parameters for navigation - and collision avoidance are now available. As well as, instructions/process on how to - tune UGVs with differential drive dynamics. Instructions for UGVs with Ackermann dynamics - are on their way. - -### Bug Fixes - -- 1134: Display/Hide Datum Point not working. -- 1139: Issues with non-husky platforms. -- 1137: Refreshing page re-enables edit button while mission running. -- 1276: Feedback added for incorrect first Waypoint placement. - -### Known Issues - -- 131: Software upgrade process not documented fully. -- 609: Realsense D435 collision avoidance not fully tuned. -- 751: Wireless icon in UI doesn't work for Ubiquity hardware. -- 1138: Issues with greying out Waypoints in edge cases. -- 1324: Allow single Waypoint missions and/or tasks on first waypoint (required for undocking through tasks). -- 1340: Undocking not working through tasks. - -## 0.7.0 - -### New Features - -- Goal terminology has been removed from the mission generation nomenclature (see - [Definitions](./web_user_interface/ui_autonomous_mode.mdx#definitions)) - Users can now add tasks, apply final headings, and set navigation tolerances - to any Waypoint in a Mission. -- Drag and Drop of Waypoints now available in Edit Mode. -- New Waypoints can be inserted between existing Waypoints in a Mission. -- Mission API now available to create/edit/load missions, waypoints and tasks. -- Mission execution via mission ID is now available. -- The base station location is now displayed in the UI after carrying out an automated survey. -- New coloring scheme for GNSS status icons to provide more accurate information. - -### Bug Fixes - -- 996: Axis camera missing ptz_state - -### Known Issues - -- 131: Software upgrade process not documented fully. -- 609: Realsense D435 collision avoidance not fully tuned. -- 751: Wireless icon in UI doesn't work for Ubiquity hardware. -- 1134: Display/Hide Datum point not working. -- 1137: Refreshing page re-enables edit button while mission running. -- 1138: Issues with greying out Waypoints in edge cases. - -## 0.6.0 - -### New Features - -- OutdoorNav ROS API updated. API now divided into Platform and - Autonomy sections. See [API Overview](./api/api_overview.mdx) - for more details. -- Simulation environment created with charge dock, base station and - camera plugins. -- Added deviation path visualization to UI when constrained replanning - is enabled. -- Modified goalpoint icons to reflect tasks assigned to them. -- Added the ability to record rosbags from UI. -- Added GPS signal strength to status page. -- Added improvements to PTZ controls (cosmetic changes, ability to - disable zoom, added a reset mark). -- User can set map source from OpenStreet, MapBox, Bing Maps, or - custom map tiles through UI. - -### Bug Fixes - -- 632: Prevent users from changing mission while a mission is running. -- 661: Removed map view when no map is provided in default-state.json. - file. -- 712: Fixed front end hanging when user opens menu from any view - other than main view. -- 716: Removed connecting lines from disabled goals. - -### Known Issues - -- 131: Software upgrade process not documented fully. -- 609: Realsense D435 collision avoidance not fully tuned. -- 751: Wireless icon in UI doesn't work for Ubiquity hardware. -- 756: Waypoints stop turning grey when they are hit if a waypoint is - skipped. - -## 0.5.0 - -### New Features - -- Sensor Kit Options: Starter, Standard, Backpack. -- New localization module. -- Added support for UBlox F9K and F9P GNSS receivers in the - localization module. -- Added support for either single or dual Swiftnav Duro/Piksi GNSS - receiver(s) in the localization module. -- Added support for Realsense D435 camera in collision avoidance - module. -- New/updated user modifiable environment variables for sensor and - navigation tuning. -- Added a Virtual Guided tour of the application for first time users. -- Added StreetView and Bing map tiles (to existing MapBox tile). -- Allow users to specify custom map tile source. -- Added cosmetic changes to traversed waypoints as well as a robot. - status icon with ROS topic health information. - -### Bug Fixes - -- 253: Replace default camera image for camera views when stream is - unavailable. -- 281: Fixed navigation latched in a PAUSE state. -- 574: Fixed map settings page to not rerender when robots position - changes. - -### Known Issues - -- 131: Software upgrade process not documented fully. -- 609: Realsense D435 collision avoidance not fully tuned. - -## 0.4.0 - -### New Features - -- Improved wireless charger docking workflow and added ROS Noetic - docking support. -- Added option to record videos from cameras. -- Improved Docker setup to allow concurrent installation with - IndoorNav. -- Added initial support for integration with - [Formant](https://formant.io/). -- Added Docker installation support for Jackal and Warthog robots. - -### Bug Fixes - -- 480: Added rate limiter for continuous planner. -- 490: Fixed base station survey pop up to better reflect survey time. - -### Known Issues - -- 131: Software upgrade process not documented fully. - -## 0.3.0 - -### New Features - -- Upgraded from ROS Melodic to ROS Noetic. -- Published initial performance metrics. -- Updated system architecture to work in Docker containers. - -### Bug Fixes - -- 266: Allowed map offsets to be set more than once without needing to - reset them back to zero. -- 365: Updated costmap to handle large stop distances properly. -- 377: Fixed handling of goal tolerances of 0.02m or less. -- 389: Fixed issue with goal being skipped in some cases where final - heading was specified. - -### Known Issues - -- 131: Software upgrade process not documented fully. -- 150: Docking not yet implemented in Noetic. - +--- +title: Release Notes +sidebar_label: Release Notes +sidebar_position: 2 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +import Style from '/assets/css/changelog.css'; + +
+ +## 0.10.0 + +### New Features + +- Added the ability to start mission from a specific Waypoint +- Added the ability to resume mission from current location +- Added the option to include on-start and on-stop tasks to a Mission +- Added the option to continue a Mission if a Task should fail +- Full release of the API examples repository to the public (link API examples top level page) + +### API Features + +- Action definition changes (see [API Endpoints](./api/api_endpoints/autonomy_api)) + - Mission.action added from_start and *start_waypoint_uuid* fields + - ExecuteMissionByUuid.action: added from_start and *start_waypoint_uuid* fields +- Message Definition changes + - Mission.msg: added an array of on_start and and array of on_stop tasks fields + - Task.msg: added a boolean allow_failure field +- Updated /safety/safety_stop message type (see [Definitions](./api/api_endpoints/definitions.mdx#msg-safety)) +- Added import/export services for /dock, /mission_manager/ and /mission_scheduler features + +### Bug Fixes + +- 1546: Robot cannot start mission part-way through if a task is assigned on any Waypoint prior to its location +- 1764: Importing missions with docking tasks fails to bring in docks + +### Known Issues + +- 1396: Robot gets temporarily stuck at start of mission when near a Waypoint +- 1844: [MPC] Maximum acceleration param doesn't appear to have any effect + +## 0.9.0 + +### New Features + +- Operators can now Schedule Missions to run at specific times (see [Mission Scheduler](./features/mission_scheduler.mdx)) +- Added in support for BulletCat12 Microhard WiFi and Cellular connections +- Allow Audio recording as both tasks and manual operations if UGV has Microphones +- Create custom tasks that can be run during missions (see [Custom Tasks](./features/custom_tasks.mdx)) +- If installed with PDU, UGV can be set to Low Power mode to better conserve power +- New navigation topics added to ROS Autonomy API (see [API Endpoints](./api/api_endpoints/autonomy_api.mdx)): + - /navigation/progress + - /navigation/motion_state + - /navigation/metrics +- Improved precision of docking +- Improved autonomy feedback when something goes wrong in the mission to increase the diagnosability of the error +- Updated Navigation features available to the customer: + - Continuous Replanning renamed to Continuous Planning and is always enabled. + - Constrained Planning is always enabled. Environment Variable to update the path constraint has been modified + (see [Navigation](./features/navigation.mdx)) + - Removed Obstacle Avoidance Mode. The UGV will always attempt to avoid obstacles. + - Removed Path Smoothing. This is always enabled. + - Docking feature added for customers who have purchased a dock. + +### Bug Fixes + +- 1324: Allow single Waypoint missions and/or tasks on first waypoint (required for undocking through tasks). +- 1340: Undocking not working through tasks +- 1607: Fixed MovePTZ task failures + +### Known Issues + +- 131: Software upgrade process not documented fully. +- 609: Realsense D435 collision avoidance not fully tuned. +- 751: Wireless icon in UI doesn't work for Ubiquity hardware. +- 1396: Robot gets temporarily stuck at start of mission when near a Waypoint. +- 1546: Robot cannot start mission part-way through if a task is assigned on any Waypoint prior to its location. + +## 0.8.0 + +### New Features + +- Inertial Measurement Units (IMUs) integrated into localization. +- Added localization status topic (see [API Endpoints](./api/api_endpoints/autonomy_api.mdx#localizationstatus)). +- Added re-localization service (see [API Endpoints](./api/api_endpoints/definitions.mdx#srv-reset-localization)). +- Additional diagnostic information in the status view. +- Docking improvements including: multiple docks, visual representation of docks on map, + local docking/undocking through teleop view. Docking only functional with 2D LiDARs. +- Customization & Tuning Appendix C added. Lists of tuning parameters for navigation + and collision avoidance are now available. As well as, instructions/process on how to + tune UGVs with differential drive dynamics. Instructions for UGVs with Ackermann dynamics + are on their way. + +### Bug Fixes + +- 1134: Display/Hide Datum Point not working. +- 1139: Issues with non-husky platforms. +- 1137: Refreshing page re-enables edit button while mission running. +- 1276: Feedback added for incorrect first Waypoint placement. + +### Known Issues + +- 131: Software upgrade process not documented fully. +- 609: Realsense D435 collision avoidance not fully tuned. +- 751: Wireless icon in UI doesn't work for Ubiquity hardware. +- 1138: Issues with greying out Waypoints in edge cases. +- 1324: Allow single Waypoint missions and/or tasks on first waypoint (required for undocking through tasks). +- 1340: Undocking not working through tasks. + +## 0.7.0 + +### New Features + +- Goal terminology has been removed from the mission generation nomenclature (see + [Definitions](./web_user_interface/ui_autonomous_mode.mdx#definitions)) + Users can now add tasks, apply final headings, and set navigation tolerances + to any Waypoint in a Mission. +- Drag and Drop of Waypoints now available in Edit Mode. +- New Waypoints can be inserted between existing Waypoints in a Mission. +- Mission API now available to create/edit/load missions, waypoints and tasks. +- Mission execution via mission ID is now available. +- The base station location is now displayed in the UI after carrying out an automated survey. +- New coloring scheme for GNSS status icons to provide more accurate information. + +### Bug Fixes + +- 996: Axis camera missing ptz_state + +### Known Issues + +- 131: Software upgrade process not documented fully. +- 609: Realsense D435 collision avoidance not fully tuned. +- 751: Wireless icon in UI doesn't work for Ubiquity hardware. +- 1134: Display/Hide Datum point not working. +- 1137: Refreshing page re-enables edit button while mission running. +- 1138: Issues with greying out Waypoints in edge cases. + +## 0.6.0 + +### New Features + +- OutdoorNav ROS API updated. API now divided into Platform and + Autonomy sections. See [API Overview](./api/api_overview.mdx) + for more details. +- Simulation environment created with charge dock, base station and + camera plugins. +- Added deviation path visualization to UI when constrained replanning + is enabled. +- Modified goalpoint icons to reflect tasks assigned to them. +- Added the ability to record rosbags from UI. +- Added GPS signal strength to status page. +- Added improvements to PTZ controls (cosmetic changes, ability to + disable zoom, added a reset mark). +- User can set map source from OpenStreet, MapBox, Bing Maps, or + custom map tiles through UI. + +### Bug Fixes + +- 632: Prevent users from changing mission while a mission is running. +- 661: Removed map view when no map is provided in default-state.json. + file. +- 712: Fixed front end hanging when user opens menu from any view + other than main view. +- 716: Removed connecting lines from disabled goals. + +### Known Issues + +- 131: Software upgrade process not documented fully. +- 609: Realsense D435 collision avoidance not fully tuned. +- 751: Wireless icon in UI doesn't work for Ubiquity hardware. +- 756: Waypoints stop turning grey when they are hit if a waypoint is + skipped. + +## 0.5.0 + +### New Features + +- Sensor Kit Options: Starter, Standard, Backpack. +- New localization module. +- Added support for UBlox F9K and F9P GNSS receivers in the + localization module. +- Added support for either single or dual Swiftnav Duro/Piksi GNSS + receiver(s) in the localization module. +- Added support for Realsense D435 camera in collision avoidance + module. +- New/updated user modifiable environment variables for sensor and + navigation tuning. +- Added a Virtual Guided tour of the application for first time users. +- Added StreetView and Bing map tiles (to existing MapBox tile). +- Allow users to specify custom map tile source. +- Added cosmetic changes to traversed waypoints as well as a robot. + status icon with ROS topic health information. + +### Bug Fixes + +- 253: Replace default camera image for camera views when stream is + unavailable. +- 281: Fixed navigation latched in a PAUSE state. +- 574: Fixed map settings page to not rerender when robots position + changes. + +### Known Issues + +- 131: Software upgrade process not documented fully. +- 609: Realsense D435 collision avoidance not fully tuned. + +## 0.4.0 + +### New Features + +- Improved wireless charger docking workflow and added ROS Noetic + docking support. +- Added option to record videos from cameras. +- Improved Docker setup to allow concurrent installation with + IndoorNav. +- Added initial support for integration with + [Formant](https://formant.io/). +- Added Docker installation support for Jackal and Warthog robots. + +### Bug Fixes + +- 480: Added rate limiter for continuous planner. +- 490: Fixed base station survey pop up to better reflect survey time. + +### Known Issues + +- 131: Software upgrade process not documented fully. + +## 0.3.0 + +### New Features + +- Upgraded from ROS Melodic to ROS Noetic. +- Published initial performance metrics. +- Updated system architecture to work in Docker containers. + +### Bug Fixes + +- 266: Allowed map offsets to be set more than once without needing to + reset them back to zero. +- 365: Updated costmap to handle large stop distances properly. +- 377: Fixed handling of goal tolerances of 0.02m or less. +- 389: Fixed issue with goal being skipped in some cases where final + heading was specified. + +### Known Issues + +- 131: Software upgrade process not documented fully. +- 150: Docking not yet implemented in Noetic. +
\ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.10.0/safety.mdx b/outdoornav_user_manual_versioned_docs/version-0.10.0/safety.mdx index ea70a51b..ba0e8ddf 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.10.0/safety.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.10.0/safety.mdx @@ -1,144 +1,144 @@ ---- -title: Safety -sidebar_label: Safety -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -## Important Safety Information - -The use of Unmanned Ground Vehicles (UGVs) can result in unexpected and -dangerous behavior. Although Clearpath Robotics endeavors to create safe -and reliable software and systems, autonomous outdoor UGVs should not be -considered safe for unsupervised use around humans or other obstacles. -No level of safety and reliability of software and non-safety rated -hardware components is guaranteed. - -Clearpath strongly recommends that users carry out a risk assessment -related to their application and deployment of autonomous UGVs. The -ISO-12100 standard [Risk assessment and risk reduction](https://www.iso.org/standard/51528.html) provides guidance on -performing risk assessments. - -Functional safety in robotics is often achieved through the use of -safety related parts and control systems to minimize risks such as -safety LiDARs for obstacle detection. These hardware components must be -designed into the UGV hardware and can be tightly integrated with -navigation software. Clearpath Robotics recommends that this process be -undertaken after the product or process has been fully defined. It can -be a significant design effort. - -## Safety Notice Levels - -For Clearpath Robotics hardware and software, the risk level is captured -using the following types of labels. - -![](/img/outdoornav_images/safety_information.png) - -## General Hazard Labels - -Review the following to learn more about the labels that may be used on -Clearpath Robotics products. Hazards can also apply to attachments and -accessories used in conjunction with a Clearpath Robotics product. UGVs -from other providers may present additional hazards and risks. - -_General Hazards_ - -| Label | Label Title | Label Description | -|--------------------------------------------------------------------------------------|----------------------|------------------------------------------| -|
| Automatic Motion Hazard | Clearpath Robotics UGVs may begin moving suddenly, either autonomously or when being driven manually. Always be aware of Clearpath Robotics products and their potential for movement. | -|
| Crushing Risk | Objects or personnel can be crushed between the Clearpath Robotics UGV and another object. Keep hands and other objects clear of crush points at all times. Keep clear of all docking Clearpath Robotics UGVs. | -|
| Electrical Shock Risk | Clearpath Robotics UGVs contain circuitry and batteries that may cause electrical shock if not properly insulated. | -|
| Entanglement Risk | Clearpath Robotics UGVs as well as their cameras can lead to entanglement of hair or dangling materials during their rotation. Keep hair and dangling materials away from Clearpath Robotics UGVs during motion. | -|
| Environmental Hazard | Clearpath Robotics UGVs contain batteries and materials that may require special disposal methods. Consult local regulations. | -|
| Falling Object Risk | Beware of objects that may have shifted in any Clearpath Robotics UGV crate as they pose a risk of falling when opened. | -|
| High Surface Temperature Risk | UGV computer heat sinks and UGV motors can become extremely hot during operation. | -|
| Impact Risk | Clearpath Robotics UGVs travelling through a facility can potentially impact objects and personnel. Keep clear of all docking Clearpath Robotics UGVs. | -|
| Laser Radiation Risk | Clearpath Robotics UGVs may use Class 1 laser products. These provide no hazard during normal use, however it is not recommended to stare directly into the beam(s). | -|
| Material Hazard - Lithium | Lithium UGV batteries contain harmful material. Always use proper handling procedures when handling UGV batteries. | -|
| Manual Load Lifting Risk | Always use ergonomic techniques when manually lifting loads. | -|
| Pinching Risk | Keep hands and other objects clear of pinch points at all times. Keep clear of all docking Clearpath Robotics UGVs. | -|
| Radio Frequency Risk | Clearpath Robotics UGVs and/or accessories may use radio frequency (RF) radiating antennas. These provide no hazard during normal use, however prolonged exposure around the antenna is not recommended. | -|
| Tripping Hazard | Clearpath Robotics products may pose a tripping hazard. | - -## Safety Awareness - -Personnel present during the operation of an Unmanned Ground Vehicle -(UGV) need to be made aware or be accompanied by personnel who are -familiar with the specific risks and hazards associated with autonomous -mobile robots (AMR). The following checklist identifies basic topics -that should be addressed by site-specific worker and visitor safety -orientation training. - -
- -
- -- Proper PPE must be worn, including safety footwear (ie. steel toe). -- Crossing into the path of a moving UGV should be avoided, as well as - placing or throwing obstacles into the path of a moving UGV. - -
- -
- -- Be aware that a UGV can be anywhere in the operating area of the - facility at any time, and may pose a tripping hazard even when not - in motion. -- Personnel need to be aware of the UGV docking and charging areas, - where detection fields are reduced. -- Personnel should be aware that Clearpath Robotics UGVs LiDAR safety - scanners use a class 1 laser and high intensity LED. -- Personnel should keep all loose clothing and body parts away from - UGVs, accessories, attachments, and payloads, while they are in - autonomous operation. Using an Emergency Stop button is the only - acceptable manner of interacting with a Clearpath Robotics UGV or - attachment while it is being operated autonomously. - -In addition to the preceding basic items for all workers and visitors, -the following should be considered for facility personnel, including -drivers of other UGVs: - -- When required to move a product manually, personnel must ensure it - is in an Emergency Stop state or shut down completely and should not - push manually for prolonged periods. -- Alert personnel that while operating a Clearpath Robotics UGV - outside of the Autonomy State, they are solely responsible for - obstacle and collision avoidance. -- Maintenance of a Clearpath UGV not outlined in either this document - or the operations and maintenance manual can only be performed by a - Clearpath Robotics Authorized Personnel. - -To reduce the risk of harming people or damaging properties, a trained -operator must monitor the behavior of the UGV under autonomous -navigation mode at all times. The operator should use the wireless -emergency stop device to immediately avert any possible damaging or -dangerous behavior from the UGV. Failure in proper use of the software -might result in collision of the UGV into objects. - -- The minimum height for detecting obstacles under ideal operation - conditions (flat ground, no snow/rain/fog, normal operation of the - LiDAR, etc) when using the standard Clearpath Robotics OutdoorNav - Hardware package on a Husky is typically 0.2 meters high at 2.3 - meters distance away from the UGV. Your UGV may differ. Ensure that - low-height obstacles are removed from the potential path of the UGV - prior to operation. -- OutdoorNav Software does not have negative obstacle detection - capability. This means that your UGV will not detect stairs, cliffs - or edges and may drive off these obstacles causing harm to people or - properties as well as potentially damage the UGV. -- Adverse weather conditions may obscure obstacle detection and - avoidance data from the VLP-16 LiDAR. Obstacle detection and - avoidance may not function properly in snow, rain or fog. -- The current configurations of the OutdoorNav Software will continue - navigation if the WiFi disconnects or goes out of range. The Web UI - will reconnect once the WiFi has reconnected but certain functions - of the Web UI may be limited such as the ability to issue a stop - command or send new missions to the UGV. -- If connection of the UGV to the base station is lost (e.g., WiFi - goes out of range, low battery level, etc), UGV will not receive RTK - corrections from the base station. This can potentially decrease the - accuracy of the GPS signal which can subsequently degrade path - following performance of your system. -- Obstacle detection and avoidance is disabled during the docking and - undocking operations. Keep this area clear of people and objects. +--- +title: Safety +sidebar_label: Safety +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +## Important Safety Information + +The use of Unmanned Ground Vehicles (UGVs) can result in unexpected and +dangerous behavior. Although Clearpath Robotics endeavors to create safe +and reliable software and systems, autonomous outdoor UGVs should not be +considered safe for unsupervised use around humans or other obstacles. +No level of safety and reliability of software and non-safety rated +hardware components is guaranteed. + +Clearpath strongly recommends that users carry out a risk assessment +related to their application and deployment of autonomous UGVs. The +ISO-12100 standard [Risk assessment and risk reduction](https://www.iso.org/standard/51528.html) provides guidance on +performing risk assessments. + +Functional safety in robotics is often achieved through the use of +safety related parts and control systems to minimize risks such as +safety LiDARs for obstacle detection. These hardware components must be +designed into the UGV hardware and can be tightly integrated with +navigation software. Clearpath Robotics recommends that this process be +undertaken after the product or process has been fully defined. It can +be a significant design effort. + +## Safety Notice Levels + +For Clearpath Robotics hardware and software, the risk level is captured +using the following types of labels. + +![](/img/outdoornav_images/safety_information.png) + +## General Hazard Labels + +Review the following to learn more about the labels that may be used on +Clearpath Robotics products. Hazards can also apply to attachments and +accessories used in conjunction with a Clearpath Robotics product. UGVs +from other providers may present additional hazards and risks. + +_General Hazards_ + +| Label | Label Title | Label Description | +|--------------------------------------------------------------------------------------|----------------------|------------------------------------------| +|
| Automatic Motion Hazard | Clearpath Robotics UGVs may begin moving suddenly, either autonomously or when being driven manually. Always be aware of Clearpath Robotics products and their potential for movement. | +|
| Crushing Risk | Objects or personnel can be crushed between the Clearpath Robotics UGV and another object. Keep hands and other objects clear of crush points at all times. Keep clear of all docking Clearpath Robotics UGVs. | +|
| Electrical Shock Risk | Clearpath Robotics UGVs contain circuitry and batteries that may cause electrical shock if not properly insulated. | +|
| Entanglement Risk | Clearpath Robotics UGVs as well as their cameras can lead to entanglement of hair or dangling materials during their rotation. Keep hair and dangling materials away from Clearpath Robotics UGVs during motion. | +|
| Environmental Hazard | Clearpath Robotics UGVs contain batteries and materials that may require special disposal methods. Consult local regulations. | +|
| Falling Object Risk | Beware of objects that may have shifted in any Clearpath Robotics UGV crate as they pose a risk of falling when opened. | +|
| High Surface Temperature Risk | UGV computer heat sinks and UGV motors can become extremely hot during operation. | +|
| Impact Risk | Clearpath Robotics UGVs travelling through a facility can potentially impact objects and personnel. Keep clear of all docking Clearpath Robotics UGVs. | +|
| Laser Radiation Risk | Clearpath Robotics UGVs may use Class 1 laser products. These provide no hazard during normal use, however it is not recommended to stare directly into the beam(s). | +|
| Material Hazard - Lithium | Lithium UGV batteries contain harmful material. Always use proper handling procedures when handling UGV batteries. | +|
| Manual Load Lifting Risk | Always use ergonomic techniques when manually lifting loads. | +|
| Pinching Risk | Keep hands and other objects clear of pinch points at all times. Keep clear of all docking Clearpath Robotics UGVs. | +|
| Radio Frequency Risk | Clearpath Robotics UGVs and/or accessories may use radio frequency (RF) radiating antennas. These provide no hazard during normal use, however prolonged exposure around the antenna is not recommended. | +|
| Tripping Hazard | Clearpath Robotics products may pose a tripping hazard. | + +## Safety Awareness + +Personnel present during the operation of an Unmanned Ground Vehicle +(UGV) need to be made aware or be accompanied by personnel who are +familiar with the specific risks and hazards associated with autonomous +mobile robots (AMR). The following checklist identifies basic topics +that should be addressed by site-specific worker and visitor safety +orientation training. + +
+ +
+ +- Proper PPE must be worn, including safety footwear (ie. steel toe). +- Crossing into the path of a moving UGV should be avoided, as well as + placing or throwing obstacles into the path of a moving UGV. + +
+ +
+ +- Be aware that a UGV can be anywhere in the operating area of the + facility at any time, and may pose a tripping hazard even when not + in motion. +- Personnel need to be aware of the UGV docking and charging areas, + where detection fields are reduced. +- Personnel should be aware that Clearpath Robotics UGVs LiDAR safety + scanners use a class 1 laser and high intensity LED. +- Personnel should keep all loose clothing and body parts away from + UGVs, accessories, attachments, and payloads, while they are in + autonomous operation. Using an Emergency Stop button is the only + acceptable manner of interacting with a Clearpath Robotics UGV or + attachment while it is being operated autonomously. + +In addition to the preceding basic items for all workers and visitors, +the following should be considered for facility personnel, including +drivers of other UGVs: + +- When required to move a product manually, personnel must ensure it + is in an Emergency Stop state or shut down completely and should not + push manually for prolonged periods. +- Alert personnel that while operating a Clearpath Robotics UGV + outside of the Autonomy State, they are solely responsible for + obstacle and collision avoidance. +- Maintenance of a Clearpath UGV not outlined in either this document + or the operations and maintenance manual can only be performed by a + Clearpath Robotics Authorized Personnel. + +To reduce the risk of harming people or damaging properties, a trained +operator must monitor the behavior of the UGV under autonomous +navigation mode at all times. The operator should use the wireless +emergency stop device to immediately avert any possible damaging or +dangerous behavior from the UGV. Failure in proper use of the software +might result in collision of the UGV into objects. + +- The minimum height for detecting obstacles under ideal operation + conditions (flat ground, no snow/rain/fog, normal operation of the + LiDAR, etc) when using the standard Clearpath Robotics OutdoorNav + Hardware package on a Husky is typically 0.2 meters high at 2.3 + meters distance away from the UGV. Your UGV may differ. Ensure that + low-height obstacles are removed from the potential path of the UGV + prior to operation. +- OutdoorNav Software does not have negative obstacle detection + capability. This means that your UGV will not detect stairs, cliffs + or edges and may drive off these obstacles causing harm to people or + properties as well as potentially damage the UGV. +- Adverse weather conditions may obscure obstacle detection and + avoidance data from the VLP-16 LiDAR. Obstacle detection and + avoidance may not function properly in snow, rain or fog. +- The current configurations of the OutdoorNav Software will continue + navigation if the WiFi disconnects or goes out of range. The Web UI + will reconnect once the WiFi has reconnected but certain functions + of the Web UI may be limited such as the ability to issue a stop + command or send new missions to the UGV. +- If connection of the UGV to the base station is lost (e.g., WiFi + goes out of range, low battery level, etc), UGV will not receive RTK + corrections from the base station. This can potentially decrease the + accuracy of the GPS signal which can subsequently degrade path + following performance of your system. +- Obstacle detection and avoidance is disabled during the docking and + undocking operations. Keep this area clear of people and objects. diff --git a/outdoornav_user_manual_versioned_docs/version-0.10.0/simulation.mdx b/outdoornav_user_manual_versioned_docs/version-0.10.0/simulation.mdx index 44cff5f7..86043ef7 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.10.0/simulation.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.10.0/simulation.mdx @@ -1,20 +1,20 @@ ---- -title: Simulation -sidebar_label: Simulation -sidebar_position: 9 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -Simulation with OutdoorNav Software can be useful in several ways. - -- It provides an easy (and low cost!) way of evaluating the main - features in OutdoorNav Software prior to purchasing. -- It allows missions to be planned, executed, and refined in a - repeatable way prior to deployment on UGV hardware. This can be - particularly helpful when integrating OutdoorNav into a larger - software solution, such as a fleet manager. - -At present, OutdoorNav Software simulation is restricted to internal -Clearpath Robotics development and select partners, but is planned for +--- +title: Simulation +sidebar_label: Simulation +sidebar_position: 9 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +Simulation with OutdoorNav Software can be useful in several ways. + +- It provides an easy (and low cost!) way of evaluating the main + features in OutdoorNav Software prior to purchasing. +- It allows missions to be planned, executed, and refined in a + repeatable way prior to deployment on UGV hardware. This can be + particularly helpful when integrating OutdoorNav into a larger + software solution, such as a fleet manager. + +At present, OutdoorNav Software simulation is restricted to internal +Clearpath Robotics development and select partners, but is planned for full deployment. Check back soon for further details. \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.10.0/support.mdx b/outdoornav_user_manual_versioned_docs/version-0.10.0/support.mdx index 9212d99f..4da40f82 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.10.0/support.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.10.0/support.mdx @@ -1,11 +1,11 @@ ---- -title: Support -sidebar_label: Support -sidebar_position: 11 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -import OutdoorNavSupport from "/components/support_outdoornav.mdx"; - +--- +title: Support +sidebar_label: Support +sidebar_position: 11 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +import OutdoorNavSupport from "/components/support_outdoornav.mdx"; + \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.10.0/web_user_interface/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.10.0/web_user_interface/_category_.json index a07ca158..31b78035 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.10.0/web_user_interface/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.10.0/web_user_interface/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Web User Interface", - "position": 6 -} +{ + "label": "Web User Interface", + "position": 6 +} diff --git a/outdoornav_user_manual_versioned_docs/version-0.10.0/web_user_interface/ui_autonomous_mode.mdx b/outdoornav_user_manual_versioned_docs/version-0.10.0/web_user_interface/ui_autonomous_mode.mdx index 164380eb..66d0ee9d 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.10.0/web_user_interface/ui_autonomous_mode.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.10.0/web_user_interface/ui_autonomous_mode.mdx @@ -1,411 +1,411 @@ ---- -title: Web UI Autonomous Mode -sidebar_label: Web UI Autonomous Mode -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -![](/img/outdoornav_images/gps_danger.png) - -Ensure that the [Safety](../safety.mdx) document has been -read and the user is aware of possible hazards when using this product as well as the safety -methods that can be used to stop the moving UGV. - -The Autonomous Mode of OutdoorNav Software is a set of robotic -navigation modules that enables robotics developers to define and then -autonomously execute missions on UGVs, getting work done without -requiring direct operator action. This software is composed of four main -modules: localization, navigation, safety monitoring and user control -unit. This a combination of Clearpath's proprietary packages and custom -configured open-source packages from ROS community. Please see the -software architecture section for more information. - -## Definitions {#definitions} - -The list below defines what a "Mission" is as well as its components. -These components are referred to throughout this manual. - -- **Mission** A Mission is a set of one or more Waypoints. -- **Path** The list of Waypoints that will determine the path - for the specific Mission. -- **Waypoint** A Waypoint is any geographical point referenced by its - position relative to the datum in meters. -- **Task** A Task is an automated activity or wait time implemented as - a ROS action at a specific Waypoint. Tasks are called in the order they are - added to a Waypoint. -- **Ghost Waypoint** A transparent waypoint that is not part of the mission. This - Waypoint appears between two other waypoints when in edit mode. The user can - drag and drop this ghost waypoint to add a new waypoint to the mission between - the other two waypoints. - -## Map Settings - -
-
- -
Map settings
-
-
- -To access the Map Settings: Menu → Settings → Map: - -1. **Map Offset:** The map tiles used in this software are not - perfectly aligned with the real world. Therefore, the user may need - to apply an offset to the map so that the UGV's position in the - real world matches its position on the map. -2. **Change Datum:** The datum is represented by a blue marker on the - map and should be set to a location within 10km of the test site. - The user can change this value in the Map Settings page. Enter the - new values and click the "Set Datum" button. - -## Mission Creation - -To create a new Mission first ensure that the UI is in "Edit Mode" ( -select the pencil icon in the bottom bar). Then open the drop down menu in the bottom -bar and select the "Add Mission" option. This will allow the user to create a new Mission -which can then be defined with Waypoints. - -### Waypoint Mode - -To add new Waypoints to a Mission while edit mode is enabled select the -"Waypoint Mode" button. This will allow the user to place Waypoints at -locations where the user clicks on the map. These will appear as red -Waypoints with the exception of the first waypoint (green) and the last waypoint (yellow). - -:::note - -**The first Waypoint in the Mission must be within 3.0 meters of the UGV's current position.** - -::: - -As Waypoints are placed, a "ghost waypoint" will appear between each pair of real -Waypoints and can be dragged to a new spot to insert a real Waypoint -between them. Waypoints can also be dragged and dropped on the map to -modify their positions. - -### Waypoint Panel - -
-
- -
Waypoint Panel
-
-
- -Enable the "Waypoint Panel" toggle to open the list of available Waypoints -within the selected Mission as shown in the figure above. The user can -now rearrange the list, rename Waypoints, add Tasks to the Waypoints, -and modify the final heading and/or tolerance of each Waypoint. The user can -also rename the mission and apply Tasks to when the Mission starts and stops. - -### Rename Mission - -To rename the Mission click the Mission name as it appears in the upper left -hand corner. This should change the text into an input box that can then be -modified. Press enter/click aside to save the change. - -### Mission Tasks - -A Mission can have Tasks assigned to when it starts and when it stops. These -Tasks will run in the order they are listed in and will always run whenever the Mission -starts or stops. - -### Rearrange List of Waypoints - -Waypoints can be rearranged in order of operation in the list. To do this, -enable the "Waypoints Panel" toggle to access the list of Waypoints. Here, the -user will be able to drag and drop the Waypoints to reorder them. - -### Rename Waypoint - -By default, once Waypoints are created they are assigned a default name -which is the word "Waypoint" followed by a numeric value representing the -the number of Waypoints that have been created plus one. The user has the -option to rename these Waypoints in order for them to have more descriptive -meaning. - -To rename a Waypoint follow these steps: - -1. Enable the "Waypoint Panel" toggle. See [Waypoint Panel](#waypoint-panel) - for further details. -2. Click the name of the Waypoint which the user wants to rename. -3. Erase the current name and type the new name. - -### Add Task to Waypoint {#add-task} - -
-
- -
Add Task to Waypoint
-
-
- -To add a Task to the end of a Mission: - -1. Click the "+" icon (beside the Gear icon) in the Waypoint Row the Task is - to be added to. - -2. Click the "Add Task" Button that has appeared. - -3. Select the Task from the dropdown list. Standard waypoint icons will be - replaced accordingly depending on the task selected (waypoint icons will keep the colours - assigned to them based on placement). Waypoints in the table will also have a small icon to indicate - if tasks are assigned to the Waypoint accordingly. - - - Dock UGV: - Will dock the UGV to begin charging the UGV's - battery. See [Autonomous Docking](#autonomous-docking) - for more information on the autonomous docking feature. - - - Move PTZ: - Will move the PTZ camera to the position selected - in the task settings. - - Settings: Select the camera position. See - [Pan-Tilt-Zoom (PTZ) View](ui_overview.mdx#ptz-view) for details on how to - save camera positions. - - - Save Image: - Will save an image using one of the UGV camera(s) - to the **~/clearpath_files** folder and can be retrieved using a tool - such as Filezilla. - - Settings: Select which camera the image will be saved from. - - - Start/Stop Video Recording: - Will start/stop recording video using one of the - UGV camera(s) to the **~/clearpath_files** folder and can be retrieved - using a tool such as Filezilla. - - Settings: Select which camera the recording will come from. - - - Undock UGV: - Will undock the UGV from the autocharge dock. Once - completed, the UGV can be sent on autonomous missions. It is - often recommended to place the undock task first in the list of Waypoints or as a start Mission Task; - that way, the UGV will automatically continue towards its next - Waypoint once undocked. - - :::note - - If the users places the Undock Task in the start Mission event the first Waypoint should be - approximately 2-3 meters behind the UGVs docked position. - - ::: - - - Wait: - Will pause and wait for the specified number of - seconds at the end of the Waypoint. - - Settings: Enter the amount of time to wait, in seconds. - - - New Custom Task: - Creates a new custom task that is defined by the user. -
-
- -
Custom Task Settings Dialog
-
-
- - - Task Name: Task name that will show up in the list of available tasks on the UI. - - Action Server Name: The namespace of the custom task action server. - - Float CSV: A list of comma seperated float values that consist of the numerical inputs to the custom task. - - String CSV: A list of comma seperated string values that consist of the semantic inputs to the custom task. - - See the [Custom Tasks](../features/custom_tasks.mdx) section - for details on how to develop custom tasks for your application. -4. The check box next to the Task name controls mission behaviour in the event that the Task fails. If the checkbox is - checked the Mission will proceed to the next step in it's process, such as the next task or navigating to the next Waypoint. - If its not checked, the Mission will become cancelled upon the Task's failure. -5. Click the Gear icon next to the selected Task to add the required - Settings. - - :::note - - If a waypoint has more than one task assigned to it, the icon will - be replaced with - - ::: - -### Advanced Settings - - - -#### Waypoint Heading - -When creating a Waypoint, the user has the option of setting a final heading -for the Waypoint. For example, when creating a Waypoint at an inspection point, -the user may want the UGV to navigate and stop facing a certain -direction. In [Waypoint Panel](#waypoint-panel), the list of -Waypoints can be seen and the advanced settings of each Waypoint can be accessed -by clicking the "Gear" icon. - -To set the Waypoint's final heading, the user will need to check the -"Final Heading Enabled" checkbox and enter the heading value in -degrees. The heading indicator on the top bar can be used to help set -this value. See the figure below showing the advanced settings. - -:::note - -Waypoints that have a heading or tolerance assigned to them will show a different colour -on their settings icon. - -::: - -
-
- -
Waypoint Advanced Settings
-
-
- -The heading that has been entered will only be applied to the Waypoint -(ie. the robot will only align itself with the correct heading at the -Waypoint). If the robot is required to be at specific headings at -other Waypoints the user will need to enter these in for each specific Waypoint. - -#### Waypoint Tolerance - -When creating a Mission, the user has the option of setting a specific -tolerance for each Waypoint. By default, the Waypoint position and orientation -tolerances are 0.3 meters and 180°, respectively. If a specific Waypoint -requires that the tolerances be either increased or decreased, these -values can be modified in the advanced settings. For example, if it's -required that the position and/or orientation at a Waypoint be very accurate, -such as 0.1 meters position and 5° orientation, or looser at 1.0 meter -position, this can be done within these settings. - -In [Waypoint Panel](#waypoint-panel), the list of waypoints can be -seen and the advanced settings of each Waypoint can be accessed by clicking -the "Gear" icon. To set the Waypoint's tolerance, the user will need to -check the "Waypoint Tolerance Enabled" checkbox and enter the position and -orientation values, in meters and degrees, respectively. - -### Constrained Replanning {#constrained_path} - -To enable the visualization of the contrained area of traversal (defined by -the path contraint around the reference path), navigate to the General settings -in the hamburger menu. Enable/disable the visualization of the path ui_route_deviation -distance using the switch button (see image below). - -
-
- -
General settings
-
-
- -Once enabled the area of possible deviation will show -over the planned route as can be seen in the following figure. - -
-
- -
Route with maximum path deviation
-
-
- -:::note - -If the UGV is manually driven outside of the constrained replanning area -while a Mission is running, the Mission will not be able to be resumed until the -UGV is returned within the navigable area defined by the path contraint. - -::: - -## Mission Execution - -### Start Mission - -There are multiple ways to start a Mission. At the bottom of the UI, the user has the ability to start the currently -selected Mission by clicking the "Play" button . -Starting the Mission this will start the Mission from the first Waypoint. The user may also select the drop down next to the button -to start the Mission from the current UGV position. This is a useful way to start a Mission in the event that the UGV was blocked by -obstacles that were later moved. Another way that a user can start a Mission is by selecting a waypoint in edit mode and then clicking on -"Start Mission from Here" option. If the UGV is within 3 metres of that Waypoint the Mission will start from there. - -
-
- -
Starting from a specific Waypoint
-
-
- -When the Mission has been started the Play button will turn green, regardless of how it has been started. - -### Pause Mission - -At the bottom of the UI, the user has the ability to pause the currently -running mission by clicking the "Pause" button . When the -mission has been paused this button will turn yellow. Pausing a mission -allows the user to take time to look around with the camera or to -teleoperate the UGV to a nearby location to perform an inspection. For -ease of operation, the user must PAUSE the active mission if the user -wants to teleoperate the UGV. - -### Cancel Mission/Task - -At the bottom of the UI, the user has the ability to stop the currently -running mission or task by clicking the "Stop" button . When the -mission/task has been cancelled this button will turn red. The name of -the mission/task will be shown to be cancelled in the feedback bar. - -## Autonomous Docking - -
-
- -
Dock Icon
-
-
- -### Docking The UGV - -To dock the UGV autonomously, the user should follow these steps: - -- Enable the "Edit Mission" toggle. -- Create a Mission whose Waypoints approach the dock from the front and - whose final Waypoint is within the maximum predock distance which is shown as a circle around the dock. -- Enable the Waypoints Panel toggle to view the list of Waypoints, rename the last - Waypoint to "Dock Waypoint" or something descriptive and add the "Dock - UGV" Task to this Waypoint. If there is more than one dock in the system the user will - have to open the task options and select the dock name from the list. -- Run the Mission. - -### Undocking The UGV - -To undock the UGV autonomously, the user should follow these steps: - -- Enable the "Edit Mission" toggle. Select the "Waypoint Mode" - button. -- Select the Waypoint icon on the bottom bar to create a Waypoint at the - current location of the UGV. This step should either be it's own mission - or it should be the starting point of a mission. -- Enable the Waypoints Panel toggle to view the list of Waypoints, rename this - Waypoint to "Undock Waypoint" or something descriptive and add the - "Undock UGV" task to the Waypoint that was just created. -- Run the Mission. - -### Compatibility with a Doghouse - -In order for the autonomous docking feature to be compatible with a doghouse, the -doghouse must conform to a few specifications: - -- Must be installed on a flat surface, and have no elevation change between the - charge-deck and the outdoor surface (ie. no ramp into the doghouse). -- Must be greater than 1.2 m wide. -- Must be between 1.5 and 2.5 m long. -- Dock target should be installed centered along the back of the doghouse. - -### Recover from Failed Docking or Undocking - -If for any reason, the docking or undocking tasks fail, the user can: - -- Manually drive the UGV towards the dock target, aligning the - charging unit with the receiver on the UGV. -- Manually drive the UGV in reverse away from the dock target. It is - suggested that the user reverse roughly 2-3 meters away from the target, - then wait 1-2 minutes before starting any autonomous navigation - missions. +--- +title: Web UI Autonomous Mode +sidebar_label: Web UI Autonomous Mode +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +![](/img/outdoornav_images/gps_danger.png) + +Ensure that the [Safety](../safety.mdx) document has been +read and the user is aware of possible hazards when using this product as well as the safety +methods that can be used to stop the moving UGV. + +The Autonomous Mode of OutdoorNav Software is a set of robotic +navigation modules that enables robotics developers to define and then +autonomously execute missions on UGVs, getting work done without +requiring direct operator action. This software is composed of four main +modules: localization, navigation, safety monitoring and user control +unit. This a combination of Clearpath's proprietary packages and custom +configured open-source packages from ROS community. Please see the +software architecture section for more information. + +## Definitions {#definitions} + +The list below defines what a "Mission" is as well as its components. +These components are referred to throughout this manual. + +- **Mission** A Mission is a set of one or more Waypoints. +- **Path** The list of Waypoints that will determine the path + for the specific Mission. +- **Waypoint** A Waypoint is any geographical point referenced by its + position relative to the datum in meters. +- **Task** A Task is an automated activity or wait time implemented as + a ROS action at a specific Waypoint. Tasks are called in the order they are + added to a Waypoint. +- **Ghost Waypoint** A transparent waypoint that is not part of the mission. This + Waypoint appears between two other waypoints when in edit mode. The user can + drag and drop this ghost waypoint to add a new waypoint to the mission between + the other two waypoints. + +## Map Settings + +
+
+ +
Map settings
+
+
+ +To access the Map Settings: Menu → Settings → Map: + +1. **Map Offset:** The map tiles used in this software are not + perfectly aligned with the real world. Therefore, the user may need + to apply an offset to the map so that the UGV's position in the + real world matches its position on the map. +2. **Change Datum:** The datum is represented by a blue marker on the + map and should be set to a location within 10km of the test site. + The user can change this value in the Map Settings page. Enter the + new values and click the "Set Datum" button. + +## Mission Creation + +To create a new Mission first ensure that the UI is in "Edit Mode" ( +select the pencil icon in the bottom bar). Then open the drop down menu in the bottom +bar and select the "Add Mission" option. This will allow the user to create a new Mission +which can then be defined with Waypoints. + +### Waypoint Mode + +To add new Waypoints to a Mission while edit mode is enabled select the +"Waypoint Mode" button. This will allow the user to place Waypoints at +locations where the user clicks on the map. These will appear as red +Waypoints with the exception of the first waypoint (green) and the last waypoint (yellow). + +:::note + +**The first Waypoint in the Mission must be within 3.0 meters of the UGV's current position.** + +::: + +As Waypoints are placed, a "ghost waypoint" will appear between each pair of real +Waypoints and can be dragged to a new spot to insert a real Waypoint +between them. Waypoints can also be dragged and dropped on the map to +modify their positions. + +### Waypoint Panel + +
+
+ +
Waypoint Panel
+
+
+ +Enable the "Waypoint Panel" toggle to open the list of available Waypoints +within the selected Mission as shown in the figure above. The user can +now rearrange the list, rename Waypoints, add Tasks to the Waypoints, +and modify the final heading and/or tolerance of each Waypoint. The user can +also rename the mission and apply Tasks to when the Mission starts and stops. + +### Rename Mission + +To rename the Mission click the Mission name as it appears in the upper left +hand corner. This should change the text into an input box that can then be +modified. Press enter/click aside to save the change. + +### Mission Tasks + +A Mission can have Tasks assigned to when it starts and when it stops. These +Tasks will run in the order they are listed in and will always run whenever the Mission +starts or stops. + +### Rearrange List of Waypoints + +Waypoints can be rearranged in order of operation in the list. To do this, +enable the "Waypoints Panel" toggle to access the list of Waypoints. Here, the +user will be able to drag and drop the Waypoints to reorder them. + +### Rename Waypoint + +By default, once Waypoints are created they are assigned a default name +which is the word "Waypoint" followed by a numeric value representing the +the number of Waypoints that have been created plus one. The user has the +option to rename these Waypoints in order for them to have more descriptive +meaning. + +To rename a Waypoint follow these steps: + +1. Enable the "Waypoint Panel" toggle. See [Waypoint Panel](#waypoint-panel) + for further details. +2. Click the name of the Waypoint which the user wants to rename. +3. Erase the current name and type the new name. + +### Add Task to Waypoint {#add-task} + +
+
+ +
Add Task to Waypoint
+
+
+ +To add a Task to the end of a Mission: + +1. Click the "+" icon (beside the Gear icon) in the Waypoint Row the Task is + to be added to. + +2. Click the "Add Task" Button that has appeared. + +3. Select the Task from the dropdown list. Standard waypoint icons will be + replaced accordingly depending on the task selected (waypoint icons will keep the colours + assigned to them based on placement). Waypoints in the table will also have a small icon to indicate + if tasks are assigned to the Waypoint accordingly. + + - Dock UGV: + Will dock the UGV to begin charging the UGV's + battery. See [Autonomous Docking](#autonomous-docking) + for more information on the autonomous docking feature. + + - Move PTZ: + Will move the PTZ camera to the position selected + in the task settings. + + Settings: Select the camera position. See + [Pan-Tilt-Zoom (PTZ) View](ui_overview.mdx#ptz-view) for details on how to + save camera positions. + + - Save Image: + Will save an image using one of the UGV camera(s) + to the **~/clearpath_files** folder and can be retrieved using a tool + such as Filezilla. + + Settings: Select which camera the image will be saved from. + + - Start/Stop Video Recording: + Will start/stop recording video using one of the + UGV camera(s) to the **~/clearpath_files** folder and can be retrieved + using a tool such as Filezilla. + + Settings: Select which camera the recording will come from. + + - Undock UGV: + Will undock the UGV from the autocharge dock. Once + completed, the UGV can be sent on autonomous missions. It is + often recommended to place the undock task first in the list of Waypoints or as a start Mission Task; + that way, the UGV will automatically continue towards its next + Waypoint once undocked. + + :::note + + If the users places the Undock Task in the start Mission event the first Waypoint should be + approximately 2-3 meters behind the UGVs docked position. + + ::: + + - Wait: + Will pause and wait for the specified number of + seconds at the end of the Waypoint. + + Settings: Enter the amount of time to wait, in seconds. + + - New Custom Task: + Creates a new custom task that is defined by the user. +
+
+ +
Custom Task Settings Dialog
+
+
+ + - Task Name: Task name that will show up in the list of available tasks on the UI. + - Action Server Name: The namespace of the custom task action server. + - Float CSV: A list of comma seperated float values that consist of the numerical inputs to the custom task. + - String CSV: A list of comma seperated string values that consist of the semantic inputs to the custom task. + + See the [Custom Tasks](../features/custom_tasks.mdx) section + for details on how to develop custom tasks for your application. +4. The check box next to the Task name controls mission behaviour in the event that the Task fails. If the checkbox is + checked the Mission will proceed to the next step in it's process, such as the next task or navigating to the next Waypoint. + If its not checked, the Mission will become cancelled upon the Task's failure. +5. Click the Gear icon next to the selected Task to add the required + Settings. + + :::note + + If a waypoint has more than one task assigned to it, the icon will + be replaced with + + ::: + +### Advanced Settings + + + +#### Waypoint Heading + +When creating a Waypoint, the user has the option of setting a final heading +for the Waypoint. For example, when creating a Waypoint at an inspection point, +the user may want the UGV to navigate and stop facing a certain +direction. In [Waypoint Panel](#waypoint-panel), the list of +Waypoints can be seen and the advanced settings of each Waypoint can be accessed +by clicking the "Gear" icon. + +To set the Waypoint's final heading, the user will need to check the +"Final Heading Enabled" checkbox and enter the heading value in +degrees. The heading indicator on the top bar can be used to help set +this value. See the figure below showing the advanced settings. + +:::note + +Waypoints that have a heading or tolerance assigned to them will show a different colour +on their settings icon. + +::: + +
+
+ +
Waypoint Advanced Settings
+
+
+ +The heading that has been entered will only be applied to the Waypoint +(ie. the robot will only align itself with the correct heading at the +Waypoint). If the robot is required to be at specific headings at +other Waypoints the user will need to enter these in for each specific Waypoint. + +#### Waypoint Tolerance + +When creating a Mission, the user has the option of setting a specific +tolerance for each Waypoint. By default, the Waypoint position and orientation +tolerances are 0.3 meters and 180°, respectively. If a specific Waypoint +requires that the tolerances be either increased or decreased, these +values can be modified in the advanced settings. For example, if it's +required that the position and/or orientation at a Waypoint be very accurate, +such as 0.1 meters position and 5° orientation, or looser at 1.0 meter +position, this can be done within these settings. + +In [Waypoint Panel](#waypoint-panel), the list of waypoints can be +seen and the advanced settings of each Waypoint can be accessed by clicking +the "Gear" icon. To set the Waypoint's tolerance, the user will need to +check the "Waypoint Tolerance Enabled" checkbox and enter the position and +orientation values, in meters and degrees, respectively. + +### Constrained Replanning {#constrained_path} + +To enable the visualization of the contrained area of traversal (defined by +the path contraint around the reference path), navigate to the General settings +in the hamburger menu. Enable/disable the visualization of the path ui_route_deviation +distance using the switch button (see image below). + +
+
+ +
General settings
+
+
+ +Once enabled the area of possible deviation will show +over the planned route as can be seen in the following figure. + +
+
+ +
Route with maximum path deviation
+
+
+ +:::note + +If the UGV is manually driven outside of the constrained replanning area +while a Mission is running, the Mission will not be able to be resumed until the +UGV is returned within the navigable area defined by the path contraint. + +::: + +## Mission Execution + +### Start Mission + +There are multiple ways to start a Mission. At the bottom of the UI, the user has the ability to start the currently +selected Mission by clicking the "Play" button . +Starting the Mission this will start the Mission from the first Waypoint. The user may also select the drop down next to the button +to start the Mission from the current UGV position. This is a useful way to start a Mission in the event that the UGV was blocked by +obstacles that were later moved. Another way that a user can start a Mission is by selecting a waypoint in edit mode and then clicking on +"Start Mission from Here" option. If the UGV is within 3 metres of that Waypoint the Mission will start from there. + +
+
+ +
Starting from a specific Waypoint
+
+
+ +When the Mission has been started the Play button will turn green, regardless of how it has been started. + +### Pause Mission + +At the bottom of the UI, the user has the ability to pause the currently +running mission by clicking the "Pause" button . When the +mission has been paused this button will turn yellow. Pausing a mission +allows the user to take time to look around with the camera or to +teleoperate the UGV to a nearby location to perform an inspection. For +ease of operation, the user must PAUSE the active mission if the user +wants to teleoperate the UGV. + +### Cancel Mission/Task + +At the bottom of the UI, the user has the ability to stop the currently +running mission or task by clicking the "Stop" button . When the +mission/task has been cancelled this button will turn red. The name of +the mission/task will be shown to be cancelled in the feedback bar. + +## Autonomous Docking + +
+
+ +
Dock Icon
+
+
+ +### Docking The UGV + +To dock the UGV autonomously, the user should follow these steps: + +- Enable the "Edit Mission" toggle. +- Create a Mission whose Waypoints approach the dock from the front and + whose final Waypoint is within the maximum predock distance which is shown as a circle around the dock. +- Enable the Waypoints Panel toggle to view the list of Waypoints, rename the last + Waypoint to "Dock Waypoint" or something descriptive and add the "Dock + UGV" Task to this Waypoint. If there is more than one dock in the system the user will + have to open the task options and select the dock name from the list. +- Run the Mission. + +### Undocking The UGV + +To undock the UGV autonomously, the user should follow these steps: + +- Enable the "Edit Mission" toggle. Select the "Waypoint Mode" + button. +- Select the Waypoint icon on the bottom bar to create a Waypoint at the + current location of the UGV. This step should either be it's own mission + or it should be the starting point of a mission. +- Enable the Waypoints Panel toggle to view the list of Waypoints, rename this + Waypoint to "Undock Waypoint" or something descriptive and add the + "Undock UGV" task to the Waypoint that was just created. +- Run the Mission. + +### Compatibility with a Doghouse + +In order for the autonomous docking feature to be compatible with a doghouse, the +doghouse must conform to a few specifications: + +- Must be installed on a flat surface, and have no elevation change between the + charge-deck and the outdoor surface (ie. no ramp into the doghouse). +- Must be greater than 1.2 m wide. +- Must be between 1.5 and 2.5 m long. +- Dock target should be installed centered along the back of the doghouse. + +### Recover from Failed Docking or Undocking + +If for any reason, the docking or undocking tasks fail, the user can: + +- Manually drive the UGV towards the dock target, aligning the + charging unit with the receiver on the UGV. +- Manually drive the UGV in reverse away from the dock target. It is + suggested that the user reverse roughly 2-3 meters away from the target, + then wait 1-2 minutes before starting any autonomous navigation + missions. diff --git a/outdoornav_user_manual_versioned_docs/version-0.10.0/web_user_interface/ui_manual_mode.mdx b/outdoornav_user_manual_versioned_docs/version-0.10.0/web_user_interface/ui_manual_mode.mdx index 05588284..7c049a0a 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.10.0/web_user_interface/ui_manual_mode.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.10.0/web_user_interface/ui_manual_mode.mdx @@ -1,49 +1,49 @@ ---- -title: Web UI Manual Mode (Teleoperation) -sidebar_label: Web UI Manual Mode (Teleoperation) -sidebar_position: 2 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -The Manual Mode in the Web UI allows the user to operate the UGV -remotely (teleoperate) by using sensors on the UGV to visualize the -environment and by using a joystick to control the motion of the UGV. - -![](/img/outdoornav_images/teleop_danger.png) - -Ensure that you have read [Safety](../safety.mdx) and are -aware of possible hazards when using this product as well as the safety -methods that can be used to stop the moving UGV. - -
-
- -
Teleoperation Components
-
-
- -1. **Speedometer:** An indicator of the UGV's current forward speed. -2. **Joystick:** The joystick will allow the user to move the UGV - manually from the UI. Motion can be sent to the UGV in 360° - directions and the speed can be controlled by the distance of the - joystick from its neutral position. -3. **Sensitivity Scale:** A UGV-specific scale that controls the - maximum allowable UGV velocities at each level. The maximum linear - velocity is 1.0 meters per second and the maximum angular velocity - is 0.5 radians per second. The scale levels are 100%, 80%, 50% and - 20%, with the default set to 80%. -4. **Local Docking Buttons:** The local docking/undocking buttons used - to dock/undock the UGV through the teleop view. To dock, the UGV - must be within the predock distance and facing the dock before the - button is selected. - -## Monitor Wireless Strength - -While teleoperating the UGV, the user will notice that the delay between -the time a command is sent and the time it is executed (and/or visible -on the UI camera views) will increase as the distance increases. This -effect will be further amplified by any obstacles between the UGV and -the base (eg. walls, vehicles, mounds, etc.). It is important to monitor -this delay an be cautious when driving the UGV with larger delay for +--- +title: Web UI Manual Mode (Teleoperation) +sidebar_label: Web UI Manual Mode (Teleoperation) +sidebar_position: 2 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +The Manual Mode in the Web UI allows the user to operate the UGV +remotely (teleoperate) by using sensors on the UGV to visualize the +environment and by using a joystick to control the motion of the UGV. + +![](/img/outdoornav_images/teleop_danger.png) + +Ensure that you have read [Safety](../safety.mdx) and are +aware of possible hazards when using this product as well as the safety +methods that can be used to stop the moving UGV. + +
+
+ +
Teleoperation Components
+
+
+ +1. **Speedometer:** An indicator of the UGV's current forward speed. +2. **Joystick:** The joystick will allow the user to move the UGV + manually from the UI. Motion can be sent to the UGV in 360° + directions and the speed can be controlled by the distance of the + joystick from its neutral position. +3. **Sensitivity Scale:** A UGV-specific scale that controls the + maximum allowable UGV velocities at each level. The maximum linear + velocity is 1.0 meters per second and the maximum angular velocity + is 0.5 radians per second. The scale levels are 100%, 80%, 50% and + 20%, with the default set to 80%. +4. **Local Docking Buttons:** The local docking/undocking buttons used + to dock/undock the UGV through the teleop view. To dock, the UGV + must be within the predock distance and facing the dock before the + button is selected. + +## Monitor Wireless Strength + +While teleoperating the UGV, the user will notice that the delay between +the time a command is sent and the time it is executed (and/or visible +on the UI camera views) will increase as the distance increases. This +effect will be further amplified by any obstacles between the UGV and +the base (eg. walls, vehicles, mounds, etc.). It is important to monitor +this delay an be cautious when driving the UGV with larger delay for risk of crashing into obstacles. \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.10.0/web_user_interface/ui_overview.mdx b/outdoornav_user_manual_versioned_docs/version-0.10.0/web_user_interface/ui_overview.mdx index 4e27e07e..69705424 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.10.0/web_user_interface/ui_overview.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.10.0/web_user_interface/ui_overview.mdx @@ -1,422 +1,422 @@ ---- -title: Web UI Overview -sidebar_label: Web UI Overview -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -The Web User Interface (Web UI) provides a easy, graphical, means to -control both manual and autonomous operation of your UGV. The following -sections outline: the components and views of the UI, the details of -operating in manual mode, and the details of operating in autonomous -mode. - -## Main Components - -
-
- -
UI Main Components
-
-
- -1. **Menu:** A dropdown menu allowing the user to access the Dashboard - (ie. Home), Settings, Status, Scheduler and Help pages. The Operator - can also run the UI Virtual Tour from this menu. - -2. **Feedback Bar:** The feedback bar will display information - regarding the execution state of the navigation and of any Tasks - being executed. - -3. **Path Progress Meter:** A meter indicating the percentage complete - of a Mission. - -4. **UGV Position:** The UGV's X and Y position in the world frame - relative to the Datum. Can also be shown in Lat/Lon coordinates - -5. **UGV Heading:** The UGV's heading in the world frame. 0 degrees is North, 90 degrees is East, 180 degrees is South and 270 degrees is West. - -6. **Status Indicator:** The status indicator will display information - regarding various UGV status monitors such as the Emergency Stop, - Surveying, etc. When the UGV is fully operational, the indicator - will be green. Operators can click on the status indicator to see more details - pertaining to the current state as well as past messages. - -7. **GPS Status Indicator:** The GPS status indicators will display GPS - signal accuracy for position (POS indicator) and heading (DIR - indicator). Green indicators represent RTK accuracy and are - currently required for accurate autonomous navigation. Yellow and orange - indicators represent SBAS and SPP accuracy respectively and noticeable - oscillations may occur in such cases. Red indicators mean no GPS signal - and autonomous navigation missions should not be started. - -8. **Battery Life Indicator:** The UGV's battery life indicator. - - :::note - - If the indicator is stuck at 50%, that means that your UGV does not - have a supported battery management system and this indicator is not - active. - - ::: - -9. **Wireless Connection Indicator:** The wireless connection indicator - represents the signal strength between the wifi access point - (typically the Base Station) and the UGV. If the system can support - cellular connections a cellular indicator will appear next to the - wifi icon with the currently active connection being highlighted in green. - -10. **Views List:** A dropdown list of available views, detailed later - in this section. Some of the available views are Map, Camera and 3D - views, etc. - -11. **Record Audio:** If the UGV is equipped with a microphone the user - can start/stop recording manually by clicking this icon. - -12. **Mission List:** View the list of Missions that Operator(s) have - created. - -13. **Edit Mission Toggle:** This toggle allows the Operator to start - creating Waypoints for the current Mission. The Operator will also be able to - drag and drop Waypoints in this mode. Once this button is enabled, - the Waypoint Mode will be available for selection. When a Mission is - started this toggle will be disabled (ie. the Operator will not be able - to modify/add Waypoints). - - :::note - - If the toggle is enabled while an autonomous Mission is running, it - will cancel the current Mission. - - ::: - -14. **Waypoint Panel Toggle:** View list of Waypoints in the current Mission. - -15. **Waypoint Drop Button:** The Waypoint indicator marker on the - bottom bar allows the Operator to place a Waypoint at the location of the UGV. - -16. **Start Button:** Start the current Mission. - -17. **Pause Button:** Pause the current Mission. Pressing the start button - while paused will continue the current Mission. - -18. **Stop Button:** Cancel the Mission or Task that is currently being - executed. Pressing the start button while when stopped will restart - the list of steps in the current Mission. - - -By opening the dropdown list "Views", on the right side of the UI, the -Operator can access the following views: - -- Map View -- PTZ Camera View (if available) -- Front/Back Camera View (if available) -- 3D View - -## Map View - -
-
- -
Map View
-
-
- -1. **Zoom Buttons:** These buttons allow the user to zoom in/out of the - map levels. -2. **Zoom-to-Fit Button:** This button will zoom the map to where there - is activity (ie. where the datum is set or where Waypoints have been - set on the map. -3. **Pointer Mode Button:** This button allows the user to move the map - and select point on the map to see their coordinate (lat/lon or - x/y). -4. **Waypoint Mode Button:** This button allows the user to place - Waypoints on the map. Users can also select existing Waypoints to - modify/delete them. -5. **UGV:** The blue arrow represents the UGV. Its location is its - position in the world frame and its orientation is the heading in - the world frame. -6. **Base Station:** The yellow antenna icon is the last known location of - the base station based on the last survey performed. By clicking it the - user will be presented with the base station's coordinates, when it was - surveyed, and how many samples were taken during the survey. - -7. **Datum:** The blue Waypoint marker on the map view represents the - location of the reference point (ie. (x,y)=(0,0)) of the world - coordinate system. The world (ie. map) coordinate system is in the - ENU convention. -8. **Scale:** The scale representing the ratio of a distance on the map - to the corresponding distance on the ground. - -## Camera Views - -:::note - -If PTZ and/or Front/Back camera(s) are included on the UGV, their feeds -can be viewed through the UI and the PTZ can be controlled through the -UI. If not, there will not be any PTZ, Front/Back view(s) in the list of -available views. - -::: - -### Pan-Tilt-Zoom (PTZ) View {#ptz-view} - -
-
- -
PTZ Camera View
-
-
- -1. **Tilt Slider:** The left slider can be used to tilt the camera in a - vertical motion, (ie. upwards or downwards motion). By default, the - slider is at its neutral ("zero") position. -2. **Pan Slider:** The bottom slider can be used to pan/rotate the - camera, (ie. rotational motion). By default, the slider is at its - neutral ("zero") position. -3. **Zoom Slider:** The right slider can be used to zoom the camera - feed. By default, the slider is at its neutral ("zero") position. -4. **Save Image:** Depending on the current camera view selected, this - button will save an image to the computer/tablet running the UI. - Images will be saved to the location in which your browser saves - files. -5. **Camera Positions List:** Display the list of available camera - positions that have been saved. These camera positions can be - deleted from this list by clicking the "garbage can" icon beside - the corresponding position. -6. **Save Camera Position:** This button will save the camera position - to be used in the "Move PTZ" task. An example use case would be: - 1. Switch to the PTZ camera view. - 2. Teleoperate the UGV to a location at which the user can inspect - something. - 3. Move the camera sliders to orient the camera such that it is - looking at the inspection point. - 4. Click the "Save Camera Position". - 5. When creating an autonomous mission to this inspection point, - add the "Move PTZ" task to a Waypoint. - 6. Click the settings button beside the task and add the camera - position related to the inspection point. - -### Front and Back Views - -
-
- -
Front View
-
-
- -
-
- -
Back View
-
-
- -## 3D View - -The 3D view allows the user to visualize the pointcloud data being -acquired by the VLP-16 LiDAR. - -
-
- -
3D View
-
-
- -## System Configuration - -### General Settings - -The General settings section can be found in through the upper left hand menu and allows the Operator to modify -general features of the UGV. - -
-
- -
General Settings Page
-
-
- -#### Coordinates - -The Operator can change the coordinate space from X/Y relative to the Datum to Latitude/Longitude. - -#### Save Image Location - -The Operator can choose to store images saved manually to the robot directly or to download them onto their computer. This -feature only affects the manual save image option found on each relevant camera view. - -#### Robot Internet Connection Type - -If the UGV is equipped with SIM card and can switch between Cellular and WiFi connections, the Operator can manually trigger this -change through the general settings page. This switchover will take approximately 30 seconds and will require a refresh on the UI. - -#### Show Path Deviation Distance - -When a mission is running the UGV will have a maximum path deviation distance that it shouldn't cross if it needs to replan. If this -toggle is set to true, while in edit mode this buffer is shown over top of the path as the Operator creates/edits the mission. This -toggle does not disable the path deviation distance feature. - -#### Low Power Mode - -If the UGV is equipped with a Low Power Module this toggle allows the user to switch the UGV into a low power state that will drastically -limit functionality but help conserve power. This mode is best used to help better facilitate charging while the UGV is not in use. - -### Map Source Configuration - -The Web UI ships with access to free -[OpenStreetMap](https://www.openstreetmap.org/) maps. Aerial view -requires access to third-party aerial maps or your own aerial maps. - -The Web UI is pre-configured to work with -[MapBox](https://www.mapbox.com/) and [Bing -Maps](https://www.bingmapsportal.com/) once a suitable map key has been -acquired. Both services offer a free tier that will be sufficient in -almost all cases. - -#### Using OpenStreetMap Maps - -As no key is required to use -[OpenStreetMap](https://www.openstreetmap.org/) maps, the process to -select these maps in the Web UI is simple. - -1. In the Web UI, from the menu, select **Settings→Map** to bring up - the **Map Settings** page. -2. Select **OpenStreetMap** -3. Click **Ok**. - -
-
- -
Using Map Settings to select OpenStreetMap
-
-
- -#### Using MapBox Maps - -Using [MapBox](https://www.mapbox.com/) maps requires a key, which can -then be used by the Web UI. The steps to set up MapBox are outlined -below. - -1. Acquire a MapBox key from the [MapBox - website](https://account.mapbox.com/auth/signup/). Review the - license terms and select the appropriate plan. In most cases, the - free tier will be sufficient. -2. Back in the Web UI, from the menu, select **Settings→Map** to bring - up the **Map Settings** page. -3. Select **MapBox**. -4. Copy the MapBox key from Step 1 into the **Map Key** field. -5. Click **Ok**. - -
-
- -
Using Map Settings to select MapBox
-
-
- -#### Using Bing Maps - -Using [Bing Maps](https://www.bingmapsportal.com/) requires a key, which -can then be used by the Web UI. The steps to set up Bing Maps are -outlined below. - -1. Acquire a Bing Maps key from the [Bing - website](https://www.microsoft.com/en-us/maps/create-a-bing-maps-key). - Review the license terms and select the appropriate plan. In most - cases, the free tier will be sufficient. -2. Back in the Web UI, from the menu, select **Settings→Map** to bring - up the **Map Settings** page. -3. Select **Bing Maps**. -4. Copy the Bing Maps key from Step 1 into the **Map Key** field. -5. Click **Ok**. - -
-
- -
Using Map Settings to select Bing Maps
-
-
- -#### Using Custom Maps {#using_custom_maps} - -Custom Maps allow you to use another set of maps in XYZ format, either -from a third-party map provider or from maps that you have generated on -your own, such as from drone aerial images. Custom maps can be selected -by using the steps below. - -1. Ensure that the maps are accessible on an internal network or on the - Internet by the device that is being used to display the Web UI, - such as a laptop, tablet, or desktop computer. -2. Ensure that the directory structure for the individual tiles is well - defined. See the section below for details on - [Preparing Custom Map Tiles from Drone Aerial Images](#preparing_custom_map_tiles). -3. In the Web UI, from the menu, select **Settings→Map** to bring up - the **Map Settings** page. -4. Select **Custom**. -5. Enter the network path for the maps into the **Custom URL** field. - If hosting the maps on your local computer, this will be similar to - http://localhost:8000/{z}/{x}/{-y}.png. Note how the - URL is parameterized with `{z}`, `{x}`, and `{-y}` values. This will - need to be adapted to match the directory structure of your map tile - images. -6. Click **Ok**. - -
-
- -
Using Map Settings to select Custom maps
-
-
- -#### Preparing Custom Map Tiles from Drone Aerial Images {#preparing_custom_map_tiles} - -In some cases, it is desirable to create your own maps rather than using -third party maps which might be outdated. One way to do this is to use a -drone to capture aerial images and convert those images into map tiles. -While there are many ways to accomplish this, one approach is outlined -below. - -1. Use a drone to collect top-down photos covering the area of - interest. It is highly recommended to use a drone control app that - allows you to specify the area of interest and desired image overlap - (recommended \~75%) and takes care of coverage planning, drone - control, and image acquisition. - -2. Perform ortho-mosaicing/ortho-rectification to stitch the collected - images together into a single orthographic image. [Open Drone - Map](https://www.opendronemap.org/) is a popular open source project - that Clearpath has used for stitching, but there are also paid - services that automate the process. - -3. Georeference the orthographic image. One way to do this is to define - the locations of well-defined features (sewer grates, utility holes, - etc.) based on their known positions, such as their position data - from an existing mapping service (e.g., Google Maps). Open source - tools, such as [QGIS](https://www.qgis.org/en/site/) can help with - this process. - -4. Generate the map tiles. Using Ubuntu, this can be accomplished with - the following commands, where `GEOREFERENCED_IMG.tif` is the output - of the previous step. - - ``` - sudo apt install gdal-bin - gdal2tiles.py - ``` - -5. Use a web server to host the tiles locally. Using Ubuntu, one way to - accomplish this is to use the commands below, which will make the - tiles available at: \. - - ``` - cd /base/directory/of/tiles - python3 -m http.server - ``` - -Once your map tiles are available on the network, you can follow the -steps in [Using Custom Maps](#using_custom_maps) to have the -Web UI use your custom tiles. +--- +title: Web UI Overview +sidebar_label: Web UI Overview +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +The Web User Interface (Web UI) provides a easy, graphical, means to +control both manual and autonomous operation of your UGV. The following +sections outline: the components and views of the UI, the details of +operating in manual mode, and the details of operating in autonomous +mode. + +## Main Components + +
+
+ +
UI Main Components
+
+
+ +1. **Menu:** A dropdown menu allowing the user to access the Dashboard + (ie. Home), Settings, Status, Scheduler and Help pages. The Operator + can also run the UI Virtual Tour from this menu. + +2. **Feedback Bar:** The feedback bar will display information + regarding the execution state of the navigation and of any Tasks + being executed. + +3. **Path Progress Meter:** A meter indicating the percentage complete + of a Mission. + +4. **UGV Position:** The UGV's X and Y position in the world frame + relative to the Datum. Can also be shown in Lat/Lon coordinates + +5. **UGV Heading:** The UGV's heading in the world frame. 0 degrees is North, 90 degrees is East, 180 degrees is South and 270 degrees is West. + +6. **Status Indicator:** The status indicator will display information + regarding various UGV status monitors such as the Emergency Stop, + Surveying, etc. When the UGV is fully operational, the indicator + will be green. Operators can click on the status indicator to see more details + pertaining to the current state as well as past messages. + +7. **GPS Status Indicator:** The GPS status indicators will display GPS + signal accuracy for position (POS indicator) and heading (DIR + indicator). Green indicators represent RTK accuracy and are + currently required for accurate autonomous navigation. Yellow and orange + indicators represent SBAS and SPP accuracy respectively and noticeable + oscillations may occur in such cases. Red indicators mean no GPS signal + and autonomous navigation missions should not be started. + +8. **Battery Life Indicator:** The UGV's battery life indicator. + + :::note + + If the indicator is stuck at 50%, that means that your UGV does not + have a supported battery management system and this indicator is not + active. + + ::: + +9. **Wireless Connection Indicator:** The wireless connection indicator + represents the signal strength between the wifi access point + (typically the Base Station) and the UGV. If the system can support + cellular connections a cellular indicator will appear next to the + wifi icon with the currently active connection being highlighted in green. + +10. **Views List:** A dropdown list of available views, detailed later + in this section. Some of the available views are Map, Camera and 3D + views, etc. + +11. **Record Audio:** If the UGV is equipped with a microphone the user + can start/stop recording manually by clicking this icon. + +12. **Mission List:** View the list of Missions that Operator(s) have + created. + +13. **Edit Mission Toggle:** This toggle allows the Operator to start + creating Waypoints for the current Mission. The Operator will also be able to + drag and drop Waypoints in this mode. Once this button is enabled, + the Waypoint Mode will be available for selection. When a Mission is + started this toggle will be disabled (ie. the Operator will not be able + to modify/add Waypoints). + + :::note + + If the toggle is enabled while an autonomous Mission is running, it + will cancel the current Mission. + + ::: + +14. **Waypoint Panel Toggle:** View list of Waypoints in the current Mission. + +15. **Waypoint Drop Button:** The Waypoint indicator marker on the + bottom bar allows the Operator to place a Waypoint at the location of the UGV. + +16. **Start Button:** Start the current Mission. + +17. **Pause Button:** Pause the current Mission. Pressing the start button + while paused will continue the current Mission. + +18. **Stop Button:** Cancel the Mission or Task that is currently being + executed. Pressing the start button while when stopped will restart + the list of steps in the current Mission. + + +By opening the dropdown list "Views", on the right side of the UI, the +Operator can access the following views: + +- Map View +- PTZ Camera View (if available) +- Front/Back Camera View (if available) +- 3D View + +## Map View + +
+
+ +
Map View
+
+
+ +1. **Zoom Buttons:** These buttons allow the user to zoom in/out of the + map levels. +2. **Zoom-to-Fit Button:** This button will zoom the map to where there + is activity (ie. where the datum is set or where Waypoints have been + set on the map. +3. **Pointer Mode Button:** This button allows the user to move the map + and select point on the map to see their coordinate (lat/lon or + x/y). +4. **Waypoint Mode Button:** This button allows the user to place + Waypoints on the map. Users can also select existing Waypoints to + modify/delete them. +5. **UGV:** The blue arrow represents the UGV. Its location is its + position in the world frame and its orientation is the heading in + the world frame. +6. **Base Station:** The yellow antenna icon is the last known location of + the base station based on the last survey performed. By clicking it the + user will be presented with the base station's coordinates, when it was + surveyed, and how many samples were taken during the survey. + +7. **Datum:** The blue Waypoint marker on the map view represents the + location of the reference point (ie. (x,y)=(0,0)) of the world + coordinate system. The world (ie. map) coordinate system is in the + ENU convention. +8. **Scale:** The scale representing the ratio of a distance on the map + to the corresponding distance on the ground. + +## Camera Views + +:::note + +If PTZ and/or Front/Back camera(s) are included on the UGV, their feeds +can be viewed through the UI and the PTZ can be controlled through the +UI. If not, there will not be any PTZ, Front/Back view(s) in the list of +available views. + +::: + +### Pan-Tilt-Zoom (PTZ) View {#ptz-view} + +
+
+ +
PTZ Camera View
+
+
+ +1. **Tilt Slider:** The left slider can be used to tilt the camera in a + vertical motion, (ie. upwards or downwards motion). By default, the + slider is at its neutral ("zero") position. +2. **Pan Slider:** The bottom slider can be used to pan/rotate the + camera, (ie. rotational motion). By default, the slider is at its + neutral ("zero") position. +3. **Zoom Slider:** The right slider can be used to zoom the camera + feed. By default, the slider is at its neutral ("zero") position. +4. **Save Image:** Depending on the current camera view selected, this + button will save an image to the computer/tablet running the UI. + Images will be saved to the location in which your browser saves + files. +5. **Camera Positions List:** Display the list of available camera + positions that have been saved. These camera positions can be + deleted from this list by clicking the "garbage can" icon beside + the corresponding position. +6. **Save Camera Position:** This button will save the camera position + to be used in the "Move PTZ" task. An example use case would be: + 1. Switch to the PTZ camera view. + 2. Teleoperate the UGV to a location at which the user can inspect + something. + 3. Move the camera sliders to orient the camera such that it is + looking at the inspection point. + 4. Click the "Save Camera Position". + 5. When creating an autonomous mission to this inspection point, + add the "Move PTZ" task to a Waypoint. + 6. Click the settings button beside the task and add the camera + position related to the inspection point. + +### Front and Back Views + +
+
+ +
Front View
+
+
+ +
+
+ +
Back View
+
+
+ +## 3D View + +The 3D view allows the user to visualize the pointcloud data being +acquired by the VLP-16 LiDAR. + +
+
+ +
3D View
+
+
+ +## System Configuration + +### General Settings + +The General settings section can be found in through the upper left hand menu and allows the Operator to modify +general features of the UGV. + +
+
+ +
General Settings Page
+
+
+ +#### Coordinates + +The Operator can change the coordinate space from X/Y relative to the Datum to Latitude/Longitude. + +#### Save Image Location + +The Operator can choose to store images saved manually to the robot directly or to download them onto their computer. This +feature only affects the manual save image option found on each relevant camera view. + +#### Robot Internet Connection Type + +If the UGV is equipped with SIM card and can switch between Cellular and WiFi connections, the Operator can manually trigger this +change through the general settings page. This switchover will take approximately 30 seconds and will require a refresh on the UI. + +#### Show Path Deviation Distance + +When a mission is running the UGV will have a maximum path deviation distance that it shouldn't cross if it needs to replan. If this +toggle is set to true, while in edit mode this buffer is shown over top of the path as the Operator creates/edits the mission. This +toggle does not disable the path deviation distance feature. + +#### Low Power Mode + +If the UGV is equipped with a Low Power Module this toggle allows the user to switch the UGV into a low power state that will drastically +limit functionality but help conserve power. This mode is best used to help better facilitate charging while the UGV is not in use. + +### Map Source Configuration + +The Web UI ships with access to free +[OpenStreetMap](https://www.openstreetmap.org/) maps. Aerial view +requires access to third-party aerial maps or your own aerial maps. + +The Web UI is pre-configured to work with +[MapBox](https://www.mapbox.com/) and [Bing +Maps](https://www.bingmapsportal.com/) once a suitable map key has been +acquired. Both services offer a free tier that will be sufficient in +almost all cases. + +#### Using OpenStreetMap Maps + +As no key is required to use +[OpenStreetMap](https://www.openstreetmap.org/) maps, the process to +select these maps in the Web UI is simple. + +1. In the Web UI, from the menu, select **Settings→Map** to bring up + the **Map Settings** page. +2. Select **OpenStreetMap** +3. Click **Ok**. + +
+
+ +
Using Map Settings to select OpenStreetMap
+
+
+ +#### Using MapBox Maps + +Using [MapBox](https://www.mapbox.com/) maps requires a key, which can +then be used by the Web UI. The steps to set up MapBox are outlined +below. + +1. Acquire a MapBox key from the [MapBox + website](https://account.mapbox.com/auth/signup/). Review the + license terms and select the appropriate plan. In most cases, the + free tier will be sufficient. +2. Back in the Web UI, from the menu, select **Settings→Map** to bring + up the **Map Settings** page. +3. Select **MapBox**. +4. Copy the MapBox key from Step 1 into the **Map Key** field. +5. Click **Ok**. + +
+
+ +
Using Map Settings to select MapBox
+
+
+ +#### Using Bing Maps + +Using [Bing Maps](https://www.bingmapsportal.com/) requires a key, which +can then be used by the Web UI. The steps to set up Bing Maps are +outlined below. + +1. Acquire a Bing Maps key from the [Bing + website](https://www.microsoft.com/en-us/maps/create-a-bing-maps-key). + Review the license terms and select the appropriate plan. In most + cases, the free tier will be sufficient. +2. Back in the Web UI, from the menu, select **Settings→Map** to bring + up the **Map Settings** page. +3. Select **Bing Maps**. +4. Copy the Bing Maps key from Step 1 into the **Map Key** field. +5. Click **Ok**. + +
+
+ +
Using Map Settings to select Bing Maps
+
+
+ +#### Using Custom Maps {#using_custom_maps} + +Custom Maps allow you to use another set of maps in XYZ format, either +from a third-party map provider or from maps that you have generated on +your own, such as from drone aerial images. Custom maps can be selected +by using the steps below. + +1. Ensure that the maps are accessible on an internal network or on the + Internet by the device that is being used to display the Web UI, + such as a laptop, tablet, or desktop computer. +2. Ensure that the directory structure for the individual tiles is well + defined. See the section below for details on + [Preparing Custom Map Tiles from Drone Aerial Images](#preparing_custom_map_tiles). +3. In the Web UI, from the menu, select **Settings→Map** to bring up + the **Map Settings** page. +4. Select **Custom**. +5. Enter the network path for the maps into the **Custom URL** field. + If hosting the maps on your local computer, this will be similar to + http://localhost:8000/{z}/{x}/{-y}.png. Note how the + URL is parameterized with `{z}`, `{x}`, and `{-y}` values. This will + need to be adapted to match the directory structure of your map tile + images. +6. Click **Ok**. + +
+
+ +
Using Map Settings to select Custom maps
+
+
+ +#### Preparing Custom Map Tiles from Drone Aerial Images {#preparing_custom_map_tiles} + +In some cases, it is desirable to create your own maps rather than using +third party maps which might be outdated. One way to do this is to use a +drone to capture aerial images and convert those images into map tiles. +While there are many ways to accomplish this, one approach is outlined +below. + +1. Use a drone to collect top-down photos covering the area of + interest. It is highly recommended to use a drone control app that + allows you to specify the area of interest and desired image overlap + (recommended \~75%) and takes care of coverage planning, drone + control, and image acquisition. + +2. Perform ortho-mosaicing/ortho-rectification to stitch the collected + images together into a single orthographic image. [Open Drone + Map](https://www.opendronemap.org/) is a popular open source project + that Clearpath has used for stitching, but there are also paid + services that automate the process. + +3. Georeference the orthographic image. One way to do this is to define + the locations of well-defined features (sewer grates, utility holes, + etc.) based on their known positions, such as their position data + from an existing mapping service (e.g., Google Maps). Open source + tools, such as [QGIS](https://www.qgis.org/en/site/) can help with + this process. + +4. Generate the map tiles. Using Ubuntu, this can be accomplished with + the following commands, where `GEOREFERENCED_IMG.tif` is the output + of the previous step. + + ``` + sudo apt install gdal-bin + gdal2tiles.py + ``` + +5. Use a web server to host the tiles locally. Using Ubuntu, one way to + accomplish this is to use the commands below, which will make the + tiles available at: \. + + ``` + cd /base/directory/of/tiles + python3 -m http.server + ``` + +Once your map tiles are available on the network, you can follow the +steps in [Using Custom Maps](#using_custom_maps) to have the +Web UI use your custom tiles. diff --git a/outdoornav_user_manual_versioned_docs/version-0.11.0/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.11.0/_category_.json index c123e1bc..f5966a95 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.11.0/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.11.0/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "OutdoorNav User Manual", - "position": 1 -} +{ + "label": "OutdoorNav User Manual", + "position": 1 +} diff --git a/outdoornav_user_manual_versioned_docs/version-0.11.0/api/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.11.0/api/_category_.json index a6e53920..79c71658 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.11.0/api/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.11.0/api/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Application Programming Interface", - "position": 7 -} +{ + "label": "Application Programming Interface", + "position": 7 +} diff --git a/outdoornav_user_manual_versioned_docs/version-0.11.0/api/api_endpoints/api_endpoints.mdx b/outdoornav_user_manual_versioned_docs/version-0.11.0/api/api_endpoints/api_endpoints.mdx index c65c4150..e1169e6e 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.11.0/api/api_endpoints/api_endpoints.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.11.0/api/api_endpoints/api_endpoints.mdx @@ -1,16 +1,16 @@ ---- -title: API Endpoints -sidebar_label: API Endpoints -sidebar_position: 2 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -The ROS 1 Noetic API can be used to monitor and manage OutdoorNav Software. Details -are available through the child pages. - -- [Platform API](platform_api.mdx) -- [Autonomy API](autonomy_api.mdx) -- [Mission Manager API](mission_manager_api.mdx) -- [Definitions](definitions.mdx) - +--- +title: API Endpoints +sidebar_label: API Endpoints +sidebar_position: 2 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +The ROS 1 Noetic API can be used to monitor and manage OutdoorNav Software. Details +are available through the child pages. + +- [Platform API](platform_api.mdx) +- [Autonomy API](autonomy_api.mdx) +- [Mission Manager API](mission_manager_api.mdx) +- [Definitions](definitions.mdx) + diff --git a/outdoornav_user_manual_versioned_docs/version-0.11.0/api/api_examples/api_examples.mdx b/outdoornav_user_manual_versioned_docs/version-0.11.0/api/api_examples/api_examples.mdx index 32daf5e7..a8bdda37 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.11.0/api/api_examples/api_examples.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.11.0/api/api_examples/api_examples.mdx @@ -1,20 +1,20 @@ ---- -title: API Examples -sidebar_label: API Examples -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -The OutdoorNav API examples are now available and accesible to everyone. A -[Python API library](https://github.com/cpr-application/clearpath_onav_examples) along -with some example scripts are available to build and use for our application. - -A few examples scripts follow with detailed explanations: - -- [Execute Mission from File](./mission_from_file.mdx) -- [Execute Mission with Custom Task](./mission_with_custom_tasks.mdx) -- [Status Monitoring](./monitor_status.mdx) - -The documentation for the Python API library can be built following the -instructions in the above linked GitHub repository. +--- +title: API Examples +sidebar_label: API Examples +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +The OutdoorNav API examples are now available and accesible to everyone. A +[Python API library](https://github.com/cpr-application/clearpath_onav_examples) along +with some example scripts are available to build and use for our application. + +A few examples scripts follow with detailed explanations: + +- [Execute Mission from File](./mission_from_file.mdx) +- [Execute Mission with Custom Task](./mission_with_custom_tasks.mdx) +- [Status Monitoring](./monitor_status.mdx) + +The documentation for the Python API library can be built following the +instructions in the above linked GitHub repository. diff --git a/outdoornav_user_manual_versioned_docs/version-0.11.0/api/api_examples/mission_from_file.mdx b/outdoornav_user_manual_versioned_docs/version-0.11.0/api/api_examples/mission_from_file.mdx index eff0f768..0abb4ea9 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.11.0/api/api_examples/mission_from_file.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.11.0/api/api_examples/mission_from_file.mdx @@ -1,210 +1,210 @@ ---- -title: Mission from YAML File -sidebar_label: Mission from YAML File -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -## The Code - -``` python -#! /usr/bin/env python3 - -from cpr_outdoornav_api_examples_lib.ros_node import RosNode -from cpr_outdoornav_api_examples_lib.yaml_config import YamlConfig -import time -import os - -# The file containing the mission configuration (adjust as needed) -MISSION_YAML_FILE = os.environ.get("HOME", "administrator") + "/example_ws/src/" + \ - "CPR-OutdoorNav/src/cpr_outdoornav_api_examples/config/sample_mission.yaml" - -class MissionFromYamlFile(RosNode): - """ - Create and run a mission loaded from a YAML configuration file. - Be sure that your robot is within 3 meters of your first Waypoint prior to starting the mission. - """ - - def __init__(self): - """Initialize the mission details and server connection.""" - - RosNode.__init__(self, 'mission_from_yaml_file') - self.mission = YamlConfig.yamlFileToMission(MISSION_YAML_FILE) - - # NOTE: to save the configuration to file, uncomment the following lines: - # YamlConfig.missionToYamlFile('/tmp/test1.yaml', self.mission) - - def run(self): - """Execute the mission.""" - - if not self.mission.startMission(): - return False - while not self.mission.isMissionComplete(): - time.sleep(1.0) - return self.mission.getMissionSuccess() - - -if __name__ == '__main__': - if MissionFromYamlFile().run(): - print("Mission completed successfully") - else: - print("Mission failed") - -``` - -## The Code Explained - -Let's break down the code. - -``` python -#! /usr/bin/env python3 -``` - -Every Python ROS Node will have this declaration at the top. The first line makes sure your script is executed as a Python3 script. - - -``` python -from cpr_outdoornav_api_examples_lib.ros_node import RosNode -from cpr_outdoornav_api_examples_lib.yaml_config import YamlConfig -``` - -We provide a library of classes that can be used within your file for ease of use. In the above example, we import the RosNode and YamlConfig classes. -The RosNode class is used by all of our examples to initialize a ROS node that will execute the example mission. The YamlConfig class is used to import -a YAML file and convert it to a Mission object. - -``` python -MISSION_YAML_FILE = os.environ.get("HOME", "administrator") + "/example_ws/src/" + \ - "CPR-OutdoorNav/src/cpr_outdoornav_api_examples/config/sample_mission.yaml" -``` - -This defines the file path of the YAML file that contains the mission to be executed. See the [YAML file](#yaml-file) below for the example YAML file -that will be executed. - -``` python -class MissionFromYamlFile(RosNode): -``` - -Creates a class for your example, which inherits a RosNode object. All python mission files are requried to inherit the RosNode class. - -``` python - RosNode.__init__(self, 'mission_from_yaml_file') - self.mission = YamlConfig.yamlFileToMission(MISSION_YAML_FILE)``` -``` - -Initialize the ROS node with name `mission_from_yaml_file` and import the the mission from the yaml config file. The `YamlConfig.yamlFileToMission()` function -reads teh configuration you have created in the YAML file and converts it into a Mission object. - -``` python - if not self.mission.startMission(): - return False -``` - -Upon execution of the script, the `self.mission.startMission()` function creates the mission client if not yet created, connects to the mission action server -and sends the goal to the action server to begin the execution of the mission. - -``` python - while not self.mission.isMissionComplete(): - time.sleep(1.0) - return self.mission.getMissionSuccess() -``` - -`self.mission.isMissionComplete()` monitors the mission status and only proceeds to terminating the mission has completed or been cancelled. - - -## YAML File {#yaml-file} - -The following YAML file is used in the above example mission. - -``` python -mission: - header: - seq: 0 - stamp: - secs: 0 - nsecs: 0 - frame_id: '' - name: "Sample Mission" - uuid: "8f57fd20-8a8c-4748-85ef-be1495b3ee06" - waypoints: - - - name: "Waypoint: 60" - uuid: "3edcedd7-ae0d-47cf-bd23-f7988d2779b7" - latitude: 50.10950820165676 - longitude: -97.31898507913323 - heading: -1.0 - tasks: [] - position_tolerance: -1.0 - yaw_tolerance: -1.0 - - - name: "Waypoint: 61" - uuid: "ad23202e-7067-4f1c-8677-2dc07af1e729" - latitude: 50.1095698924641 - longitude: -97.31929487427445 - heading: -1.0 - tasks: [] - position_tolerance: -1.0 - yaw_tolerance: -1.0 - - - name: "Waypoint: 62" - uuid: "fe452e77-4a26-41b0-b4ab-ee1859612a60" - latitude: 50.109437123117864 - longitude: -97.31946787675591 - heading: -1.0 - tasks: - - - name: "Wait" - uuid: "ec1121a8-7481-420f-b532-c47ea86afcd7" - service_call: "/wait" - version: "0.0.0" - floats: [3.0] - strings: [] - position_tolerance: -1.0 - yaw_tolerance: -1.0 - - - name: "Waypoint: 63" - uuid: "5ed54c1f-1599-497a-9c16-93c7ca6c355e" - latitude: 50.109384820042074 - longitude: -97.3194477601883 - heading: -1.0 - tasks: [] - position_tolerance: -1.0 - yaw_tolerance: -1.0 - - - name: "Waypoint: 64" - uuid: "2e021345-636b-4bd3-81ba-4f6901fdc016" - latitude: 50.10934056359333 - longitude: -97.31936192949982 - heading: -1.0 - tasks: [] - position_tolerance: -1.0 - yaw_tolerance: -1.0 - - - name: "Waypoint: 65" - uuid: "00c041ee-2ca4-40ba-8e38-65ac900d5a1d" - latitude: 50.10946930962604 - longitude: -97.31921709021302 - heading: -1.0 - tasks: [] - position_tolerance: -1.0 - yaw_tolerance: -1.0 - - - name: "Waypoint: 66" - uuid: "a5826fc5-b696-4b63-82aa-cc2e7a426640" - latitude: 50.10949344950718 - longitude: -97.31911382516594 - heading: -1.0 - tasks: [] - position_tolerance: -1.0 - yaw_tolerance: -1.0 - - - name: "Waypoint: 67" - uuid: "7ff204b2-79a3-46da-a8c0-2c734b4c5314" - latitude: 50.10949613171619 - longitude: -97.31898910244675 - heading: -1.0 - tasks: [] - position_tolerance: -1.0 - yaw_tolerance: -1.0 - onav_config: "To be determined" -``` +--- +title: Mission from YAML File +sidebar_label: Mission from YAML File +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +## The Code + +``` python +#! /usr/bin/env python3 + +from cpr_outdoornav_api_examples_lib.ros_node import RosNode +from cpr_outdoornav_api_examples_lib.yaml_config import YamlConfig +import time +import os + +# The file containing the mission configuration (adjust as needed) +MISSION_YAML_FILE = os.environ.get("HOME", "administrator") + "/example_ws/src/" + \ + "CPR-OutdoorNav/src/cpr_outdoornav_api_examples/config/sample_mission.yaml" + +class MissionFromYamlFile(RosNode): + """ + Create and run a mission loaded from a YAML configuration file. + Be sure that your robot is within 3 meters of your first Waypoint prior to starting the mission. + """ + + def __init__(self): + """Initialize the mission details and server connection.""" + + RosNode.__init__(self, 'mission_from_yaml_file') + self.mission = YamlConfig.yamlFileToMission(MISSION_YAML_FILE) + + # NOTE: to save the configuration to file, uncomment the following lines: + # YamlConfig.missionToYamlFile('/tmp/test1.yaml', self.mission) + + def run(self): + """Execute the mission.""" + + if not self.mission.startMission(): + return False + while not self.mission.isMissionComplete(): + time.sleep(1.0) + return self.mission.getMissionSuccess() + + +if __name__ == '__main__': + if MissionFromYamlFile().run(): + print("Mission completed successfully") + else: + print("Mission failed") + +``` + +## The Code Explained + +Let's break down the code. + +``` python +#! /usr/bin/env python3 +``` + +Every Python ROS Node will have this declaration at the top. The first line makes sure your script is executed as a Python3 script. + + +``` python +from cpr_outdoornav_api_examples_lib.ros_node import RosNode +from cpr_outdoornav_api_examples_lib.yaml_config import YamlConfig +``` + +We provide a library of classes that can be used within your file for ease of use. In the above example, we import the RosNode and YamlConfig classes. +The RosNode class is used by all of our examples to initialize a ROS node that will execute the example mission. The YamlConfig class is used to import +a YAML file and convert it to a Mission object. + +``` python +MISSION_YAML_FILE = os.environ.get("HOME", "administrator") + "/example_ws/src/" + \ + "CPR-OutdoorNav/src/cpr_outdoornav_api_examples/config/sample_mission.yaml" +``` + +This defines the file path of the YAML file that contains the mission to be executed. See the [YAML file](#yaml-file) below for the example YAML file +that will be executed. + +``` python +class MissionFromYamlFile(RosNode): +``` + +Creates a class for your example, which inherits a RosNode object. All python mission files are requried to inherit the RosNode class. + +``` python + RosNode.__init__(self, 'mission_from_yaml_file') + self.mission = YamlConfig.yamlFileToMission(MISSION_YAML_FILE)``` +``` + +Initialize the ROS node with name `mission_from_yaml_file` and import the the mission from the yaml config file. The `YamlConfig.yamlFileToMission()` function +reads teh configuration you have created in the YAML file and converts it into a Mission object. + +``` python + if not self.mission.startMission(): + return False +``` + +Upon execution of the script, the `self.mission.startMission()` function creates the mission client if not yet created, connects to the mission action server +and sends the goal to the action server to begin the execution of the mission. + +``` python + while not self.mission.isMissionComplete(): + time.sleep(1.0) + return self.mission.getMissionSuccess() +``` + +`self.mission.isMissionComplete()` monitors the mission status and only proceeds to terminating the mission has completed or been cancelled. + + +## YAML File {#yaml-file} + +The following YAML file is used in the above example mission. + +``` python +mission: + header: + seq: 0 + stamp: + secs: 0 + nsecs: 0 + frame_id: '' + name: "Sample Mission" + uuid: "8f57fd20-8a8c-4748-85ef-be1495b3ee06" + waypoints: + - + name: "Waypoint: 60" + uuid: "3edcedd7-ae0d-47cf-bd23-f7988d2779b7" + latitude: 50.10950820165676 + longitude: -97.31898507913323 + heading: -1.0 + tasks: [] + position_tolerance: -1.0 + yaw_tolerance: -1.0 + - + name: "Waypoint: 61" + uuid: "ad23202e-7067-4f1c-8677-2dc07af1e729" + latitude: 50.1095698924641 + longitude: -97.31929487427445 + heading: -1.0 + tasks: [] + position_tolerance: -1.0 + yaw_tolerance: -1.0 + - + name: "Waypoint: 62" + uuid: "fe452e77-4a26-41b0-b4ab-ee1859612a60" + latitude: 50.109437123117864 + longitude: -97.31946787675591 + heading: -1.0 + tasks: + - + name: "Wait" + uuid: "ec1121a8-7481-420f-b532-c47ea86afcd7" + service_call: "/wait" + version: "0.0.0" + floats: [3.0] + strings: [] + position_tolerance: -1.0 + yaw_tolerance: -1.0 + - + name: "Waypoint: 63" + uuid: "5ed54c1f-1599-497a-9c16-93c7ca6c355e" + latitude: 50.109384820042074 + longitude: -97.3194477601883 + heading: -1.0 + tasks: [] + position_tolerance: -1.0 + yaw_tolerance: -1.0 + - + name: "Waypoint: 64" + uuid: "2e021345-636b-4bd3-81ba-4f6901fdc016" + latitude: 50.10934056359333 + longitude: -97.31936192949982 + heading: -1.0 + tasks: [] + position_tolerance: -1.0 + yaw_tolerance: -1.0 + - + name: "Waypoint: 65" + uuid: "00c041ee-2ca4-40ba-8e38-65ac900d5a1d" + latitude: 50.10946930962604 + longitude: -97.31921709021302 + heading: -1.0 + tasks: [] + position_tolerance: -1.0 + yaw_tolerance: -1.0 + - + name: "Waypoint: 66" + uuid: "a5826fc5-b696-4b63-82aa-cc2e7a426640" + latitude: 50.10949344950718 + longitude: -97.31911382516594 + heading: -1.0 + tasks: [] + position_tolerance: -1.0 + yaw_tolerance: -1.0 + - + name: "Waypoint: 67" + uuid: "7ff204b2-79a3-46da-a8c0-2c734b4c5314" + latitude: 50.10949613171619 + longitude: -97.31898910244675 + heading: -1.0 + tasks: [] + position_tolerance: -1.0 + yaw_tolerance: -1.0 + onav_config: "To be determined" +``` diff --git a/outdoornav_user_manual_versioned_docs/version-0.11.0/api/api_examples/mission_with_custom_tasks.mdx b/outdoornav_user_manual_versioned_docs/version-0.11.0/api/api_examples/mission_with_custom_tasks.mdx index 30ec477e..af8335aa 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.11.0/api/api_examples/mission_with_custom_tasks.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.11.0/api/api_examples/mission_with_custom_tasks.mdx @@ -1,233 +1,233 @@ ---- -title: Mission with Custom Tasks -sidebar_label: Mission with Custom Tasks -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -Before being able to run the examples similar to the one explained below, it is required that you have written your own custom tasks. See the -[Custom Tasks](../../features/custom_tasks.mdx) section for information on how to develop tasks for your application. - -## The Code - -``` python -#! /usr/bin/env python3 - -import rospy -import actionlib -from cpr_outdoornav_api_examples_lib.ros_node import RosNode -from cpr_outdoornav_api_examples_lib.waypoint import Waypoint -from cpr_outdoornav_api_examples_lib.mission import Mission -from clearpath_navigation_msgs.msg import Task, UITaskResult, UITaskAction - - -CUSTOM_ACTION_NAME = "/record_gnss" -UNSPECIFIED_HEADING = -1 - - -class MissionWithCustomTask(RosNode): - """Create and run a mission with 3 waypoints, each of which executes a custom task. - - Our goal is to set up 3 waypoints, then create a mission such that the robot drives - to each waypoint in order. In addition, at each of the waypoints, a custom task will be - called to record the timestamp, goal name, and GPS coordinates. Since this is a custom task, - it is necessary to create an actionlib server to implement the custom task. - - The main component of this example is the mission builder, which builds up the set of goals, - including information on the custom tasks, and runs the mission, to execute the custom task. - - The coordinates used in this example are based on the cpr_agriculture_gazebo - world and should be updated to match the location in which the user's - robot will be operating. - """ - - class MissionBuilder: - """Creates and runs the mission, including custom tasks.""" - - def __init__(self): - """Creates the mission with 3 waypoints and custom tasks.""" - - # First waypoint, with custom task - waypoint_a_name = "A" - custom_task_a = Task() - custom_task_a.name = "my_custom_task_a" # choose any name here - custom_task_a.action_server_name = CUSTOM_ACTION_NAME # must match server name - custom_task_a.version = "1.0" # choose any version - custom_task_a.floats = [1000] # param: unique ID - custom_task_a.strings = [waypoint_a_name] # param: goal name - - # Second waypoint, with custom task - waypoint_b_name = "B" - custom_task_b = Task() - custom_task_b.name = "my_custom_task_b" # choose any name here - custom_task_b.action_server_name = CUSTOM_ACTION_NAME # must match server name - custom_task_b.version = "1.0" # choose any version - custom_task_b.floats = [1001] # param: unique ID - custom_task_b.strings = [waypoint_b_name] # param: goal name - - # Third waypoint, with custom task - waypoint_c_name = "C" - custom_task_c = Task() - custom_task_c.name = "my_custom_task_c" # choose any name here - custom_task_c.action_server_name = CUSTOM_ACTION_NAME # must match server name - custom_task_c.version = "1.0" # choose any version - custom_task_c.floats = [1002] # param: unique ID - custom_task_c.strings = [waypoint_c_name] # param: goal name - - waypoints = [ - Waypoint(waypoint_a_name, "uuid-waypoint-01", 43.50076203007681, -80.546296281104, UNSPECIFIED_HEADING), - Waypoint(waypoint_b_name, "uuid-waypoint-02", 43.50073600330896, -80.54621215801687, UNSPECIFIED_HEADING, [custom_task_b]), - Waypoint(waypoint_c_name, "uuid-waypoint-03", 43.50067256664828, -80.5462159469465, UNSPECIFIED_HEADING, [custom_task_c]), - ] - - # Build mission from two waypoints with custom tasks - self._mission = Mission("Custom task mission", "uuid-mission-1", waypoints) - - def getMission(self): - """Gets a reference to the mission. - - Returns - ------- - A reference to the mission. - """ - return self._mission - - def __init__(self): - """Initializes ROS, the custom task server, GPS subscriber and mission.""" - - RosNode.__init__(self, 'mission_with_custom_task') - self._mission_builder = MissionWithCustomTask.MissionBuilder() - - - def run(self): - """Execute the mission. - - This function blocks until the mission is complete. - - Returns - ------- - True on successful execution of the mission; else False on any error. - """ - - if not self._mission_builder.getMission().startMission(): - return False - while not self._mission_builder.getMission().isMissionComplete(): - rospy.sleep(1.0) - return self._mission_builder.getMission().getMissionSuccess() - - -if __name__ == '__main__': - if MissionWithCustomTask().run(): - print("Mission completed successfully") - else: - print("Mission failed") - rospy.signal_shutdown('Done') -``` - -## The Code Explained - -``` python -import rospy -import actionlib -from cpr_outdoornav_api_examples_lib.ros_node import RosNode -from cpr_outdoornav_api_examples_lib.waypoint import Waypoint -from cpr_outdoornav_api_examples_lib.mission import Mission -from clearpath_navigation_msgs.msg import Task, UITaskResult, UITaskAction -``` - -Import the `RosNode`, `Waypoint` and `Mission` classes which will be used to create the mission to be executed. -We also import the `Task` and `UITask` messages which are used to generate the action servers. - -``` python - class MissionBuilder: - """Creates and runs the mission, including custom tasks.""" - - def __init__(self): - """Creates the mission with 3 waypoints and custom tasks.""" - - # First waypoint, with custom task - waypoint_a_name = "A" - custom_task_a = Task() - custom_task_a.name = "my_custom_task_a" # choose any name here - custom_task_a.action_server_name = CUSTOM_ACTION_NAME # must match server name - custom_task_a.version = "1.0" # choose any version - custom_task_a.floats = [1000] # param: unique ID - custom_task_a.strings = [waypoint_a_name] # param: goal name - - # Second waypoint, with custom task - waypoint_b_name = "B" - custom_task_b = Task() - custom_task_b.name = "my_custom_task_b" # choose any name here - custom_task_b.action_server_name = CUSTOM_ACTION_NAME # must match server name - custom_task_b.version = "1.0" # choose any version - custom_task_b.floats = [1001] # param: unique ID - custom_task_b.strings = [waypoint_b_name] # param: goal name - - # Third waypoint, with custom task - waypoint_c_name = "C" - custom_task_c = Task() - custom_task_c.name = "my_custom_task_c" # choose any name here - custom_task_c.action_server_name = CUSTOM_ACTION_NAME # must match server name - custom_task_c.version = "1.0" # choose any version - custom_task_c.floats = [1002] # param: unique ID - custom_task_c.strings = [waypoint_c_name] # param: goal name - - - waypoints = [ - Waypoint(waypoint_a_name, "uuid-waypoint-01", 50.1095255, -97.3192484, UNSPECIFIED_HEADING, [custom_task_a]), - Waypoint(waypoint_b_name, "uuid-waypoint-02", 50.1094938, -97.3191085, UNSPECIFIED_HEADING, [custom_task_b]), - Waypoint(waypoint_c_name, "uuid-waypoint-03", 50.1094600, -97.3192100, UNSPECIFIED_HEADING, [custom_task_c]), - ] - - # Build mission from two waypoints with custom tasks - self._mission = Mission("Custom task mission", "uuid-mission-1", waypoints) -``` - -We create the `MissionBuilder` subclass that will create the mission to be executed. We initialize custom task objects -where we specify the `action_server_name` field with the specific action of the custom task. These are then added to the -Waypoints as a list of tasks and the Mission object is created. - -``` python - def __init__(self): - """Initializes ROS, the custom task server, GPS subscriber and mission.""" - - RosNode.__init__(self, 'mission_with_custom_task') - self._mission_builder = MissionWithCustomTask.MissionBuilder() -``` - -We initialize the example class by starting a ROS node and initialize the mission to be executed. - -``` python - def run(self): - """Execute the mission. - - This function blocks until the mission is complete. - - Returns - ------- - True on successful execution of the mission; else False on any error. - """ - - if not self._mission_builder.getMission().startMission(): - return False - while not self._mission_builder.getMission().isMissionComplete(): - time.sleep(1.0) - return self._mission_builder.getMission().getMissionSuccess() -``` - -The `run()` function starts the mission and checks for completion. Once complete we terminate the example code. - -``` python -if __name__ == '__main__': - if MissionWithCustomTask().run(): - print("Mission completed successfully") - else: - print("Mission failed") - rospy.signal_shutdown('Done') -``` - -The main python execution block. We first initialize the example class (runs the __init__ function) and then execute the run() function which -executes the mission and outputs the status information. - - +--- +title: Mission with Custom Tasks +sidebar_label: Mission with Custom Tasks +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +Before being able to run the examples similar to the one explained below, it is required that you have written your own custom tasks. See the +[Custom Tasks](../../features/custom_tasks.mdx) section for information on how to develop tasks for your application. + +## The Code + +``` python +#! /usr/bin/env python3 + +import rospy +import actionlib +from cpr_outdoornav_api_examples_lib.ros_node import RosNode +from cpr_outdoornav_api_examples_lib.waypoint import Waypoint +from cpr_outdoornav_api_examples_lib.mission import Mission +from clearpath_navigation_msgs.msg import Task, UITaskResult, UITaskAction + + +CUSTOM_ACTION_NAME = "/record_gnss" +UNSPECIFIED_HEADING = -1 + + +class MissionWithCustomTask(RosNode): + """Create and run a mission with 3 waypoints, each of which executes a custom task. + + Our goal is to set up 3 waypoints, then create a mission such that the robot drives + to each waypoint in order. In addition, at each of the waypoints, a custom task will be + called to record the timestamp, goal name, and GPS coordinates. Since this is a custom task, + it is necessary to create an actionlib server to implement the custom task. + + The main component of this example is the mission builder, which builds up the set of goals, + including information on the custom tasks, and runs the mission, to execute the custom task. + + The coordinates used in this example are based on the cpr_agriculture_gazebo + world and should be updated to match the location in which the user's + robot will be operating. + """ + + class MissionBuilder: + """Creates and runs the mission, including custom tasks.""" + + def __init__(self): + """Creates the mission with 3 waypoints and custom tasks.""" + + # First waypoint, with custom task + waypoint_a_name = "A" + custom_task_a = Task() + custom_task_a.name = "my_custom_task_a" # choose any name here + custom_task_a.action_server_name = CUSTOM_ACTION_NAME # must match server name + custom_task_a.version = "1.0" # choose any version + custom_task_a.floats = [1000] # param: unique ID + custom_task_a.strings = [waypoint_a_name] # param: goal name + + # Second waypoint, with custom task + waypoint_b_name = "B" + custom_task_b = Task() + custom_task_b.name = "my_custom_task_b" # choose any name here + custom_task_b.action_server_name = CUSTOM_ACTION_NAME # must match server name + custom_task_b.version = "1.0" # choose any version + custom_task_b.floats = [1001] # param: unique ID + custom_task_b.strings = [waypoint_b_name] # param: goal name + + # Third waypoint, with custom task + waypoint_c_name = "C" + custom_task_c = Task() + custom_task_c.name = "my_custom_task_c" # choose any name here + custom_task_c.action_server_name = CUSTOM_ACTION_NAME # must match server name + custom_task_c.version = "1.0" # choose any version + custom_task_c.floats = [1002] # param: unique ID + custom_task_c.strings = [waypoint_c_name] # param: goal name + + waypoints = [ + Waypoint(waypoint_a_name, "uuid-waypoint-01", 43.50076203007681, -80.546296281104, UNSPECIFIED_HEADING), + Waypoint(waypoint_b_name, "uuid-waypoint-02", 43.50073600330896, -80.54621215801687, UNSPECIFIED_HEADING, [custom_task_b]), + Waypoint(waypoint_c_name, "uuid-waypoint-03", 43.50067256664828, -80.5462159469465, UNSPECIFIED_HEADING, [custom_task_c]), + ] + + # Build mission from two waypoints with custom tasks + self._mission = Mission("Custom task mission", "uuid-mission-1", waypoints) + + def getMission(self): + """Gets a reference to the mission. + + Returns + ------- + A reference to the mission. + """ + return self._mission + + def __init__(self): + """Initializes ROS, the custom task server, GPS subscriber and mission.""" + + RosNode.__init__(self, 'mission_with_custom_task') + self._mission_builder = MissionWithCustomTask.MissionBuilder() + + + def run(self): + """Execute the mission. + + This function blocks until the mission is complete. + + Returns + ------- + True on successful execution of the mission; else False on any error. + """ + + if not self._mission_builder.getMission().startMission(): + return False + while not self._mission_builder.getMission().isMissionComplete(): + rospy.sleep(1.0) + return self._mission_builder.getMission().getMissionSuccess() + + +if __name__ == '__main__': + if MissionWithCustomTask().run(): + print("Mission completed successfully") + else: + print("Mission failed") + rospy.signal_shutdown('Done') +``` + +## The Code Explained + +``` python +import rospy +import actionlib +from cpr_outdoornav_api_examples_lib.ros_node import RosNode +from cpr_outdoornav_api_examples_lib.waypoint import Waypoint +from cpr_outdoornav_api_examples_lib.mission import Mission +from clearpath_navigation_msgs.msg import Task, UITaskResult, UITaskAction +``` + +Import the `RosNode`, `Waypoint` and `Mission` classes which will be used to create the mission to be executed. +We also import the `Task` and `UITask` messages which are used to generate the action servers. + +``` python + class MissionBuilder: + """Creates and runs the mission, including custom tasks.""" + + def __init__(self): + """Creates the mission with 3 waypoints and custom tasks.""" + + # First waypoint, with custom task + waypoint_a_name = "A" + custom_task_a = Task() + custom_task_a.name = "my_custom_task_a" # choose any name here + custom_task_a.action_server_name = CUSTOM_ACTION_NAME # must match server name + custom_task_a.version = "1.0" # choose any version + custom_task_a.floats = [1000] # param: unique ID + custom_task_a.strings = [waypoint_a_name] # param: goal name + + # Second waypoint, with custom task + waypoint_b_name = "B" + custom_task_b = Task() + custom_task_b.name = "my_custom_task_b" # choose any name here + custom_task_b.action_server_name = CUSTOM_ACTION_NAME # must match server name + custom_task_b.version = "1.0" # choose any version + custom_task_b.floats = [1001] # param: unique ID + custom_task_b.strings = [waypoint_b_name] # param: goal name + + # Third waypoint, with custom task + waypoint_c_name = "C" + custom_task_c = Task() + custom_task_c.name = "my_custom_task_c" # choose any name here + custom_task_c.action_server_name = CUSTOM_ACTION_NAME # must match server name + custom_task_c.version = "1.0" # choose any version + custom_task_c.floats = [1002] # param: unique ID + custom_task_c.strings = [waypoint_c_name] # param: goal name + + + waypoints = [ + Waypoint(waypoint_a_name, "uuid-waypoint-01", 50.1095255, -97.3192484, UNSPECIFIED_HEADING, [custom_task_a]), + Waypoint(waypoint_b_name, "uuid-waypoint-02", 50.1094938, -97.3191085, UNSPECIFIED_HEADING, [custom_task_b]), + Waypoint(waypoint_c_name, "uuid-waypoint-03", 50.1094600, -97.3192100, UNSPECIFIED_HEADING, [custom_task_c]), + ] + + # Build mission from two waypoints with custom tasks + self._mission = Mission("Custom task mission", "uuid-mission-1", waypoints) +``` + +We create the `MissionBuilder` subclass that will create the mission to be executed. We initialize custom task objects +where we specify the `action_server_name` field with the specific action of the custom task. These are then added to the +Waypoints as a list of tasks and the Mission object is created. + +``` python + def __init__(self): + """Initializes ROS, the custom task server, GPS subscriber and mission.""" + + RosNode.__init__(self, 'mission_with_custom_task') + self._mission_builder = MissionWithCustomTask.MissionBuilder() +``` + +We initialize the example class by starting a ROS node and initialize the mission to be executed. + +``` python + def run(self): + """Execute the mission. + + This function blocks until the mission is complete. + + Returns + ------- + True on successful execution of the mission; else False on any error. + """ + + if not self._mission_builder.getMission().startMission(): + return False + while not self._mission_builder.getMission().isMissionComplete(): + time.sleep(1.0) + return self._mission_builder.getMission().getMissionSuccess() +``` + +The `run()` function starts the mission and checks for completion. Once complete we terminate the example code. + +``` python +if __name__ == '__main__': + if MissionWithCustomTask().run(): + print("Mission completed successfully") + else: + print("Mission failed") + rospy.signal_shutdown('Done') +``` + +The main python execution block. We first initialize the example class (runs the __init__ function) and then execute the run() function which +executes the mission and outputs the status information. + + diff --git a/outdoornav_user_manual_versioned_docs/version-0.11.0/api/api_examples/monitor_status.mdx b/outdoornav_user_manual_versioned_docs/version-0.11.0/api/api_examples/monitor_status.mdx index 077a9fcf..a6fb416c 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.11.0/api/api_examples/monitor_status.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.11.0/api/api_examples/monitor_status.mdx @@ -1,152 +1,152 @@ ---- -title: Monitor Status -sidebar_label: Monitor Status -sidebar_position: 2 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -## The Code - -``` python -#! /usr/bin/env python3 - -import rospy -from cpr_outdoornav_api_examples_lib.ros_node import RosNode -from cpr_outdoornav_api_examples_lib.waypoint import Waypoint -from cpr_outdoornav_api_examples_lib.mission import Mission -from cpr_outdoornav_api_examples_lib.platform_status import PlatformStatusMonitor -from cpr_outdoornav_api_examples_lib.control_status import ControlStatusMonitor -from cpr_outdoornav_api_examples_lib.localization_status import LocalizationStatusMonitor -from cpr_outdoornav_api_examples_lib.navigation_status import NavigationStatusMonitor - - -class MonitorStatus(RosNode): - """Run a simple mission and report status throughout. - - The coordinates used in this example are based on the cpr_agriculture_gazebo - world and should be updated to match the location in which the user's - robot will be operating. - """ - - def __init__(self): - """Initialize the mission details and server connection.""" - - RosNode.__init__(self, 'monitor_status') - waypoints = [ - Waypoint("A", "uuid-waypoint-1", 50.1094938, -97.3191085), - Waypoint("B", "uuid-waypoint-2", 50.1095100, -97.3192000), - Waypoint("C", "uuid-waypoint-3", 50.1095255, -97.3192484), - ] - self.mission = Mission("Monitor status mission", "uuid-mission-1", waypoints) - self._platform_status = PlatformStatusMonitor() - self._control_status = ControlStatusMonitor() - self._localization_status = LocalizationStatusMonitor() - self._navigation_status = NavigationStatusMonitor() - - def _reportStatus(self): - """Report the current status.""" - - rospy.loginfo("--------------------------------------------------------") - self._platform_status.report() - self._control_status.report() - self._localization_status.report() - self._navigation_status.report() - - def run(self): - """Execute the mission and report status.""" - - if not self.mission.startMission(): - rospy.logerr("Failed to start mission") - return False - while not self.mission.isMissionComplete(): - self._reportStatus() - rospy.sleep(1.0) - return self.mission.getMissionSuccess() - - -if __name__ == '__main__': - if MonitorStatus().run(): - print("Mission completed successfully") - else: - print("Mission failed") - -``` - -## The Code Explained - -``` python -import rospy -from cpr_outdoornav_api_examples_lib.ros_node import RosNode -from cpr_outdoornav_api_examples_lib.waypoint import Waypoint -from cpr_outdoornav_api_examples_lib.mission import Mission -from cpr_outdoornav_api_examples_lib.platform_status import PlatformStatusMonitor -from cpr_outdoornav_api_examples_lib.control_status import ControlStatusMonitor -from cpr_outdoornav_api_examples_lib.localization_status import LocalizationStatusMonitor -from cpr_outdoornav_api_examples_lib.navigation_status import NavigationStatusMonitor -``` - -Import the `RosNode`, `Waypoint`, `Mission` classes which will be used to create the mission to be executed. We also import the -`PlatformStatusMonitor`, `ControlStatusMonitor`, `LocalizationStatusMonitor`, `NavigationStatusMonitor` classes which are set up to monitor the topics -relavant to the platform, localization, contrle selection an navigation modules respectively. - -``` python - waypoints = [ - Waypoint("A", "uuid-waypoint-1", 50.1094938, -97.3191085), - Waypoint("B", "uuid-waypoint-2", 50.1095100, -97.3192000), - Waypoint("C", "uuid-waypoint-3", 50.1095255, -97.3192484), - ] - self.mission = Mission("Monitor status mission", "uuid-mission-1", waypoints) -``` - -After initializing the ROS node, we create a mission manually by first creating a list of Waypoint objects and then adding then using the waypoint list -to construct the Mission object. - -``` python - self._platform_status = PlatformStatusMonitor() - self._control_status = ControlStatusMonitor() - self._localization_status = LocalizationStatusMonitor() - self._navigation_status = NavigationStatusMonitor() -``` - -We then initialize the platform, control, localization and navigation monitors, which subscribes to several API topics. - -``` python - def _reportStatus(self): - """Report the current status.""" - - rospy.loginfo("--------------------------------------------------------") - self._platform_status.report() - self._control_status.report() - self._localization_status.report() - self._navigation_status.report() -``` - -The `_reportStatus()` function outputs the results of the monitors to the ROS logs. This includes both the internal ROS logs as well as terminal output. - -``` python - def run(self): - """Execute the mission and report status.""" - - if not self.mission.startMission(): - rospy.logerr("Failed to start mission") - return False - while not self.mission.isMissionComplete(): - self._reportStatus() - rospy.sleep(1.0) - return self.mission.getMissionSuccess() -``` - -The `run()` function starts the mission and checks for completion. Every seconds we run the `reportStatus()` function to output the status information. -Once complete we terminate the example code. - -``` python -if __name__ == '__main__': - if MonitorStatus().run(): - print("Mission completed successfully") - else: - print("Mission failed") -``` - -The main python execution block. We first initialize the example class (runs the __init__ function) and then execute the run() function which -executes the mission and outputs the status information. +--- +title: Monitor Status +sidebar_label: Monitor Status +sidebar_position: 2 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +## The Code + +``` python +#! /usr/bin/env python3 + +import rospy +from cpr_outdoornav_api_examples_lib.ros_node import RosNode +from cpr_outdoornav_api_examples_lib.waypoint import Waypoint +from cpr_outdoornav_api_examples_lib.mission import Mission +from cpr_outdoornav_api_examples_lib.platform_status import PlatformStatusMonitor +from cpr_outdoornav_api_examples_lib.control_status import ControlStatusMonitor +from cpr_outdoornav_api_examples_lib.localization_status import LocalizationStatusMonitor +from cpr_outdoornav_api_examples_lib.navigation_status import NavigationStatusMonitor + + +class MonitorStatus(RosNode): + """Run a simple mission and report status throughout. + + The coordinates used in this example are based on the cpr_agriculture_gazebo + world and should be updated to match the location in which the user's + robot will be operating. + """ + + def __init__(self): + """Initialize the mission details and server connection.""" + + RosNode.__init__(self, 'monitor_status') + waypoints = [ + Waypoint("A", "uuid-waypoint-1", 50.1094938, -97.3191085), + Waypoint("B", "uuid-waypoint-2", 50.1095100, -97.3192000), + Waypoint("C", "uuid-waypoint-3", 50.1095255, -97.3192484), + ] + self.mission = Mission("Monitor status mission", "uuid-mission-1", waypoints) + self._platform_status = PlatformStatusMonitor() + self._control_status = ControlStatusMonitor() + self._localization_status = LocalizationStatusMonitor() + self._navigation_status = NavigationStatusMonitor() + + def _reportStatus(self): + """Report the current status.""" + + rospy.loginfo("--------------------------------------------------------") + self._platform_status.report() + self._control_status.report() + self._localization_status.report() + self._navigation_status.report() + + def run(self): + """Execute the mission and report status.""" + + if not self.mission.startMission(): + rospy.logerr("Failed to start mission") + return False + while not self.mission.isMissionComplete(): + self._reportStatus() + rospy.sleep(1.0) + return self.mission.getMissionSuccess() + + +if __name__ == '__main__': + if MonitorStatus().run(): + print("Mission completed successfully") + else: + print("Mission failed") + +``` + +## The Code Explained + +``` python +import rospy +from cpr_outdoornav_api_examples_lib.ros_node import RosNode +from cpr_outdoornav_api_examples_lib.waypoint import Waypoint +from cpr_outdoornav_api_examples_lib.mission import Mission +from cpr_outdoornav_api_examples_lib.platform_status import PlatformStatusMonitor +from cpr_outdoornav_api_examples_lib.control_status import ControlStatusMonitor +from cpr_outdoornav_api_examples_lib.localization_status import LocalizationStatusMonitor +from cpr_outdoornav_api_examples_lib.navigation_status import NavigationStatusMonitor +``` + +Import the `RosNode`, `Waypoint`, `Mission` classes which will be used to create the mission to be executed. We also import the +`PlatformStatusMonitor`, `ControlStatusMonitor`, `LocalizationStatusMonitor`, `NavigationStatusMonitor` classes which are set up to monitor the topics +relavant to the platform, localization, contrle selection an navigation modules respectively. + +``` python + waypoints = [ + Waypoint("A", "uuid-waypoint-1", 50.1094938, -97.3191085), + Waypoint("B", "uuid-waypoint-2", 50.1095100, -97.3192000), + Waypoint("C", "uuid-waypoint-3", 50.1095255, -97.3192484), + ] + self.mission = Mission("Monitor status mission", "uuid-mission-1", waypoints) +``` + +After initializing the ROS node, we create a mission manually by first creating a list of Waypoint objects and then adding then using the waypoint list +to construct the Mission object. + +``` python + self._platform_status = PlatformStatusMonitor() + self._control_status = ControlStatusMonitor() + self._localization_status = LocalizationStatusMonitor() + self._navigation_status = NavigationStatusMonitor() +``` + +We then initialize the platform, control, localization and navigation monitors, which subscribes to several API topics. + +``` python + def _reportStatus(self): + """Report the current status.""" + + rospy.loginfo("--------------------------------------------------------") + self._platform_status.report() + self._control_status.report() + self._localization_status.report() + self._navigation_status.report() +``` + +The `_reportStatus()` function outputs the results of the monitors to the ROS logs. This includes both the internal ROS logs as well as terminal output. + +``` python + def run(self): + """Execute the mission and report status.""" + + if not self.mission.startMission(): + rospy.logerr("Failed to start mission") + return False + while not self.mission.isMissionComplete(): + self._reportStatus() + rospy.sleep(1.0) + return self.mission.getMissionSuccess() +``` + +The `run()` function starts the mission and checks for completion. Every seconds we run the `reportStatus()` function to output the status information. +Once complete we terminate the example code. + +``` python +if __name__ == '__main__': + if MonitorStatus().run(): + print("Mission completed successfully") + else: + print("Mission failed") +``` + +The main python execution block. We first initialize the example class (runs the __init__ function) and then execute the run() function which +executes the mission and outputs the status information. diff --git a/outdoornav_user_manual_versioned_docs/version-0.11.0/api/api_overview.mdx b/outdoornav_user_manual_versioned_docs/version-0.11.0/api/api_overview.mdx index d9c6d616..1bcb0ad9 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.11.0/api/api_overview.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.11.0/api/api_overview.mdx @@ -1,63 +1,63 @@ ---- -title: API Overview -sidebar_label: API Overview -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -While the Web User Interface provides a great way to get started quickly -with OutdoorNav Software, some users will want programmatic control or -may wish to develop their own graphical user interfaces \-- for those -users, the Application Programming Interface (API) provides the -flexibility to do so. This is illustrated in the figure below. - -
-
- -
Interconnection between OutdoorNav Software and UGV Controller
-
-
- -The API is, at present, a [ROS 1 Noetic](http://wiki.ros.org/noetic) API, -but will soon be extended to a ROS 2 API. The API is divided into two -sections, whose details are provided below: - -- [Platform API](api_endpoints/platform_api.mdx): The set of [ROS - Topics](http://wiki.ros.org/Topics) are used to comminucate with the - hardware platform (eg. sensor data, wireless, battery state, command - velocity). This API can be used by autonomy software packages to - interface with the hardware platform. - - [Topics Published by UGV](api_endpoints/platform_api.mdx#topics-published-by-platform): - The set of topics that are published by the hardware platform. - - [Topics Subscribed to by UGV](api_endpoints/platform_api.mdx#topics-subscribed-by-platform): - The set of topics that are subscribed to by the hardware - platform. -- [Autonomy API](api_endpoints/autonomy_api.mdx): The set of [ROS - Topics](http://wiki.ros.org/Topics) that are used for monitoring and - controlling the the hardware platform through the OutdoorNav - autonomy software. - - [Topics Published by Autonomy](api_endpoints/autonomy_api.mdx#topics-published-by-autonomy): - The set of [ROS Topics](http://wiki.ros.org/Topics) published by - OutdoorNav Software, to be subscribed to by the UGV. - - [Topics Subscribed to by Autonomy](api_endpoints/autonomy_api.mdx#topics-subscribed-to-by-autonomy): - The set of [ROS Topics](http://wiki.ros.org/Topics) - subscribed to by OutdoorNav Software, typically published by the - client for directing OutdoorNav operation. - - [Services Exported by Autonomy](api_endpoints/autonomy_api.mdx#services-exported-by-autonomy): - The set of [ROS Services](http://wiki.ros.org/Services) provided - by OutdoorNav Software, for use by the client to modify/control - the behaviour of the Autonomy. - - [Actions Exported by Autonomy](api_endpoints/autonomy_api.mdx#actions-exported-by-autonomy): - The set of [ROS Actions](http://wiki.ros.org/actionlib) provided - by OutdoorNav Software, for use by the client to modify/control - the behaviour of the Autonomy. -- [Mission Manager API](api_endpoints/mission_manager_api.mdx): The set of [ROS - Services](http://wiki.ros.org/Services) that are used for creating, deleting, and modifying OutdoorNav Missions -- [Mission Scheduler API](api_endpoints/mission_scheduler_api.mdx): The set of [ROS Services](http://wiki.ros.org/Services) - that are used for creating, deleting, and modifying OutdoorNav Mission Schedules -- [Definitions](api_endpoints/definitions.mdx): The set of custom - [ROS Message](http://wiki.ros.org/Messages), [ROS - Service](http://wiki.ros.org/Services), and [ROS - Action](http://wiki.ros.org/actionlib) definitions. -- API Examples: Example code to come. +--- +title: API Overview +sidebar_label: API Overview +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +While the Web User Interface provides a great way to get started quickly +with OutdoorNav Software, some users will want programmatic control or +may wish to develop their own graphical user interfaces \-- for those +users, the Application Programming Interface (API) provides the +flexibility to do so. This is illustrated in the figure below. + +
+
+ +
Interconnection between OutdoorNav Software and UGV Controller
+
+
+ +The API is, at present, a [ROS 1 Noetic](http://wiki.ros.org/noetic) API, +but will soon be extended to a ROS 2 API. The API is divided into two +sections, whose details are provided below: + +- [Platform API](api_endpoints/platform_api.mdx): The set of [ROS + Topics](http://wiki.ros.org/Topics) are used to comminucate with the + hardware platform (eg. sensor data, wireless, battery state, command + velocity). This API can be used by autonomy software packages to + interface with the hardware platform. + - [Topics Published by UGV](api_endpoints/platform_api.mdx#topics-published-by-platform): + The set of topics that are published by the hardware platform. + - [Topics Subscribed to by UGV](api_endpoints/platform_api.mdx#topics-subscribed-by-platform): + The set of topics that are subscribed to by the hardware + platform. +- [Autonomy API](api_endpoints/autonomy_api.mdx): The set of [ROS + Topics](http://wiki.ros.org/Topics) that are used for monitoring and + controlling the the hardware platform through the OutdoorNav + autonomy software. + - [Topics Published by Autonomy](api_endpoints/autonomy_api.mdx#topics-published-by-autonomy): + The set of [ROS Topics](http://wiki.ros.org/Topics) published by + OutdoorNav Software, to be subscribed to by the UGV. + - [Topics Subscribed to by Autonomy](api_endpoints/autonomy_api.mdx#topics-subscribed-to-by-autonomy): + The set of [ROS Topics](http://wiki.ros.org/Topics) + subscribed to by OutdoorNav Software, typically published by the + client for directing OutdoorNav operation. + - [Services Exported by Autonomy](api_endpoints/autonomy_api.mdx#services-exported-by-autonomy): + The set of [ROS Services](http://wiki.ros.org/Services) provided + by OutdoorNav Software, for use by the client to modify/control + the behaviour of the Autonomy. + - [Actions Exported by Autonomy](api_endpoints/autonomy_api.mdx#actions-exported-by-autonomy): + The set of [ROS Actions](http://wiki.ros.org/actionlib) provided + by OutdoorNav Software, for use by the client to modify/control + the behaviour of the Autonomy. +- [Mission Manager API](api_endpoints/mission_manager_api.mdx): The set of [ROS + Services](http://wiki.ros.org/Services) that are used for creating, deleting, and modifying OutdoorNav Missions +- [Mission Scheduler API](api_endpoints/mission_scheduler_api.mdx): The set of [ROS Services](http://wiki.ros.org/Services) + that are used for creating, deleting, and modifying OutdoorNav Mission Schedules +- [Definitions](api_endpoints/definitions.mdx): The set of custom + [ROS Message](http://wiki.ros.org/Messages), [ROS + Service](http://wiki.ros.org/Services), and [ROS + Action](http://wiki.ros.org/actionlib) definitions. +- API Examples: Example code to come. diff --git a/outdoornav_user_manual_versioned_docs/version-0.11.0/cpr_hardware.mdx b/outdoornav_user_manual_versioned_docs/version-0.11.0/cpr_hardware.mdx index f60527ff..2d1efdd0 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.11.0/cpr_hardware.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.11.0/cpr_hardware.mdx @@ -1,405 +1,405 @@ ---- -title: "Appendix B: CPR Hardware" -sidebar_label: "Appendix B: CPR Hardware" -sidebar_position: 13 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -When using a Clearpath Robotics UGV and Base Station, the following -hardware setup may be required. - -## Calibrating the IMU - -Although IMU magnetometers are calibrated at the factory to remove any -internal magnetic influences in the device, measurements are still -subject to influence from external magnetic anomalies when the sensor is -installed. These anomalies are divided into two classes: hard iron -offsets and soft iron distortions. Hard iron offsets are created by -objects that produce a magnetic field. Soft iron distortions are -considered deflections or alterations in the existing magnetic field. -Ideally, these influences are mitigated by installing the sensor away -from magnetic sources, such as coils, magnets, and ferrous metal -structures and mounting hardware. However, often these sources are hard -to avoid or are hidden. To mitigate this effect when using the IMU -magnetometer to aid in heading estimations, a field calibration of the -magnetometer after final installation is highly recommended. This means -that the IMU must be calibrated in the same environment that you use -your UGV for autonomous navigation. - -### Microstrain IMU - -If your UGV has a 3DM-GX5-25 Microstrain IMU, the complete instruction -on calibration of your IMU can be found in section 5.4 of the -[datasheet](https://www.microstrain.com/sites/default/files/3dm-gx5-25_user_manual_8500-0012.pdf). -Note that you need a computer with Windows system and the LORD Sensing -MIP Hard and Soft Iron Calibration software installed which can be found -at the Microstrain website. - -### UM6/7 IMU - -If you are using UM6 or UM7 IMUs, you will need the magnetometer display -package which is located at the following address on your UGV: -`~/catkin_ws/Drivers/src/imu_tools/magnetometer_display`. - -Follow these steps to calibrate the IMU on your machine: - -1. Create a catkin workspace on your local machine and copy the package - `magnetometer_display` into your src folder. Build this package with - the `catkin_make` command. - -2. Perform the following command to make the calibration script - executable: - - ``` bash - $ sudo chmod +x calibration.py - ``` - -3. Connect the IMU to your computer and launch the driver. Or if you - are on the same network as your UGV, make your UGV the ROS master - and ensure that you can echo the IMU topic on your computer. - -4. Open the `magnetometer.launch` file in the `magnetometer_display` - package and change the sections shown in the figure below. - Specifically, set `use_mag_field` to true when the IMU is outputting - magnetometer measurements with a `sensor_msgs/MagneticField` - message, otherwise set to false. Microstrain is the only IMU which - uses the MagneticField message type. - -
-
- -
Magnetometer calibration, general launch settings
-
-
- -5. Launch the calibration using the following command: - - ``` bash - $ roslaunch magnetometer_display magnetometer.launch - ``` - -6. Move the IMU around to get good coverage. RViz will display - magnetometer points (red) and will plot current ellipsoid fit - (green) as shown in the figure below. - -
-
- -
Magnetometer calibration, ellipsoid fit plot
-
-
- -7. Ellipsoid fit parameters are displayed in terminal as shown in the - figure below. - -
-
- -
Magnetometer calibration, ellipsoid fit - parameters
-
-
- -8. Once there are enough red points on your fitted ellipsoid, enter the - above calibrations in the IMU driver launch file. Open the - `sensor.launch` file in the `cpr_gps_localization` package and go to - the UM7 (or UM6) section of the launch file. The figure below shows - this section for the UM7. - -
-
- -
Magnetometer calibration, ellipsoid fit settings in launch file
-
-
- - You should enter the parameters generated in the Ellipsoid fit step - as follows (to account for the NED to ENU transform the driver - applies): - - - Launch file X = Terminal Y - - Launch file Y = Terminal X - - Launch file Z = -Terminal Z - -## RTK Positioning GPS Setup - -:::note - -Please skip this section if your robot does not have RTK GPS. - -::: - -The following configuration is for establishing communications between -the Base Station and the UGV using TCP/IP for the purpose of -transmitting RTK corrections. Before starting this procedure, make sure -that you have installed the [SwiftNav -console](https://support.swiftnav.com/support/solutions/articles/44001903699-installing-swift-console). - -### Base Station GPS Configuration - -- Connect the Swift Navigation device to a computer via USB or the USB - to Serial Adapter cable. - -- Open Swift Console and connect to the device. - -- Set the following options in the **ethernet** section as shown in - the figure below. - - 1. ip_config_mode: `Static` - 2. ip_address: `192.168.131.30` - 3. netmask: `255.255.255.0` - -
-
- -
Base Station Ethernet settings
-
-
- -- Set the following options in the **tcp_server1** section as show in - the figure below. - - 1. mode: `SBP` - 2. port: `55556` - 3. enabled_sbp_messages: `72,74,117,65535` - -
-
- -
Base Station TCP1 Server settings
-
-
- -- Set the following options in the **solution** section as shown in - the figure below. - - 1. soln_freq: `10` - 2. correction_age_max: `30` - 3. output_every_n_obs: `10` - 4. dgnss_solution_mode: `Low Latency` - -
-
- -
Base Station Solution settings
-
-
- -- Next the Base Station has to be surveyed. There are two ways of - doing this which are explained in [RTK Survey Positioning](#base-station-survey). -- Click Save to Flash. -- Close Swift Console. -- Disconnect the device from the computer. - -### UGV Position GPS Configuration {#ugv-position-gps-config} - -- Connect the Swift Navigation device to a computer via USB or the USB - to Serial Adapter cable. - -- Open Swift Console and connect to the device. - -- Set the following options in the **ethernet** section as shown in - the figure below. - - 1. ip_config_mode: `Static` - 2. ip_address: `192.168.131.31` - 3. netmask: `255.255.255.0` - -
-
- -
UGV GPS Ethernet settings
-
-
- -- Set the following options in the **tcp_client0** section as show in - the figure below. - - 1. mode: `SBP` - 2. port: `192.168.131.30:55556` - 3. enabled_sbp_messages: `0` - -
-
- -
UGV GPS TCP Client0 settings
-
-
- -- Set the following options in the **solution** section as show in the - figure below. - - 1. soln_freq: `10` - 2. correction_age_max: `30` - 3. output_every_n_obs: `10` - 4. dgnss_solution_mode: `Low Latency` - -
-
- -
UGV GPS Solution settings
-
-
- -- Click Save to Flash. - -- Close Swift Console. - -- Disconnect the device from the computer. - -Once you have entered these settings. Connect your computer to the Wi-Fi -network of the Base Station. Also make sure that the UGC (which is -connected to the UGV GPS unit) is also connected to the Base Station -Wifi. The you should be able to verify connectivity across the devices. -To check the Base Station, complete the following steps. - -- Open Swift Console on you computer -- Select **TCP/IP** -- For IP Address enter `192.168.131.30` -- For IP Port enter `55555` -- Click **OK** -- Select the **Observations** tab -- In the **Remote** section you should see observation data from your - UGV. - -To check the UGV, complete the following steps. - -- Open Swift Console -- Select **TCP/IP** -- For IP Address enter `192.168.131.31` -- For IP Port enter `55555` -- Click **OK** -- Select the **Observations** tab -- In the **Remote** section you should see observation data from your - Base Station. - -Further information on [RTK setup](https://swiftnav.freshdesk.com/support/solutions/articles/44001904334-piksi-multi-gnss-rtk-position-with-stationary-base%7D%7Bhttps://swiftnav.freshdesk.com/support/solutions/articles/44001904334-piksi-multi-gnss-rtk-position-with-stationary-base) -is available from SwiftNav. - -## RTK Survey Positioning {#base-station-survey} - -:::note - -Please skip this section if your UGV does not have RTK GPS. - -::: - -:::warning - -Once you have surveyed the location of the Base Station, you **cannot** -relocate the Base Station throughout your tests. Otherwise, this step -has to be repeated. - -::: - -There are three ways to survey the Base Station location: - -1. OutdoorNav Web User Interface (easiest/accurate), -2. Swiftnav console autosurvey (fastest/least accurate), -3. ROS launch file geodetic survey (for debug output display). - -Using the OutdoorNav Web UI is the easiest and most accurate way to do -this since it runs the ROS geodetic survey tool which uses more samples -to compute the final position of the Base Station than the Swiftnav -console. Using the geodetic ROS survey launch file directly would allow -the user to visualize the output log directly but requires preliminary -knowledge in ROS. - -### Base Station Survey: Web UI - -Using the OutdoorNav Web UI to survey the Base Station is very simple. -See [Survey Base Station](getting_started/system_setup.mdx#survey_base_station) for details. - -### Base Station Survey: Piksi Console - -Use the Piksi console connect the base station GPS. Go to "Settings -\> -surveyed position", click to any field in this section and then click -the button on the top right corner "Auto Survey". The figure below -shows these steps. The last 1000 GPS points will be used to compute the -position of the Base Station. - -
-
- -
Auto Survey
-
-
- -After that, make sure the four fields in "surveyed position" -(broadcast, surveyed lat, surveyed lon, surveyed alt) are consistent -with your location. - -### Base Station Survey: ROS Geodetic Survey - -The `ethz_piksi_ros` repository should be installed in the UGV's -`catkin_ws`. To run the surveying process simply connect your PC to the -Base Station network, `ssh` into the UGV's computer and run the -following: - -``` bash -roslaunch {robot_name}_gps_navigation geodetic_survey.launch -``` - -where `robot_name` is either `jackal`, `husky`, or `warthog` depending -on your UGV. The surveying will begin and you will see a running tally -of the collected data. - -## RTK Heading Setup - -For the rest of this section, it is assumed that a third Swiftnav Duro -device is available with IP address of 192.168.131.32. Note that in -order to change the IP address of a Swiftnav Duro, you need to use the -Swiftnav console and connect to the device with the serial port. - -:::note - -The instructions in this section will overwrite some of the settings set -in [UGV Position GPS Configuration](#ugv-position-gps-config) on the -Position/Reference Duro receiver. This is normal since the configuration -in [UGV Position GPS Configuration](#ugv-position-gps-config) is for a UGV -with only the position Duro receiver. If the heading receiver is -connected as well, please continue with the instructions below. - -::: - -The two Swiftnav Duro GPS device on the UGV are connected via serial -cable. They are also both connected via Ethernet cable to the computer -on the UGV. For computing the heading, on Duro (the one on the rear with -IP address 192.168.131.31) operates only to provide GNSS Observations to -the other Duro that computes an RTK derived heading (the Duro on the -front with IP address 192.168.131.32). For the purposes of this -document, we will call the Duro/Piksi that operates to provide the raw -GNSS observations only the "Reference Receiver" and the Duro/Piksi -producing heading measurements the "Attitude Receiver." - -Use the Swiftnav console to connect to the Reference Receiver (with IP -address of 192.168.131.31) and insert the settings shown in the figure -below. - -
-
- -
Reference Receiver settings
-
-
- -Next, connect to the Attitude Receiver (with IP address of -192.168.131.32) and change the configuration as shown in the figure -below. - -
-
- -
Attitude Receiver settings
-
-
- -For further information please refer to [these instructions](https://swiftnav.freshdesk.com/support/solutions/articles/44001907898-rtk-heading-gnss-compass-configuration%7D%7Bhttps://swiftnav.freshdesk.com/support/solutions/articles/44001907898-rtk-heading-gnss-compass-configuration). - -## Wireless Motion Stop - -Please refer to the hardware user manual of the motion stop device for proper -usage. A trained operator should be used to supervise navigation of the -UGV under autonomous control at all times. The Operator should be -familiar with the use of the wireless motion stop device. +--- +title: "Appendix B: CPR Hardware" +sidebar_label: "Appendix B: CPR Hardware" +sidebar_position: 13 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +When using a Clearpath Robotics UGV and Base Station, the following +hardware setup may be required. + +## Calibrating the IMU + +Although IMU magnetometers are calibrated at the factory to remove any +internal magnetic influences in the device, measurements are still +subject to influence from external magnetic anomalies when the sensor is +installed. These anomalies are divided into two classes: hard iron +offsets and soft iron distortions. Hard iron offsets are created by +objects that produce a magnetic field. Soft iron distortions are +considered deflections or alterations in the existing magnetic field. +Ideally, these influences are mitigated by installing the sensor away +from magnetic sources, such as coils, magnets, and ferrous metal +structures and mounting hardware. However, often these sources are hard +to avoid or are hidden. To mitigate this effect when using the IMU +magnetometer to aid in heading estimations, a field calibration of the +magnetometer after final installation is highly recommended. This means +that the IMU must be calibrated in the same environment that you use +your UGV for autonomous navigation. + +### Microstrain IMU + +If your UGV has a 3DM-GX5-25 Microstrain IMU, the complete instruction +on calibration of your IMU can be found in section 5.4 of the +[datasheet](https://www.microstrain.com/sites/default/files/3dm-gx5-25_user_manual_8500-0012.pdf). +Note that you need a computer with Windows system and the LORD Sensing +MIP Hard and Soft Iron Calibration software installed which can be found +at the Microstrain website. + +### UM6/7 IMU + +If you are using UM6 or UM7 IMUs, you will need the magnetometer display +package which is located at the following address on your UGV: +`~/catkin_ws/Drivers/src/imu_tools/magnetometer_display`. + +Follow these steps to calibrate the IMU on your machine: + +1. Create a catkin workspace on your local machine and copy the package + `magnetometer_display` into your src folder. Build this package with + the `catkin_make` command. + +2. Perform the following command to make the calibration script + executable: + + ``` bash + $ sudo chmod +x calibration.py + ``` + +3. Connect the IMU to your computer and launch the driver. Or if you + are on the same network as your UGV, make your UGV the ROS master + and ensure that you can echo the IMU topic on your computer. + +4. Open the `magnetometer.launch` file in the `magnetometer_display` + package and change the sections shown in the figure below. + Specifically, set `use_mag_field` to true when the IMU is outputting + magnetometer measurements with a `sensor_msgs/MagneticField` + message, otherwise set to false. Microstrain is the only IMU which + uses the MagneticField message type. + +
+
+ +
Magnetometer calibration, general launch settings
+
+
+ +5. Launch the calibration using the following command: + + ``` bash + $ roslaunch magnetometer_display magnetometer.launch + ``` + +6. Move the IMU around to get good coverage. RViz will display + magnetometer points (red) and will plot current ellipsoid fit + (green) as shown in the figure below. + +
+
+ +
Magnetometer calibration, ellipsoid fit plot
+
+
+ +7. Ellipsoid fit parameters are displayed in terminal as shown in the + figure below. + +
+
+ +
Magnetometer calibration, ellipsoid fit + parameters
+
+
+ +8. Once there are enough red points on your fitted ellipsoid, enter the + above calibrations in the IMU driver launch file. Open the + `sensor.launch` file in the `cpr_gps_localization` package and go to + the UM7 (or UM6) section of the launch file. The figure below shows + this section for the UM7. + +
+
+ +
Magnetometer calibration, ellipsoid fit settings in launch file
+
+
+ + You should enter the parameters generated in the Ellipsoid fit step + as follows (to account for the NED to ENU transform the driver + applies): + + - Launch file X = Terminal Y + - Launch file Y = Terminal X + - Launch file Z = -Terminal Z + +## RTK Positioning GPS Setup + +:::note + +Please skip this section if your robot does not have RTK GPS. + +::: + +The following configuration is for establishing communications between +the Base Station and the UGV using TCP/IP for the purpose of +transmitting RTK corrections. Before starting this procedure, make sure +that you have installed the [SwiftNav +console](https://support.swiftnav.com/support/solutions/articles/44001903699-installing-swift-console). + +### Base Station GPS Configuration + +- Connect the Swift Navigation device to a computer via USB or the USB + to Serial Adapter cable. + +- Open Swift Console and connect to the device. + +- Set the following options in the **ethernet** section as shown in + the figure below. + + 1. ip_config_mode: `Static` + 2. ip_address: `192.168.131.30` + 3. netmask: `255.255.255.0` + +
+
+ +
Base Station Ethernet settings
+
+
+ +- Set the following options in the **tcp_server1** section as show in + the figure below. + + 1. mode: `SBP` + 2. port: `55556` + 3. enabled_sbp_messages: `72,74,117,65535` + +
+
+ +
Base Station TCP1 Server settings
+
+
+ +- Set the following options in the **solution** section as shown in + the figure below. + + 1. soln_freq: `10` + 2. correction_age_max: `30` + 3. output_every_n_obs: `10` + 4. dgnss_solution_mode: `Low Latency` + +
+
+ +
Base Station Solution settings
+
+
+ +- Next the Base Station has to be surveyed. There are two ways of + doing this which are explained in [RTK Survey Positioning](#base-station-survey). +- Click Save to Flash. +- Close Swift Console. +- Disconnect the device from the computer. + +### UGV Position GPS Configuration {#ugv-position-gps-config} + +- Connect the Swift Navigation device to a computer via USB or the USB + to Serial Adapter cable. + +- Open Swift Console and connect to the device. + +- Set the following options in the **ethernet** section as shown in + the figure below. + + 1. ip_config_mode: `Static` + 2. ip_address: `192.168.131.31` + 3. netmask: `255.255.255.0` + +
+
+ +
UGV GPS Ethernet settings
+
+
+ +- Set the following options in the **tcp_client0** section as show in + the figure below. + + 1. mode: `SBP` + 2. port: `192.168.131.30:55556` + 3. enabled_sbp_messages: `0` + +
+
+ +
UGV GPS TCP Client0 settings
+
+
+ +- Set the following options in the **solution** section as show in the + figure below. + + 1. soln_freq: `10` + 2. correction_age_max: `30` + 3. output_every_n_obs: `10` + 4. dgnss_solution_mode: `Low Latency` + +
+
+ +
UGV GPS Solution settings
+
+
+ +- Click Save to Flash. + +- Close Swift Console. + +- Disconnect the device from the computer. + +Once you have entered these settings. Connect your computer to the Wi-Fi +network of the Base Station. Also make sure that the UGC (which is +connected to the UGV GPS unit) is also connected to the Base Station +Wifi. The you should be able to verify connectivity across the devices. +To check the Base Station, complete the following steps. + +- Open Swift Console on you computer +- Select **TCP/IP** +- For IP Address enter `192.168.131.30` +- For IP Port enter `55555` +- Click **OK** +- Select the **Observations** tab +- In the **Remote** section you should see observation data from your + UGV. + +To check the UGV, complete the following steps. + +- Open Swift Console +- Select **TCP/IP** +- For IP Address enter `192.168.131.31` +- For IP Port enter `55555` +- Click **OK** +- Select the **Observations** tab +- In the **Remote** section you should see observation data from your + Base Station. + +Further information on [RTK setup](https://swiftnav.freshdesk.com/support/solutions/articles/44001904334-piksi-multi-gnss-rtk-position-with-stationary-base%7D%7Bhttps://swiftnav.freshdesk.com/support/solutions/articles/44001904334-piksi-multi-gnss-rtk-position-with-stationary-base) +is available from SwiftNav. + +## RTK Survey Positioning {#base-station-survey} + +:::note + +Please skip this section if your UGV does not have RTK GPS. + +::: + +:::warning + +Once you have surveyed the location of the Base Station, you **cannot** +relocate the Base Station throughout your tests. Otherwise, this step +has to be repeated. + +::: + +There are three ways to survey the Base Station location: + +1. OutdoorNav Web User Interface (easiest/accurate), +2. Swiftnav console autosurvey (fastest/least accurate), +3. ROS launch file geodetic survey (for debug output display). + +Using the OutdoorNav Web UI is the easiest and most accurate way to do +this since it runs the ROS geodetic survey tool which uses more samples +to compute the final position of the Base Station than the Swiftnav +console. Using the geodetic ROS survey launch file directly would allow +the user to visualize the output log directly but requires preliminary +knowledge in ROS. + +### Base Station Survey: Web UI + +Using the OutdoorNav Web UI to survey the Base Station is very simple. +See [Survey Base Station](getting_started/system_setup.mdx#survey_base_station) for details. + +### Base Station Survey: Piksi Console + +Use the Piksi console connect the base station GPS. Go to "Settings -\> +surveyed position", click to any field in this section and then click +the button on the top right corner "Auto Survey". The figure below +shows these steps. The last 1000 GPS points will be used to compute the +position of the Base Station. + +
+
+ +
Auto Survey
+
+
+ +After that, make sure the four fields in "surveyed position" +(broadcast, surveyed lat, surveyed lon, surveyed alt) are consistent +with your location. + +### Base Station Survey: ROS Geodetic Survey + +The `ethz_piksi_ros` repository should be installed in the UGV's +`catkin_ws`. To run the surveying process simply connect your PC to the +Base Station network, `ssh` into the UGV's computer and run the +following: + +``` bash +roslaunch {robot_name}_gps_navigation geodetic_survey.launch +``` + +where `robot_name` is either `jackal`, `husky`, or `warthog` depending +on your UGV. The surveying will begin and you will see a running tally +of the collected data. + +## RTK Heading Setup + +For the rest of this section, it is assumed that a third Swiftnav Duro +device is available with IP address of 192.168.131.32. Note that in +order to change the IP address of a Swiftnav Duro, you need to use the +Swiftnav console and connect to the device with the serial port. + +:::note + +The instructions in this section will overwrite some of the settings set +in [UGV Position GPS Configuration](#ugv-position-gps-config) on the +Position/Reference Duro receiver. This is normal since the configuration +in [UGV Position GPS Configuration](#ugv-position-gps-config) is for a UGV +with only the position Duro receiver. If the heading receiver is +connected as well, please continue with the instructions below. + +::: + +The two Swiftnav Duro GPS device on the UGV are connected via serial +cable. They are also both connected via Ethernet cable to the computer +on the UGV. For computing the heading, on Duro (the one on the rear with +IP address 192.168.131.31) operates only to provide GNSS Observations to +the other Duro that computes an RTK derived heading (the Duro on the +front with IP address 192.168.131.32). For the purposes of this +document, we will call the Duro/Piksi that operates to provide the raw +GNSS observations only the "Reference Receiver" and the Duro/Piksi +producing heading measurements the "Attitude Receiver." + +Use the Swiftnav console to connect to the Reference Receiver (with IP +address of 192.168.131.31) and insert the settings shown in the figure +below. + +
+
+ +
Reference Receiver settings
+
+
+ +Next, connect to the Attitude Receiver (with IP address of +192.168.131.32) and change the configuration as shown in the figure +below. + +
+
+ +
Attitude Receiver settings
+
+
+ +For further information please refer to [these instructions](https://swiftnav.freshdesk.com/support/solutions/articles/44001907898-rtk-heading-gnss-compass-configuration%7D%7Bhttps://swiftnav.freshdesk.com/support/solutions/articles/44001907898-rtk-heading-gnss-compass-configuration). + +## Wireless Motion Stop + +Please refer to the hardware user manual of the motion stop device for proper +usage. A trained operator should be used to supervise navigation of the +UGV under autonomous control at all times. The Operator should be +familiar with the use of the wireless motion stop device. diff --git a/outdoornav_user_manual_versioned_docs/version-0.11.0/customized_tuning/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.11.0/customized_tuning/_category_.json index 4c27a4d9..d38b7f55 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.11.0/customized_tuning/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.11.0/customized_tuning/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Appendix C: Tuning & Customization", - "position": 14 +{ + "label": "Appendix C: Tuning & Customization", + "position": 14 } \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.11.0/customized_tuning/sensor_customization.mdx b/outdoornav_user_manual_versioned_docs/version-0.11.0/customized_tuning/sensor_customization.mdx index 9d9f115a..f2cce53a 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.11.0/customized_tuning/sensor_customization.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.11.0/customized_tuning/sensor_customization.mdx @@ -1,9 +1,9 @@ ---- -title: "Sensor Customization" -sidebar_label: "Sensor Customization" -sidebar_position: 4 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -Information incoming in a future release. Please contact Clearpath customer support at \ to discuss any related issue. +--- +title: "Sensor Customization" +sidebar_label: "Sensor Customization" +sidebar_position: 4 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +Information incoming in a future release. Please contact Clearpath customer support at \ to discuss any related issue. diff --git a/outdoornav_user_manual_versioned_docs/version-0.11.0/customized_tuning/tuning_instructions/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.11.0/customized_tuning/tuning_instructions/_category_.json index d62e291a..4b3e7b59 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.11.0/customized_tuning/tuning_instructions/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.11.0/customized_tuning/tuning_instructions/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Tuning Instructions", - "position": 2 -} +{ + "label": "Tuning Instructions", + "position": 2 +} diff --git a/outdoornav_user_manual_versioned_docs/version-0.11.0/customized_tuning/tuning_instructions/ackermann_drive_dynamics.mdx b/outdoornav_user_manual_versioned_docs/version-0.11.0/customized_tuning/tuning_instructions/ackermann_drive_dynamics.mdx index 51639337..0125d8dd 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.11.0/customized_tuning/tuning_instructions/ackermann_drive_dynamics.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.11.0/customized_tuning/tuning_instructions/ackermann_drive_dynamics.mdx @@ -1,9 +1,9 @@ ---- -title: "Ackermann Drive" -sidebar_label: "Ackermann Drive" -sidebar_position: 4 -toc_min_heading_level: 2 -toc_max_heading_level: 2 ---- - -Information incoming in release 0.10.0. Please contact Clearpath customer support at support@clearpathrobotics.com to discuss any related issue. +--- +title: "Ackermann Drive" +sidebar_label: "Ackermann Drive" +sidebar_position: 4 +toc_min_heading_level: 2 +toc_max_heading_level: 2 +--- + +Information incoming in release 0.10.0. Please contact Clearpath customer support at support@clearpathrobotics.com to discuss any related issue. diff --git a/outdoornav_user_manual_versioned_docs/version-0.11.0/customized_tuning/tuning_instructions/footprint_tuning.mdx b/outdoornav_user_manual_versioned_docs/version-0.11.0/customized_tuning/tuning_instructions/footprint_tuning.mdx index 4b90f600..6b105ecb 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.11.0/customized_tuning/tuning_instructions/footprint_tuning.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.11.0/customized_tuning/tuning_instructions/footprint_tuning.mdx @@ -1,9 +1,9 @@ ---- -title: "Footprint Tuning" -sidebar_label: "Footprint Tuning" -sidebar_position: 5 -toc_min_heading_level: 2 -toc_max_heading_level: 2 ---- - -Information incoming in release 0.9.0. Please contact Clearpath customer support at \ to discuss any related issue. +--- +title: "Footprint Tuning" +sidebar_label: "Footprint Tuning" +sidebar_position: 5 +toc_min_heading_level: 2 +toc_max_heading_level: 2 +--- + +Information incoming in release 0.9.0. Please contact Clearpath customer support at \ to discuss any related issue. diff --git a/outdoornav_user_manual_versioned_docs/version-0.11.0/customized_tuning/tuning_overview.mdx b/outdoornav_user_manual_versioned_docs/version-0.11.0/customized_tuning/tuning_overview.mdx index 851df29b..77fbabeb 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.11.0/customized_tuning/tuning_overview.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.11.0/customized_tuning/tuning_overview.mdx @@ -1,25 +1,25 @@ ---- -title: "Tuning Overview" -sidebar_label: "Tuning Overview" -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -The scope of Appendix C is to provide information on how to tune the various components of -OutdoorNav. - -Instructions for tuning specific platform types can be found here: - -- [Differential Drive (Skid-Steer) Dynamics](tuning_instructions/differential_drive_dynamics.mdx) -- [Ackermann Drive Dynamics](tuning_instructions/ackermann_drive_dynamics.mdx) - - -Lists of parameters related to each component of the autonomy can be found here: - -- [Localization Parameters](tuning_parameters/localization_parameters.mdx) -- [Navigation Parameters](tuning_parameters/navigation_parameters.mdx) -- [Collision Avoidance Parameters](tuning_parameters/collision_avoidance_parameters.mdx) - -In future releases, we will describe how the user can [Customize their UI](user_interface_customization.mdx) +--- +title: "Tuning Overview" +sidebar_label: "Tuning Overview" +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +The scope of Appendix C is to provide information on how to tune the various components of +OutdoorNav. + +Instructions for tuning specific platform types can be found here: + +- [Differential Drive (Skid-Steer) Dynamics](tuning_instructions/differential_drive_dynamics.mdx) +- [Ackermann Drive Dynamics](tuning_instructions/ackermann_drive_dynamics.mdx) + + +Lists of parameters related to each component of the autonomy can be found here: + +- [Localization Parameters](tuning_parameters/localization_parameters.mdx) +- [Navigation Parameters](tuning_parameters/navigation_parameters.mdx) +- [Collision Avoidance Parameters](tuning_parameters/collision_avoidance_parameters.mdx) + +In future releases, we will describe how the user can [Customize their UI](user_interface_customization.mdx) as well as how to [Customize which Sensors](sensor_customization.mdx) are input into OutdoorNav. \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.11.0/customized_tuning/tuning_parameters/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.11.0/customized_tuning/tuning_parameters/_category_.json index fb6592a9..0e2dc60a 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.11.0/customized_tuning/tuning_parameters/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.11.0/customized_tuning/tuning_parameters/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Tuning Parameters", - "position": 3 -} +{ + "label": "Tuning Parameters", + "position": 3 +} diff --git a/outdoornav_user_manual_versioned_docs/version-0.11.0/customized_tuning/tuning_parameters/navigation_parameters.mdx b/outdoornav_user_manual_versioned_docs/version-0.11.0/customized_tuning/tuning_parameters/navigation_parameters.mdx index b88562a4..d4a2b559 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.11.0/customized_tuning/tuning_parameters/navigation_parameters.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.11.0/customized_tuning/tuning_parameters/navigation_parameters.mdx @@ -1,169 +1,169 @@ ---- -title: "Navigation Parameters" -sidebar_label: "Navigation Parameters" -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 3 ---- - -import versions from "@site/static/versions.js" - -## Controllers {#controllers} - -### Determine the file location of the parameter {#file_location} - -The parameters related to the controller, can be found here: - -``` bash -/opt/onav//app/autonomy/params//navigation/controls_general.yaml -/opt/onav//app/autonomy/params//navigation/mpc_controller.yaml -/opt/onav//app/autonomy/params//navigation/mpc_dock_controller.yaml -``` - -If they are not listed in the above file, it is because they are using the default values and are not being overwritten. - -### MPC Controller {#controller} - -#### MBF Plugins - -Currently we have implemented a Move-Base Flex controller plugin named: **OnavMbfMpcController** - -Two instances of this plugin are loaded at runtime by our navigation node (as seen in the table below). The parameters are equivalent for each instance of the plugin but the values of certain of these parameters are different. - -| Controller name | Description | -|-----------------|-------------| -| **`mpc_controller`** | The controller used during normal navigation and applies to tracking the paths generated between all the mission waypoints. | -| **`mpc_dock_controller`** | The controller used during docking and applies only to tracking the dock and undock paths. | - -#### MPC State Machine - -The MPC controller operates as a state machine that contains the following states: - -| MPC State | Description | Condition | -|-----------|-------------|-----------| -| **`DEFAULT`** | Standard tracking behavior. | Will revert to this state if none of the other state conditions are met. | -| **`GOAL`** | Tracking behavior as the UGV approaches the goal. | Will enter GOAL mode when the `goal_horizon_threshold` parameter distance to the goal has been reached.| -| **`PRECISE`** | State when more precision is required in the tracking. | At the start of the path, we begin in Precise mode to ensure that we have a good start to tracking.| -| **`RESCUE`** | State to rescue the tracker when the UGV is stuck. | Will enter RESCUE mode when UGV is appraching a condition that make it stuck.| -| **`HYSTERESIS`** | State when you the UGV requires compensation for tire flexion. | Will enter HYSTERESIS mode when the UGV detects that it will begin oscillating due to tire deformation. | -| **`CORNER`** | State when there is a curve or a corner ahead. | Will enter CORNER mode when the UGV approaches, within a `corner_lookahead` parameter distance, to a corner with at least `corner_detection_threshold` of a curvature.| - -#### Default State Parameters {#default_state_params} - -The following list defines the default parameters that the MPC controller uses. -For the most part, they apply to all states of the MPC controller. - -| Parameter | Description | Namespace | SI Units | -|-----------|-------------|-----------|:--------:| -| `vehicle_length` | The length (longitudinally) of the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | -| `mpc_horizon` | The prediction horizon of the MPC. | [/navigation/*<controller>*/path_tracker](#file_location) | **s** | -| `max_lookahead` | Maximum distance along the path we seek to follow. Affects how far we do collision checks as well as the maximum velocity of the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | -| `min_lookahead` | Minimum distance along the path we seek to follow. Affects how far we do collision checks as well as the maximum velocity of the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | -| `lookahead_smoother` | Factor between 0 and 1 that determines the smoothness of the change in lookahead distance: 0 means only maximum velocity is used to determine the horizon (can be jumpy but speeds up the UGV faster); 1 means only averaged planned velocity is used to determine the horizon (smoother but speeds up the UGV slowly). | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `lookahead_factor` | How aggressively do we want to increase the lookahead from min_lookahead to max_lookahead | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `mpc_opt_maxiteration` | The maximum number of iterations that the solver will run. Increase this value for better performance, decrease for shorter computation time. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `discretization_steps` | Number of grid points along the MPC prediction; Lower: less accuracy, but faster | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `max_fwd_velocity` | The maximum allowable linear velocity that the MPC controller can compute. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | -| `min_fwd_velocity` | The minimum allowable linear velocity, in any mode, that the MPC controller can compute. This can be used to overcome the different deadbands that different UGVs may have. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | -| `max_rev_velocity` | The maximum allowable reverse linear velocity (ie. positive value), in any mode, that the MPC controller can compute. By default this is set to the `max_fwd_velocity`, so only needed if your maximum linear reverse velocity is different than the forward linear velocity.| [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | -| `max_ang_velocity` | The maximum allowable angular velocity, in any mode, that the MPC controller can compute. This parameter bounds both positive and negative angular velocities. | [/navigation/*<controller>*/path_tracker](#file_location) | **rad/s** | -| `max_accel` | The maximum allowable linear acceleration, in normal navigation mode, that the MPC controller can compute. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s/s** | -| `max_decel` | The maximum allowable linear deceleration (ie. negative value), in any mode, that the MPC controller can compute. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s/s** | -| `max_ang_accel` | The maximum allowable angular acceleration, in any mode, that the MPC controller can compute. This parameter bounds both positive and negative angular accelerations. | [/navigation/*<controller>*/path_tracker](#file_location) | **rad/s/s** | -| `max_lateral_accel` | The maximum allowable lateral acceleration, in any mode, that the MPC controller can compute. This parameter bounds both positive and negative lateral accelerations. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s/s** | -| `stiction_compensator_fwd` | The minimum linear velocity for movement of the UGV. This should typically be the minimum linear velocity that the UGV requires for it to move. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | -| `stiction_compensator_yaw` | The minimum angular velocity for movement of the UGV. This should typically be the minimum angular velocity that the UGV requires for it to move. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | -| `x_weight` | Weight for state x in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `y_weight` | Weight for state y in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `yaw_weight` | Weight for state yaw in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `fwd_v_weight` | Weight for state ẋ (forward velocity) in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `yaw_d_weight` | Weight for state (yaw velocity) in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `fwd_a_weight` | Weight for state ẍ (forward acceleration) in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `yaw_a_weight` | Weight for state (yaw acceleration) in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `horizon_percent_change` | The percentage factor used when shortening the MPC horizon. This will affect how quickly we want to speed up after a curvature slowdown. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `error_slowdown_multiplier` | The amount by which to increase the MPC horizon based on the crosstrack and/or heading error. This should be greater than 1.0 since increasing the MPC horizon will decrease the maximum MPC velocity. ** Less than 1.0 will result in the opposite behaviour which is not the expected behaviour for this parameter. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `crosstrackerror_slowdown` | Threshold on the amount of crosstrack error, above which to a slowdown the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `headingerror_slowdown` | Threshold on the amount of heading error, above which to a slowdown the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `curvature_slowdown` | Threshold on the path curvature, above which to a slowdown the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `endpoint_multiplier` | Weight multiplier of the very last point along the local plan segment in MPC state: DEFAULT. This value ensures convergence/stability of the optimizer by mimicking the MPCs infinite horizon by applying a terminal cost. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `shrinking_horizon_min` | The minimum horizon that will be used in the computation. This value will prevent the horizon from dropping below this value during all the horizon adjustments. | [/navigation/*<controller>*/path_tracker](#file_location) | **s** | -| `crosstrack_tolerance` | The amount of lateral error that the controller will handle before stopping the UGV and replanning a new path. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | -| `reference_trajectory_factor` | A factor that will skew the path parameter. This value should be between 0 and 1. Values closer to 0.0 will skew the path param closer to the UGV, decreasing speed but increasing the accuracy of the path tracking, and vice versa as you approach 1.0. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | - -#### Goal State Parameters {#goal_state_params} - -The following parameters can be modified to tune the controller as it approaches -the goal point as well as its behavior around the goal point. - -| Parameter | Description | Namespace | SI Units | -|-----------|-------------|-----------|:--------:| -| `goal_horizon_threshold` | The distance from the goal point which the MPC state will switch into state: GOAL , and begin reducing the horizon accordingly. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | -| `goal_slowdown_multiplier` | The multiplier by which to increase the MPC horizon during the MPCs GOAL state in order to slow the UGV down from its top speed. This value should be greater than 1.0. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `max_speed_at_goal` | The maximum allowable speed at the goal point for the controller to stop and consider the goal complete. On OEM UGVs, this value should be increased. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | -| `x_weight_goal` | Weight for state x in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `y_weight_goal` | Weight for state y in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `yaw_weight_goal` | Weight for state yaw in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `fwd_v_weight_goal` | Weight for state ẋ (forward velocity) in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `yaw_d_weight_goal` | Weight for state (yaw velocity) in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `fwd_a_weight_goal` | Weight for state ẍ (forward acceleration) in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `yaw_a_weight_goal` | Weight for state (yaw acceleration) in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `endpoint_multiplier_goal` | Weight multiplier of the very last point along the local plan segment in MPC state: GOAL. This value ensures convergence/stability of the optimizer by mimicking the MPCs infinite horizon by applying a terminal cost. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `goal_tolerance_xy_rtk` | The (x, y) tolerance value (ie. radius) assigned to a goal, when RTK is enabled, in order to determine whether or not to consider the goal complete. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | -| `goal_tolerance_yaw_rtk` | The yaw tolerance value (ie. heading) assigned to a goal, when RTK is enabled, in order to determine whether or not to consider the goal complete. | [/navigation/*<controller>*/path_tracker](#file_location) | **rad** | -| `goal_tolerance_xy_nortk` | The (x, y) tolerance value (ie. radius) assigned to a goal, when RTK is disabled, in order to determine whether or not to consider the goal complete. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | -| `goal_tolerance_yaw_nortk` | The yaw tolerance value (ie. heading) assigned to a goal, when RTK is disabled, in order to determine whether or not to consider the goal complete. | [/navigation/*<controller>*/path_tracker](#file_location) | **rad** | - -#### Corner State Parameters {#corner_state_params} - -The following parameters can be modified to tune the behavior of the controller during and as it -as it approaches corners. - -| Parameter | Description | Namespace | SI Units | -|-----------|-------------|-----------|:--------:| -| `corner_segment_slowdown` | Flag to enable/disable the slowdown behaviour in MPC state: CORNER | [/navigation/*<controller>*/path_tracker](#file_location)| **bool** | -| `corner_lookahead` | The distance on the reference path from the UGVs current location, along which to determine if a corner is present. If a corner is present the MPC state will switch to CORNER state and begin reducing the horizon accordingly. | [/navigation/*<controller>*/path_tracker](#file_location)| **m** | -| `corner_detection_threshold` | Threshold on the path curvature, between the UGVs current location and the end of the corner_lookahead distance, above which to switch the MPC in state: CORNER, and begin reducing the horizon accordingly. | [/navigation/*<controller>*/path_tracker](#file_location)| **rad** | -| `corner_slowdown_multiplier` | The multiplier by which to increase the MPC horizon during the MPCs CORNER state in order to slow the UGV down from its top speed. This value should be greater than 1.0. | [/navigation/*<controller>*/path_tracker](#file_location)| **--** | -| `endpoint_multiplier_corner` | Weight multiplier of the very last point along the local plan segment in MPC state: CORNER. This value ensures convergence/stability of the optimizer by mimicking the MPCs infinite horizon by applying a terminal cost. | [/navigation/*<controller>*/path_tracker](#file_location)| **--** | - -#### OEM Specific Parameters {#oem_tuning_params} - -When tuning the controller on a third-party OEM UGV, there are several other considerations -that we will not have taken into account during the tuning of our UGVs. Below, we define -parameters that may be modified to tune the controller for your third-party OEM UGV. - -##### UGV Dynamics {#platform_dynamics_params} - -The following parameters can be used to modify the dynamics model that the contrller uses to -compute command velocities. - -| Parameter | Description | Namespace | SI Units | -|-----------|-------------|-----------|:--------:| -| `no_turn_on_spot_motion` | Flag to enable/disable turn on spot motion. By default, the MPC motion model is represented by a differential drive kinematics. This parameter will modify the MPC motion model to remove turn in place motions and bias the motion in the forward direction. | [/navigation/*<controller>*/path_tracker](#file_location) | - | -| `min_fwd_turn` | | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `pivot_point_offset_x` | The longitudinal offset that can be applied to the MPC model in order to account for a particular UGVs center of rotation | [/navigation/*<controller>*/path_tracker](#file_location) | - | -| `pivot_point_offset_y` | The lateral offset that can be applied to the MPC model in order to account for a particular UGVs center of rotation | [/navigation/*<controller>*/path_tracker](#file_location) | - | -| `min_fwd_turn` | | [/navigation/*<controller>*/path_tracker](#file_location) | **--**| - -##### Delay Compensation {#delay_compensation_params} - -The following parameters can be used to compensate for any delays that are present in the system. - -| Parameter | Description | Namespace | SI Units | -|-----------|-------------|-----------|:--------:| -| `enable_delay_compensation` | A boolean flag to enable/disable the delay compensation feature. The delay compensation feature is used to compensate for low-level dynamics delays that may be present in the UGV to be controlled. The user can apply an input controller delay and the feature will compute command velocities that compensate for such a delay. | [/navigation/*<controller>*/path_tracker](#file_location) | **bool** | -| `controller_delay` | The amount of controller delay that the delay compensation feature will attempt to compensate for, in ms. | [/navigation/*<controller>*/path_tracker](#file_location) | **ms** | - -##### Stop Distance {#stop_distance_params} - -The following parameters can be used to set a specific stop distance away from obstacles. - -| Parameter | Description | Namespace | SI Units | -|-----------|-------------|-----------|:--------:| -| `enable_stop_distance` | A flag to use enable/disable the stop distance feature. The stop distance feature forces the UGV to stop a specified distance in front of obstacles. | [/navigation/*<controller>*/path_tracker](#file_location) | **bool** | -| `obstacle_stop_distance` | The distance at which the UGV will stop in front of a detected obstacle. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | - - -## Path Planners {#path_planners} - -Information incoming in release 0.9. Please contact Clearpath customer support at \ to discuss the issue. +--- +title: "Navigation Parameters" +sidebar_label: "Navigation Parameters" +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 3 +--- + +import versions from "@site/static/versions.js" + +## Controllers {#controllers} + +### Determine the file location of the parameter {#file_location} + +The parameters related to the controller, can be found here: + +``` bash +/opt/onav//app/autonomy/params//navigation/controls_general.yaml +/opt/onav//app/autonomy/params//navigation/mpc_controller.yaml +/opt/onav//app/autonomy/params//navigation/mpc_dock_controller.yaml +``` + +If they are not listed in the above file, it is because they are using the default values and are not being overwritten. + +### MPC Controller {#controller} + +#### MBF Plugins + +Currently we have implemented a Move-Base Flex controller plugin named: **OnavMbfMpcController** + +Two instances of this plugin are loaded at runtime by our navigation node (as seen in the table below). The parameters are equivalent for each instance of the plugin but the values of certain of these parameters are different. + +| Controller name | Description | +|-----------------|-------------| +| **`mpc_controller`** | The controller used during normal navigation and applies to tracking the paths generated between all the mission waypoints. | +| **`mpc_dock_controller`** | The controller used during docking and applies only to tracking the dock and undock paths. | + +#### MPC State Machine + +The MPC controller operates as a state machine that contains the following states: + +| MPC State | Description | Condition | +|-----------|-------------|-----------| +| **`DEFAULT`** | Standard tracking behavior. | Will revert to this state if none of the other state conditions are met. | +| **`GOAL`** | Tracking behavior as the UGV approaches the goal. | Will enter GOAL mode when the `goal_horizon_threshold` parameter distance to the goal has been reached.| +| **`PRECISE`** | State when more precision is required in the tracking. | At the start of the path, we begin in Precise mode to ensure that we have a good start to tracking.| +| **`RESCUE`** | State to rescue the tracker when the UGV is stuck. | Will enter RESCUE mode when UGV is appraching a condition that make it stuck.| +| **`HYSTERESIS`** | State when you the UGV requires compensation for tire flexion. | Will enter HYSTERESIS mode when the UGV detects that it will begin oscillating due to tire deformation. | +| **`CORNER`** | State when there is a curve or a corner ahead. | Will enter CORNER mode when the UGV approaches, within a `corner_lookahead` parameter distance, to a corner with at least `corner_detection_threshold` of a curvature.| + +#### Default State Parameters {#default_state_params} + +The following list defines the default parameters that the MPC controller uses. +For the most part, they apply to all states of the MPC controller. + +| Parameter | Description | Namespace | SI Units | +|-----------|-------------|-----------|:--------:| +| `vehicle_length` | The length (longitudinally) of the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | +| `mpc_horizon` | The prediction horizon of the MPC. | [/navigation/*<controller>*/path_tracker](#file_location) | **s** | +| `max_lookahead` | Maximum distance along the path we seek to follow. Affects how far we do collision checks as well as the maximum velocity of the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | +| `min_lookahead` | Minimum distance along the path we seek to follow. Affects how far we do collision checks as well as the maximum velocity of the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | +| `lookahead_smoother` | Factor between 0 and 1 that determines the smoothness of the change in lookahead distance: 0 means only maximum velocity is used to determine the horizon (can be jumpy but speeds up the UGV faster); 1 means only averaged planned velocity is used to determine the horizon (smoother but speeds up the UGV slowly). | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `lookahead_factor` | How aggressively do we want to increase the lookahead from min_lookahead to max_lookahead | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `mpc_opt_maxiteration` | The maximum number of iterations that the solver will run. Increase this value for better performance, decrease for shorter computation time. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `discretization_steps` | Number of grid points along the MPC prediction; Lower: less accuracy, but faster | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `max_fwd_velocity` | The maximum allowable linear velocity that the MPC controller can compute. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | +| `min_fwd_velocity` | The minimum allowable linear velocity, in any mode, that the MPC controller can compute. This can be used to overcome the different deadbands that different UGVs may have. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | +| `max_rev_velocity` | The maximum allowable reverse linear velocity (ie. positive value), in any mode, that the MPC controller can compute. By default this is set to the `max_fwd_velocity`, so only needed if your maximum linear reverse velocity is different than the forward linear velocity.| [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | +| `max_ang_velocity` | The maximum allowable angular velocity, in any mode, that the MPC controller can compute. This parameter bounds both positive and negative angular velocities. | [/navigation/*<controller>*/path_tracker](#file_location) | **rad/s** | +| `max_accel` | The maximum allowable linear acceleration, in normal navigation mode, that the MPC controller can compute. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s/s** | +| `max_decel` | The maximum allowable linear deceleration (ie. negative value), in any mode, that the MPC controller can compute. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s/s** | +| `max_ang_accel` | The maximum allowable angular acceleration, in any mode, that the MPC controller can compute. This parameter bounds both positive and negative angular accelerations. | [/navigation/*<controller>*/path_tracker](#file_location) | **rad/s/s** | +| `max_lateral_accel` | The maximum allowable lateral acceleration, in any mode, that the MPC controller can compute. This parameter bounds both positive and negative lateral accelerations. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s/s** | +| `stiction_compensator_fwd` | The minimum linear velocity for movement of the UGV. This should typically be the minimum linear velocity that the UGV requires for it to move. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | +| `stiction_compensator_yaw` | The minimum angular velocity for movement of the UGV. This should typically be the minimum angular velocity that the UGV requires for it to move. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | +| `x_weight` | Weight for state x in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `y_weight` | Weight for state y in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `yaw_weight` | Weight for state yaw in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `fwd_v_weight` | Weight for state ẋ (forward velocity) in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `yaw_d_weight` | Weight for state (yaw velocity) in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `fwd_a_weight` | Weight for state ẍ (forward acceleration) in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `yaw_a_weight` | Weight for state (yaw acceleration) in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `horizon_percent_change` | The percentage factor used when shortening the MPC horizon. This will affect how quickly we want to speed up after a curvature slowdown. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `error_slowdown_multiplier` | The amount by which to increase the MPC horizon based on the crosstrack and/or heading error. This should be greater than 1.0 since increasing the MPC horizon will decrease the maximum MPC velocity. ** Less than 1.0 will result in the opposite behaviour which is not the expected behaviour for this parameter. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `crosstrackerror_slowdown` | Threshold on the amount of crosstrack error, above which to a slowdown the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `headingerror_slowdown` | Threshold on the amount of heading error, above which to a slowdown the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `curvature_slowdown` | Threshold on the path curvature, above which to a slowdown the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `endpoint_multiplier` | Weight multiplier of the very last point along the local plan segment in MPC state: DEFAULT. This value ensures convergence/stability of the optimizer by mimicking the MPCs infinite horizon by applying a terminal cost. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `shrinking_horizon_min` | The minimum horizon that will be used in the computation. This value will prevent the horizon from dropping below this value during all the horizon adjustments. | [/navigation/*<controller>*/path_tracker](#file_location) | **s** | +| `crosstrack_tolerance` | The amount of lateral error that the controller will handle before stopping the UGV and replanning a new path. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | +| `reference_trajectory_factor` | A factor that will skew the path parameter. This value should be between 0 and 1. Values closer to 0.0 will skew the path param closer to the UGV, decreasing speed but increasing the accuracy of the path tracking, and vice versa as you approach 1.0. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | + +#### Goal State Parameters {#goal_state_params} + +The following parameters can be modified to tune the controller as it approaches +the goal point as well as its behavior around the goal point. + +| Parameter | Description | Namespace | SI Units | +|-----------|-------------|-----------|:--------:| +| `goal_horizon_threshold` | The distance from the goal point which the MPC state will switch into state: GOAL , and begin reducing the horizon accordingly. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | +| `goal_slowdown_multiplier` | The multiplier by which to increase the MPC horizon during the MPCs GOAL state in order to slow the UGV down from its top speed. This value should be greater than 1.0. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `max_speed_at_goal` | The maximum allowable speed at the goal point for the controller to stop and consider the goal complete. On OEM UGVs, this value should be increased. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | +| `x_weight_goal` | Weight for state x in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `y_weight_goal` | Weight for state y in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `yaw_weight_goal` | Weight for state yaw in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `fwd_v_weight_goal` | Weight for state ẋ (forward velocity) in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `yaw_d_weight_goal` | Weight for state (yaw velocity) in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `fwd_a_weight_goal` | Weight for state ẍ (forward acceleration) in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `yaw_a_weight_goal` | Weight for state (yaw acceleration) in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `endpoint_multiplier_goal` | Weight multiplier of the very last point along the local plan segment in MPC state: GOAL. This value ensures convergence/stability of the optimizer by mimicking the MPCs infinite horizon by applying a terminal cost. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `goal_tolerance_xy_rtk` | The (x, y) tolerance value (ie. radius) assigned to a goal, when RTK is enabled, in order to determine whether or not to consider the goal complete. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | +| `goal_tolerance_yaw_rtk` | The yaw tolerance value (ie. heading) assigned to a goal, when RTK is enabled, in order to determine whether or not to consider the goal complete. | [/navigation/*<controller>*/path_tracker](#file_location) | **rad** | +| `goal_tolerance_xy_nortk` | The (x, y) tolerance value (ie. radius) assigned to a goal, when RTK is disabled, in order to determine whether or not to consider the goal complete. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | +| `goal_tolerance_yaw_nortk` | The yaw tolerance value (ie. heading) assigned to a goal, when RTK is disabled, in order to determine whether or not to consider the goal complete. | [/navigation/*<controller>*/path_tracker](#file_location) | **rad** | + +#### Corner State Parameters {#corner_state_params} + +The following parameters can be modified to tune the behavior of the controller during and as it +as it approaches corners. + +| Parameter | Description | Namespace | SI Units | +|-----------|-------------|-----------|:--------:| +| `corner_segment_slowdown` | Flag to enable/disable the slowdown behaviour in MPC state: CORNER | [/navigation/*<controller>*/path_tracker](#file_location)| **bool** | +| `corner_lookahead` | The distance on the reference path from the UGVs current location, along which to determine if a corner is present. If a corner is present the MPC state will switch to CORNER state and begin reducing the horizon accordingly. | [/navigation/*<controller>*/path_tracker](#file_location)| **m** | +| `corner_detection_threshold` | Threshold on the path curvature, between the UGVs current location and the end of the corner_lookahead distance, above which to switch the MPC in state: CORNER, and begin reducing the horizon accordingly. | [/navigation/*<controller>*/path_tracker](#file_location)| **rad** | +| `corner_slowdown_multiplier` | The multiplier by which to increase the MPC horizon during the MPCs CORNER state in order to slow the UGV down from its top speed. This value should be greater than 1.0. | [/navigation/*<controller>*/path_tracker](#file_location)| **--** | +| `endpoint_multiplier_corner` | Weight multiplier of the very last point along the local plan segment in MPC state: CORNER. This value ensures convergence/stability of the optimizer by mimicking the MPCs infinite horizon by applying a terminal cost. | [/navigation/*<controller>*/path_tracker](#file_location)| **--** | + +#### OEM Specific Parameters {#oem_tuning_params} + +When tuning the controller on a third-party OEM UGV, there are several other considerations +that we will not have taken into account during the tuning of our UGVs. Below, we define +parameters that may be modified to tune the controller for your third-party OEM UGV. + +##### UGV Dynamics {#platform_dynamics_params} + +The following parameters can be used to modify the dynamics model that the contrller uses to +compute command velocities. + +| Parameter | Description | Namespace | SI Units | +|-----------|-------------|-----------|:--------:| +| `no_turn_on_spot_motion` | Flag to enable/disable turn on spot motion. By default, the MPC motion model is represented by a differential drive kinematics. This parameter will modify the MPC motion model to remove turn in place motions and bias the motion in the forward direction. | [/navigation/*<controller>*/path_tracker](#file_location) | - | +| `min_fwd_turn` | | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `pivot_point_offset_x` | The longitudinal offset that can be applied to the MPC model in order to account for a particular UGVs center of rotation | [/navigation/*<controller>*/path_tracker](#file_location) | - | +| `pivot_point_offset_y` | The lateral offset that can be applied to the MPC model in order to account for a particular UGVs center of rotation | [/navigation/*<controller>*/path_tracker](#file_location) | - | +| `min_fwd_turn` | | [/navigation/*<controller>*/path_tracker](#file_location) | **--**| + +##### Delay Compensation {#delay_compensation_params} + +The following parameters can be used to compensate for any delays that are present in the system. + +| Parameter | Description | Namespace | SI Units | +|-----------|-------------|-----------|:--------:| +| `enable_delay_compensation` | A boolean flag to enable/disable the delay compensation feature. The delay compensation feature is used to compensate for low-level dynamics delays that may be present in the UGV to be controlled. The user can apply an input controller delay and the feature will compute command velocities that compensate for such a delay. | [/navigation/*<controller>*/path_tracker](#file_location) | **bool** | +| `controller_delay` | The amount of controller delay that the delay compensation feature will attempt to compensate for, in ms. | [/navigation/*<controller>*/path_tracker](#file_location) | **ms** | + +##### Stop Distance {#stop_distance_params} + +The following parameters can be used to set a specific stop distance away from obstacles. + +| Parameter | Description | Namespace | SI Units | +|-----------|-------------|-----------|:--------:| +| `enable_stop_distance` | A flag to use enable/disable the stop distance feature. The stop distance feature forces the UGV to stop a specified distance in front of obstacles. | [/navigation/*<controller>*/path_tracker](#file_location) | **bool** | +| `obstacle_stop_distance` | The distance at which the UGV will stop in front of a detected obstacle. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | + + +## Path Planners {#path_planners} + +Information incoming in release 0.9. Please contact Clearpath customer support at \ to discuss the issue. diff --git a/outdoornav_user_manual_versioned_docs/version-0.11.0/customized_tuning/user_interface_customization.mdx b/outdoornav_user_manual_versioned_docs/version-0.11.0/customized_tuning/user_interface_customization.mdx index c67bca22..1e7d39c9 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.11.0/customized_tuning/user_interface_customization.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.11.0/customized_tuning/user_interface_customization.mdx @@ -1,9 +1,9 @@ ---- -title: "UI Customization" -sidebar_label: "UI Customization" -sidebar_position: 4 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -Information incoming in a future release. Please contact Clearpath customer support at \ to discuss any related issue. +--- +title: "UI Customization" +sidebar_label: "UI Customization" +sidebar_position: 4 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +Information incoming in a future release. Please contact Clearpath customer support at \ to discuss any related issue. diff --git a/outdoornav_user_manual_versioned_docs/version-0.11.0/faq.mdx b/outdoornav_user_manual_versioned_docs/version-0.11.0/faq.mdx index a086c447..aad07b05 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.11.0/faq.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.11.0/faq.mdx @@ -1,194 +1,194 @@ ---- -title: Frequently Asked Questions -sidebar_label: Frequently Asked Questions -sidebar_position: 10 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -## General - -1. **How do I start, pause or stop a mission?** - - A mission can be started in a few different ways, i) through the web user interface (See [Mission Execution](./web_user_interface/ui_autonomous_mode.mdx#mission-execution)) or, - ii) through the ROS API (See [API Examples](./api/api_examples/api_examples.mdx)). - -2. **When I start a mission the UGV does not move. What could be the - problem?** - - There could be one of several reasons for why this is happening: - - 1. Check that none of the onboard Motion-Stop actuators are - activated. - 2. Check that none of the wireless Motion-Stops are engaged. This - can be checked via the UI (a red Status Indicator means - Motion-Stop is engaged) or the onboard UGV lights (will flash - when Motion-Stop is engaged). - 3. If OutdoorNav is running on a Clearpath Robotics Warthog UGV - that is programmed with a Futaba controller, then ensure that - the controller is turned off. If it is on then it will be - sending "no motion" commands that will be overriding the - autonomy commands. - 4. Check the task settings for each Waypoint in the Mission. - A missing task setting for a Move PTZ task will block the - execution of the Mission it is in. - -3. **What version of ROS is compatible with OutdoorNav?** - - Currently OutdoorNav is developed in ROS 1 (and is built in Docker containers on top of ROS 1 Noetic). - So, the recommended ROS version is ROS 1 Noetic. However, although not recommended, it is still - possible to use ROS 1 Melodic. Some issues may arise related to the mismatched message types. - Also, if trying to run any python scripts as Melodic targets Python2, whereas Noetic targets Python3. - - Finally, official ROS 2 compatibility is currently unsupported. In theory, if you only have ROS 2 installed - on your system, you can try to install ROS 1 Noetic as well and set up a ros1_to_ros2 bridge. Since the - OutdoorNav software is packaged in Dockers, it will communicate directly ROS 1 and then the data can be - redirected by the ros1_to_ros2 bridge to ROS 2. - -4. **How can I record ROS data?** - - There are two ways to record ROS data. The first is [through the UI](./features/rosbag_recorder.mdx) and the - second is the more traditional method of accessing the command line of the UGV's computer and running - [rosbag record commands](http://wiki.ros.org/rosbag/Commandline). - -5. **Where do all the video/audio/images get saved from the mission tasks?** - - All of the data that gets saved (ROSbags, video recordings, audio recordings, and saved images) gets stored on - UGV's computer at the following location: `/opt/onav/saved_files/...` - -## Autonomy - -1. **Am I able to send the UGV on a repeated loop?** - - When generating a single mission on the UI or through the API, it is not possible for the - mission to start at the location of the robot and end at the location of the robot. This has to do with - the navigation thinking that the UGV has already arrived at its goal and will not generate a path through - the Waypoints. However, it is possible to split the mission into two missions (ie. one to go to a - location and the second to return to the starting point). With these two missions you will then either be - able to send each mission one after the other or you can use the [Mission Scheduler](./features/mission_scheduler.mdx). - Add the two missions to the schedule and you will have the ability to also repeat this loop as many times as needed. - -2. **Why is surveying failing?** - - There are several checks that should be done: - - - Check that the base station is powered on, and that all the devices inside are powered on. - - From the UGV's computer, check that you can ping the base station. - -``` bash -ping 192.168.131.30 -``` - -  If all of these tests PASS, contact [Support](./support.mdx). - -3. **Is it possible to increase the maximum velocity of the UGV?** - - The OutdoorNav software has been tune for specific maximum velocities depending on the platform, - 1.2 m/s, 1.0 m/s and 2.0 m/s for Jackal, Husky and Warthog UGVs, respectively. The Husky maximum velocity - is 1.0 m/s so increasing above this is not possible however if you would like to increase the maximum - velocity for either the Jackal or the Warthog, further tuning may be required. Consult the - [tuning guide](./customized_tuning/tuning_instructions/differential_drive_dynamics.mdx) and contact - [Support](./support.mdx) if required. - -4. **My robot it detecting too many obstacles and replanning too frequently. How can I resolve this?** - - Please consult the [Limitations](./features/collision_avoidance.mdx#limitations) section of the collisison - avoidance feature. It will describe some limits to the obstaacle detection and can help you improve the - smoothness of the navigation. - -5. **I am getting a 'Robot too far off path warning'. What should I do?** - - These types of warnings appear on the UI under two conditions: - i) If the robot indicator (blue arrow on the UI) is not within 3.0 meters of the first Waypoint (the Green one on the UI). - ii) If the robot is outside of the allowable navigable space (defined by the path contraint, default: 3.0 meters around the reference path). - Enable the visualization of the [path contraint](./web_user_interface/ui_autonomous_mode.mdx#constrained_path) and Teleop the robot back into the - navigable space. - -6. **How can I remove certain sensors from the collision avoidance pipeline?** - - If your robot is equipped with collision avoidance sensors (eg. Velodyne, Hokuyo, Sick LMS), it is - possible to enable/disable the throughput of each sensor data into the collision avoidance pipeline. - Consult the [Collision Avoidance](./features/collision_avoidance.mdx) section for these instructions. - -7. **Can I use OutdoorNav without using the UI?** - - We empower customers to send mission via either the UI or our [ROS 1 API](./api/api_overview.mdx). Through this - API, you are enabled to write either CPP code or Python scripts where you would generate your mission, survey the base station, - set the datum, assign [custom tasks](./features/custom_tasks.mdx) to your mission. If using Python, we provide a set of libraries that - speed up the develpment process. See some of the [example codes](./api/api_examples/api_examples.mdx) for an idea of how to generate these scripts. - -## Web User Interface - -1. **How do I delete a waypoint on the UI?** - - Make sure the **Edit Missions** toggle is enabled, then click the - **Waypoint Mode** button. Now you can click the Waypoint you wish to - delete. A drop down list will appear. Select **Delete**. - -2. **How do I add a Task to a Waypoint on the UI?** - - See [Add Task to Waypoint](./web_user_interface/ui_autonomous_mode.mdx#add-task) for information on how - to add a Task to a Waypoint. - -3. **Why is the "Save Image" Task failing?** - - Check the Waypoints that have a **Save Image** task in the Waypoint panel. - If you see a red warning triangle beside the **Save Image** task it means - that the settings for this task were not properly set. Set them and rerun - the mission. - -4. **Are we able to make any changes to the UI?** - - Unfortunately, users are not currently enabled to make modifications to the user interface. - This feature will be available in a future release. Please direct any feature requests to [Support](./support.mdx). - -5. **What to do if my custom task is not working?** - - Ensure that you have followed the [Custom Tasks](./features/custom_tasks.mdx) instructions. When adding the - custom task to a Waypoint, it is important to double check that all the [fields](./web_user_interface/ui_autonomous_mode.mdx#add-task) - for your custom task are correct. - -6. **Why are either of the GNSS Status indicator (POS and/or DIR) on the UI not Green?** - - i) If the **POS** indicator is YELLOW, and you are using an RTK base station: - - Check communication between the robot and the base station by pinging 192.168.131.30 (from the UGV's computer) - - Re-survey the base station - - Access the [Swift Console](https://support.swiftnav.com/support/solutions/articles/44001391679-swift-console) using - the both the base station IP (192.168.131.30) and the position unit IP (192.168.131.31) and ensure that certain - settings are set correctly: - On the base station unit: - 1) surveyed_position/broadcast = True - tcp_server1/mode = SBP - tcp_server1/enabled sbp messages = 72,74,117,65535,114 - tcp_server1/address = 55556 - On the position unit: - 2) tcp_client0/mode = SBP - tcp_client0/enabled sbp messages = 0 - tcp_client0/address = 192.168.131.30:55556 - ii) If the **POS** indicator is RED: - - Check communication between the robot and the position GNSS unit by pinging 192.168.131.31 (from the UGV's computer) - - Access the [Swift Console](https://support.swiftnav.com/support/solutions/articles/44001391679-swift-console) using - the position unit IP (192.168.131.31) and ensure that the unit is working by checking that satellites are being - tracked in the "Tracking" tab. - - iii) If the **DIR** indicator is YELLOW, - - Access the [Swift Console](https://support.swiftnav.com/support/solutions/articles/44001391679-swift-console) using - the position unit IP (192.168.131.31) and the heading unit IP (192.168.131.32), and ensure that certain - settings are set correctly: - On the position unit: - 1) tcp_server1/mode = SBP - tcp_server1/enabled sbp messages = 74,117 - tcp_server1/address = 55556 - On the heading unit: - 2) tcp_client0/mode = SBP - tcp_client0/enabled sbp messages = 0 - tcp_client0/address = 192.168.131.31:55556 - solution/dgnss_solution_mode = Time Matched - solution/heading offset = 0 - solution/send heading = True - solution/soln freq = 5 - solution/output ever n obs = 1 - - iv) If the **DIR** indicator is RED: - - Check communication between the robot and the position GNSS unit by pinging 192.168.131.31 (from the UGV's computer) - +--- +title: Frequently Asked Questions +sidebar_label: Frequently Asked Questions +sidebar_position: 10 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +## General + +1. **How do I start, pause or stop a mission?** + + A mission can be started in a few different ways, i) through the web user interface (See [Mission Execution](./web_user_interface/ui_autonomous_mode.mdx#mission-execution)) or, + ii) through the ROS API (See [API Examples](./api/api_examples/api_examples.mdx)). + +2. **When I start a mission the UGV does not move. What could be the + problem?** + + There could be one of several reasons for why this is happening: + + 1. Check that none of the onboard Motion-Stop actuators are + activated. + 2. Check that none of the wireless Motion-Stops are engaged. This + can be checked via the UI (a red Status Indicator means + Motion-Stop is engaged) or the onboard UGV lights (will flash + when Motion-Stop is engaged). + 3. If OutdoorNav is running on a Clearpath Robotics Warthog UGV + that is programmed with a Futaba controller, then ensure that + the controller is turned off. If it is on then it will be + sending "no motion" commands that will be overriding the + autonomy commands. + 4. Check the task settings for each Waypoint in the Mission. + A missing task setting for a Move PTZ task will block the + execution of the Mission it is in. + +3. **What version of ROS is compatible with OutdoorNav?** + + Currently OutdoorNav is developed in ROS 1 (and is built in Docker containers on top of ROS 1 Noetic). + So, the recommended ROS version is ROS 1 Noetic. However, although not recommended, it is still + possible to use ROS 1 Melodic. Some issues may arise related to the mismatched message types. + Also, if trying to run any python scripts as Melodic targets Python2, whereas Noetic targets Python3. + + Finally, official ROS 2 compatibility is currently unsupported. In theory, if you only have ROS 2 installed + on your system, you can try to install ROS 1 Noetic as well and set up a ros1_to_ros2 bridge. Since the + OutdoorNav software is packaged in Dockers, it will communicate directly ROS 1 and then the data can be + redirected by the ros1_to_ros2 bridge to ROS 2. + +4. **How can I record ROS data?** + + There are two ways to record ROS data. The first is [through the UI](./features/rosbag_recorder.mdx) and the + second is the more traditional method of accessing the command line of the UGV's computer and running + [rosbag record commands](http://wiki.ros.org/rosbag/Commandline). + +5. **Where do all the video/audio/images get saved from the mission tasks?** + + All of the data that gets saved (ROSbags, video recordings, audio recordings, and saved images) gets stored on + UGV's computer at the following location: `/opt/onav/saved_files/...` + +## Autonomy + +1. **Am I able to send the UGV on a repeated loop?** + + When generating a single mission on the UI or through the API, it is not possible for the + mission to start at the location of the robot and end at the location of the robot. This has to do with + the navigation thinking that the UGV has already arrived at its goal and will not generate a path through + the Waypoints. However, it is possible to split the mission into two missions (ie. one to go to a + location and the second to return to the starting point). With these two missions you will then either be + able to send each mission one after the other or you can use the [Mission Scheduler](./features/mission_scheduler.mdx). + Add the two missions to the schedule and you will have the ability to also repeat this loop as many times as needed. + +2. **Why is surveying failing?** + + There are several checks that should be done: + + - Check that the base station is powered on, and that all the devices inside are powered on. + - From the UGV's computer, check that you can ping the base station. + +``` bash +ping 192.168.131.30 +``` + +  If all of these tests PASS, contact [Support](./support.mdx). + +3. **Is it possible to increase the maximum velocity of the UGV?** + + The OutdoorNav software has been tune for specific maximum velocities depending on the platform, + 1.2 m/s, 1.0 m/s and 2.0 m/s for Jackal, Husky and Warthog UGVs, respectively. The Husky maximum velocity + is 1.0 m/s so increasing above this is not possible however if you would like to increase the maximum + velocity for either the Jackal or the Warthog, further tuning may be required. Consult the + [tuning guide](./customized_tuning/tuning_instructions/differential_drive_dynamics.mdx) and contact + [Support](./support.mdx) if required. + +4. **My robot it detecting too many obstacles and replanning too frequently. How can I resolve this?** + + Please consult the [Limitations](./features/collision_avoidance.mdx#limitations) section of the collisison + avoidance feature. It will describe some limits to the obstaacle detection and can help you improve the + smoothness of the navigation. + +5. **I am getting a 'Robot too far off path warning'. What should I do?** + + These types of warnings appear on the UI under two conditions: + i) If the robot indicator (blue arrow on the UI) is not within 3.0 meters of the first Waypoint (the Green one on the UI). + ii) If the robot is outside of the allowable navigable space (defined by the path contraint, default: 3.0 meters around the reference path). + Enable the visualization of the [path contraint](./web_user_interface/ui_autonomous_mode.mdx#constrained_path) and Teleop the robot back into the + navigable space. + +6. **How can I remove certain sensors from the collision avoidance pipeline?** + + If your robot is equipped with collision avoidance sensors (eg. Velodyne, Hokuyo, Sick LMS), it is + possible to enable/disable the throughput of each sensor data into the collision avoidance pipeline. + Consult the [Collision Avoidance](./features/collision_avoidance.mdx) section for these instructions. + +7. **Can I use OutdoorNav without using the UI?** + + We empower customers to send mission via either the UI or our [ROS 1 API](./api/api_overview.mdx). Through this + API, you are enabled to write either CPP code or Python scripts where you would generate your mission, survey the base station, + set the datum, assign [custom tasks](./features/custom_tasks.mdx) to your mission. If using Python, we provide a set of libraries that + speed up the develpment process. See some of the [example codes](./api/api_examples/api_examples.mdx) for an idea of how to generate these scripts. + +## Web User Interface + +1. **How do I delete a waypoint on the UI?** + + Make sure the **Edit Missions** toggle is enabled, then click the + **Waypoint Mode** button. Now you can click the Waypoint you wish to + delete. A drop down list will appear. Select **Delete**. + +2. **How do I add a Task to a Waypoint on the UI?** + + See [Add Task to Waypoint](./web_user_interface/ui_autonomous_mode.mdx#add-task) for information on how + to add a Task to a Waypoint. + +3. **Why is the "Save Image" Task failing?** + + Check the Waypoints that have a **Save Image** task in the Waypoint panel. + If you see a red warning triangle beside the **Save Image** task it means + that the settings for this task were not properly set. Set them and rerun + the mission. + +4. **Are we able to make any changes to the UI?** + + Unfortunately, users are not currently enabled to make modifications to the user interface. + This feature will be available in a future release. Please direct any feature requests to [Support](./support.mdx). + +5. **What to do if my custom task is not working?** + + Ensure that you have followed the [Custom Tasks](./features/custom_tasks.mdx) instructions. When adding the + custom task to a Waypoint, it is important to double check that all the [fields](./web_user_interface/ui_autonomous_mode.mdx#add-task) + for your custom task are correct. + +6. **Why are either of the GNSS Status indicator (POS and/or DIR) on the UI not Green?** + + i) If the **POS** indicator is YELLOW, and you are using an RTK base station: + - Check communication between the robot and the base station by pinging 192.168.131.30 (from the UGV's computer) + - Re-survey the base station + - Access the [Swift Console](https://support.swiftnav.com/support/solutions/articles/44001391679-swift-console) using + the both the base station IP (192.168.131.30) and the position unit IP (192.168.131.31) and ensure that certain + settings are set correctly: + On the base station unit: + 1) surveyed_position/broadcast = True + tcp_server1/mode = SBP + tcp_server1/enabled sbp messages = 72,74,117,65535,114 + tcp_server1/address = 55556 + On the position unit: + 2) tcp_client0/mode = SBP + tcp_client0/enabled sbp messages = 0 + tcp_client0/address = 192.168.131.30:55556 + ii) If the **POS** indicator is RED: + - Check communication between the robot and the position GNSS unit by pinging 192.168.131.31 (from the UGV's computer) + - Access the [Swift Console](https://support.swiftnav.com/support/solutions/articles/44001391679-swift-console) using + the position unit IP (192.168.131.31) and ensure that the unit is working by checking that satellites are being + tracked in the "Tracking" tab. + + iii) If the **DIR** indicator is YELLOW, + - Access the [Swift Console](https://support.swiftnav.com/support/solutions/articles/44001391679-swift-console) using + the position unit IP (192.168.131.31) and the heading unit IP (192.168.131.32), and ensure that certain + settings are set correctly: + On the position unit: + 1) tcp_server1/mode = SBP + tcp_server1/enabled sbp messages = 74,117 + tcp_server1/address = 55556 + On the heading unit: + 2) tcp_client0/mode = SBP + tcp_client0/enabled sbp messages = 0 + tcp_client0/address = 192.168.131.31:55556 + solution/dgnss_solution_mode = Time Matched + solution/heading offset = 0 + solution/send heading = True + solution/soln freq = 5 + solution/output ever n obs = 1 + + iv) If the **DIR** indicator is RED: + - Check communication between the robot and the position GNSS unit by pinging 192.168.131.31 (from the UGV's computer) + diff --git a/outdoornav_user_manual_versioned_docs/version-0.11.0/features/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.11.0/features/_category_.json index 732c6cb7..3bf04f17 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.11.0/features/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.11.0/features/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "OutdoorNav Features", - "position": 8 -} +{ + "label": "OutdoorNav Features", + "position": 8 +} diff --git a/outdoornav_user_manual_versioned_docs/version-0.11.0/features/custom_tasks.mdx b/outdoornav_user_manual_versioned_docs/version-0.11.0/features/custom_tasks.mdx index 5b117699..056e3ff5 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.11.0/features/custom_tasks.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.11.0/features/custom_tasks.mdx @@ -1,206 +1,206 @@ ---- -title: Custom Tasks -sidebar_label: Custom Tasks -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -Users can create their custom tasks for their application following a specific template. -When creating these tasks, the user should begin by creating a python file in the -**/opt/onav/\/app/custom_tasks/** directory, where *onav_version* -is the currently running version of OutdoorNav. The file should be written following -the instructions provided below: - -1. Import the `custom_task_base` package. - -```python -#!/usr/bin/python3 - -from onav_tasks.custom_task_base import * -``` - -2. The user should then create a class name to replace `CustomTask` and initialize it with the -`CustomTaskBase`'s __init__ function and the action server name for the task. - -```python -class CustomTask(CustomTaskBase): - def __init__(self): - # The derived class must always call the super() and provide the action server name. - # This name will need to be unique among custom tasks and must match what is in the - # UI. - super().__init__("custom_task_name") -``` - -:::note - -The `CustomTaskBase` exposes a `SimpleActionServer` (see here -for further details) object as `_as`, a `UITaskFeedback` object as `_feedback` and a `UITaskResults` object as `_result` to be used as part of -the tasks functionality. - -::: - -3. The last requirement is that the `CustomTask` needs to have the `run_task(self, goal)` function be defined, -which takes in the UITaskGoal. - -```python - def run_task(self, goal): -``` - -:::note - -When running the task users may handle errors through the action servers `set_aborted()` function. When this function is called the entire mission -will be aborted. - -::: - -4. Restarting the UGV will trigger the system to load the custom task that was created, making it available for mission use. -If a custom task is not configured properly the custom task manager will ignore the task and proceed loading in the next task while logging an error with ROS. - - -## Sample Custom Tasks - -### Input Looper - -Below is a sample template file named "input_looper.py" which iterates throught the two data variables and publishes them to the feedback -topic. If neither of the variables have any data in them the task is aborted. - -```python -#!/usr/bin/python3 - -from onav_tasks.custom_task_base import * - -class InputLooperTask(CustomTaskBase): - def __init__(self): - # The derived class must always call the super() and provide the action server name. - # This name will need to be unique among custom tasks and must match what is in the - # UI. - super().__init__("input_looper") - - def run_task(self, goal): - if len(goal.strings) == 0 and len(goal.floats) == 0: - # Task and running mission will be aborted in this case - self._as.set_aborted() - return False - - # Loop through the strings and float values and publish them each to the /input_looper/feedback topic - for string in goal.strings: - self._feedback.state = string - self._as.publish_feedback(self._feedback) - - for num in goal.floats: - self._feedback.state = str(num) - self._as.publish_feedback(self._feedback) - - # Returning True or False will not currently impact the mission but will write the current state to the - # /task/result topic accordingly. - return True -``` - -### Record GNSS Data - -Below is a sample custom task file named "record_gnss.py" which outputs the current GNSS data to the console. - -```python -#!/usr/bin/python3 - -from onav_tasks.custom_task_base import * -from sensor_msgs.msg import NavSatFix -from threading import Lock -import rospy - -class RecorGNSSTask(CustomTaskBase): - def __init__(self): - super().__init__("record_gnss") - self._sub = rospy.Subscriber("/sensors/gps_0/fix", NavSatFix, self.gpsSubscriberCallback) - self.gps_lat = 0.0 - self.gps_lon = 0.0 - self._gps_coordinates_lock = Lock() - - def run_task(self, goal): - feedback = UITaskFeedback() - feedback.state = 'Recording GNSS lat/lon' - self._as.publish_feedback(feedback) - msg = "" - with self._gps_coordinates_lock: - msg = "ID: %f Name: %s Latitude: %f Longitude: %f" % ( - goal.floats[0], goal.strings[0], self.gps_lat, self.gps_lon) - rospy.loginfo(msg) - return True - - def gpsSubscriberCallback(self, msg): - with self._gps_coordinates_lock: - self.gps_lat = msg.latitude - self.gps_lon = msg.longitude -``` - - -### Move PTZ camera to a Lat/Lon - -Below is a more advanced custom task. The file is "move_ptz_lat_lon.py" which pans a PTZ camera to point to a specific lat/lon coordinate. - -```python -from onav_tasks.custom_task_base import * -import actionlib -from clearpath_localization_msgs.srv import * -from clearpath_navigation_msgs.msg import * -from nav_msgs.msg import Odometry -from ptz_action_server_msgs.msg import PtzAction -import ptz_action_server_msgs.msg -import math -from math import remainder, tau -import rospy -from sensor_msgs import * -from tf.transformations import euler_from_quaternion, quaternion_from_euler - - - -class MovePtzLatLon(CustomTaskBase): - def __init__(self): - super().__init__("move_ptz_lat_lon") - self.localization_subscriber_ = rospy.Subscriber("/localization/odom", Odometry, self.localizationCallback) - self.move_ptz_client_ = actionlib.SimpleActionClient('/sensors/camera_0/move_ptz', PtzAction) - self.service_ = rospy.ServiceProxy('/localization/lat_lon_to_xy', ConvertLatLonToCartesian) - self.current_pose = Odometry() - - def localizationCallback(self, odom_msg): - self.current_pose = odom_msg - - def run_task(self, goal): - if len(goal.strings) == 0 and len(goal.floats) == 0: - rospy.logwarn('Warning') - self._as.set_aborted() - return False - goal_latitude = goal.floats[0] - goal_longitude = goal.floats[1] - goal_zoom = goal.floats[2] - str2 = 'Received goal latitude: ' + str(goal_latitude) + ', goal longitude: ' + str(goal_longitude) + ', zoom: ' + str(goal_zoom) - feedback = UITaskFeedback() - feedback.state = 'Aiming camera at lat-lon (' + str(goal_latitude) + ', ' + str(goal_longitude)+')' - self._as.publish_feedback(feedback) - orientation_q = self.current_pose.pose.pose.orientation - orientation_list = [orientation_q.x, orientation_q.y, orientation_q.z, orientation_q.w] - (roll, pitch, yaw) = euler_from_quaternion (orientation_list) - - gps_msg = sensor_msgs.msg.NavSatFix() - gps_msg.latitude = goal_latitude - gps_msg.longitude = goal_longitude - goal_utm = self.service_(gps_msg) - - goal_x = goal_utm.pose.pose.position.x - goal_y = goal_utm.pose.pose.position.y - - goal_angle = math.atan2(goal_y - self.current_pose.pose.pose.position.y, goal_x - self.current_pose.pose.pose.position.x) - pan_angle = math.remainder(goal_angle - yaw, math.tau) - print(pan_angle) - - self.move_ptz_client_.wait_for_server() - goal = ptz_action_server_msgs.msg.PtzGoal() - goal.pan=pan_angle - goal.tilt=0 - goal.zoom=goal_zoom - self.move_ptz_client_.send_goal(goal) - self.move_ptz_client_.wait_for_result() - print(self.move_ptz_client_.get_result()) - return True -``` +--- +title: Custom Tasks +sidebar_label: Custom Tasks +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +Users can create their custom tasks for their application following a specific template. +When creating these tasks, the user should begin by creating a python file in the +**/opt/onav/\/app/custom_tasks/** directory, where *onav_version* +is the currently running version of OutdoorNav. The file should be written following +the instructions provided below: + +1. Import the `custom_task_base` package. + +```python +#!/usr/bin/python3 + +from onav_tasks.custom_task_base import * +``` + +2. The user should then create a class name to replace `CustomTask` and initialize it with the +`CustomTaskBase`'s __init__ function and the action server name for the task. + +```python +class CustomTask(CustomTaskBase): + def __init__(self): + # The derived class must always call the super() and provide the action server name. + # This name will need to be unique among custom tasks and must match what is in the + # UI. + super().__init__("custom_task_name") +``` + +:::note + +The `CustomTaskBase` exposes a `SimpleActionServer` (see here +for further details) object as `_as`, a `UITaskFeedback` object as `_feedback` and a `UITaskResults` object as `_result` to be used as part of +the tasks functionality. + +::: + +3. The last requirement is that the `CustomTask` needs to have the `run_task(self, goal)` function be defined, +which takes in the UITaskGoal. + +```python + def run_task(self, goal): +``` + +:::note + +When running the task users may handle errors through the action servers `set_aborted()` function. When this function is called the entire mission +will be aborted. + +::: + +4. Restarting the UGV will trigger the system to load the custom task that was created, making it available for mission use. +If a custom task is not configured properly the custom task manager will ignore the task and proceed loading in the next task while logging an error with ROS. + + +## Sample Custom Tasks + +### Input Looper + +Below is a sample template file named "input_looper.py" which iterates throught the two data variables and publishes them to the feedback +topic. If neither of the variables have any data in them the task is aborted. + +```python +#!/usr/bin/python3 + +from onav_tasks.custom_task_base import * + +class InputLooperTask(CustomTaskBase): + def __init__(self): + # The derived class must always call the super() and provide the action server name. + # This name will need to be unique among custom tasks and must match what is in the + # UI. + super().__init__("input_looper") + + def run_task(self, goal): + if len(goal.strings) == 0 and len(goal.floats) == 0: + # Task and running mission will be aborted in this case + self._as.set_aborted() + return False + + # Loop through the strings and float values and publish them each to the /input_looper/feedback topic + for string in goal.strings: + self._feedback.state = string + self._as.publish_feedback(self._feedback) + + for num in goal.floats: + self._feedback.state = str(num) + self._as.publish_feedback(self._feedback) + + # Returning True or False will not currently impact the mission but will write the current state to the + # /task/result topic accordingly. + return True +``` + +### Record GNSS Data + +Below is a sample custom task file named "record_gnss.py" which outputs the current GNSS data to the console. + +```python +#!/usr/bin/python3 + +from onav_tasks.custom_task_base import * +from sensor_msgs.msg import NavSatFix +from threading import Lock +import rospy + +class RecorGNSSTask(CustomTaskBase): + def __init__(self): + super().__init__("record_gnss") + self._sub = rospy.Subscriber("/sensors/gps_0/fix", NavSatFix, self.gpsSubscriberCallback) + self.gps_lat = 0.0 + self.gps_lon = 0.0 + self._gps_coordinates_lock = Lock() + + def run_task(self, goal): + feedback = UITaskFeedback() + feedback.state = 'Recording GNSS lat/lon' + self._as.publish_feedback(feedback) + msg = "" + with self._gps_coordinates_lock: + msg = "ID: %f Name: %s Latitude: %f Longitude: %f" % ( + goal.floats[0], goal.strings[0], self.gps_lat, self.gps_lon) + rospy.loginfo(msg) + return True + + def gpsSubscriberCallback(self, msg): + with self._gps_coordinates_lock: + self.gps_lat = msg.latitude + self.gps_lon = msg.longitude +``` + + +### Move PTZ camera to a Lat/Lon + +Below is a more advanced custom task. The file is "move_ptz_lat_lon.py" which pans a PTZ camera to point to a specific lat/lon coordinate. + +```python +from onav_tasks.custom_task_base import * +import actionlib +from clearpath_localization_msgs.srv import * +from clearpath_navigation_msgs.msg import * +from nav_msgs.msg import Odometry +from ptz_action_server_msgs.msg import PtzAction +import ptz_action_server_msgs.msg +import math +from math import remainder, tau +import rospy +from sensor_msgs import * +from tf.transformations import euler_from_quaternion, quaternion_from_euler + + + +class MovePtzLatLon(CustomTaskBase): + def __init__(self): + super().__init__("move_ptz_lat_lon") + self.localization_subscriber_ = rospy.Subscriber("/localization/odom", Odometry, self.localizationCallback) + self.move_ptz_client_ = actionlib.SimpleActionClient('/sensors/camera_0/move_ptz', PtzAction) + self.service_ = rospy.ServiceProxy('/localization/lat_lon_to_xy', ConvertLatLonToCartesian) + self.current_pose = Odometry() + + def localizationCallback(self, odom_msg): + self.current_pose = odom_msg + + def run_task(self, goal): + if len(goal.strings) == 0 and len(goal.floats) == 0: + rospy.logwarn('Warning') + self._as.set_aborted() + return False + goal_latitude = goal.floats[0] + goal_longitude = goal.floats[1] + goal_zoom = goal.floats[2] + str2 = 'Received goal latitude: ' + str(goal_latitude) + ', goal longitude: ' + str(goal_longitude) + ', zoom: ' + str(goal_zoom) + feedback = UITaskFeedback() + feedback.state = 'Aiming camera at lat-lon (' + str(goal_latitude) + ', ' + str(goal_longitude)+')' + self._as.publish_feedback(feedback) + orientation_q = self.current_pose.pose.pose.orientation + orientation_list = [orientation_q.x, orientation_q.y, orientation_q.z, orientation_q.w] + (roll, pitch, yaw) = euler_from_quaternion (orientation_list) + + gps_msg = sensor_msgs.msg.NavSatFix() + gps_msg.latitude = goal_latitude + gps_msg.longitude = goal_longitude + goal_utm = self.service_(gps_msg) + + goal_x = goal_utm.pose.pose.position.x + goal_y = goal_utm.pose.pose.position.y + + goal_angle = math.atan2(goal_y - self.current_pose.pose.pose.position.y, goal_x - self.current_pose.pose.pose.position.x) + pan_angle = math.remainder(goal_angle - yaw, math.tau) + print(pan_angle) + + self.move_ptz_client_.wait_for_server() + goal = ptz_action_server_msgs.msg.PtzGoal() + goal.pan=pan_angle + goal.tilt=0 + goal.zoom=goal_zoom + self.move_ptz_client_.send_goal(goal) + self.move_ptz_client_.wait_for_result() + print(self.move_ptz_client_.get_result()) + return True +``` diff --git a/outdoornav_user_manual_versioned_docs/version-0.11.0/features/mission_scheduler.mdx b/outdoornav_user_manual_versioned_docs/version-0.11.0/features/mission_scheduler.mdx index 95c87061..0afdfcaf 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.11.0/features/mission_scheduler.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.11.0/features/mission_scheduler.mdx @@ -1,43 +1,43 @@ ---- -title: Mission Scheduler -sidebar_label: Mission Scheduler -sidebar_position: 4 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -### Scheduling missions - -By selecting the "SCHEDULER" option from the upper left hand menu, the user can open the Mission Scheduler interface. This interface -allows users to schedule groups of missions to run at a later time. These schedules can be set to run only once or to be looped over a period of time. -For example, a user could create a schedule that will run 3 missions starting at 9 AM and run every hour 8 times. Once the last iteration is run, the -schedule will disable itself and can be re-enabled to run again later. The view itself can be found in the image below and is elaborated further afterwards. - -
-
- -
Mission Scheduler View
-
-
- -#### Adding/Updating a Schedule - -The user can either create a new schedule by filling in the appropriate fields or edit a schedule by selecting the pencil icon for that schedule -in the bottom table. The input fields are outlined as follows: - -- Name: The name of the schedule. -- Start Time: The browser's local time that the schedule will start. This is stored as UTC time on the robot. -- Enabled: Enables/Disables the schedule. When schedules are completed they will disable themselves. -- Missions: The list of missions that will run. The schedule will run the missions in the order that they are added. -- Schedule Mode: Sets the kind of schedule mode to be either "Run Once" or "Looped". If it is set to run once, the next 2 inputs will be disabled. -- Loops: The number of iterations the schedule should run for. If for example it is set to Loop 5 times then the schedule will run 5 times (instead of run once and then re-runs 5 times). -- Loop Interval: The amount of time between the start of successive loop iterations. This is independent of the mission duration. -- Minimum Battery Charge: The minimum battery percentage that the UGV should be at to run the schedule. -- Timeout: The maximum amount of time to spend on running a single loop of the schedule. If a loop exceeds this timeout value the schedule is assumed to have failed and alerts the user - accordingly. This can be set to 0 to disable the timeout feature. - -#### Schedule Table - -Schedules found in the database are displayed in a simple table at the bottom of the screen. Schedules can be enabled, edited or deleted from this table through the -icons on the right hand side. The schedules can also be sorted by name or start time in ascending/descending order. The next schedule to run (if one is available) will have +--- +title: Mission Scheduler +sidebar_label: Mission Scheduler +sidebar_position: 4 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +### Scheduling missions + +By selecting the "SCHEDULER" option from the upper left hand menu, the user can open the Mission Scheduler interface. This interface +allows users to schedule groups of missions to run at a later time. These schedules can be set to run only once or to be looped over a period of time. +For example, a user could create a schedule that will run 3 missions starting at 9 AM and run every hour 8 times. Once the last iteration is run, the +schedule will disable itself and can be re-enabled to run again later. The view itself can be found in the image below and is elaborated further afterwards. + +
+
+ +
Mission Scheduler View
+
+
+ +#### Adding/Updating a Schedule + +The user can either create a new schedule by filling in the appropriate fields or edit a schedule by selecting the pencil icon for that schedule +in the bottom table. The input fields are outlined as follows: + +- Name: The name of the schedule. +- Start Time: The browser's local time that the schedule will start. This is stored as UTC time on the robot. +- Enabled: Enables/Disables the schedule. When schedules are completed they will disable themselves. +- Missions: The list of missions that will run. The schedule will run the missions in the order that they are added. +- Schedule Mode: Sets the kind of schedule mode to be either "Run Once" or "Looped". If it is set to run once, the next 2 inputs will be disabled. +- Loops: The number of iterations the schedule should run for. If for example it is set to Loop 5 times then the schedule will run 5 times (instead of run once and then re-runs 5 times). +- Loop Interval: The amount of time between the start of successive loop iterations. This is independent of the mission duration. +- Minimum Battery Charge: The minimum battery percentage that the UGV should be at to run the schedule. +- Timeout: The maximum amount of time to spend on running a single loop of the schedule. If a loop exceeds this timeout value the schedule is assumed to have failed and alerts the user + accordingly. This can be set to 0 to disable the timeout feature. + +#### Schedule Table + +Schedules found in the database are displayed in a simple table at the bottom of the screen. Schedules can be enabled, edited or deleted from this table through the +icons on the right hand side. The schedules can also be sorted by name or start time in ascending/descending order. The next schedule to run (if one is available) will have a small information icon next to it's name and will also be reported at the top of the screen. \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.11.0/features/navigation.mdx b/outdoornav_user_manual_versioned_docs/version-0.11.0/features/navigation.mdx index 852097a0..afbd5fe0 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.11.0/features/navigation.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.11.0/features/navigation.mdx @@ -1,38 +1,38 @@ ---- -title: Navigation Features -sidebar_label: Navigation Features -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -:::danger SAFETY WARNING - -Making changes to any of the following variables may decrease system safety. It is recommended that users -only modify these parameters in consultation with Clearpath Robotics Support. - -::: - -:::note - -Changes to any of the following variables will only take effect after power cycling the UGV. - -::: - -The OutdoorNav Software contains a set of features that can be enabled -or disabled according to your required application requirements. These -features can be enabled or disabled through the use of environment -variables, which should be added to the -`/opt/onav//config/autonomy.env` file, where *onav_version* -is the currently running version of OutdoorNav. The following table describes -the available features, their default state and any additional parameters -that we expose that may also be included to tune the feature. - -| Feature | Description | -|-----------------------------|----------------------------------------| -| **Collision Avoidance** | Collision avoidance is the UGV's ability to detect obstacles and stop/maneuver around the obstacle without any collisions. If `true`, the UGV will detect obstacles and if `false` no obstacles will be detected. Setting to `false` is not recommended and may cause harm to property or to individuals.

Environment Variable: `ENABLE_COLLISION_AVOIDANCE` (Default: `true`). | -| **Constrained Planning** | The constrained replanning feature, which is always enabled, restricts the area in which the UGV can plan paths. For example, if the default `PATH_CONSTRAINT` of 3.0 m is used, the UGV will not be allowed to 1) produce paths that drives it more than 3.0 meters from the initial path, and 2) fail to compute paths if the UGV is further than 3.0 meters from the any of the Waypoints. This allowable planning/navigation area can be shown on the map over the connecting lines between Waypoints. See [Constrained Replanning](../web_user_interface/ui_autonomous_mode.mdx#constrained_path) for further details.

Use the `PATH_CONSTRAINT` environment variable to modify the path constraint (in meters). | -| **Path Smoothing** | Generate paths according to a specified turning radius.

Environment Variable: `ENABLE_DUBINS_PATH_SMOOTHER` (Default: `false`).

Use the `TURN_RADIUS` environment variable to modify the radius of the planned paths (in meters). | -| **Stop Distance** | The stop distance feature allows the UGV to stop a predefined distance away from obstacles. This is useful if a UGV cannot drive in reverse and needs the required room in front of it to replan around an obstacle.

Environment Variable: `ENABLE_STOP_DISTANCE` (Default: `false`)

Use the `STOP_DISTANCE` environment variable to modify the stop distance (in meters). Note that if the stop distance is larger than 4.5 meters for the Clearpath Robotics Jackal and Husky UGVs, or 10.0 meters for the Clearpath Robotics Warthog UGV, the computational load will increase and may cause a decrease in performance in the navigation. | -| **Delay Compensation** | The delay compensation feature is able to compensate for mechanical delay on UGVs where either the accelerator introduces delay into the linear velocity or the steering introduces delay in the angular velocity. This feature is not required for Clearpath Robotics UGVs as negligible delay is present in our system.

Environment Variable: `ENABLE_DELAY_COMPENSATION` (Default: `false`)

Use the `CONTROLLER_DELAY` environment variable to modify the amount of delay to be compensated (in milliseconds). | -| **Docking** | If purchased, autonomous docking will allow the user to autonomously dock/undock their UGV. If not purchased, enabling this environment variable will do nothing.

Environment Variable: `OUTDORRNAV_ENABLE_DOCKING` (Default: `false`).| +--- +title: Navigation Features +sidebar_label: Navigation Features +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +:::danger SAFETY WARNING + +Making changes to any of the following variables may decrease system safety. It is recommended that users +only modify these parameters in consultation with Clearpath Robotics Support. + +::: + +:::note + +Changes to any of the following variables will only take effect after power cycling the UGV. + +::: + +The OutdoorNav Software contains a set of features that can be enabled +or disabled according to your required application requirements. These +features can be enabled or disabled through the use of environment +variables, which should be added to the +`/opt/onav//config/autonomy.env` file, where *onav_version* +is the currently running version of OutdoorNav. The following table describes +the available features, their default state and any additional parameters +that we expose that may also be included to tune the feature. + +| Feature | Description | +|-----------------------------|----------------------------------------| +| **Collision Avoidance** | Collision avoidance is the UGV's ability to detect obstacles and stop/maneuver around the obstacle without any collisions. If `true`, the UGV will detect obstacles and if `false` no obstacles will be detected. Setting to `false` is not recommended and may cause harm to property or to individuals.

Environment Variable: `ENABLE_COLLISION_AVOIDANCE` (Default: `true`). | +| **Constrained Planning** | The constrained replanning feature, which is always enabled, restricts the area in which the UGV can plan paths. For example, if the default `PATH_CONSTRAINT` of 3.0 m is used, the UGV will not be allowed to 1) produce paths that drives it more than 3.0 meters from the initial path, and 2) fail to compute paths if the UGV is further than 3.0 meters from the any of the Waypoints. This allowable planning/navigation area can be shown on the map over the connecting lines between Waypoints. See [Constrained Replanning](../web_user_interface/ui_autonomous_mode.mdx#constrained_path) for further details.

Use the `PATH_CONSTRAINT` environment variable to modify the path constraint (in meters). | +| **Path Smoothing** | Generate paths according to a specified turning radius.

Environment Variable: `ENABLE_DUBINS_PATH_SMOOTHER` (Default: `false`).

Use the `TURN_RADIUS` environment variable to modify the radius of the planned paths (in meters). | +| **Stop Distance** | The stop distance feature allows the UGV to stop a predefined distance away from obstacles. This is useful if a UGV cannot drive in reverse and needs the required room in front of it to replan around an obstacle.

Environment Variable: `ENABLE_STOP_DISTANCE` (Default: `false`)

Use the `STOP_DISTANCE` environment variable to modify the stop distance (in meters). Note that if the stop distance is larger than 4.5 meters for the Clearpath Robotics Jackal and Husky UGVs, or 10.0 meters for the Clearpath Robotics Warthog UGV, the computational load will increase and may cause a decrease in performance in the navigation. | +| **Delay Compensation** | The delay compensation feature is able to compensate for mechanical delay on UGVs where either the accelerator introduces delay into the linear velocity or the steering introduces delay in the angular velocity. This feature is not required for Clearpath Robotics UGVs as negligible delay is present in our system.

Environment Variable: `ENABLE_DELAY_COMPENSATION` (Default: `false`)

Use the `CONTROLLER_DELAY` environment variable to modify the amount of delay to be compensated (in milliseconds). | +| **Docking** | If purchased, autonomous docking will allow the user to autonomously dock/undock their UGV. If not purchased, enabling this environment variable will do nothing.

Environment Variable: `OUTDORRNAV_ENABLE_DOCKING` (Default: `false`).| diff --git a/outdoornav_user_manual_versioned_docs/version-0.11.0/features/rosbag_recorder.mdx b/outdoornav_user_manual_versioned_docs/version-0.11.0/features/rosbag_recorder.mdx index 70a6c687..25fa0cda 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.11.0/features/rosbag_recorder.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.11.0/features/rosbag_recorder.mdx @@ -1,34 +1,34 @@ ---- -title: ROSbag Recorder -sidebar_label: ROSbag Recorder -sidebar_position: 5 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -If you need to perform a quick rosbag recording from the UI you can do -so by navigating to the Settings dropdown in the upper left hand menu and -select **Start rosbag recording**. This will record a rosbag of the -following topics (or all the topics in the namespace if followed by a -`/*`): - -- '/rosout(.*)' -- '/twist_marker_server/(.*)' -- '/dock/(.*)' -- '/laser_target_tracker/(.*)' -- '/localization/(.*)' -- '/localization_core/(.*)' -- '/localization_helper/(.*)' -- '/mission/(.*)' -- '/navigation/(.*)' -- '/onboard_systems/(.*)' -- '/platform/(.*)' -- '/swiftnav/(.*)' -- '/sensors/gps(.*)' -- '/sensors/imu(.*)' -- '/target/(.*)' -- '/tf(.*)' - -To stop the recording navigate to the Settings drop down and select -**Stop rosbag recording**. This will save the rosbag with the date and -time as its file name in the `/opt/onav/saved_files/rosbags/` directory. +--- +title: ROSbag Recorder +sidebar_label: ROSbag Recorder +sidebar_position: 5 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +If you need to perform a quick rosbag recording from the UI you can do +so by navigating to the Settings dropdown in the upper left hand menu and +select **Start rosbag recording**. This will record a rosbag of the +following topics (or all the topics in the namespace if followed by a +`/*`): + +- '/rosout(.*)' +- '/twist_marker_server/(.*)' +- '/dock/(.*)' +- '/laser_target_tracker/(.*)' +- '/localization/(.*)' +- '/localization_core/(.*)' +- '/localization_helper/(.*)' +- '/mission/(.*)' +- '/navigation/(.*)' +- '/onboard_systems/(.*)' +- '/platform/(.*)' +- '/swiftnav/(.*)' +- '/sensors/gps(.*)' +- '/sensors/imu(.*)' +- '/target/(.*)' +- '/tf(.*)' + +To stop the recording navigate to the Settings drop down and select +**Stop rosbag recording**. This will save the rosbag with the date and +time as its file name in the `/opt/onav/saved_files/rosbags/` directory. diff --git a/outdoornav_user_manual_versioned_docs/version-0.11.0/getting_started/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.11.0/getting_started/_category_.json index 8b4a486d..9a9747ef 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.11.0/getting_started/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.11.0/getting_started/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Getting Started", - "position": 5 -} +{ + "label": "Getting Started", + "position": 5 +} diff --git a/outdoornav_user_manual_versioned_docs/version-0.11.0/getting_started/first_time_checklist.mdx b/outdoornav_user_manual_versioned_docs/version-0.11.0/getting_started/first_time_checklist.mdx index c4d9dece..d90e0c8e 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.11.0/getting_started/first_time_checklist.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.11.0/getting_started/first_time_checklist.mdx @@ -1,114 +1,114 @@ ---- -title: First Time Use Checklist -sidebar_label: First Time Use Checklist -sidebar_position: 2 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -## Hardware Setup - -### ☐ Has the Base Station been set up? - -Ensure that the Base Station has been set up approximately 5 meters -away from any buildings and is currently powered on. See -[System Startup](system_setup.mdx) for further -instructions related to setting up the Base Station. - -### ☐ Is the UGV connected to the Base Station? - -Check to see that the UGV can be pinged from the Base Station network. -See [Connecting to Web UI](system_setup.mdx#connecting_to_web_ui) for further -details. - -## Software Setup - -### ☐ Is ROS running on the UGV? - -SSH into the UGV and run `rostopic list` to generate a list of the -rostopics that are currently available. The list is generally fairly -long so if you are looking for any specific topic please refer to -[API Endpoints](../api/api_endpoints/api_endpoints.mdx). You can also check the -ROS status through the OutdoorNAV UI by referring to the diagnostics section -on the Status page. - -### ☐ Is the OutdoorNAV software running? - -Check to see if the relevant dockers are running (ssh into the UGV and -run `docker ps` which should show at least 5 separate docker containers -running). - -### ☐ Is the computer using the UI connected to the Base Station network? - -This can be confirmed by following the steps found in -[Connecting to Web UI](system_setup.mdx#connecting_to_web_ui). - -### ☐ Have you surveyed the Base Station? - -See [RTK Survey Positioning](../cpr_hardware.mdx#base-station-survey) for -information on how and when to survey the Base station. - -### ☐ Do you have a strong GPS signal? - -After surveying the Base Station check the upper right hand corner of -the UI to confirm that you have a strong GPS signal (the POS and DIR -icons should be green). If either of these icons are not green refer -to [Checking GPS RTK Fix](../cpr_hardware.mdx#base-station-survey) for further -troubleshooting information. - -### ☐ Is the map loading correctly? - -Currently the map requires internet access to load. Refer to -[Loading Map Tiles](system_setup.mdx#loading_map_tiles) for more details -related to setting up the map. - -### ☐ Has the Datum been set? - -See [Set Datum](system_setup.mdx#set-datum) for information on how -to set the Datum variables. - -### ☐ If docking is enabled has the location been set? - -If the Clearpath Robotics autonomous docking package was purchased the -docking location will need to be set. See -[Set Dock Location](system_setup.mdx#set-dock-location) for information on -how to set the docking location. - -### ☐ Is the Navbar status icon functioning? - -To check if the Navbar icon is functioning, trigger the UGV's motion stop -and check to see if it has turned to a red icon. Clicking the icon -will bring up the status information as well as any recent messages -(see below). - -![](/img/outdoornav_images/ugvStatusMessages.png) - -## Using the UI - -The following items are general checks to ensure that the UI is working -properly. - -### ☐ Can the virtual joystick drive the UGV? - -See [Web UI Manual Mode](../web_user_interface/ui_manual_mode.mdx) for further details -related to this. - -### ☐ Can you create a new mission? - -Select the mission list and then click on `Add Mission` to create a -new mission. To add new waypoints for the mission refer to -[Mission Creation](../web_user_interface/ui_autonomous_mode.mdx#mission-creation). - -### ☐ After creating a new mission, can you execute the mission? - -To execute a mission refer to [Mission Execution](../web_user_interface/ui_autonomous_mode.mdx#mission-execution). - -### ☐ Are the cameras (if present) active in the view bar section when running the mission? - -For more information related to camera views see -[Camera Views](../web_user_interface/ui_overview.mdx#camera-views). - -### ☐ Can you select a camera and save an image after it loads on the main screen? - -See [Pan-Tilt-Zoom (PTZ) View ](../web_user_interface/ui_overview.mdx#ptz-view) for more details related +--- +title: First Time Use Checklist +sidebar_label: First Time Use Checklist +sidebar_position: 2 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +## Hardware Setup + +### ☐ Has the Base Station been set up? + +Ensure that the Base Station has been set up approximately 5 meters +away from any buildings and is currently powered on. See +[System Startup](system_setup.mdx) for further +instructions related to setting up the Base Station. + +### ☐ Is the UGV connected to the Base Station? + +Check to see that the UGV can be pinged from the Base Station network. +See [Connecting to Web UI](system_setup.mdx#connecting_to_web_ui) for further +details. + +## Software Setup + +### ☐ Is ROS running on the UGV? + +SSH into the UGV and run `rostopic list` to generate a list of the +rostopics that are currently available. The list is generally fairly +long so if you are looking for any specific topic please refer to +[API Endpoints](../api/api_endpoints/api_endpoints.mdx). You can also check the +ROS status through the OutdoorNAV UI by referring to the diagnostics section +on the Status page. + +### ☐ Is the OutdoorNAV software running? + +Check to see if the relevant dockers are running (ssh into the UGV and +run `docker ps` which should show at least 5 separate docker containers +running). + +### ☐ Is the computer using the UI connected to the Base Station network? + +This can be confirmed by following the steps found in +[Connecting to Web UI](system_setup.mdx#connecting_to_web_ui). + +### ☐ Have you surveyed the Base Station? + +See [RTK Survey Positioning](../cpr_hardware.mdx#base-station-survey) for +information on how and when to survey the Base station. + +### ☐ Do you have a strong GPS signal? + +After surveying the Base Station check the upper right hand corner of +the UI to confirm that you have a strong GPS signal (the POS and DIR +icons should be green). If either of these icons are not green refer +to [Checking GPS RTK Fix](../cpr_hardware.mdx#base-station-survey) for further +troubleshooting information. + +### ☐ Is the map loading correctly? + +Currently the map requires internet access to load. Refer to +[Loading Map Tiles](system_setup.mdx#loading_map_tiles) for more details +related to setting up the map. + +### ☐ Has the Datum been set? + +See [Set Datum](system_setup.mdx#set-datum) for information on how +to set the Datum variables. + +### ☐ If docking is enabled has the location been set? + +If the Clearpath Robotics autonomous docking package was purchased the +docking location will need to be set. See +[Set Dock Location](system_setup.mdx#set-dock-location) for information on +how to set the docking location. + +### ☐ Is the Navbar status icon functioning? + +To check if the Navbar icon is functioning, trigger the UGV's motion stop +and check to see if it has turned to a red icon. Clicking the icon +will bring up the status information as well as any recent messages +(see below). + +![](/img/outdoornav_images/ugvStatusMessages.png) + +## Using the UI + +The following items are general checks to ensure that the UI is working +properly. + +### ☐ Can the virtual joystick drive the UGV? + +See [Web UI Manual Mode](../web_user_interface/ui_manual_mode.mdx) for further details +related to this. + +### ☐ Can you create a new mission? + +Select the mission list and then click on `Add Mission` to create a +new mission. To add new waypoints for the mission refer to +[Mission Creation](../web_user_interface/ui_autonomous_mode.mdx#mission-creation). + +### ☐ After creating a new mission, can you execute the mission? + +To execute a mission refer to [Mission Execution](../web_user_interface/ui_autonomous_mode.mdx#mission-execution). + +### ☐ Are the cameras (if present) active in the view bar section when running the mission? + +For more information related to camera views see +[Camera Views](../web_user_interface/ui_overview.mdx#camera-views). + +### ☐ Can you select a camera and save an image after it loads on the main screen? + +See [Pan-Tilt-Zoom (PTZ) View ](../web_user_interface/ui_overview.mdx#ptz-view) for more details related to saving images. \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.11.0/getting_started/system_setup.mdx b/outdoornav_user_manual_versioned_docs/version-0.11.0/getting_started/system_setup.mdx index ed52d725..eedaae28 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.11.0/getting_started/system_setup.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.11.0/getting_started/system_setup.mdx @@ -1,239 +1,239 @@ ---- -title: System Setup -sidebar_label: System Setup -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -This section outlines how to set up your OutdoorNav system for some -preliminary testing with the OutdoorNav Software on a UGV. For details -on simulation, refer to [Simulation](../simulation.mdx). - -These instructions assume that the UGV is already powered ON. - - - -## Connecting to Web UI {#connecting_to_web_ui} - -The web server for the UI typically runs on a computer on the UGV. As -such, it is necessary for the networking setup on the UGV to be complete -and for all related hardware to be powered on. - -:::note - -In the case of Clearpath Robotics OutdoorNav Hardware, ensure that the -Base Station is powered ON. - -::: - -Follow the steps below to connect to the Web UI. - -1. Connect your computer to the same network as the UGV. - - :::note - - For Clearpath Robotics OutdoorNav Hardware, use the Base Station - network. Enter the network list and find the wireless network - related for your UGV. The SSID of the network is located in the - Robosmith manual that was shipped with your UGV. - - ::: - -2. Open an Internet browser (preferably Chrome) on your computer. - -3. Enter the UGV's IP address followed by a forward slash in the - search bar. A bookmark of this page can also be created for future - sessions. - - :::note - - For Clearpath Robotics OutdoorNav Hardware, this will be - **192.168.131.1/** for normal use cases and **192.168.131.5/** for - systems with a separate OutdoorNav computer (including the - OutdoorNav Starter Kit and the OutdoorNav Backpack. - - ::: - -The above steps will open the Web UI, which will allow the user to -operate the UGV in Manual Mode (teleoperation) or in Autonomous Mode -(missions). Upon startup the user will be presented with a page that -shows the End-User License Agreement. This page will be visible each -time the UGV is restarted but only on the first navigation to the page. -The EULA should be reviewed prior to using the system. - -## Loading Map Tiles {#loading_map_tiles} - -The Web UI does not cache map tiles on the browser; therefore, the user -will need to ensure their computer has a connection to an Internet -source to load the map tiles. There are a several options to achieve -this: - -1. If the system includes a Base Station that is connected to the - Internet, you will be able to access the Internet and therefore map - tiles over the base station network without needing any further - updates. -2. Connect your phone via USB to your computer (or tablet) and enable - USB tethering on your phone to share the Internet from your phone. -3. Switch your computer (or tablet) to a network that is connected to - the Internet, zoom in/out of the map to load the tiles then switch - back to the original network. - -## Survey Base Station {#survey_base_station} - -If your system includes a Base Station, it must be surveyed using the -steps below to be able to to operate the UGV autonomously. - -1. Access the Menu → Settings → Map. -2. In the **Survey Base Station** section, click the **Start** button - begin the surveying process. - -During surveying, the Status Indicator will turn orange -and return to its green default state when surveying is -done . -Only then should the UGV be sent on autonomous missions. -The entire surveying will take approximately 5 minutes. A feedback bar -will also be displayed showing the current progress of the surveying. Do -not refresh the page or you will lose the feedback bar. - -:::warning - -For an accurate survey, do NOT move the Base Station during this -process. After the surveying has completed, the Base Station should not -be moved unless required. If you need to move the Base Station or it has -been moved accidentally, the surveying process needs to be run again. - -::: - -## Set Datum - -Before operating the UGV autonomously, the user will need to set the -datum, which is the reference point in the world coordinate frame. - -1. Access the Menu → Settings → Map. - -2. In the **Change Datum** section, enter the latitude and longitude of - a location close to the test site (within 10km). Decimal lat/lon are - expected. Use a minimum of 6 decimal places. - -3. Click **Set Datum** button to set the new datum. - - The user should see the blue dot (datum) and the blue arrow (UGV) - move to the test site. If the GPS status indicators are green, the - UGV should be at its correct position on the map as well as facing - in the correct direction. - -## Set Dock Location - -:::note - -If the Clearpath Robotics autonomous docking package has been purchased, -follow these instructions to set up the dock location. Otherwise, this -section can be skipped. - -::: - -:::warning - -Keep the area around the dock free of objects and people. There is no -obstacle detection between the pre-docking point and the dock; -similarly, there is no obstacle detection during the undocking -operation. - -::: - -
-
- -
Autocharge Dock
-
-
- -Before being able to dock the UGV autonomously, set up the dock -location. Follow these steps to position the UGV in its correct position -and orientation. - -1. Power ON the UGV and computer and wait for the system to finish - booting. For example, on the Clearpath Robotics Husky, booting is - complete when the COMM indicator turns green. - -2. Start by manually driving the UGV to the dock target and align it as - straight and centered as possible so that it begins charging. The - Wibotic receiver on the UGV should be centered longitudinally and - laterally with the circle on the Wibotic transmitter (TR-300). - -3. Let the UGV sit in this position for 2 minutes to acquire an RTK GPS - fix. The POS (position) and DIR (heading) GPS status indicators on - the UI should read as follows: . - - **If the GPS status indicators are yellow or red, the selected - location of the dock is NOT appropriate. Please change the dock - location such that the GPS antennas have a clearer visibility.** - -4. On the UI, access the drop down menu on the top-left of the page, - select **Settings** and click the **Add New Dock Location** button. The - dock location will be stored in 5 - 10 seconds as data is collected. - -If the Base Station has been moved (and therefore been resurveyed), or -if the dock has been moved to a new location, the user will need to -reset the location of the dock. This is done in the following manner: - -1. Repeat the previous set of instructions from step 1 to 4. - -2. While in **Edit Mode** select the dock on the UI. A drop down should appear - with the option to reset the dock location. Select that option. - -3. After approximately 5 - 10 seconds the dock location should be updated and the UI will - reflect the change accordingly. - -## Checking GPS RTK Fix {#checking-gpt-rtk-fix} - -Each time the UGV has been powered up (or moved from a GPS-denied -environment to a GPS-available environment), let the UGV sit in this -position for 2 minutes to acquire an RTK GPS fix. The POS (position) and -DIR (heading) GPS status indicators on the UI should be green: . - -**If the GPS status indicators are yellow or red, the selected location -does not have an adequate GPS signal. Move the UGV such that the GPS -antennas have a clearer visibility.** - -If using Switft Navigation Duros and/or a Clearpath Robotics Base -Station, each of these will have a solid blue LED on all of them when -the RTK GPS fix is acquired. - -## Recording a Rosbag - -See the [ROSbag Recorder](../features/rosbag_recorder.mdx) section for details on recording ROS data either. - -## Subsequent Sections - -The following sections of this manual will outline the instructions for -different tasks that can be accomplished while operating the UGV. - -1. **Web User Interface:** - - Overview of the Web UI components as well as the available views - and icons/buttons associated with them. - - - Overview of the buttons required to operate the UGV in Manual - Mode (teleoperation). - - - Instructions to send the UGV on autonomous navigation missions, - including: - - > - Adding Waypoints to the map - > - Creating missions - > - Viewing and updating missions - > - Adding task to missions, such as **Move PTZ** camera, - > **Save Image**, **Dock/Undock** UGV, **Wait**, etc.... - > - Start/Stop/Pause missions - - - Description of the docking procedures allowing the user to dock - and undock the UGV autonomously. Recovery instructions are also - described. -2. **Application Programming Interface:** Details on how to control the - UGV programmatically. -3. **OutdoorNav Features** Details on the features available as part of the - navigation software. -4. **Simulation:** Details on how to simulate autonomous operation of - the UGV. -5. **FAQs:** A list of frequently asked questions. +--- +title: System Setup +sidebar_label: System Setup +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +This section outlines how to set up your OutdoorNav system for some +preliminary testing with the OutdoorNav Software on a UGV. For details +on simulation, refer to [Simulation](../simulation.mdx). + +These instructions assume that the UGV is already powered ON. + + + +## Connecting to Web UI {#connecting_to_web_ui} + +The web server for the UI typically runs on a computer on the UGV. As +such, it is necessary for the networking setup on the UGV to be complete +and for all related hardware to be powered on. + +:::note + +In the case of Clearpath Robotics OutdoorNav Hardware, ensure that the +Base Station is powered ON. + +::: + +Follow the steps below to connect to the Web UI. + +1. Connect your computer to the same network as the UGV. + + :::note + + For Clearpath Robotics OutdoorNav Hardware, use the Base Station + network. Enter the network list and find the wireless network + related for your UGV. The SSID of the network is located in the + Robosmith manual that was shipped with your UGV. + + ::: + +2. Open an Internet browser (preferably Chrome) on your computer. + +3. Enter the UGV's IP address followed by a forward slash in the + search bar. A bookmark of this page can also be created for future + sessions. + + :::note + + For Clearpath Robotics OutdoorNav Hardware, this will be + **192.168.131.1/** for normal use cases and **192.168.131.5/** for + systems with a separate OutdoorNav computer (including the + OutdoorNav Starter Kit and the OutdoorNav Backpack. + + ::: + +The above steps will open the Web UI, which will allow the user to +operate the UGV in Manual Mode (teleoperation) or in Autonomous Mode +(missions). Upon startup the user will be presented with a page that +shows the End-User License Agreement. This page will be visible each +time the UGV is restarted but only on the first navigation to the page. +The EULA should be reviewed prior to using the system. + +## Loading Map Tiles {#loading_map_tiles} + +The Web UI does not cache map tiles on the browser; therefore, the user +will need to ensure their computer has a connection to an Internet +source to load the map tiles. There are a several options to achieve +this: + +1. If the system includes a Base Station that is connected to the + Internet, you will be able to access the Internet and therefore map + tiles over the base station network without needing any further + updates. +2. Connect your phone via USB to your computer (or tablet) and enable + USB tethering on your phone to share the Internet from your phone. +3. Switch your computer (or tablet) to a network that is connected to + the Internet, zoom in/out of the map to load the tiles then switch + back to the original network. + +## Survey Base Station {#survey_base_station} + +If your system includes a Base Station, it must be surveyed using the +steps below to be able to to operate the UGV autonomously. + +1. Access the Menu → Settings → Map. +2. In the **Survey Base Station** section, click the **Start** button + begin the surveying process. + +During surveying, the Status Indicator will turn orange +and return to its green default state when surveying is +done . +Only then should the UGV be sent on autonomous missions. +The entire surveying will take approximately 5 minutes. A feedback bar +will also be displayed showing the current progress of the surveying. Do +not refresh the page or you will lose the feedback bar. + +:::warning + +For an accurate survey, do NOT move the Base Station during this +process. After the surveying has completed, the Base Station should not +be moved unless required. If you need to move the Base Station or it has +been moved accidentally, the surveying process needs to be run again. + +::: + +## Set Datum + +Before operating the UGV autonomously, the user will need to set the +datum, which is the reference point in the world coordinate frame. + +1. Access the Menu → Settings → Map. + +2. In the **Change Datum** section, enter the latitude and longitude of + a location close to the test site (within 10km). Decimal lat/lon are + expected. Use a minimum of 6 decimal places. + +3. Click **Set Datum** button to set the new datum. + + The user should see the blue dot (datum) and the blue arrow (UGV) + move to the test site. If the GPS status indicators are green, the + UGV should be at its correct position on the map as well as facing + in the correct direction. + +## Set Dock Location + +:::note + +If the Clearpath Robotics autonomous docking package has been purchased, +follow these instructions to set up the dock location. Otherwise, this +section can be skipped. + +::: + +:::warning + +Keep the area around the dock free of objects and people. There is no +obstacle detection between the pre-docking point and the dock; +similarly, there is no obstacle detection during the undocking +operation. + +::: + +
+
+ +
Autocharge Dock
+
+
+ +Before being able to dock the UGV autonomously, set up the dock +location. Follow these steps to position the UGV in its correct position +and orientation. + +1. Power ON the UGV and computer and wait for the system to finish + booting. For example, on the Clearpath Robotics Husky, booting is + complete when the COMM indicator turns green. + +2. Start by manually driving the UGV to the dock target and align it as + straight and centered as possible so that it begins charging. The + Wibotic receiver on the UGV should be centered longitudinally and + laterally with the circle on the Wibotic transmitter (TR-300). + +3. Let the UGV sit in this position for 2 minutes to acquire an RTK GPS + fix. The POS (position) and DIR (heading) GPS status indicators on + the UI should read as follows: . + + **If the GPS status indicators are yellow or red, the selected + location of the dock is NOT appropriate. Please change the dock + location such that the GPS antennas have a clearer visibility.** + +4. On the UI, access the drop down menu on the top-left of the page, + select **Settings** and click the **Add New Dock Location** button. The + dock location will be stored in 5 - 10 seconds as data is collected. + +If the Base Station has been moved (and therefore been resurveyed), or +if the dock has been moved to a new location, the user will need to +reset the location of the dock. This is done in the following manner: + +1. Repeat the previous set of instructions from step 1 to 4. + +2. While in **Edit Mode** select the dock on the UI. A drop down should appear + with the option to reset the dock location. Select that option. + +3. After approximately 5 - 10 seconds the dock location should be updated and the UI will + reflect the change accordingly. + +## Checking GPS RTK Fix {#checking-gpt-rtk-fix} + +Each time the UGV has been powered up (or moved from a GPS-denied +environment to a GPS-available environment), let the UGV sit in this +position for 2 minutes to acquire an RTK GPS fix. The POS (position) and +DIR (heading) GPS status indicators on the UI should be green: . + +**If the GPS status indicators are yellow or red, the selected location +does not have an adequate GPS signal. Move the UGV such that the GPS +antennas have a clearer visibility.** + +If using Switft Navigation Duros and/or a Clearpath Robotics Base +Station, each of these will have a solid blue LED on all of them when +the RTK GPS fix is acquired. + +## Recording a Rosbag + +See the [ROSbag Recorder](../features/rosbag_recorder.mdx) section for details on recording ROS data either. + +## Subsequent Sections + +The following sections of this manual will outline the instructions for +different tasks that can be accomplished while operating the UGV. + +1. **Web User Interface:** + - Overview of the Web UI components as well as the available views + and icons/buttons associated with them. + + - Overview of the buttons required to operate the UGV in Manual + Mode (teleoperation). + + - Instructions to send the UGV on autonomous navigation missions, + including: + + > - Adding Waypoints to the map + > - Creating missions + > - Viewing and updating missions + > - Adding task to missions, such as **Move PTZ** camera, + > **Save Image**, **Dock/Undock** UGV, **Wait**, etc.... + > - Start/Stop/Pause missions + + - Description of the docking procedures allowing the user to dock + and undock the UGV autonomously. Recovery instructions are also + described. +2. **Application Programming Interface:** Details on how to control the + UGV programmatically. +3. **OutdoorNav Features** Details on the features available as part of the + navigation software. +4. **Simulation:** Details on how to simulate autonomous operation of + the UGV. +5. **FAQs:** A list of frequently asked questions. diff --git a/outdoornav_user_manual_versioned_docs/version-0.11.0/getting_started/terminal_interface.mdx b/outdoornav_user_manual_versioned_docs/version-0.11.0/getting_started/terminal_interface.mdx index 8afafb7c..b0fefc90 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.11.0/getting_started/terminal_interface.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.11.0/getting_started/terminal_interface.mdx @@ -1,249 +1,249 @@ ---- -title: Command Line Interface -sidebar_label: Command Line Interface -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -By default, the OutdoorNav Software begins automatically when the system -is powered on. This section outlines the OutdoorNav Command Line Interface (CLI), -the set of commands that can be used by developers who are debugging -the system or who want more precise control for managing the OutdoorNav -software. - -## Connecting to the OutdoorNav Computer {#connecting-to-outdoornav-computer} - -To connect to your UGV, consult its corresponding user manual. - -If you are using a Clearpath Robotics UGV with a separate OutdoorNav Computer, -first `ssh` to the UGV using the details provided in the UGV user -manual. Then, if a separate OutdoorNav Computer exists, you can -connect to it by running: - -``` bash -ssh administrator@192.168.131.5 -``` - -## OutdoorNav CLI Installation - -The OutdoorNav CLI is pre-installed on Clearpath robots. If it has not -been installed on your system, it can be installed by running the following -on the OutdoorNav Computer: - -```bash -sudo apt-get install python3-onav-cli -``` - -:::note - -The command above requires that the Clearpath Package Server has been -configured on your OutdoorNav Computer. This is pre-configured on -Clearpath robots. Refer to details on the -[Clearpath Package Server](http://packages.clearpathrobotics.com/) if -this is not configured on your computer. - -::: - -## Listing the OutdoorNav CLI Commands and Getting Help - -To list all of the CLI commands, run the following on the OutdoorNav Computer: - -```bash -onav help -``` - -The CLI commands are: - -- `install`: Download and configure OutdoorNav -- `key`: Get, set, or delete your OutdoorNav license key -- `download`: Download OutdoorNav, but do not configure it -- `configure`: (Re)configure OutdoorNav -- `upgrade`: Upgrade OutdoorNav to the latest vesion -- `uninstall`: Uninstall OutdoorNav -- `depends`: Verify and install dependencies -- `start`: Start OutdoorNav -- `stop`: Stop OutdoorNav -- `status`: Check the status of OutdoorNav -- `logs`: View OutdoorNav logs -- `versions`: Print versions available to install -- `help`: Show available commands - -To get help on an individual command, use the `-h` option. For example, to -get help on the `install` command, run `onav install -h`: - -``` -usage: onav install [-h] [-k KEY] [-b] [-c] [-H] VERSION - -positional arguments: - VERSION The OutdoorNav version to install (e.g. 0.11.0) - -optional arguments: - -h, --help show this help message and exit - -k KEY, --key KEY Your OutdoorNav installation key - -b, --backpack Configure in backpack/bridged mode - -c, --clean Clean any configurations from a prior installation -``` - -## Starting and Stopping the OutdoorNav Software {#starting-outdoornav} - -On UGV startup, all the sensors, the user interface, as well as the -autonomy software are set to start automatically. When debugging or when -greater control is desired, the CLI can be used to start and stop -the OutdoorNav software, in whole or in part. - -To see the current status of OutdoorNav software, run: - -```bash -onav status -``` - -To start the OutdoorNav software if it is not running, use the following command, -which starts the latest version of the software by default: - -```bash -onav start -``` - -To stop the OutdoorNav software, run: - -```bash -onav stop -``` - -## Stopping and Restarting the Autonomy Software Only - -To use the UGV without the autonomy software, use the following -command to stop the nodes and prevent them from automatic startup: - -``` bash -onav stop -s autonomy -``` - -The autonomy software can be restarted by running: - -``` bash -onav start -s autonomy -``` - -## Stopping/Restarting the Sensors - -To use the UGV without the sensors, use these commands to disable the -nodes and prevent them from automatic startup: - -``` bash -onav stop -s sensors -``` - -:::note - -This command will only disable the drivers for the sensors that are started -by the OutdoorNav software. This includes the GNSS units, the Microstrain IMU, -and any LiDAR/Stereo detection sources (not limited to Velodyne LiDARs, Realsense -cameras, 2D Lidars). - -::: - -The sensors software can be restarted by running: - -``` -onav start -s sensors -``` - -## Accessing the OutdoorNav Software Logs - -To check the logs of the OutdoorNav software, use the `onav logs` command -with the appropriate service. For example, to view the logs for the sensors -service, run: - -```bash -onav logs sensors -``` - -## Installing the OutdoorNav Software - -OutdoorNav is typically pre-installed on Clearpath robots, so most users should -not need to do a first-time installation of the software, though the process -is outlined below as a reference. - -As a first step, confirm that the robot has internet access. For example, confirm -that the following command is successful: - -``` -ping 8.8.8.8 -``` - -Second, the required dependencies need to be installed by running: - -```bash -onav depends -``` - -Third, a key needs to be added onto the robot to enable the installation -process. Contact [Clearpath Support](../support) if you did not receive your key. -To add your key, run the following, replacing `` with the actual value: - -```bash -onav key -``` - -Fourth, list the versions available for installation by running: - -```bash -onav versions -``` - -Fifth, install the OutdoorNav software for the desired version (typically the -newest version), by running the following, replacing `` with -the version to be installed: - -```bash -onav install -``` - -When prompted, trigger the reboot. - -Finally, following the reboot, run the following command to start the OutdoorNav -software. This will only be required the first time after installation. - -```bash -onav start -``` - -## Upgrading the OutdoorNav Software - -After receiving a notice that a new version of the OutdoorNav Software is -available, use the `onav install` command with the appropriate version. -Note that `onav install` runs the following commands in sequence: - -- `onav download` -- `onav configure` -- `onav upgrade` - -For example, to upgrade from 0.11.0 to 0.12.0, run the following command: - -``` -onav install 0.12.0 -``` - -:::note - -The `download` step requires internet access to download the new software. -Confirm that the OutdoorNav Computer has internet access by running a command -such as: - -``` -ping 8.8.8.8 -``` - -::: - -## Uninstalling Old Versions of OutdoorNav Software - -If old versions of OutdoorNav software are no longer being used, they can -be removed with the `onav uninstall` command. For example, to uninstall 0.11.0 -run: - -``` -onav uninstall 0.11.0 +--- +title: Command Line Interface +sidebar_label: Command Line Interface +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +By default, the OutdoorNav Software begins automatically when the system +is powered on. This section outlines the OutdoorNav Command Line Interface (CLI), +the set of commands that can be used by developers who are debugging +the system or who want more precise control for managing the OutdoorNav +software. + +## Connecting to the OutdoorNav Computer {#connecting-to-outdoornav-computer} + +To connect to your UGV, consult its corresponding user manual. + +If you are using a Clearpath Robotics UGV with a separate OutdoorNav Computer, +first `ssh` to the UGV using the details provided in the UGV user +manual. Then, if a separate OutdoorNav Computer exists, you can +connect to it by running: + +``` bash +ssh administrator@192.168.131.5 +``` + +## OutdoorNav CLI Installation + +The OutdoorNav CLI is pre-installed on Clearpath robots. If it has not +been installed on your system, it can be installed by running the following +on the OutdoorNav Computer: + +```bash +sudo apt-get install python3-onav-cli +``` + +:::note + +The command above requires that the Clearpath Package Server has been +configured on your OutdoorNav Computer. This is pre-configured on +Clearpath robots. Refer to details on the +[Clearpath Package Server](http://packages.clearpathrobotics.com/) if +this is not configured on your computer. + +::: + +## Listing the OutdoorNav CLI Commands and Getting Help + +To list all of the CLI commands, run the following on the OutdoorNav Computer: + +```bash +onav help +``` + +The CLI commands are: + +- `install`: Download and configure OutdoorNav +- `key`: Get, set, or delete your OutdoorNav license key +- `download`: Download OutdoorNav, but do not configure it +- `configure`: (Re)configure OutdoorNav +- `upgrade`: Upgrade OutdoorNav to the latest vesion +- `uninstall`: Uninstall OutdoorNav +- `depends`: Verify and install dependencies +- `start`: Start OutdoorNav +- `stop`: Stop OutdoorNav +- `status`: Check the status of OutdoorNav +- `logs`: View OutdoorNav logs +- `versions`: Print versions available to install +- `help`: Show available commands + +To get help on an individual command, use the `-h` option. For example, to +get help on the `install` command, run `onav install -h`: + +``` +usage: onav install [-h] [-k KEY] [-b] [-c] [-H] VERSION + +positional arguments: + VERSION The OutdoorNav version to install (e.g. 0.11.0) + +optional arguments: + -h, --help show this help message and exit + -k KEY, --key KEY Your OutdoorNav installation key + -b, --backpack Configure in backpack/bridged mode + -c, --clean Clean any configurations from a prior installation +``` + +## Starting and Stopping the OutdoorNav Software {#starting-outdoornav} + +On UGV startup, all the sensors, the user interface, as well as the +autonomy software are set to start automatically. When debugging or when +greater control is desired, the CLI can be used to start and stop +the OutdoorNav software, in whole or in part. + +To see the current status of OutdoorNav software, run: + +```bash +onav status +``` + +To start the OutdoorNav software if it is not running, use the following command, +which starts the latest version of the software by default: + +```bash +onav start +``` + +To stop the OutdoorNav software, run: + +```bash +onav stop +``` + +## Stopping and Restarting the Autonomy Software Only + +To use the UGV without the autonomy software, use the following +command to stop the nodes and prevent them from automatic startup: + +``` bash +onav stop -s autonomy +``` + +The autonomy software can be restarted by running: + +``` bash +onav start -s autonomy +``` + +## Stopping/Restarting the Sensors + +To use the UGV without the sensors, use these commands to disable the +nodes and prevent them from automatic startup: + +``` bash +onav stop -s sensors +``` + +:::note + +This command will only disable the drivers for the sensors that are started +by the OutdoorNav software. This includes the GNSS units, the Microstrain IMU, +and any LiDAR/Stereo detection sources (not limited to Velodyne LiDARs, Realsense +cameras, 2D Lidars). + +::: + +The sensors software can be restarted by running: + +``` +onav start -s sensors +``` + +## Accessing the OutdoorNav Software Logs + +To check the logs of the OutdoorNav software, use the `onav logs` command +with the appropriate service. For example, to view the logs for the sensors +service, run: + +```bash +onav logs sensors +``` + +## Installing the OutdoorNav Software + +OutdoorNav is typically pre-installed on Clearpath robots, so most users should +not need to do a first-time installation of the software, though the process +is outlined below as a reference. + +As a first step, confirm that the robot has internet access. For example, confirm +that the following command is successful: + +``` +ping 8.8.8.8 +``` + +Second, the required dependencies need to be installed by running: + +```bash +onav depends +``` + +Third, a key needs to be added onto the robot to enable the installation +process. Contact [Clearpath Support](../support) if you did not receive your key. +To add your key, run the following, replacing `` with the actual value: + +```bash +onav key +``` + +Fourth, list the versions available for installation by running: + +```bash +onav versions +``` + +Fifth, install the OutdoorNav software for the desired version (typically the +newest version), by running the following, replacing `` with +the version to be installed: + +```bash +onav install +``` + +When prompted, trigger the reboot. + +Finally, following the reboot, run the following command to start the OutdoorNav +software. This will only be required the first time after installation. + +```bash +onav start +``` + +## Upgrading the OutdoorNav Software + +After receiving a notice that a new version of the OutdoorNav Software is +available, use the `onav install` command with the appropriate version. +Note that `onav install` runs the following commands in sequence: + +- `onav download` +- `onav configure` +- `onav upgrade` + +For example, to upgrade from 0.11.0 to 0.12.0, run the following command: + +``` +onav install 0.12.0 +``` + +:::note + +The `download` step requires internet access to download the new software. +Confirm that the OutdoorNav Computer has internet access by running a command +such as: + +``` +ping 8.8.8.8 +``` + +::: + +## Uninstalling Old Versions of OutdoorNav Software + +If old versions of OutdoorNav software are no longer being used, they can +be removed with the `onav uninstall` command. For example, to uninstall 0.11.0 +run: + +``` +onav uninstall 0.11.0 ``` \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.11.0/getting_started/tf_validation.mdx b/outdoornav_user_manual_versioned_docs/version-0.11.0/getting_started/tf_validation.mdx index 72327dbc..ab05b15f 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.11.0/getting_started/tf_validation.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.11.0/getting_started/tf_validation.mdx @@ -1,80 +1,80 @@ ---- -title: TF Validation -sidebar_label: TF Validation -sidebar_position: 4 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -:::note - -Sensor transform (TF) validation should only be required if the performance -is noticeably poor, such as when the UGV drifts off of the planned path or -oscillations occur around the path). - -::: - -The coordinate transformation of the two GPS antennas, the IMU, the 2D -and 3D Lidars to the base_link of the UGV should have already been set -prior to receiving the UGV. However, ensure that they are set correctly. - -The ROS coordinate frame base_link, shown in the figure below, is -located at the center of the bottom plate of the UGV. The environment -variables below should be taken with respect to this coordinate frame. -The X axis is in red (and pointing towards the front of the UGV), Y in -green (pointing towards the left of the UGV) and Z in blue (pointing -towards the sky). - -You can check the current value of the environment variables by running -the following on the robot (host) computer (and setting \ -to the names listed in the table below). - -``` bash -printenv | grep -``` - -The environment variables for the position and orientation of each -sensor are provided in the table below. - -_OutdoorNav sensor position and orientation environment variables_ - -| Environment Variable | Function | -|----------------------|---------------------------------------| -| POSITION_GPS_XYZ | [X,Y,Z] position, in meters, of the position GNSS antenna with respect to the base_link coordinate frame. | -| POSITION_GPS_RPY | [Roll,Pitch,Yaw], in radians, of the position GNSS antenna with respect to the base_link coordinate frame. | -| HEADING_GPS_XYZ | [X,Y,Z] position, in meters, of the heading GNSS antenna with respect to the base_link coordinate frame. | -| HEADING_GPS_RPY | [Roll,Pitch,Yaw], in radians, of the heading GNSS antenna with respect to the base_link coordinate frame. | -| MICROSTRAIN_XYZ | [X,Y,Z] position, in meters, of the IMU with respect to the base_link coordinate frame. | -| MICROSTRAIN_RPY | [Roll,Pitch,Yaw], in radians, of the IMU with respect to the base_link coordinate frame. | -| VLP_XYZ | [X,Y,Z] position, in meters, of the 3D Lidar with respect to the base_link coordinate frame. | -| VLP_RPY | [Roll,Pitch,Yaw], in radians, of the 3D Lidar with respect to the base_link coordinate frame. | -| LMS1XX_XYZ | [X,Y,Z] position, in meters, of the 2D Lidar with respect to the base_link coordinate frame. | -| LMS1XX_RPY | [Roll,Pitch,Yaw], in radians, of the 2D Lidar with respect to the base_link coordinate frame. | -| HOKUYO_XYZ | [X,Y,Z] position, in meters, of the 2D Lidar with respect to the base_link coordinate frame. | -| HOKUYO_RPY | [Roll,Pitch,Yaw], in radians, of the 2D Lidar with respect to the base_link coordinate frame. | -| D435_XYZ | [X,Y,Z] position, in meters, of the 2D Lidar with respect to the base_link coordinate frame. | -| D435_RPY | [Roll,Pitch,Yaw], in radians, of the 2D Lidar with respect to the base_link coordinate frame. | - -There may also be 2 of each of these detection sensors. The corresponding environment -variable is prefixed with `REAR_`. - -:::note - -When the printed Y axis on the IMU is pointing towards the front of the -robot (i.e., aligned to X axis of base_link), MICROSTRAIN_RPY = [0, 0, 0]. - -::: - -:::warning - -If you decide to move any of these sensors, you must modify these -variables accordingly in the `/opt/onav/outdoornav_host_setup.sh` file (on the host). - -
-
- -
base_link coordinate frame
-
-
- -::: +--- +title: TF Validation +sidebar_label: TF Validation +sidebar_position: 4 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +:::note + +Sensor transform (TF) validation should only be required if the performance +is noticeably poor, such as when the UGV drifts off of the planned path or +oscillations occur around the path). + +::: + +The coordinate transformation of the two GPS antennas, the IMU, the 2D +and 3D Lidars to the base_link of the UGV should have already been set +prior to receiving the UGV. However, ensure that they are set correctly. + +The ROS coordinate frame base_link, shown in the figure below, is +located at the center of the bottom plate of the UGV. The environment +variables below should be taken with respect to this coordinate frame. +The X axis is in red (and pointing towards the front of the UGV), Y in +green (pointing towards the left of the UGV) and Z in blue (pointing +towards the sky). + +You can check the current value of the environment variables by running +the following on the robot (host) computer (and setting \ +to the names listed in the table below). + +``` bash +printenv | grep +``` + +The environment variables for the position and orientation of each +sensor are provided in the table below. + +_OutdoorNav sensor position and orientation environment variables_ + +| Environment Variable | Function | +|----------------------|---------------------------------------| +| POSITION_GPS_XYZ | [X,Y,Z] position, in meters, of the position GNSS antenna with respect to the base_link coordinate frame. | +| POSITION_GPS_RPY | [Roll,Pitch,Yaw], in radians, of the position GNSS antenna with respect to the base_link coordinate frame. | +| HEADING_GPS_XYZ | [X,Y,Z] position, in meters, of the heading GNSS antenna with respect to the base_link coordinate frame. | +| HEADING_GPS_RPY | [Roll,Pitch,Yaw], in radians, of the heading GNSS antenna with respect to the base_link coordinate frame. | +| MICROSTRAIN_XYZ | [X,Y,Z] position, in meters, of the IMU with respect to the base_link coordinate frame. | +| MICROSTRAIN_RPY | [Roll,Pitch,Yaw], in radians, of the IMU with respect to the base_link coordinate frame. | +| VLP_XYZ | [X,Y,Z] position, in meters, of the 3D Lidar with respect to the base_link coordinate frame. | +| VLP_RPY | [Roll,Pitch,Yaw], in radians, of the 3D Lidar with respect to the base_link coordinate frame. | +| LMS1XX_XYZ | [X,Y,Z] position, in meters, of the 2D Lidar with respect to the base_link coordinate frame. | +| LMS1XX_RPY | [Roll,Pitch,Yaw], in radians, of the 2D Lidar with respect to the base_link coordinate frame. | +| HOKUYO_XYZ | [X,Y,Z] position, in meters, of the 2D Lidar with respect to the base_link coordinate frame. | +| HOKUYO_RPY | [Roll,Pitch,Yaw], in radians, of the 2D Lidar with respect to the base_link coordinate frame. | +| D435_XYZ | [X,Y,Z] position, in meters, of the 2D Lidar with respect to the base_link coordinate frame. | +| D435_RPY | [Roll,Pitch,Yaw], in radians, of the 2D Lidar with respect to the base_link coordinate frame. | + +There may also be 2 of each of these detection sensors. The corresponding environment +variable is prefixed with `REAR_`. + +:::note + +When the printed Y axis on the IMU is pointing towards the front of the +robot (i.e., aligned to X axis of base_link), MICROSTRAIN_RPY = [0, 0, 0]. + +::: + +:::warning + +If you decide to move any of these sensors, you must modify these +variables accordingly in the `/opt/onav/outdoornav_host_setup.sh` file (on the host). + +
+
+ +
base_link coordinate frame
+
+
+ +::: diff --git a/outdoornav_user_manual_versioned_docs/version-0.11.0/index.mdx b/outdoornav_user_manual_versioned_docs/version-0.11.0/index.mdx index 09a63a7f..3d1655b9 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.11.0/index.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.11.0/index.mdx @@ -1,18 +1,18 @@ ---- -title: OutdoorNav User Manual -sidebar_label: OutdoorNav User Manual -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -
-
- -
-
- -OutdoorNav is an outdoor autonomy software platform designed for vehicle developers, -OEMs and robotics researchers. Compatible with Clearpath outdoor mobile platforms -and third-party vehicles, OutdoorNav provides reliable, industry-leading GPS-based +--- +title: OutdoorNav User Manual +sidebar_label: OutdoorNav User Manual +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +
+
+ +
+
+ +OutdoorNav is an outdoor autonomy software platform designed for vehicle developers, +OEMs and robotics researchers. Compatible with Clearpath outdoor mobile platforms +and third-party vehicles, OutdoorNav provides reliable, industry-leading GPS-based navigation for faster, more efficient autonomous vehicle development. \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.11.0/integration_requirements/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.11.0/integration_requirements/_category_.json index e9e0ff1d..adbe22cb 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.11.0/integration_requirements/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.11.0/integration_requirements/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Appendix A: UGV Integration Requirements", - "position": 12 +{ + "label": "Appendix A: UGV Integration Requirements", + "position": 12 } \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.11.0/integration_requirements/hardware_integration_requirements/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.11.0/integration_requirements/hardware_integration_requirements/_category_.json index 75ebaf1b..7950de6b 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.11.0/integration_requirements/hardware_integration_requirements/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.11.0/integration_requirements/hardware_integration_requirements/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Hardware Kit Installation", - "position": 2 -} +{ + "label": "Hardware Kit Installation", + "position": 2 +} diff --git a/outdoornav_user_manual_versioned_docs/version-0.11.0/integration_requirements/integration_overview.mdx b/outdoornav_user_manual_versioned_docs/version-0.11.0/integration_requirements/integration_overview.mdx index 00cf8a07..72d78ae3 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.11.0/integration_requirements/integration_overview.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.11.0/integration_requirements/integration_overview.mdx @@ -1,34 +1,34 @@ ---- -title: "Integration Overview" -sidebar_label: "Integration Overview" -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -The scope of work to transform a non-autonomous UGV into an autonomous -one will vary depending on the exact hardware capabilities and software -interfaces of the UGV. Development work will be required by Clearpath -Robotics, the end user, or a third party developer to bring the UGV into -compliance with the requirements listed in the table below. This may -involve implementing encoders and controllers to provide velocity -control of the UGV and implementing a CAN bus to ROS interface with -kinematic control. The table below provides a general outline of the -requirements; the detailed requirements are covered in the following -sections. - -_Navigation hardware and software general integration scope of work_ - -| \# | Task | Note | -|-----|----------------------------------|---------------------------------| -| 1 | **Convert UGV to drive by wire** | If required; can be a significant electromechanical integration | -| 1.1 | Implement actuated steering and throttle control if necessary | | -| 1.2 | Implement the encoder and controller hardware to provide wheel velocity control and odometry feedback | May require electronic power steering position feedback and controller | -| 2 | **Create a ROS interface** | | -| 2.1 | Commission an OutdoorNav computer running Ubuntu 20.04 and ROS Noetic | | -| 2.2 | Create a ROS interface to the UGV Often interfacing via CAN bus motor controllers and UGV controller | | -| 2.3 | Create a ROS driver including UGV kinematics with ROS-control | Accepts velocity input, commands motor controllers, provides other status feedback | -| 3 | **Install and configure OutdoorNav Hardware and Software** | | -| 3.1 | Install OutdoorNav computer and sensors on the UGV | Provide mechanical mounting, power and ethernet communication to UGV computer | -| 3.2 | Install, update and configure OutdoorNav Software on computer | Configure for sensor mounting locations, UGV kinematics and data topics. Can be done remotely with assistance from Clearpath Robotics Engineering. Approximately 1-2 days. | -| 3.3 | Tune the path planning and following controllers for new UGV | Can be done at a Clearpath Robotics facility. Can often be done at end user facility via remote login from Clearpath Robotics Engineering. Approximately 2-5 days. | +--- +title: "Integration Overview" +sidebar_label: "Integration Overview" +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +The scope of work to transform a non-autonomous UGV into an autonomous +one will vary depending on the exact hardware capabilities and software +interfaces of the UGV. Development work will be required by Clearpath +Robotics, the end user, or a third party developer to bring the UGV into +compliance with the requirements listed in the table below. This may +involve implementing encoders and controllers to provide velocity +control of the UGV and implementing a CAN bus to ROS interface with +kinematic control. The table below provides a general outline of the +requirements; the detailed requirements are covered in the following +sections. + +_Navigation hardware and software general integration scope of work_ + +| \# | Task | Note | +|-----|----------------------------------|---------------------------------| +| 1 | **Convert UGV to drive by wire** | If required; can be a significant electromechanical integration | +| 1.1 | Implement actuated steering and throttle control if necessary | | +| 1.2 | Implement the encoder and controller hardware to provide wheel velocity control and odometry feedback | May require electronic power steering position feedback and controller | +| 2 | **Create a ROS interface** | | +| 2.1 | Commission an OutdoorNav computer running Ubuntu 20.04 and ROS Noetic | | +| 2.2 | Create a ROS interface to the UGV Often interfacing via CAN bus motor controllers and UGV controller | | +| 2.3 | Create a ROS driver including UGV kinematics with ROS-control | Accepts velocity input, commands motor controllers, provides other status feedback | +| 3 | **Install and configure OutdoorNav Hardware and Software** | | +| 3.1 | Install OutdoorNav computer and sensors on the UGV | Provide mechanical mounting, power and ethernet communication to UGV computer | +| 3.2 | Install, update and configure OutdoorNav Software on computer | Configure for sensor mounting locations, UGV kinematics and data topics. Can be done remotely with assistance from Clearpath Robotics Engineering. Approximately 1-2 days. | +| 3.3 | Tune the path planning and following controllers for new UGV | Can be done at a Clearpath Robotics facility. Can often be done at end user facility via remote login from Clearpath Robotics Engineering. Approximately 2-5 days. | diff --git a/outdoornav_user_manual_versioned_docs/version-0.11.0/integration_requirements/interface_control_requirements.mdx b/outdoornav_user_manual_versioned_docs/version-0.11.0/integration_requirements/interface_control_requirements.mdx index a603485b..d9906ed6 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.11.0/integration_requirements/interface_control_requirements.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.11.0/integration_requirements/interface_control_requirements.mdx @@ -1,119 +1,119 @@ ---- -title: "ROS Interface Control Requirements" -sidebar_label: "ROS Interface Control Requirements" -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -## ROS Interface Control Checklist - -Prior to the installation and tuning of Clearpath Robotics (CPR) -OutdoorNav software on your platform (robot computer), CPR requires that the platform's -ROS interface satisfies the conditions listed below. Ensure that all of the requirements -are satisfied for a smooth installation and tuning process. - -![](/img/outdoornav_images/onav_interface_control.png) - -| | Requirement | -|------|------------------------------------------------------------------| -| | The platform computer is on the 192.168.131.xxx subnet (ideally in the range 1-4). | -| | The platform computer has an installation of [ROS 1 Noetic](http://wiki.ros.org/noetic/Installation). | -| | A URDF is supplied to CPR by the customer, in which the `base_link` coordinate frame is defined according to the [REP-105 base-link](https://www.ros.org/reps/rep-0105.html#base-link) ROS standard. | -| | The platform outputs [tf2_msgs/TFMessage](http://docs.ros.org/en/jade/api/tf2_msgs/html/msg/TFMessage.html) messages on the ROS standard `/tf` topic, at a minimum rate of **30 Hz**. | -| | The platform outputs a latched [tf2_msgs/TFMessage](http://docs.ros.org/en/jade/api/tf2_msgs/html/msg/TFMessage.html) message on the ROS standard `/tf_static` topic. This should include any fixed frames of ROS enabled devices/sensors that are available on your platform. | -| | The platform computer has a velocity controller that accepts, as input, [geometry_msgs/Twist](http://docs.ros.org/en/melodic/api/geometry_msgs/html/msg/Twist.html) messages on the ROS standard `/cmd_vel` topic, at a minimum rate of **10 Hz**. | -| | The platform computer has a velocity controller that tracks the input velocity and outputs the resulting platform velocity on the `/platform/cmd_vel` topic. | -| | The platform outputs [nav_msgs/Odometry](http://docs.ros.org/en/noetic/api/nav_msgs/html/msg/Odometry.html) messages on the `/platform/odom` topic, at a minimum rate of **10 Hz**. | -| | The `/platform/odom` topic publishes its data with the header.frame_id = `odom` and the child_frame_id = `base_link`, as per the [REP-105 odom](https://www.ros.org/reps/rep-0105.html#odom) ROS standard. **IMPORTANT**: The platform should however not broadcast the `odom` --> `base_link` transformation since the OutdoorNav software will do so. | -| | If available, the platform odometry output has less than ±5% linear position error. | -| | If available, the platform odometry output has less than ±5% orientation error. | -| | The platform outputs [std_msgs/Bool](http://docs.ros.org/en/noetic/api/std_msgs/html/msg/Bool.html) messages on the `/platform/emergency_stop` topic, at a minimum rate of **5 Hz**, indicating whether or not the platform is in a stopped state. | -| | Perform the validation tests described in [Interface Control Validation Test](#interface-control-validation) section and [record a rosbag](http://wiki.ros.org/rosbag/Commandline#rosbag_record) of all of your topics. The linear and angular velocities of the three trial runs recorded should be noted here:

Trial #1: Linear x: , Angular z:
Trial #2: Linear x: , Angular z:
Trial #3: Linear x: , Angular z:
| - -:::note - -Consult the [Platform API](../api/api_endpoints/platform_api.mdx#topics-published-by-platform) for -detailed information on the published/subscribed platform topics. - -::: - -If the platform is an Ackermann (or double Ackermann) drive vehicle: - -| | Requirement | -|------|------------------------------------------------------------------| -| | A conversion from [geometry_msgs/Twist](http://docs.ros.org/en/melodic/api/geometry_msgs/html/msg/Twist.html) messages to Ackermann inputs is provided. | - -:::note - -Ackermann drive platforms require both steering and throttle inputs to -drive the platform. It is required that our OutdoorNav output `/cmd_vel` -be converted into a message suitable to your platform. An example of an -Ackermann message type can be found -[here](http://wiki.ros.org/teb_local_planner/Tutorials/Planning%20for%20car-like%20robots). -This may satisfy your particular platform, and is only a starting point -on how to do this conversion. - -::: - -If the platform computer is running a version of ROS 2: - -| | Requirement | -|------|------------------------------------------------------------------| -| | The platform computer has a [ROS 2 to ROS 1 bridge](https://github.com/ros2/ros1_bridge) is installed to enable the exchange of messages between the two ROS versions. | - -Signature: Date: - -## Interface Control Validation Test {#interface-control-validation} - -The following test is designed to validate the platforms velocity -controller. It will be required that you command the robot to drive in -three circles, of varying radii, by applying the following command to -the platform. - -``` bash -rostopic pub -r 10 /cmd_vel geometry_msgs/Twist "linear: -x: ___ -y: 0.0 -z: 0.0 -angular: -x: 0.0 -y: 0.0 -z: ___" -``` - -The three trials that we request will vary between platforms depending -on the its maximum linear $(v_\{max\})$ and angular velocities -$(\omega_\{max\})$, minimum linear $(v_\{min\})$ and angular velocities -$(\omega_\{min\})$, as well as limitations due to the minimum allowable -turning radius $(r_\{min\})$. Of these three trials, we would like to see -data within three linear velocity bands, as seen in the table below, -resulting in three different turning radii. For the purpose of these -tests, the following formula can be used when determining the required -linear and angular velocities to apply: $r = v/\omega$. - -| Trial \# | Linear X Bands \[m/s\] | Example Linear X Band \[m/s\] | -| ---------|--------------------------------------------|-------------------------------------| -| 1 | $v_\{min\} \cdot [1.0, 1.5]$ | $[0.5, 0.75]$ | -| 2 | $((v_\{max\} - v_\{min\})/2) \cdot [0.9, 1.1]$ | $[2.025, 2.475]$ | -| 3 | $v_\{max\} \cdot [0.9, 1.0]$ | $[4.5, 5.0]$ | - -As an example, a platform with specs $v \in [0.5, 5.0]$, $r_\{min\} = 3$ -would have linear x velocity bands as listed in the table above. The -trials could then be as outlined in the table below. - -| Trial \# | Linear X \[m/s\] | Angular Z \[rad/s\] |Turn Radius \[m\] | -|-----------|--------------------|---------------------|------------------| -| 1 | 0.75 | 0.25 | 3 | -| 2 | 2.25 | 0.5 | 4.5 | -| 3 | 4.5 | 0.75 | 6 | - -Finally, the test data in the collected ROSbag should include the -following: - -1. `/tf` and `/tf_static` -2. `/platform/cmd_vel` -3. `/platform/odom` -4. `/cmd_vel` -5. `/platform/emergency_stop` (if available) -6. raw NavSatFix data from a GPS unit (if possible). +--- +title: "ROS Interface Control Requirements" +sidebar_label: "ROS Interface Control Requirements" +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +## ROS Interface Control Checklist + +Prior to the installation and tuning of Clearpath Robotics (CPR) +OutdoorNav software on your platform (robot computer), CPR requires that the platform's +ROS interface satisfies the conditions listed below. Ensure that all of the requirements +are satisfied for a smooth installation and tuning process. + +![](/img/outdoornav_images/onav_interface_control.png) + +| | Requirement | +|------|------------------------------------------------------------------| +| | The platform computer is on the 192.168.131.xxx subnet (ideally in the range 1-4). | +| | The platform computer has an installation of [ROS 1 Noetic](http://wiki.ros.org/noetic/Installation). | +| | A URDF is supplied to CPR by the customer, in which the `base_link` coordinate frame is defined according to the [REP-105 base-link](https://www.ros.org/reps/rep-0105.html#base-link) ROS standard. | +| | The platform outputs [tf2_msgs/TFMessage](http://docs.ros.org/en/jade/api/tf2_msgs/html/msg/TFMessage.html) messages on the ROS standard `/tf` topic, at a minimum rate of **30 Hz**. | +| | The platform outputs a latched [tf2_msgs/TFMessage](http://docs.ros.org/en/jade/api/tf2_msgs/html/msg/TFMessage.html) message on the ROS standard `/tf_static` topic. This should include any fixed frames of ROS enabled devices/sensors that are available on your platform. | +| | The platform computer has a velocity controller that accepts, as input, [geometry_msgs/Twist](http://docs.ros.org/en/melodic/api/geometry_msgs/html/msg/Twist.html) messages on the ROS standard `/cmd_vel` topic, at a minimum rate of **10 Hz**. | +| | The platform computer has a velocity controller that tracks the input velocity and outputs the resulting platform velocity on the `/platform/cmd_vel` topic. | +| | The platform outputs [nav_msgs/Odometry](http://docs.ros.org/en/noetic/api/nav_msgs/html/msg/Odometry.html) messages on the `/platform/odom` topic, at a minimum rate of **10 Hz**. | +| | The `/platform/odom` topic publishes its data with the header.frame_id = `odom` and the child_frame_id = `base_link`, as per the [REP-105 odom](https://www.ros.org/reps/rep-0105.html#odom) ROS standard. **IMPORTANT**: The platform should however not broadcast the `odom` --> `base_link` transformation since the OutdoorNav software will do so. | +| | If available, the platform odometry output has less than ±5% linear position error. | +| | If available, the platform odometry output has less than ±5% orientation error. | +| | The platform outputs [std_msgs/Bool](http://docs.ros.org/en/noetic/api/std_msgs/html/msg/Bool.html) messages on the `/platform/emergency_stop` topic, at a minimum rate of **5 Hz**, indicating whether or not the platform is in a stopped state. | +| | Perform the validation tests described in [Interface Control Validation Test](#interface-control-validation) section and [record a rosbag](http://wiki.ros.org/rosbag/Commandline#rosbag_record) of all of your topics. The linear and angular velocities of the three trial runs recorded should be noted here:

Trial #1: Linear x: , Angular z:
Trial #2: Linear x: , Angular z:
Trial #3: Linear x: , Angular z:
| + +:::note + +Consult the [Platform API](../api/api_endpoints/platform_api.mdx#topics-published-by-platform) for +detailed information on the published/subscribed platform topics. + +::: + +If the platform is an Ackermann (or double Ackermann) drive vehicle: + +| | Requirement | +|------|------------------------------------------------------------------| +| | A conversion from [geometry_msgs/Twist](http://docs.ros.org/en/melodic/api/geometry_msgs/html/msg/Twist.html) messages to Ackermann inputs is provided. | + +:::note + +Ackermann drive platforms require both steering and throttle inputs to +drive the platform. It is required that our OutdoorNav output `/cmd_vel` +be converted into a message suitable to your platform. An example of an +Ackermann message type can be found +[here](http://wiki.ros.org/teb_local_planner/Tutorials/Planning%20for%20car-like%20robots). +This may satisfy your particular platform, and is only a starting point +on how to do this conversion. + +::: + +If the platform computer is running a version of ROS 2: + +| | Requirement | +|------|------------------------------------------------------------------| +| | The platform computer has a [ROS 2 to ROS 1 bridge](https://github.com/ros2/ros1_bridge) is installed to enable the exchange of messages between the two ROS versions. | + +Signature: Date: + +## Interface Control Validation Test {#interface-control-validation} + +The following test is designed to validate the platforms velocity +controller. It will be required that you command the robot to drive in +three circles, of varying radii, by applying the following command to +the platform. + +``` bash +rostopic pub -r 10 /cmd_vel geometry_msgs/Twist "linear: +x: ___ +y: 0.0 +z: 0.0 +angular: +x: 0.0 +y: 0.0 +z: ___" +``` + +The three trials that we request will vary between platforms depending +on the its maximum linear $(v_\{max\})$ and angular velocities +$(\omega_\{max\})$, minimum linear $(v_\{min\})$ and angular velocities +$(\omega_\{min\})$, as well as limitations due to the minimum allowable +turning radius $(r_\{min\})$. Of these three trials, we would like to see +data within three linear velocity bands, as seen in the table below, +resulting in three different turning radii. For the purpose of these +tests, the following formula can be used when determining the required +linear and angular velocities to apply: $r = v/\omega$. + +| Trial \# | Linear X Bands \[m/s\] | Example Linear X Band \[m/s\] | +| ---------|--------------------------------------------|-------------------------------------| +| 1 | $v_\{min\} \cdot [1.0, 1.5]$ | $[0.5, 0.75]$ | +| 2 | $((v_\{max\} - v_\{min\})/2) \cdot [0.9, 1.1]$ | $[2.025, 2.475]$ | +| 3 | $v_\{max\} \cdot [0.9, 1.0]$ | $[4.5, 5.0]$ | + +As an example, a platform with specs $v \in [0.5, 5.0]$, $r_\{min\} = 3$ +would have linear x velocity bands as listed in the table above. The +trials could then be as outlined in the table below. + +| Trial \# | Linear X \[m/s\] | Angular Z \[rad/s\] |Turn Radius \[m\] | +|-----------|--------------------|---------------------|------------------| +| 1 | 0.75 | 0.25 | 3 | +| 2 | 2.25 | 0.5 | 4.5 | +| 3 | 4.5 | 0.75 | 6 | + +Finally, the test data in the collected ROSbag should include the +following: + +1. `/tf` and `/tf_static` +2. `/platform/cmd_vel` +3. `/platform/odom` +4. `/cmd_vel` +5. `/platform/emergency_stop` (if available) +6. raw NavSatFix data from a GPS unit (if possible). diff --git a/outdoornav_user_manual_versioned_docs/version-0.11.0/integration_requirements/software_integration_instructions.mdx b/outdoornav_user_manual_versioned_docs/version-0.11.0/integration_requirements/software_integration_instructions.mdx index 8126e071..006096b6 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.11.0/integration_requirements/software_integration_instructions.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.11.0/integration_requirements/software_integration_instructions.mdx @@ -1,122 +1,122 @@ ---- -title: "Software Integration Instructions" -sidebar_label: "Software Integration Instructions" -sidebar_position: 4 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -import versions from "@site/static/versions.js" - -Prior to installing the OutdoorNav software, ensure that you have completed the relevant [Hardware Kit Checklist](hardware_integration_requirements/hardware_integration_requirements.mdx). If installing on a secondary/backpack/Starter Kit computer, ensure to have also completed the: -- [Interface Control Checklist](interface_control_requirements.mdx) - -All the following instructions, unless otherwise specified, are to be run on the OutdoorNav computer. - -### Install Command-line Interface Tool (CLI) {#install-cli} - - -{` -sudo apt update -sudo apt install python3-onav-cli -`} - - -### Install OutdoorNav - - -{` -onav install -k -`} - - -where `license_key` is the license key that you have been assigned. Only one license key can be used per UGV. - -### Configure UGV Footprint {#configure-platform-footprint} - -If the UGV has sensors and/or parts that protrude outside of the UGV body, then a few environment variables will need to be modified to adjust the footprint of the robot. Things that could be extending past the footprint could include but are not limited to: - -- GPS antennae, -- Charging receivers, -- Arms, -- etc... - -Change the environment variables from the Table below, in the following file: - -``` -cd /opt/onav//config -nano autonomy.env -``` - -| Environment Variable | Description | Default | -|-----------------------------|----------------------------------------|---------| -| **FOOTPRINT_OFFSET_POS_X** | Distance from base_link to the furthest edge of any part/sensor at the front of the robot | 0.5 | -| **FOOTPRINT_OFFSET_NEG_X** | Distance from base_link to the furthest edge of any part/sensor at the rear of the robot | -0.5 | -| **FOOTPRINT_OFFSET_POS_Y** | Distance from base_link to the furthest edge of any part/sensor at the left of the robot | 0.35 | -| **FOOTPRINT_OFFSET_NEG_Y** | Distance from base_link to the furthest edge of any part/sensor at the right of the robot | -0.35 | - - -### Start/Stop the OutdoorNav - -To start up the OutdoorNav software run: - - -{` -onav start -`} - - -If you wish to start individual profiles or services, run `onav start -h` to see available profiles/services. - -To stop the OutdoorNav software run: - - -{` -onav stop -`} - - -For more information and available ONAV CLI commands, see the [Terminal Interface](../getting_started/terminal_interface.mdx) section. - -### Test OutdoorNav Installation - -1. Ping all of the network sensors to ensure proper communication with the UGV or secondary computer. - -2. Check the following topics and make sure there is data being published to them: - -``` bash -rostopic echo -n 1 /platform/odom -rostopic echo -n 1 /platform/cmd_vel - -rostopic echo -n 1 /localization/odom - -# GNSS units -rostopic echo /sensors/gps_/fix - -# IMU (if included) -rostopic echo -n 1 /sensors/imu_/data - -# Velodyne/Ouster/LMS1XX/Hokuyo/OutdoorScan (if included) -rostopic echo /sensors/lidar_/pointcloud -rostopic echo /sensors/lidar_/scan - -# Realsense D435 Front (if included) -rostopic echo -n 1 /sensors/stereo_0/pointcloud --noarr -rostopic echo -n 1 /sensors/stereo_0/image --noarr -rostopic echo -n 1 /sensors/stereo_0/depth/image_rect_raw --noarr - -# Realsense D435 Rear (if included) -rostopic echo -n 1 /sensors/stereo_1/pointcloud --noarr -rostopic echo -n 1 /sensors/stereo_1/image --noarr -rostopic echo -n 1 /sensors/stereo_1/depth/image_rect_raw --noarr -``` - -\ will be the number of the sensor as it was loaded into the software. Eg. If you have a VLP and an LMS1XX, then the VLP will be lidar_0, and the LMS1XX will be lidar_1. If we only have an LMS1XX, then it would be lidar_0. Ie. the 3D lidars have a higher "priority" and therefore will be loaded first. - -:::note - -The 2D LiDARs (LMS1XX, Hokuyo) will not have a pointcloud topic. - -::: - -Once installation is complete, you can proceed to [Getting Started](../getting_started/system_setup.mdx) to start using the software. +--- +title: "Software Integration Instructions" +sidebar_label: "Software Integration Instructions" +sidebar_position: 4 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +import versions from "@site/static/versions.js" + +Prior to installing the OutdoorNav software, ensure that you have completed the relevant [Hardware Kit Checklist](hardware_integration_requirements/hardware_integration_requirements.mdx). If installing on a secondary/backpack/Starter Kit computer, ensure to have also completed the: +- [Interface Control Checklist](interface_control_requirements.mdx) + +All the following instructions, unless otherwise specified, are to be run on the OutdoorNav computer. + +### Install Command-line Interface Tool (CLI) {#install-cli} + + +{` +sudo apt update +sudo apt install python3-onav-cli +`} + + +### Install OutdoorNav + + +{` +onav install -k +`} + + +where `license_key` is the license key that you have been assigned. Only one license key can be used per UGV. + +### Configure UGV Footprint {#configure-platform-footprint} + +If the UGV has sensors and/or parts that protrude outside of the UGV body, then a few environment variables will need to be modified to adjust the footprint of the robot. Things that could be extending past the footprint could include but are not limited to: + +- GPS antennae, +- Charging receivers, +- Arms, +- etc... + +Change the environment variables from the Table below, in the following file: + +``` +cd /opt/onav//config +nano autonomy.env +``` + +| Environment Variable | Description | Default | +|-----------------------------|----------------------------------------|---------| +| **FOOTPRINT_OFFSET_POS_X** | Distance from base_link to the furthest edge of any part/sensor at the front of the robot | 0.5 | +| **FOOTPRINT_OFFSET_NEG_X** | Distance from base_link to the furthest edge of any part/sensor at the rear of the robot | -0.5 | +| **FOOTPRINT_OFFSET_POS_Y** | Distance from base_link to the furthest edge of any part/sensor at the left of the robot | 0.35 | +| **FOOTPRINT_OFFSET_NEG_Y** | Distance from base_link to the furthest edge of any part/sensor at the right of the robot | -0.35 | + + +### Start/Stop the OutdoorNav + +To start up the OutdoorNav software run: + + +{` +onav start +`} + + +If you wish to start individual profiles or services, run `onav start -h` to see available profiles/services. + +To stop the OutdoorNav software run: + + +{` +onav stop +`} + + +For more information and available ONAV CLI commands, see the [Terminal Interface](../getting_started/terminal_interface.mdx) section. + +### Test OutdoorNav Installation + +1. Ping all of the network sensors to ensure proper communication with the UGV or secondary computer. + +2. Check the following topics and make sure there is data being published to them: + +``` bash +rostopic echo -n 1 /platform/odom +rostopic echo -n 1 /platform/cmd_vel + +rostopic echo -n 1 /localization/odom + +# GNSS units +rostopic echo /sensors/gps_/fix + +# IMU (if included) +rostopic echo -n 1 /sensors/imu_/data + +# Velodyne/Ouster/LMS1XX/Hokuyo/OutdoorScan (if included) +rostopic echo /sensors/lidar_/pointcloud +rostopic echo /sensors/lidar_/scan + +# Realsense D435 Front (if included) +rostopic echo -n 1 /sensors/stereo_0/pointcloud --noarr +rostopic echo -n 1 /sensors/stereo_0/image --noarr +rostopic echo -n 1 /sensors/stereo_0/depth/image_rect_raw --noarr + +# Realsense D435 Rear (if included) +rostopic echo -n 1 /sensors/stereo_1/pointcloud --noarr +rostopic echo -n 1 /sensors/stereo_1/image --noarr +rostopic echo -n 1 /sensors/stereo_1/depth/image_rect_raw --noarr +``` + +\ will be the number of the sensor as it was loaded into the software. Eg. If you have a VLP and an LMS1XX, then the VLP will be lidar_0, and the LMS1XX will be lidar_1. If we only have an LMS1XX, then it would be lidar_0. Ie. the 3D lidars have a higher "priority" and therefore will be loaded first. + +:::note + +The 2D LiDARs (LMS1XX, Hokuyo) will not have a pointcloud topic. + +::: + +Once installation is complete, you can proceed to [Getting Started](../getting_started/system_setup.mdx) to start using the software. diff --git a/outdoornav_user_manual_versioned_docs/version-0.11.0/overview/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.11.0/overview/_category_.json index 663e4088..8414dc7f 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.11.0/overview/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.11.0/overview/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Overview", - "position": 4 -} +{ + "label": "Overview", + "position": 4 +} diff --git a/outdoornav_user_manual_versioned_docs/version-0.11.0/overview/overview_hardware_requirements.mdx b/outdoornav_user_manual_versioned_docs/version-0.11.0/overview/overview_hardware_requirements.mdx index b6abe65e..0883eba8 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.11.0/overview/overview_hardware_requirements.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.11.0/overview/overview_hardware_requirements.mdx @@ -1,44 +1,44 @@ ---- -title: Hardware Requirements -sidebar_label: Hardware Requirements -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -OutdoorNav Software works with compatible UGVs, either from Clearpath -Robotics or third parties. High level requirements for compatible UGVs -are outlined below. Detailed qualification requirements are outlined in -[UGV Integration Requirements](../integration_requirements/integration_overview.mdx). - -## Requirements - -OutdoorNav software does not communicate directly with the UGV motors. -Rather, it publishes target linear and angular velocities packaged in -the [ROS Twist message](http://docs.ros.org/en/noetic/api/geometry_msgs/html/msg/Twist.html) -format and relies on the low level velocity controller of the vehicle to -translate these velocities into correct motor control commands. -Therefore, OutdoorNav Software requires that the UGV must accept the -control commands sent in the [ROS Twist message](http://docs.ros.org/en/noetic/api/geometry_msgs/html/msg/Twist.html) -format. More detailed requirements are outlined in the following table. - -| # | Requirement | Notes | -| - | --------------------------------- | ----------------------------------- | -| 1 | The UGV must be a differential drive or Ackermann drive configuration | Ackerman drive is currently available as a custom implementation; standard in 2023 | -| 2 | The UGV must have velocity control of the wheels and provide kinematic control of the platform | | -| 3 | The UGV shall provide odometry feedback of the wheel direction and velocities and/or steering position | Recommended encoder resolution of 500 ticks per revolution or greater | -| 4 | The UGV should have an emergency stop system with status feedback | | -| 5 | The UGV must accept ROS 1 Twist Commands on the `/cmd_vel` topic | See [API Endpoints](../api/api_endpoints/api_endpoints.mdx); ROS 2 interface available in future release | -| 6 | The UGV must provide odometry and status feedback through ROS topics | See [API Endpoints](../api/api_endpoints/api_endpoints.mdx) | - -## Typical Hardware - -While a variety of different sensors and equipment can be used with -OutdoorNav Software, the following are used most commonly: - -- Clearpath Robotics UGV: Jackal, Husky or Warthog -- GPS System: Dual DURO RTK system or NovAtel Terrastar -- IMU: Microstrain 3DM-GX5-25 -- 3D Laser Sensor: Velodyne VLP-16 -- Tablet Computer: Getac F110 -- Clearpath Long Range Network Station with RTK corrections ("Base Station") +--- +title: Hardware Requirements +sidebar_label: Hardware Requirements +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +OutdoorNav Software works with compatible UGVs, either from Clearpath +Robotics or third parties. High level requirements for compatible UGVs +are outlined below. Detailed qualification requirements are outlined in +[UGV Integration Requirements](../integration_requirements/integration_overview.mdx). + +## Requirements + +OutdoorNav software does not communicate directly with the UGV motors. +Rather, it publishes target linear and angular velocities packaged in +the [ROS Twist message](http://docs.ros.org/en/noetic/api/geometry_msgs/html/msg/Twist.html) +format and relies on the low level velocity controller of the vehicle to +translate these velocities into correct motor control commands. +Therefore, OutdoorNav Software requires that the UGV must accept the +control commands sent in the [ROS Twist message](http://docs.ros.org/en/noetic/api/geometry_msgs/html/msg/Twist.html) +format. More detailed requirements are outlined in the following table. + +| # | Requirement | Notes | +| - | --------------------------------- | ----------------------------------- | +| 1 | The UGV must be a differential drive or Ackermann drive configuration | Ackerman drive is currently available as a custom implementation; standard in 2023 | +| 2 | The UGV must have velocity control of the wheels and provide kinematic control of the platform | | +| 3 | The UGV shall provide odometry feedback of the wheel direction and velocities and/or steering position | Recommended encoder resolution of 500 ticks per revolution or greater | +| 4 | The UGV should have an emergency stop system with status feedback | | +| 5 | The UGV must accept ROS 1 Twist Commands on the `/cmd_vel` topic | See [API Endpoints](../api/api_endpoints/api_endpoints.mdx); ROS 2 interface available in future release | +| 6 | The UGV must provide odometry and status feedback through ROS topics | See [API Endpoints](../api/api_endpoints/api_endpoints.mdx) | + +## Typical Hardware + +While a variety of different sensors and equipment can be used with +OutdoorNav Software, the following are used most commonly: + +- Clearpath Robotics UGV: Jackal, Husky or Warthog +- GPS System: Dual DURO RTK system or NovAtel Terrastar +- IMU: Microstrain 3DM-GX5-25 +- 3D Laser Sensor: Velodyne VLP-16 +- Tablet Computer: Getac F110 +- Clearpath Long Range Network Station with RTK corrections ("Base Station") diff --git a/outdoornav_user_manual_versioned_docs/version-0.11.0/overview/overview_introduction.mdx b/outdoornav_user_manual_versioned_docs/version-0.11.0/overview/overview_introduction.mdx index 83bfa1d6..4f3f1bf7 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.11.0/overview/overview_introduction.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.11.0/overview/overview_introduction.mdx @@ -1,93 +1,93 @@ ---- -title: Introduction -sidebar_label: Introduction -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -## Summary - -OutdoorNav Software is a software package developed by Clearpath -Robotics for autonomous and manual navigation of Unmanned Ground -Vehicles (UGVs) in outdoor environments. - -
-
- -
Web UI Mission Planning View
-
-
- -
-
- -
Web UI Front Camera View
-
-
- -## Compatible Platforms - -While it has been optimized for use with OutdoorNav Hardware from -Clearpath Robotics -([Husky](https://clearpathrobotics.com/husky-unmanned-ground-vehicle-robot/), -[Jackal](https://clearpathrobotics.com/jackal-small-unmanned-ground-vehicle/), -and -[Warthog](https://clearpathrobotics.com/warthog-unmanned-ground-vehicle-robot/)), -it has been designed so that it can be added easily to third-party UGVs. - -
-
- -
Clearpath Robotics Warthog UGV with navigation equipment and operator control unit
-
-
- -## Key Features - -Key features of OutdoorNav Software include: - -- Mission Planning and Autonomous Navigation - - - Robust GPS-based localization with sensor fusion of IMU, LiDAR - and platform odometry - - Autonomous path following via waypoints - - Obstacle Detection and Avoidance: Stop and wait or - autonomously plan a collision-free path around obstacles - without the need to stop - -- Teleoperation - - - Operate the robot remotely using an on-screen or physical - joystick - - Visualize what the robot sees by displaying its network - cameras and LiDAR data - -- Web User Interface (Web UI) - - - Build missions containing sets of paths, with optional task - execution on each path; tasks can be standard tasks (eg. save - camera image) or user provided functions - - View the robot's live position and attitude on the map - - Display robot data such as velocity, signal strength, status - of the motion stop, status of navigation system, and battery charge - - Save and export Missions - -- Application Programming Interface (API) - - - Build your own application and UI by accessing the navigation - API to control the UGV through software or implement fleet - management by accessing the mission API - -- Simulation - - - Begin development of your application prior to purchasing - licenses or commissioning hardware with OutdoorNav software and - the ROS Gazebo simulator - -- Third Party Integration - - - The Web UI and API can be accessed through a network connection; - cloud-based services are available from third parties to - facilitate remote connections and networking to robot hardware - such as Formant.io and Freedom Robotics +--- +title: Introduction +sidebar_label: Introduction +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +## Summary + +OutdoorNav Software is a software package developed by Clearpath +Robotics for autonomous and manual navigation of Unmanned Ground +Vehicles (UGVs) in outdoor environments. + +
+
+ +
Web UI Mission Planning View
+
+
+ +
+
+ +
Web UI Front Camera View
+
+
+ +## Compatible Platforms + +While it has been optimized for use with OutdoorNav Hardware from +Clearpath Robotics +([Husky](https://clearpathrobotics.com/husky-unmanned-ground-vehicle-robot/), +[Jackal](https://clearpathrobotics.com/jackal-small-unmanned-ground-vehicle/), +and +[Warthog](https://clearpathrobotics.com/warthog-unmanned-ground-vehicle-robot/)), +it has been designed so that it can be added easily to third-party UGVs. + +
+
+ +
Clearpath Robotics Warthog UGV with navigation equipment and operator control unit
+
+
+ +## Key Features + +Key features of OutdoorNav Software include: + +- Mission Planning and Autonomous Navigation + + - Robust GPS-based localization with sensor fusion of IMU, LiDAR + and platform odometry + - Autonomous path following via waypoints + - Obstacle Detection and Avoidance: Stop and wait or + autonomously plan a collision-free path around obstacles + without the need to stop + +- Teleoperation + + - Operate the robot remotely using an on-screen or physical + joystick + - Visualize what the robot sees by displaying its network + cameras and LiDAR data + +- Web User Interface (Web UI) + + - Build missions containing sets of paths, with optional task + execution on each path; tasks can be standard tasks (eg. save + camera image) or user provided functions + - View the robot's live position and attitude on the map + - Display robot data such as velocity, signal strength, status + of the motion stop, status of navigation system, and battery charge + - Save and export Missions + +- Application Programming Interface (API) + + - Build your own application and UI by accessing the navigation + API to control the UGV through software or implement fleet + management by accessing the mission API + +- Simulation + + - Begin development of your application prior to purchasing + licenses or commissioning hardware with OutdoorNav software and + the ROS Gazebo simulator + +- Third Party Integration + + - The Web UI and API can be accessed through a network connection; + cloud-based services are available from third parties to + facilitate remote connections and networking to robot hardware + such as Formant.io and Freedom Robotics diff --git a/outdoornav_user_manual_versioned_docs/version-0.11.0/overview/overview_operating_conditions.mdx b/outdoornav_user_manual_versioned_docs/version-0.11.0/overview/overview_operating_conditions.mdx index c02228aa..6e0b17a5 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.11.0/overview/overview_operating_conditions.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.11.0/overview/overview_operating_conditions.mdx @@ -1,177 +1,177 @@ ---- -title: Operating Conditions -sidebar_label: Operating Conditions -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -OutdoorNav Software is designed and tested for use in rugged outdoor -environments. - -## Operating Conditions - -### Terrain - -OutdoorNav Software is compatible with terrains in which the UGV can be -driven manually without excessive slipping. The performance limits will -be a function of the base UGV traction. - -Using Clearpath Robotics Husky, Jackal, and Warthog as a the base UGV, -OutdoorNav Software is suitable for use in the following terrains: - -- asphalt -- concrete -- grass -- snow - -:::note - -Grass should not exceed 30 cm in height if collision avoidance is -enabled. - -::: - -:::note - -Winter/studded tires may be required for proper traction on snow. - -::: - -OutdoorNav Software is currently **not** suitable in the following -terrains: - -- ice -- loose gravel - -:::note - -Support for loose gravel environments is currently being tested and is -expected to be available in late 2023. - -::: - -The terrain capabilities of third-party UGVs will be dependent on a -variety of factors including the vehicle mass, the tire treading, and -motor power. - -### Environment - -OutdoorNav Software is suitable for use in the following environmental -conditions: - -- light rainfall (drizzle) -- light snowfall (powdery snow) - -:::note - -If erratic behavior, such as frequent replanning, is perceived in these -light precipitation conditions, disabling the "continuous planning" -feature may help. - -::: - -OutdoorNav Software is **not** suitable for use in the following -environmental conditions: - -- heavy rainfall -- heavy snowfall - -:::note - -If navigation is required in heavy rain or snow, disabling the collision -avoidance feature will allow the UGV to navigate properly. This should -be done with caution. - -![](/img/outdoornav_images/gps_danger.png) - -::: - -## Performance - -The performance of the system is highly dependent on both the base UGV, -the sensors, the system integration details, and the environment. The -following table provides typical performance metrics for Clearpath -Robotics Jackal and Husky UGVs. - -_System Performance for Husky/Jackal with Typical Sensors_ - -| | Starter Sensor Kit | Standard Sensor Kit (No RTK) | Standard Sensor Kit (RTK) | -|----------------------------------------|-----------------------------------|----------------------------------|----------------------------------| -| GPS sensors | UBlox F9P | 2x SwiftNav Duro | 2x SwiftNav Duro | -| Location accuracy (position & heading) | Less than 60 cm
Less than 10° | Less than 30 cm
Less than 5° | Less than 5 cm
Less than 2° | -| Path tracking accuracy (approximate) | 20 cm | 15 cm | 10 cm | - -## Limitations - -While OutdoorNav Software operates effectively in a range of rugged -outdoor environments, the operator should be aware of the following -limitations and plan accordingly. - -_OutdoorNav System Limitations_ - -| Limitation | Details | -|--------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| RTK accuracy | Localization accuracy for the Standard (RTK) configuration assumes the base station location has been accurately surveyed. | -| Localization accuracy | Localization accuracy is influenced by the quality of GNSS data that is available. Navigating in GNSS denied areas (e.g., under bridges, near tall buildings, etc.) will cause degradation in localization performance. | -| Negative obstacle detection not present | Outdoor Navigation Software does not have negative obstacle detection capability. Your UGV will not detect stairs, cliffs, potholes, depressions or edges and may drive into these obstacles causing harm to people or property. | -| Limited obstacle detection in vertical dimension | The small vertical field of view of 3D LiDARs limits the vertical obstacle detection capability of the OutdoorNav Software. See [Obstacle Detection Limitations](#obstacle-detection-limitations) for details. | -| Low traction may cause UGV to get stuck | Your UGV may navigate itself into a situation where wheels slip or do not make contact with the ground. | -| Rain and snow may affect obstacle detection | Adverse weather conditions may obscure obstacle detection and avoidance data from the VLP-16 LiDAR. Obstacle detection and avoidance may not function in all weather conditions and must be disabled to navigate in heavy snow or rain. | -| Maximum distance between two Viapoints | Distance between any two consecutive Viapoints of a Mission should be less than 20 meters. This will ensure that the global planner can find a valid path to the next Viapoint for the UGV in case there is an obstacle on the path of the UGV. | -| WiFi range limits | The current configurations of the OutdoorNav Software will continue navigation if the WiFi disconnects or goes out of range. The Web UI will reconnect once the WiFi has reconnected but certain functions of the UI may be limited such as the ability to issue a pause/stop commands or sending new missions to the UGV. | -| Wireless motion stop range limits | The UGV will motion stop if the UGV is driven out of range of the wireless motion stop device. | -| RTK GPS limited by WiFi range | If WiFi goes out of range, your UGV will not receive RTK corrections from the Base Station. This can potentially decrease the accuracy of the GPS signal which can subsequently degrade path following performance of your system. | -| Obstacle detection may cause UGV to become stuck | The UGV may stop and become stuck if obstacles are detected and not cleared from its path. If obstacle avoidance is enabled, it may not be able to calculate an acceptable path to the next Viapoint or Goal Point under all circumstances. This will result in the UGV becoming stuck and failing its Mission. | -| Failure to set Datum causes undefined behavior | If the Datum is not set or is not synchronized with the navigation module, the UGV's driven path is undefined and will move unpredictably if Missions are sent in this state. | -| Zones are not currently supported | It is not possible to define “keep-out” or “unsafe” zones that the UGV needs to avoid. Rather, careful use of Waypoint placement by the operator can be used to keep the UGV at a safe distance from unsafe zones. | -| No collision avoidance during teleoperation mode | When operating in Manual Mode (Teleoperation), no collision avoidance is enabled. The operator is responsible for avoiding collisions. | - -### Obstacle Detection Limitations {#obstacle-detection-limitations} - -The maximum collision avoidance range for the OutdoorNav Software is -UGV-dependent and is related to the maximum speed of the UGV. These -ranges for Clearpath Robotics UGVs are: - -- Jackal UGV: 4.5 meters -- Husky UGV: 4.5 meters -- Warthog UGV: 15.0 meters - -While the sensors are able to detect objects at further distances, the -OutdoorNav Software only considers obstacles detected within these -distances for collision avoidance. That is, the UGV will only begin to -decelerate as it detects obstacles within this range. - -The detection itself is also related to the horizontal size -(width/diameter) of the obstacle. The limitations in detecting objects -with small horizontal size are described in the table below. - -_Maximum Reliable Obstacle Detection Distance from UGV, according to Obstacle Horizontal Size_ - -| Object Size (Horizontal) | Starter Sensor Kit | Standard Sensor Kit | -|--------------------------|----------------------------------------------------------------|----------------------------------------------------------------| -| Less than 0.6 cm | No reliable detection | No reliable detection | -| 0.6 to 1.0 cm | 0.8 m | No reliable detection | -| 1.0 to 3.0 cm | 2.0 m | 1.75 m | -| Greater than 3.0 cm | Maximum collision avoidance distance (UGV-specific; see above) | Maximum collision avoidance distance (UGV-specific; see above) | - -Finally, the OutdoorNav Software bounds the obstacle detection to -prevent ground hits and to remove detections above the UGV body. The -following bounds are relative to the ground, assuming a flat surface. -Obstacles that are entirely below the lower bound or entirely above the -upper bound are not considered obstacles and will not be avoided. - -_Obstacle Detection Vertical Bounds_ - -| Vertical Bound | Jackal UGV | Husky UGV | Warthog UGV | -|-----------------------|------------|-----------|-------------| -| Lower Detection Bound | 0.3 m | 0.3 m | 0.3 m | -| Upper Detection Bound | 0.8 m | 1.3 m | 1.8 m | - -:::note - -The vertical detection bounds above are for the Standard Sensor Kit or a -custom sensor configuration that includes a Velodyne. The vertical -detection bounds for the Starter Sensor Kit have yet to be determined. - +--- +title: Operating Conditions +sidebar_label: Operating Conditions +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +OutdoorNav Software is designed and tested for use in rugged outdoor +environments. + +## Operating Conditions + +### Terrain + +OutdoorNav Software is compatible with terrains in which the UGV can be +driven manually without excessive slipping. The performance limits will +be a function of the base UGV traction. + +Using Clearpath Robotics Husky, Jackal, and Warthog as a the base UGV, +OutdoorNav Software is suitable for use in the following terrains: + +- asphalt +- concrete +- grass +- snow + +:::note + +Grass should not exceed 30 cm in height if collision avoidance is +enabled. + +::: + +:::note + +Winter/studded tires may be required for proper traction on snow. + +::: + +OutdoorNav Software is currently **not** suitable in the following +terrains: + +- ice +- loose gravel + +:::note + +Support for loose gravel environments is currently being tested and is +expected to be available in late 2023. + +::: + +The terrain capabilities of third-party UGVs will be dependent on a +variety of factors including the vehicle mass, the tire treading, and +motor power. + +### Environment + +OutdoorNav Software is suitable for use in the following environmental +conditions: + +- light rainfall (drizzle) +- light snowfall (powdery snow) + +:::note + +If erratic behavior, such as frequent replanning, is perceived in these +light precipitation conditions, disabling the "continuous planning" +feature may help. + +::: + +OutdoorNav Software is **not** suitable for use in the following +environmental conditions: + +- heavy rainfall +- heavy snowfall + +:::note + +If navigation is required in heavy rain or snow, disabling the collision +avoidance feature will allow the UGV to navigate properly. This should +be done with caution. + +![](/img/outdoornav_images/gps_danger.png) + +::: + +## Performance + +The performance of the system is highly dependent on both the base UGV, +the sensors, the system integration details, and the environment. The +following table provides typical performance metrics for Clearpath +Robotics Jackal and Husky UGVs. + +_System Performance for Husky/Jackal with Typical Sensors_ + +| | Starter Sensor Kit | Standard Sensor Kit (No RTK) | Standard Sensor Kit (RTK) | +|----------------------------------------|-----------------------------------|----------------------------------|----------------------------------| +| GPS sensors | UBlox F9P | 2x SwiftNav Duro | 2x SwiftNav Duro | +| Location accuracy (position & heading) | Less than 60 cm
Less than 10° | Less than 30 cm
Less than 5° | Less than 5 cm
Less than 2° | +| Path tracking accuracy (approximate) | 20 cm | 15 cm | 10 cm | + +## Limitations + +While OutdoorNav Software operates effectively in a range of rugged +outdoor environments, the operator should be aware of the following +limitations and plan accordingly. + +_OutdoorNav System Limitations_ + +| Limitation | Details | +|--------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| RTK accuracy | Localization accuracy for the Standard (RTK) configuration assumes the base station location has been accurately surveyed. | +| Localization accuracy | Localization accuracy is influenced by the quality of GNSS data that is available. Navigating in GNSS denied areas (e.g., under bridges, near tall buildings, etc.) will cause degradation in localization performance. | +| Negative obstacle detection not present | Outdoor Navigation Software does not have negative obstacle detection capability. Your UGV will not detect stairs, cliffs, potholes, depressions or edges and may drive into these obstacles causing harm to people or property. | +| Limited obstacle detection in vertical dimension | The small vertical field of view of 3D LiDARs limits the vertical obstacle detection capability of the OutdoorNav Software. See [Obstacle Detection Limitations](#obstacle-detection-limitations) for details. | +| Low traction may cause UGV to get stuck | Your UGV may navigate itself into a situation where wheels slip or do not make contact with the ground. | +| Rain and snow may affect obstacle detection | Adverse weather conditions may obscure obstacle detection and avoidance data from the VLP-16 LiDAR. Obstacle detection and avoidance may not function in all weather conditions and must be disabled to navigate in heavy snow or rain. | +| Maximum distance between two Viapoints | Distance between any two consecutive Viapoints of a Mission should be less than 20 meters. This will ensure that the global planner can find a valid path to the next Viapoint for the UGV in case there is an obstacle on the path of the UGV. | +| WiFi range limits | The current configurations of the OutdoorNav Software will continue navigation if the WiFi disconnects or goes out of range. The Web UI will reconnect once the WiFi has reconnected but certain functions of the UI may be limited such as the ability to issue a pause/stop commands or sending new missions to the UGV. | +| Wireless motion stop range limits | The UGV will motion stop if the UGV is driven out of range of the wireless motion stop device. | +| RTK GPS limited by WiFi range | If WiFi goes out of range, your UGV will not receive RTK corrections from the Base Station. This can potentially decrease the accuracy of the GPS signal which can subsequently degrade path following performance of your system. | +| Obstacle detection may cause UGV to become stuck | The UGV may stop and become stuck if obstacles are detected and not cleared from its path. If obstacle avoidance is enabled, it may not be able to calculate an acceptable path to the next Viapoint or Goal Point under all circumstances. This will result in the UGV becoming stuck and failing its Mission. | +| Failure to set Datum causes undefined behavior | If the Datum is not set or is not synchronized with the navigation module, the UGV's driven path is undefined and will move unpredictably if Missions are sent in this state. | +| Zones are not currently supported | It is not possible to define “keep-out” or “unsafe” zones that the UGV needs to avoid. Rather, careful use of Waypoint placement by the operator can be used to keep the UGV at a safe distance from unsafe zones. | +| No collision avoidance during teleoperation mode | When operating in Manual Mode (Teleoperation), no collision avoidance is enabled. The operator is responsible for avoiding collisions. | + +### Obstacle Detection Limitations {#obstacle-detection-limitations} + +The maximum collision avoidance range for the OutdoorNav Software is +UGV-dependent and is related to the maximum speed of the UGV. These +ranges for Clearpath Robotics UGVs are: + +- Jackal UGV: 4.5 meters +- Husky UGV: 4.5 meters +- Warthog UGV: 15.0 meters + +While the sensors are able to detect objects at further distances, the +OutdoorNav Software only considers obstacles detected within these +distances for collision avoidance. That is, the UGV will only begin to +decelerate as it detects obstacles within this range. + +The detection itself is also related to the horizontal size +(width/diameter) of the obstacle. The limitations in detecting objects +with small horizontal size are described in the table below. + +_Maximum Reliable Obstacle Detection Distance from UGV, according to Obstacle Horizontal Size_ + +| Object Size (Horizontal) | Starter Sensor Kit | Standard Sensor Kit | +|--------------------------|----------------------------------------------------------------|----------------------------------------------------------------| +| Less than 0.6 cm | No reliable detection | No reliable detection | +| 0.6 to 1.0 cm | 0.8 m | No reliable detection | +| 1.0 to 3.0 cm | 2.0 m | 1.75 m | +| Greater than 3.0 cm | Maximum collision avoidance distance (UGV-specific; see above) | Maximum collision avoidance distance (UGV-specific; see above) | + +Finally, the OutdoorNav Software bounds the obstacle detection to +prevent ground hits and to remove detections above the UGV body. The +following bounds are relative to the ground, assuming a flat surface. +Obstacles that are entirely below the lower bound or entirely above the +upper bound are not considered obstacles and will not be avoided. + +_Obstacle Detection Vertical Bounds_ + +| Vertical Bound | Jackal UGV | Husky UGV | Warthog UGV | +|-----------------------|------------|-----------|-------------| +| Lower Detection Bound | 0.3 m | 0.3 m | 0.3 m | +| Upper Detection Bound | 0.8 m | 1.3 m | 1.8 m | + +:::note + +The vertical detection bounds above are for the Standard Sensor Kit or a +custom sensor configuration that includes a Velodyne. The vertical +detection bounds for the Starter Sensor Kit have yet to be determined. + ::: \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.11.0/overview/overview_scope.mdx b/outdoornav_user_manual_versioned_docs/version-0.11.0/overview/overview_scope.mdx index ba0092f1..f1a32607 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.11.0/overview/overview_scope.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.11.0/overview/overview_scope.mdx @@ -1,15 +1,15 @@ ---- -title: Scope -sidebar_label: Scope -sidebar_position: 2 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -This documentation focuses on the OutdoorNav Software itself, including -hardware dependencies and integration, but not the specifics of UGV -hardware. For details on compatible Clearpath Robotics UGVs and custom -hardware integrations, contact \ or check -out our [YouTube channel](https://www.youtube.com/channel/UCNPP3C-ZK3mwpG2x89VE-2Q). - - +--- +title: Scope +sidebar_label: Scope +sidebar_position: 2 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +This documentation focuses on the OutdoorNav Software itself, including +hardware dependencies and integration, but not the specifics of UGV +hardware. For details on compatible Clearpath Robotics UGVs and custom +hardware integrations, contact \ or check +out our [YouTube channel](https://www.youtube.com/channel/UCNPP3C-ZK3mwpG2x89VE-2Q). + + diff --git a/outdoornav_user_manual_versioned_docs/version-0.11.0/release_notes.mdx b/outdoornav_user_manual_versioned_docs/version-0.11.0/release_notes.mdx index e6d96331..bb165f28 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.11.0/release_notes.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.11.0/release_notes.mdx @@ -1,279 +1,279 @@ ---- -title: Release Notes -sidebar_label: Release Notes -sidebar_position: 2 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -import Style from '/assets/css/changelog.css'; - -
- -## 0.11.0 - -### New Features - -- Command Line Tool used to install/update/manage OutdoorNav -- Added the End User License Agreement to the UI upon start up -- Light and PTZ Pan/Tilt controls can now be mapped to a controller -- OutdoorNav/IndoorNav switch over improvements -- Can now place waypoints at UGV location via shortcut key (Shift + X) - -### API Features - -- Can now delete multiple mission objects (missions, waypoints, tasks) in single call -- Stack Light can now be manually overridden/muted -- Added ability to import single missions to the robot - -### Bug Fixes - -- 1688: Move PTZ task only ever uses the first PTZ camera's positions -- 2011: Filter false "Move PTZ Failure" notifications when moving PTZ camera - -### Known Issues - -- 1396: Robot gets temporarily stuck at start of mission when near a Waypoint -- 1844: [MPC] Maximum acceleration param doesn't appear to have any effect - -## 0.10.0 - -### New Features - -- Added the ability to start mission from a specific Waypoint -- Added the ability to resume mission from current location -- Added the option to include on-start and on-stop tasks to a Mission -- Added the option to continue a Mission if a Task should fail -- Full release of the API examples repository to the public (link API examples top level page) - -### API Features - -- Action definition changes (see [API Endpoints](./api/api_endpoints/autonomy_api)) - - Mission.action added from_start and *start_waypoint_uuid* fields - - ExecuteMissionByUuid.action: added from_start and *start_waypoint_uuid* fields -- Message Definition changes - - Mission.msg: added an array of on_start and and array of on_stop tasks fields - - Task.msg: added a boolean allow_failure field -- Updated /safety/safety_stop message type (see [Definitions](./api/api_endpoints/definitions.mdx#msg-safety)) -- Added import/export services for /dock, /mission_manager/ and /mission_scheduler features - -### Bug Fixes - -- 1546: Robot cannot start mission part-way through if a task is assigned on any Waypoint prior to its location -- 1764: Importing missions with docking tasks fails to bring in docks - -### Known Issues - -- 1396: Robot gets temporarily stuck at start of mission when near a Waypoint -- 1844: [MPC] Maximum acceleration param doesn't appear to have any effect - -## 0.9.0 - -### New Features - -- Operators can now Schedule Missions to run at specific times (see [Mission Scheduler](./features/mission_scheduler.mdx)) -- Added in support for BulletCat12 Microhard WiFi and Cellular connections -- Allow Audio recording as both tasks and manual operations if UGV has Microphones -- Create custom tasks that can be run during missions (see [Custom Tasks](./features/custom_tasks.mdx)) -- If installed with PDU, UGV can be set to Low Power mode to better conserve power -- New navigation topics added to ROS Autonomy API (see [API Endpoints](./api/api_endpoints/autonomy_api.mdx)): - - /navigation/progress - - /navigation/motion_state - - /navigation/metrics -- Improved precision of docking -- Improved autonomy feedback when something goes wrong in the mission to increase the diagnosability of the error -- Updated Navigation features available to the customer: - - Continuous Replanning renamed to Continuous Planning and is always enabled. - - Constrained Planning is always enabled. Environment Variable to update the path constraint has been modified - (see [Navigation](./features/navigation.mdx)) - - Removed Obstacle Avoidance Mode. The UGV will always attempt to avoid obstacles. - - Removed Path Smoothing. This is always enabled. - - Docking feature added for customers who have purchased a dock. - -### Bug Fixes - -- 1324: Allow single Waypoint missions and/or tasks on first waypoint (required for undocking through tasks). -- 1340: Undocking not working through tasks -- 1607: Fixed MovePTZ task failures - -### Known Issues - -- 131: Software upgrade process not documented fully. -- 609: Realsense D435 collision avoidance not fully tuned. -- 751: Wireless icon in UI doesn't work for Ubiquity hardware. -- 1396: Robot gets temporarily stuck at start of mission when near a Waypoint. -- 1546: Robot cannot start mission part-way through if a task is assigned on any Waypoint prior to its location. - -## 0.8.0 - -### New Features - -- Inertial Measurement Units (IMUs) integrated into localization. -- Added localization status topic (see [API Endpoints](./api/api_endpoints/autonomy_api.mdx#localizationstatus)). -- Added re-localization service (see [API Endpoints](./api/api_endpoints/definitions.mdx#srv-reset-localization)). -- Additional diagnostic information in the status view. -- Docking improvements including: multiple docks, visual representation of docks on map, - local docking/undocking through teleop view. Docking only functional with 2D LiDARs. -- Customization & Tuning Appendix C added. Lists of tuning parameters for navigation - and collision avoidance are now available. As well as, instructions/process on how to - tune UGVs with differential drive dynamics. Instructions for UGVs with Ackermann dynamics - are on their way. - -### Bug Fixes - -- 1134: Display/Hide Datum Point not working. -- 1139: Issues with non-husky platforms. -- 1137: Refreshing page re-enables edit button while mission running. -- 1276: Feedback added for incorrect first Waypoint placement. - -### Known Issues - -- 131: Software upgrade process not documented fully. -- 609: Realsense D435 collision avoidance not fully tuned. -- 751: Wireless icon in UI doesn't work for Ubiquity hardware. -- 1138: Issues with greying out Waypoints in edge cases. -- 1324: Allow single Waypoint missions and/or tasks on first waypoint (required for undocking through tasks). -- 1340: Undocking not working through tasks. - -## 0.7.0 - -### New Features - -- Goal terminology has been removed from the mission generation nomenclature (see - [Definitions](./web_user_interface/ui_autonomous_mode.mdx#definitions)) - Users can now add tasks, apply final headings, and set navigation tolerances - to any Waypoint in a Mission. -- Drag and Drop of Waypoints now available in Edit Mode. -- New Waypoints can be inserted between existing Waypoints in a Mission. -- Mission API now available to create/edit/load missions, waypoints and tasks. -- Mission execution via mission ID is now available. -- The base station location is now displayed in the UI after carrying out an automated survey. -- New coloring scheme for GNSS status icons to provide more accurate information. - -### Bug Fixes - -- 996: Axis camera missing ptz_state - -### Known Issues - -- 131: Software upgrade process not documented fully. -- 609: Realsense D435 collision avoidance not fully tuned. -- 751: Wireless icon in UI doesn't work for Ubiquity hardware. -- 1134: Display/Hide Datum point not working. -- 1137: Refreshing page re-enables edit button while mission running. -- 1138: Issues with greying out Waypoints in edge cases. - -## 0.6.0 - -### New Features - -- OutdoorNav ROS API updated. API now divided into Platform and - Autonomy sections. See [API Overview](./api/api_overview.mdx) - for more details. -- Simulation environment created with charge dock, base station and - camera plugins. -- Added deviation path visualization to UI when constrained replanning - is enabled. -- Modified goalpoint icons to reflect tasks assigned to them. -- Added the ability to record rosbags from UI. -- Added GPS signal strength to status page. -- Added improvements to PTZ controls (cosmetic changes, ability to - disable zoom, added a reset mark). -- User can set map source from OpenStreet, MapBox, Bing Maps, or - custom map tiles through UI. - -### Bug Fixes - -- 632: Prevent users from changing mission while a mission is running. -- 661: Removed map view when no map is provided in default-state.json. - file. -- 712: Fixed front end hanging when user opens menu from any view - other than main view. -- 716: Removed connecting lines from disabled goals. - -### Known Issues - -- 131: Software upgrade process not documented fully. -- 609: Realsense D435 collision avoidance not fully tuned. -- 751: Wireless icon in UI doesn't work for Ubiquity hardware. -- 756: Waypoints stop turning grey when they are hit if a waypoint is - skipped. - -## 0.5.0 - -### New Features - -- Sensor Kit Options: Starter, Standard, Backpack. -- New localization module. -- Added support for UBlox F9K and F9P GNSS receivers in the - localization module. -- Added support for either single or dual Swiftnav Duro/Piksi GNSS - receiver(s) in the localization module. -- Added support for Realsense D435 camera in collision avoidance - module. -- New/updated user modifiable environment variables for sensor and - navigation tuning. -- Added a Virtual Guided tour of the application for first time users. -- Added StreetView and Bing map tiles (to existing MapBox tile). -- Allow users to specify custom map tile source. -- Added cosmetic changes to traversed waypoints as well as a robot. - status icon with ROS topic health information. - -### Bug Fixes - -- 253: Replace default camera image for camera views when stream is - unavailable. -- 281: Fixed navigation latched in a PAUSE state. -- 574: Fixed map settings page to not rerender when robots position - changes. - -### Known Issues - -- 131: Software upgrade process not documented fully. -- 609: Realsense D435 collision avoidance not fully tuned. - -## 0.4.0 - -### New Features - -- Improved wireless charger docking workflow and added ROS Noetic - docking support. -- Added option to record videos from cameras. -- Improved Docker setup to allow concurrent installation with - IndoorNav. -- Added initial support for integration with - [Formant](https://formant.io/). -- Added Docker installation support for Jackal and Warthog robots. - -### Bug Fixes - -- 480: Added rate limiter for continuous planner. -- 490: Fixed base station survey pop up to better reflect survey time. - -### Known Issues - -- 131: Software upgrade process not documented fully. - -## 0.3.0 - -### New Features - -- Upgraded from ROS Melodic to ROS Noetic. -- Published initial performance metrics. -- Updated system architecture to work in Docker containers. - -### Bug Fixes - -- 266: Allowed map offsets to be set more than once without needing to - reset them back to zero. -- 365: Updated costmap to handle large stop distances properly. -- 377: Fixed handling of goal tolerances of 0.02m or less. -- 389: Fixed issue with goal being skipped in some cases where final - heading was specified. - -### Known Issues - -- 131: Software upgrade process not documented fully. -- 150: Docking not yet implemented in Noetic. - +--- +title: Release Notes +sidebar_label: Release Notes +sidebar_position: 2 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +import Style from '/assets/css/changelog.css'; + +
+ +## 0.11.0 + +### New Features + +- Command Line Tool used to install/update/manage OutdoorNav +- Added the End User License Agreement to the UI upon start up +- Light and PTZ Pan/Tilt controls can now be mapped to a controller +- OutdoorNav/IndoorNav switch over improvements +- Can now place waypoints at UGV location via shortcut key (Shift + X) + +### API Features + +- Can now delete multiple mission objects (missions, waypoints, tasks) in single call +- Stack Light can now be manually overridden/muted +- Added ability to import single missions to the robot + +### Bug Fixes + +- 1688: Move PTZ task only ever uses the first PTZ camera's positions +- 2011: Filter false "Move PTZ Failure" notifications when moving PTZ camera + +### Known Issues + +- 1396: Robot gets temporarily stuck at start of mission when near a Waypoint +- 1844: [MPC] Maximum acceleration param doesn't appear to have any effect + +## 0.10.0 + +### New Features + +- Added the ability to start mission from a specific Waypoint +- Added the ability to resume mission from current location +- Added the option to include on-start and on-stop tasks to a Mission +- Added the option to continue a Mission if a Task should fail +- Full release of the API examples repository to the public (link API examples top level page) + +### API Features + +- Action definition changes (see [API Endpoints](./api/api_endpoints/autonomy_api)) + - Mission.action added from_start and *start_waypoint_uuid* fields + - ExecuteMissionByUuid.action: added from_start and *start_waypoint_uuid* fields +- Message Definition changes + - Mission.msg: added an array of on_start and and array of on_stop tasks fields + - Task.msg: added a boolean allow_failure field +- Updated /safety/safety_stop message type (see [Definitions](./api/api_endpoints/definitions.mdx#msg-safety)) +- Added import/export services for /dock, /mission_manager/ and /mission_scheduler features + +### Bug Fixes + +- 1546: Robot cannot start mission part-way through if a task is assigned on any Waypoint prior to its location +- 1764: Importing missions with docking tasks fails to bring in docks + +### Known Issues + +- 1396: Robot gets temporarily stuck at start of mission when near a Waypoint +- 1844: [MPC] Maximum acceleration param doesn't appear to have any effect + +## 0.9.0 + +### New Features + +- Operators can now Schedule Missions to run at specific times (see [Mission Scheduler](./features/mission_scheduler.mdx)) +- Added in support for BulletCat12 Microhard WiFi and Cellular connections +- Allow Audio recording as both tasks and manual operations if UGV has Microphones +- Create custom tasks that can be run during missions (see [Custom Tasks](./features/custom_tasks.mdx)) +- If installed with PDU, UGV can be set to Low Power mode to better conserve power +- New navigation topics added to ROS Autonomy API (see [API Endpoints](./api/api_endpoints/autonomy_api.mdx)): + - /navigation/progress + - /navigation/motion_state + - /navigation/metrics +- Improved precision of docking +- Improved autonomy feedback when something goes wrong in the mission to increase the diagnosability of the error +- Updated Navigation features available to the customer: + - Continuous Replanning renamed to Continuous Planning and is always enabled. + - Constrained Planning is always enabled. Environment Variable to update the path constraint has been modified + (see [Navigation](./features/navigation.mdx)) + - Removed Obstacle Avoidance Mode. The UGV will always attempt to avoid obstacles. + - Removed Path Smoothing. This is always enabled. + - Docking feature added for customers who have purchased a dock. + +### Bug Fixes + +- 1324: Allow single Waypoint missions and/or tasks on first waypoint (required for undocking through tasks). +- 1340: Undocking not working through tasks +- 1607: Fixed MovePTZ task failures + +### Known Issues + +- 131: Software upgrade process not documented fully. +- 609: Realsense D435 collision avoidance not fully tuned. +- 751: Wireless icon in UI doesn't work for Ubiquity hardware. +- 1396: Robot gets temporarily stuck at start of mission when near a Waypoint. +- 1546: Robot cannot start mission part-way through if a task is assigned on any Waypoint prior to its location. + +## 0.8.0 + +### New Features + +- Inertial Measurement Units (IMUs) integrated into localization. +- Added localization status topic (see [API Endpoints](./api/api_endpoints/autonomy_api.mdx#localizationstatus)). +- Added re-localization service (see [API Endpoints](./api/api_endpoints/definitions.mdx#srv-reset-localization)). +- Additional diagnostic information in the status view. +- Docking improvements including: multiple docks, visual representation of docks on map, + local docking/undocking through teleop view. Docking only functional with 2D LiDARs. +- Customization & Tuning Appendix C added. Lists of tuning parameters for navigation + and collision avoidance are now available. As well as, instructions/process on how to + tune UGVs with differential drive dynamics. Instructions for UGVs with Ackermann dynamics + are on their way. + +### Bug Fixes + +- 1134: Display/Hide Datum Point not working. +- 1139: Issues with non-husky platforms. +- 1137: Refreshing page re-enables edit button while mission running. +- 1276: Feedback added for incorrect first Waypoint placement. + +### Known Issues + +- 131: Software upgrade process not documented fully. +- 609: Realsense D435 collision avoidance not fully tuned. +- 751: Wireless icon in UI doesn't work for Ubiquity hardware. +- 1138: Issues with greying out Waypoints in edge cases. +- 1324: Allow single Waypoint missions and/or tasks on first waypoint (required for undocking through tasks). +- 1340: Undocking not working through tasks. + +## 0.7.0 + +### New Features + +- Goal terminology has been removed from the mission generation nomenclature (see + [Definitions](./web_user_interface/ui_autonomous_mode.mdx#definitions)) + Users can now add tasks, apply final headings, and set navigation tolerances + to any Waypoint in a Mission. +- Drag and Drop of Waypoints now available in Edit Mode. +- New Waypoints can be inserted between existing Waypoints in a Mission. +- Mission API now available to create/edit/load missions, waypoints and tasks. +- Mission execution via mission ID is now available. +- The base station location is now displayed in the UI after carrying out an automated survey. +- New coloring scheme for GNSS status icons to provide more accurate information. + +### Bug Fixes + +- 996: Axis camera missing ptz_state + +### Known Issues + +- 131: Software upgrade process not documented fully. +- 609: Realsense D435 collision avoidance not fully tuned. +- 751: Wireless icon in UI doesn't work for Ubiquity hardware. +- 1134: Display/Hide Datum point not working. +- 1137: Refreshing page re-enables edit button while mission running. +- 1138: Issues with greying out Waypoints in edge cases. + +## 0.6.0 + +### New Features + +- OutdoorNav ROS API updated. API now divided into Platform and + Autonomy sections. See [API Overview](./api/api_overview.mdx) + for more details. +- Simulation environment created with charge dock, base station and + camera plugins. +- Added deviation path visualization to UI when constrained replanning + is enabled. +- Modified goalpoint icons to reflect tasks assigned to them. +- Added the ability to record rosbags from UI. +- Added GPS signal strength to status page. +- Added improvements to PTZ controls (cosmetic changes, ability to + disable zoom, added a reset mark). +- User can set map source from OpenStreet, MapBox, Bing Maps, or + custom map tiles through UI. + +### Bug Fixes + +- 632: Prevent users from changing mission while a mission is running. +- 661: Removed map view when no map is provided in default-state.json. + file. +- 712: Fixed front end hanging when user opens menu from any view + other than main view. +- 716: Removed connecting lines from disabled goals. + +### Known Issues + +- 131: Software upgrade process not documented fully. +- 609: Realsense D435 collision avoidance not fully tuned. +- 751: Wireless icon in UI doesn't work for Ubiquity hardware. +- 756: Waypoints stop turning grey when they are hit if a waypoint is + skipped. + +## 0.5.0 + +### New Features + +- Sensor Kit Options: Starter, Standard, Backpack. +- New localization module. +- Added support for UBlox F9K and F9P GNSS receivers in the + localization module. +- Added support for either single or dual Swiftnav Duro/Piksi GNSS + receiver(s) in the localization module. +- Added support for Realsense D435 camera in collision avoidance + module. +- New/updated user modifiable environment variables for sensor and + navigation tuning. +- Added a Virtual Guided tour of the application for first time users. +- Added StreetView and Bing map tiles (to existing MapBox tile). +- Allow users to specify custom map tile source. +- Added cosmetic changes to traversed waypoints as well as a robot. + status icon with ROS topic health information. + +### Bug Fixes + +- 253: Replace default camera image for camera views when stream is + unavailable. +- 281: Fixed navigation latched in a PAUSE state. +- 574: Fixed map settings page to not rerender when robots position + changes. + +### Known Issues + +- 131: Software upgrade process not documented fully. +- 609: Realsense D435 collision avoidance not fully tuned. + +## 0.4.0 + +### New Features + +- Improved wireless charger docking workflow and added ROS Noetic + docking support. +- Added option to record videos from cameras. +- Improved Docker setup to allow concurrent installation with + IndoorNav. +- Added initial support for integration with + [Formant](https://formant.io/). +- Added Docker installation support for Jackal and Warthog robots. + +### Bug Fixes + +- 480: Added rate limiter for continuous planner. +- 490: Fixed base station survey pop up to better reflect survey time. + +### Known Issues + +- 131: Software upgrade process not documented fully. + +## 0.3.0 + +### New Features + +- Upgraded from ROS Melodic to ROS Noetic. +- Published initial performance metrics. +- Updated system architecture to work in Docker containers. + +### Bug Fixes + +- 266: Allowed map offsets to be set more than once without needing to + reset them back to zero. +- 365: Updated costmap to handle large stop distances properly. +- 377: Fixed handling of goal tolerances of 0.02m or less. +- 389: Fixed issue with goal being skipped in some cases where final + heading was specified. + +### Known Issues + +- 131: Software upgrade process not documented fully. +- 150: Docking not yet implemented in Noetic. +
\ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.11.0/safety.mdx b/outdoornav_user_manual_versioned_docs/version-0.11.0/safety.mdx index ea70a51b..ba0e8ddf 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.11.0/safety.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.11.0/safety.mdx @@ -1,144 +1,144 @@ ---- -title: Safety -sidebar_label: Safety -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -## Important Safety Information - -The use of Unmanned Ground Vehicles (UGVs) can result in unexpected and -dangerous behavior. Although Clearpath Robotics endeavors to create safe -and reliable software and systems, autonomous outdoor UGVs should not be -considered safe for unsupervised use around humans or other obstacles. -No level of safety and reliability of software and non-safety rated -hardware components is guaranteed. - -Clearpath strongly recommends that users carry out a risk assessment -related to their application and deployment of autonomous UGVs. The -ISO-12100 standard [Risk assessment and risk reduction](https://www.iso.org/standard/51528.html) provides guidance on -performing risk assessments. - -Functional safety in robotics is often achieved through the use of -safety related parts and control systems to minimize risks such as -safety LiDARs for obstacle detection. These hardware components must be -designed into the UGV hardware and can be tightly integrated with -navigation software. Clearpath Robotics recommends that this process be -undertaken after the product or process has been fully defined. It can -be a significant design effort. - -## Safety Notice Levels - -For Clearpath Robotics hardware and software, the risk level is captured -using the following types of labels. - -![](/img/outdoornav_images/safety_information.png) - -## General Hazard Labels - -Review the following to learn more about the labels that may be used on -Clearpath Robotics products. Hazards can also apply to attachments and -accessories used in conjunction with a Clearpath Robotics product. UGVs -from other providers may present additional hazards and risks. - -_General Hazards_ - -| Label | Label Title | Label Description | -|--------------------------------------------------------------------------------------|----------------------|------------------------------------------| -|
| Automatic Motion Hazard | Clearpath Robotics UGVs may begin moving suddenly, either autonomously or when being driven manually. Always be aware of Clearpath Robotics products and their potential for movement. | -|
| Crushing Risk | Objects or personnel can be crushed between the Clearpath Robotics UGV and another object. Keep hands and other objects clear of crush points at all times. Keep clear of all docking Clearpath Robotics UGVs. | -|
| Electrical Shock Risk | Clearpath Robotics UGVs contain circuitry and batteries that may cause electrical shock if not properly insulated. | -|
| Entanglement Risk | Clearpath Robotics UGVs as well as their cameras can lead to entanglement of hair or dangling materials during their rotation. Keep hair and dangling materials away from Clearpath Robotics UGVs during motion. | -|
| Environmental Hazard | Clearpath Robotics UGVs contain batteries and materials that may require special disposal methods. Consult local regulations. | -|
| Falling Object Risk | Beware of objects that may have shifted in any Clearpath Robotics UGV crate as they pose a risk of falling when opened. | -|
| High Surface Temperature Risk | UGV computer heat sinks and UGV motors can become extremely hot during operation. | -|
| Impact Risk | Clearpath Robotics UGVs travelling through a facility can potentially impact objects and personnel. Keep clear of all docking Clearpath Robotics UGVs. | -|
| Laser Radiation Risk | Clearpath Robotics UGVs may use Class 1 laser products. These provide no hazard during normal use, however it is not recommended to stare directly into the beam(s). | -|
| Material Hazard - Lithium | Lithium UGV batteries contain harmful material. Always use proper handling procedures when handling UGV batteries. | -|
| Manual Load Lifting Risk | Always use ergonomic techniques when manually lifting loads. | -|
| Pinching Risk | Keep hands and other objects clear of pinch points at all times. Keep clear of all docking Clearpath Robotics UGVs. | -|
| Radio Frequency Risk | Clearpath Robotics UGVs and/or accessories may use radio frequency (RF) radiating antennas. These provide no hazard during normal use, however prolonged exposure around the antenna is not recommended. | -|
| Tripping Hazard | Clearpath Robotics products may pose a tripping hazard. | - -## Safety Awareness - -Personnel present during the operation of an Unmanned Ground Vehicle -(UGV) need to be made aware or be accompanied by personnel who are -familiar with the specific risks and hazards associated with autonomous -mobile robots (AMR). The following checklist identifies basic topics -that should be addressed by site-specific worker and visitor safety -orientation training. - -
- -
- -- Proper PPE must be worn, including safety footwear (ie. steel toe). -- Crossing into the path of a moving UGV should be avoided, as well as - placing or throwing obstacles into the path of a moving UGV. - -
- -
- -- Be aware that a UGV can be anywhere in the operating area of the - facility at any time, and may pose a tripping hazard even when not - in motion. -- Personnel need to be aware of the UGV docking and charging areas, - where detection fields are reduced. -- Personnel should be aware that Clearpath Robotics UGVs LiDAR safety - scanners use a class 1 laser and high intensity LED. -- Personnel should keep all loose clothing and body parts away from - UGVs, accessories, attachments, and payloads, while they are in - autonomous operation. Using an Emergency Stop button is the only - acceptable manner of interacting with a Clearpath Robotics UGV or - attachment while it is being operated autonomously. - -In addition to the preceding basic items for all workers and visitors, -the following should be considered for facility personnel, including -drivers of other UGVs: - -- When required to move a product manually, personnel must ensure it - is in an Emergency Stop state or shut down completely and should not - push manually for prolonged periods. -- Alert personnel that while operating a Clearpath Robotics UGV - outside of the Autonomy State, they are solely responsible for - obstacle and collision avoidance. -- Maintenance of a Clearpath UGV not outlined in either this document - or the operations and maintenance manual can only be performed by a - Clearpath Robotics Authorized Personnel. - -To reduce the risk of harming people or damaging properties, a trained -operator must monitor the behavior of the UGV under autonomous -navigation mode at all times. The operator should use the wireless -emergency stop device to immediately avert any possible damaging or -dangerous behavior from the UGV. Failure in proper use of the software -might result in collision of the UGV into objects. - -- The minimum height for detecting obstacles under ideal operation - conditions (flat ground, no snow/rain/fog, normal operation of the - LiDAR, etc) when using the standard Clearpath Robotics OutdoorNav - Hardware package on a Husky is typically 0.2 meters high at 2.3 - meters distance away from the UGV. Your UGV may differ. Ensure that - low-height obstacles are removed from the potential path of the UGV - prior to operation. -- OutdoorNav Software does not have negative obstacle detection - capability. This means that your UGV will not detect stairs, cliffs - or edges and may drive off these obstacles causing harm to people or - properties as well as potentially damage the UGV. -- Adverse weather conditions may obscure obstacle detection and - avoidance data from the VLP-16 LiDAR. Obstacle detection and - avoidance may not function properly in snow, rain or fog. -- The current configurations of the OutdoorNav Software will continue - navigation if the WiFi disconnects or goes out of range. The Web UI - will reconnect once the WiFi has reconnected but certain functions - of the Web UI may be limited such as the ability to issue a stop - command or send new missions to the UGV. -- If connection of the UGV to the base station is lost (e.g., WiFi - goes out of range, low battery level, etc), UGV will not receive RTK - corrections from the base station. This can potentially decrease the - accuracy of the GPS signal which can subsequently degrade path - following performance of your system. -- Obstacle detection and avoidance is disabled during the docking and - undocking operations. Keep this area clear of people and objects. +--- +title: Safety +sidebar_label: Safety +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +## Important Safety Information + +The use of Unmanned Ground Vehicles (UGVs) can result in unexpected and +dangerous behavior. Although Clearpath Robotics endeavors to create safe +and reliable software and systems, autonomous outdoor UGVs should not be +considered safe for unsupervised use around humans or other obstacles. +No level of safety and reliability of software and non-safety rated +hardware components is guaranteed. + +Clearpath strongly recommends that users carry out a risk assessment +related to their application and deployment of autonomous UGVs. The +ISO-12100 standard [Risk assessment and risk reduction](https://www.iso.org/standard/51528.html) provides guidance on +performing risk assessments. + +Functional safety in robotics is often achieved through the use of +safety related parts and control systems to minimize risks such as +safety LiDARs for obstacle detection. These hardware components must be +designed into the UGV hardware and can be tightly integrated with +navigation software. Clearpath Robotics recommends that this process be +undertaken after the product or process has been fully defined. It can +be a significant design effort. + +## Safety Notice Levels + +For Clearpath Robotics hardware and software, the risk level is captured +using the following types of labels. + +![](/img/outdoornav_images/safety_information.png) + +## General Hazard Labels + +Review the following to learn more about the labels that may be used on +Clearpath Robotics products. Hazards can also apply to attachments and +accessories used in conjunction with a Clearpath Robotics product. UGVs +from other providers may present additional hazards and risks. + +_General Hazards_ + +| Label | Label Title | Label Description | +|--------------------------------------------------------------------------------------|----------------------|------------------------------------------| +|
| Automatic Motion Hazard | Clearpath Robotics UGVs may begin moving suddenly, either autonomously or when being driven manually. Always be aware of Clearpath Robotics products and their potential for movement. | +|
| Crushing Risk | Objects or personnel can be crushed between the Clearpath Robotics UGV and another object. Keep hands and other objects clear of crush points at all times. Keep clear of all docking Clearpath Robotics UGVs. | +|
| Electrical Shock Risk | Clearpath Robotics UGVs contain circuitry and batteries that may cause electrical shock if not properly insulated. | +|
| Entanglement Risk | Clearpath Robotics UGVs as well as their cameras can lead to entanglement of hair or dangling materials during their rotation. Keep hair and dangling materials away from Clearpath Robotics UGVs during motion. | +|
| Environmental Hazard | Clearpath Robotics UGVs contain batteries and materials that may require special disposal methods. Consult local regulations. | +|
| Falling Object Risk | Beware of objects that may have shifted in any Clearpath Robotics UGV crate as they pose a risk of falling when opened. | +|
| High Surface Temperature Risk | UGV computer heat sinks and UGV motors can become extremely hot during operation. | +|
| Impact Risk | Clearpath Robotics UGVs travelling through a facility can potentially impact objects and personnel. Keep clear of all docking Clearpath Robotics UGVs. | +|
| Laser Radiation Risk | Clearpath Robotics UGVs may use Class 1 laser products. These provide no hazard during normal use, however it is not recommended to stare directly into the beam(s). | +|
| Material Hazard - Lithium | Lithium UGV batteries contain harmful material. Always use proper handling procedures when handling UGV batteries. | +|
| Manual Load Lifting Risk | Always use ergonomic techniques when manually lifting loads. | +|
| Pinching Risk | Keep hands and other objects clear of pinch points at all times. Keep clear of all docking Clearpath Robotics UGVs. | +|
| Radio Frequency Risk | Clearpath Robotics UGVs and/or accessories may use radio frequency (RF) radiating antennas. These provide no hazard during normal use, however prolonged exposure around the antenna is not recommended. | +|
| Tripping Hazard | Clearpath Robotics products may pose a tripping hazard. | + +## Safety Awareness + +Personnel present during the operation of an Unmanned Ground Vehicle +(UGV) need to be made aware or be accompanied by personnel who are +familiar with the specific risks and hazards associated with autonomous +mobile robots (AMR). The following checklist identifies basic topics +that should be addressed by site-specific worker and visitor safety +orientation training. + +
+ +
+ +- Proper PPE must be worn, including safety footwear (ie. steel toe). +- Crossing into the path of a moving UGV should be avoided, as well as + placing or throwing obstacles into the path of a moving UGV. + +
+ +
+ +- Be aware that a UGV can be anywhere in the operating area of the + facility at any time, and may pose a tripping hazard even when not + in motion. +- Personnel need to be aware of the UGV docking and charging areas, + where detection fields are reduced. +- Personnel should be aware that Clearpath Robotics UGVs LiDAR safety + scanners use a class 1 laser and high intensity LED. +- Personnel should keep all loose clothing and body parts away from + UGVs, accessories, attachments, and payloads, while they are in + autonomous operation. Using an Emergency Stop button is the only + acceptable manner of interacting with a Clearpath Robotics UGV or + attachment while it is being operated autonomously. + +In addition to the preceding basic items for all workers and visitors, +the following should be considered for facility personnel, including +drivers of other UGVs: + +- When required to move a product manually, personnel must ensure it + is in an Emergency Stop state or shut down completely and should not + push manually for prolonged periods. +- Alert personnel that while operating a Clearpath Robotics UGV + outside of the Autonomy State, they are solely responsible for + obstacle and collision avoidance. +- Maintenance of a Clearpath UGV not outlined in either this document + or the operations and maintenance manual can only be performed by a + Clearpath Robotics Authorized Personnel. + +To reduce the risk of harming people or damaging properties, a trained +operator must monitor the behavior of the UGV under autonomous +navigation mode at all times. The operator should use the wireless +emergency stop device to immediately avert any possible damaging or +dangerous behavior from the UGV. Failure in proper use of the software +might result in collision of the UGV into objects. + +- The minimum height for detecting obstacles under ideal operation + conditions (flat ground, no snow/rain/fog, normal operation of the + LiDAR, etc) when using the standard Clearpath Robotics OutdoorNav + Hardware package on a Husky is typically 0.2 meters high at 2.3 + meters distance away from the UGV. Your UGV may differ. Ensure that + low-height obstacles are removed from the potential path of the UGV + prior to operation. +- OutdoorNav Software does not have negative obstacle detection + capability. This means that your UGV will not detect stairs, cliffs + or edges and may drive off these obstacles causing harm to people or + properties as well as potentially damage the UGV. +- Adverse weather conditions may obscure obstacle detection and + avoidance data from the VLP-16 LiDAR. Obstacle detection and + avoidance may not function properly in snow, rain or fog. +- The current configurations of the OutdoorNav Software will continue + navigation if the WiFi disconnects or goes out of range. The Web UI + will reconnect once the WiFi has reconnected but certain functions + of the Web UI may be limited such as the ability to issue a stop + command or send new missions to the UGV. +- If connection of the UGV to the base station is lost (e.g., WiFi + goes out of range, low battery level, etc), UGV will not receive RTK + corrections from the base station. This can potentially decrease the + accuracy of the GPS signal which can subsequently degrade path + following performance of your system. +- Obstacle detection and avoidance is disabled during the docking and + undocking operations. Keep this area clear of people and objects. diff --git a/outdoornav_user_manual_versioned_docs/version-0.11.0/simulation.mdx b/outdoornav_user_manual_versioned_docs/version-0.11.0/simulation.mdx index 44cff5f7..86043ef7 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.11.0/simulation.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.11.0/simulation.mdx @@ -1,20 +1,20 @@ ---- -title: Simulation -sidebar_label: Simulation -sidebar_position: 9 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -Simulation with OutdoorNav Software can be useful in several ways. - -- It provides an easy (and low cost!) way of evaluating the main - features in OutdoorNav Software prior to purchasing. -- It allows missions to be planned, executed, and refined in a - repeatable way prior to deployment on UGV hardware. This can be - particularly helpful when integrating OutdoorNav into a larger - software solution, such as a fleet manager. - -At present, OutdoorNav Software simulation is restricted to internal -Clearpath Robotics development and select partners, but is planned for +--- +title: Simulation +sidebar_label: Simulation +sidebar_position: 9 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +Simulation with OutdoorNav Software can be useful in several ways. + +- It provides an easy (and low cost!) way of evaluating the main + features in OutdoorNav Software prior to purchasing. +- It allows missions to be planned, executed, and refined in a + repeatable way prior to deployment on UGV hardware. This can be + particularly helpful when integrating OutdoorNav into a larger + software solution, such as a fleet manager. + +At present, OutdoorNav Software simulation is restricted to internal +Clearpath Robotics development and select partners, but is planned for full deployment. Check back soon for further details. \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.11.0/support.mdx b/outdoornav_user_manual_versioned_docs/version-0.11.0/support.mdx index 9212d99f..4da40f82 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.11.0/support.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.11.0/support.mdx @@ -1,11 +1,11 @@ ---- -title: Support -sidebar_label: Support -sidebar_position: 11 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -import OutdoorNavSupport from "/components/support_outdoornav.mdx"; - +--- +title: Support +sidebar_label: Support +sidebar_position: 11 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +import OutdoorNavSupport from "/components/support_outdoornav.mdx"; + \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.11.0/web_user_interface/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.11.0/web_user_interface/_category_.json index a07ca158..31b78035 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.11.0/web_user_interface/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.11.0/web_user_interface/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Web User Interface", - "position": 6 -} +{ + "label": "Web User Interface", + "position": 6 +} diff --git a/outdoornav_user_manual_versioned_docs/version-0.11.0/web_user_interface/ui_autonomous_mode.mdx b/outdoornav_user_manual_versioned_docs/version-0.11.0/web_user_interface/ui_autonomous_mode.mdx index 61acab87..3248ccad 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.11.0/web_user_interface/ui_autonomous_mode.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.11.0/web_user_interface/ui_autonomous_mode.mdx @@ -1,434 +1,434 @@ ---- -title: Web UI Autonomous Mode -sidebar_label: Web UI Autonomous Mode -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -![](/img/outdoornav_images/gps_danger.png) - -Ensure that the [Safety](../safety.mdx) document has been -read and the user is aware of possible hazards when using this product as well as the safety -methods that can be used to stop the moving UGV. - -The Autonomous Mode of OutdoorNav Software is a set of robotic -navigation modules that enables robotics developers to define and then -autonomously execute missions on UGVs, getting work done without -requiring direct operator action. This software is composed of four main -modules: localization, navigation, safety monitoring and user control -unit. This a combination of Clearpath's proprietary packages and custom -configured open-source packages from ROS community. Please see the -software architecture section for more information. - -## Definitions {#definitions} - -The list below defines what a "Mission" is as well as its components. -These components are referred to throughout this manual. - -- **Mission** A Mission is a set of one or more Waypoints. -- **Path** The list of Waypoints that will determine the path - for the specific Mission. -- **Waypoint** A Waypoint is any geographical point referenced by its - position relative to the datum in meters. -- **Task** A Task is an automated activity or wait time implemented as - a ROS action at a specific Waypoint. Tasks are called in the order they are - added to a Waypoint. -- **Ghost Waypoint** A transparent waypoint that is not part of the mission. This - Waypoint appears between two other waypoints when in edit mode. The user can - drag and drop this ghost waypoint to add a new waypoint to the mission between - the other two waypoints. - -## Map Settings - -
-
- -
Map settings
-
-
- -To access the Map Settings: Menu → Settings → Map: - -1. **Map Offset:** The map tiles used in this software are not - perfectly aligned with the real world. Therefore, the user may need - to apply an offset to the map so that the UGV's position in the - real world matches its position on the map. -2. **Change Datum:** The datum is represented by a blue marker on the - map and should be set to a location within 10km of the test site. - The user can change this value in the Map Settings page. Enter the - new values and click the "Set Datum" button. - -## Mission Creation - -To create a new Mission first ensure that the UI is in "Edit Mode" ( -select the pencil icon in the bottom bar). Then open the drop down menu in the bottom -bar and select the "Add Mission" option. This will allow the user to create a new Mission -which can then be defined with Waypoints. - -### Waypoint Mode - -To add new Waypoints to a Mission while edit mode is enabled select the -"Waypoint Mode" button. This will allow the user to place Waypoints at -locations where the user clicks on the map. These will appear as red -Waypoints with the exception of the first waypoint (green) and the last waypoint (yellow). - -:::note - -**The first Waypoint in the Mission must be within 3.0 meters of the UGV's current position.** - -::: - -As Waypoints are placed, a "ghost waypoint" will appear between each pair of real -Waypoints and can be dragged to a new spot to insert a real Waypoint -between them. Waypoints can also be dragged and dropped on the map to -modify their positions. - -### Waypoint Panel - -
-
- -
Waypoint Panel
-
-
- -Enable the "Waypoint Panel" toggle to open the list of available Waypoints -within the selected Mission as shown in the figure above. The user can -now rearrange the list, rename Waypoints, add Tasks to the Waypoints, -and modify the final heading and/or tolerance of each Waypoint. The user can -also rename the mission and apply Tasks to when the Mission starts and stops. - -### Rename Mission - -To rename the Mission click the Mission name as it appears in the upper left -hand corner. This should change the text into an input box that can then be -modified. Press enter/click aside to save the change. - -### Mission Tasks - -A Mission can have Tasks assigned to when it starts and when it stops. These -Tasks will run in the order they are listed in and will always run whenever the Mission -starts or stops. - -### Rearrange List of Waypoints - -Waypoints can be rearranged in order of operation in the list. To do this, -enable the "Waypoints Panel" toggle to access the list of Waypoints. Here, the -user will be able to drag and drop the Waypoints to reorder them. - -### Rename Waypoint - -By default, once Waypoints are created they are assigned a default name -which is the word "Waypoint" followed by a numeric value representing the -the number of Waypoints that have been created plus one. The user has the -option to rename these Waypoints in order for them to have more descriptive -meaning. - -To rename a Waypoint follow these steps: - -1. Enable the "Waypoint Panel" toggle. See [Waypoint Panel](#waypoint-panel) - for further details. -2. Click the name of the Waypoint which the user wants to rename. -3. Erase the current name and type the new name. - -### Add Task to Waypoint {#add-task} - -
-
- -
Add Task to Waypoint
-
-
- -To add a Task to the end of a Mission: - -1. Click the "+" icon (beside the Gear icon) in the Waypoint Row the Task is - to be added to. - -2. Click the "Add Task" Button that has appeared. - -3. Select the Task from the dropdown list. Standard waypoint icons will be - replaced accordingly depending on the task selected (waypoint icons will keep the colours - assigned to them based on placement). Waypoints in the table will also have a small icon to indicate - if tasks are assigned to the Waypoint accordingly. - - - Dock UGV: - Will dock the UGV to begin charging the UGV's - battery. See [Autonomous Docking](#autonomous-docking) - for more information on the autonomous docking feature. - - - Move PTZ: - Will move the PTZ camera to the position selected - in the task settings. - - Settings: Select the camera position. See - [Pan-Tilt-Zoom (PTZ) View](ui_overview.mdx#ptz-view) for details on how to - save camera positions. - - - Save Image: - Will save an image using one of the UGV camera(s) - to the **/opt/onav/saved_files/media/...** directory and can be retrieved using a tool - such as Filezilla. - - Settings: Select which camera the image will be saved from. - - - Start/Stop Video Recording: - Will start/stop recording video using one of the - UGV camera(s) to the **/opt/onav/saved_files/media/...** folder and can be retrieved - using a tool such as Filezilla. - - Settings: Select which camera the recording will come from. - - - Undock UGV: - Will undock the UGV from the autocharge dock. Once - completed, the UGV can be sent on autonomous missions. It is - often recommended to place the undock task first in the list of Waypoints or as a start Mission Task; - that way, the UGV will automatically continue towards its next - Waypoint once undocked. - - :::note - - If the users places the Undock Task in the start Mission event the first Waypoint should be - approximately 2-3 meters behind the UGVs docked position. - - ::: - - - Wait: - Will pause and wait for the specified number of - seconds at the end of the Waypoint. - - Settings: Enter the amount of time to wait, in seconds. - - - New Custom Task: - Creates a new custom task that is defined by the user. -
-
- -
Custom Task Settings Dialog
-
-
- - - Task Name: Task name that will show up in the list of available tasks on the UI. - - Action Server Name: The namespace of the custom task action server. - - Float CSV: A list of comma seperated float values that consist of the numerical inputs to the custom task. - - String CSV: A list of comma seperated string values that consist of the semantic inputs to the custom task. - - See the [Custom Tasks](../features/custom_tasks.mdx) section - for details on how to develop custom tasks for your application. -4. The check box next to the Task name controls mission behaviour in the event that the Task fails. If the checkbox is - checked the Mission will proceed to the next step in it's process, such as the next task or navigating to the next Waypoint. - If its not checked, the Mission will become cancelled upon the Task's failure. -5. Click the Gear icon next to the selected Task to add the required - Settings. - - :::note - - If a waypoint has more than one task assigned to it, the icon will - be replaced with - - ::: - -### Advanced Settings - - - -#### Waypoint Heading - -When creating a Waypoint, the user has the option of setting a final heading -for the Waypoint. For example, when creating a Waypoint at an inspection point, -the user may want the UGV to navigate and stop facing a certain -direction. In [Waypoint Panel](#waypoint-panel), the list of -Waypoints can be seen and the advanced settings of each Waypoint can be accessed -by clicking the "Gear" icon. - -To set the Waypoint's final heading, the user will need to check the -"Final Heading Enabled" checkbox and enter the heading value in -degrees. The heading indicator on the top bar can be used to help set -this value. See the figure below showing the advanced settings. - -:::note - -Waypoints that have a heading or tolerance assigned to them will show a different colour -on their settings icon. - -::: - -
-
- -
Waypoint Advanced Settings
-
-
- -The heading that has been entered will only be applied to the Waypoint -(ie. the robot will only align itself with the correct heading at the -Waypoint). If the robot is required to be at specific headings at -other Waypoints the user will need to enter these in for each specific Waypoint. - -#### Waypoint Tolerance - -When creating a Mission, the user has the option of setting a specific -tolerance for each Waypoint. By default, the Waypoint position and orientation -tolerances are 0.3 meters and 180°, respectively. If a specific Waypoint -requires that the tolerances be either increased or decreased, these -values can be modified in the advanced settings. For example, if it's -required that the position and/or orientation at a Waypoint be very accurate, -such as 0.1 meters position and 5° orientation, or looser at 1.0 meter -position, this can be done within these settings. - -In [Waypoint Panel](#waypoint-panel), the list of waypoints can be -seen and the advanced settings of each Waypoint can be accessed by clicking -the "Gear" icon. To set the Waypoint's tolerance, the user will need to -check the "Waypoint Tolerance Enabled" checkbox and enter the position and -orientation values, in meters and degrees, respectively. - -### Constrained Replanning {#constrained_path} - -To enable the visualization of the contrained area of traversal (defined by -the path contraint around the reference path), navigate to the General settings -in the hamburger menu. Enable/disable the visualization of the path ui_route_deviation -distance using the switch button (see image below). - -
-
- -
General settings
-
-
- -Once enabled the area of possible deviation will show -over the planned route as can be seen in the following figure. - -
-
- -
Route with maximum path deviation
-
-
- -:::note - -If the UGV is manually driven outside of the constrained replanning area -while a Mission is running, the Mission will not be able to be resumed until the -UGV is returned within the navigable area defined by the path contraint. - -::: - -## Mission Execution - -### Start Mission - -There are multiple ways to start a Mission. At the bottom of the UI, the user has the ability to start the currently -selected Mission by clicking the "Play" button . -Starting the Mission this will start the Mission from the first Waypoint. The user may also select the drop down next to the button -to start the Mission from the current UGV position. This is a useful way to start a Mission in the event that the UGV was blocked by -obstacles that were later moved. Another way that a user can start a Mission is by selecting a waypoint in edit mode and then clicking on -"Start Mission from Here" option. If the UGV is within 3 metres of that Waypoint the Mission will start from there. - -
-
- -
Starting from a specific Waypoint
-
-
- -When the Mission has been started the Play button will turn green, regardless of how it has been started. - -### Pause Mission - -At the bottom of the UI, the user has the ability to pause the currently -running mission by clicking the "Pause" button . When the -mission has been paused this button will turn yellow. Pausing a mission -allows the user to take time to look around with the camera or to -teleoperate the UGV to a nearby location to perform an inspection. For -ease of operation, the user must PAUSE the active mission if the user -wants to teleoperate the UGV. - -### Cancel Mission/Task - -At the bottom of the UI, the user has the ability to stop the currently -running mission or task by clicking the "Stop" button . When the -mission/task has been cancelled this button will turn red. The name of -the mission/task will be shown to be cancelled in the feedback bar. - -## Autonomous Docking - -
-
- -
Dock Icon
-
-
- -### Docking The UGV - -To dock the UGV autonomously, the user should follow these steps: - -- Enable the "Edit Mission" toggle. -- Create a Mission whose Waypoints approach the dock from the front and - whose final Waypoint is within the maximum predock distance which is shown as a circle around the dock. -- Enable the Waypoints Panel toggle to view the list of Waypoints, rename the last - Waypoint to "Dock Waypoint" or something descriptive and add the "Dock - UGV" Task to this Waypoint. If there is more than one dock in the system the user will - have to open the task options and select the dock name from the list. -- Run the Mission. - -### Undocking The UGV - -To undock the UGV autonomously, the user should follow these steps: - -- Enable the "Edit Mission" toggle. Select the "Waypoint Mode" - button. -- Select the Waypoint icon on the bottom bar to create a Waypoint at the - current location of the UGV. This step should either be it's own mission - or it should be the starting point of a mission. -- Enable the Waypoints Panel toggle to view the list of Waypoints, rename this - Waypoint to "Undock Waypoint" or something descriptive and add the - "Undock UGV" task to the Waypoint that was just created. -- Run the Mission. - -### Compatibility with a Doghouse - -In order for the autonomous docking feature to be compatible with a doghouse, the -doghouse must conform to a few specifications: - -- Must be installed on a flat surface, and have no elevation change between the - charge-deck and the outdoor surface (ie. no ramp into the doghouse). -- Must be greater than 1.2 m wide. -- Must be between 1.5 and 2.5 m long. -- Dock target should be installed centered along the back of the doghouse. - -### Recover from Failed Docking or Undocking - -If for any reason, the docking or undocking tasks fail, the user can: - -- Manually drive the UGV towards the dock target, aligning the - charging unit with the receiver on the UGV. -- Manually drive the UGV in reverse away from the dock target. It is - suggested that the user reverse roughly 2-3 meters away from the target, - then wait 1-2 minutes before starting any autonomous navigation - missions. - -## Switching to IndoorNav - -If it is included in the UGV, IndoorNav can be executed through the OutdoorNav software. -To switch between the modes in OutdoorNav select the 'Navigation Mode' option found -in the hamburger menu. This will navigate to a page that shows the current mode and -provides an option to switch. When in IndoorNav mode the user may navigate to -the IndoorNav Web GUI directly or work within the OutdoorNav view as can be seen -below. - -
-
- -
-
- -:::note - -When in IndoorNav mode the OutdoorNav Autonomy software is switched off. The UI will -disable OutdoorNav UI features related to Autonomy but will still allow users the -option to view camera streams. - +--- +title: Web UI Autonomous Mode +sidebar_label: Web UI Autonomous Mode +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +![](/img/outdoornav_images/gps_danger.png) + +Ensure that the [Safety](../safety.mdx) document has been +read and the user is aware of possible hazards when using this product as well as the safety +methods that can be used to stop the moving UGV. + +The Autonomous Mode of OutdoorNav Software is a set of robotic +navigation modules that enables robotics developers to define and then +autonomously execute missions on UGVs, getting work done without +requiring direct operator action. This software is composed of four main +modules: localization, navigation, safety monitoring and user control +unit. This a combination of Clearpath's proprietary packages and custom +configured open-source packages from ROS community. Please see the +software architecture section for more information. + +## Definitions {#definitions} + +The list below defines what a "Mission" is as well as its components. +These components are referred to throughout this manual. + +- **Mission** A Mission is a set of one or more Waypoints. +- **Path** The list of Waypoints that will determine the path + for the specific Mission. +- **Waypoint** A Waypoint is any geographical point referenced by its + position relative to the datum in meters. +- **Task** A Task is an automated activity or wait time implemented as + a ROS action at a specific Waypoint. Tasks are called in the order they are + added to a Waypoint. +- **Ghost Waypoint** A transparent waypoint that is not part of the mission. This + Waypoint appears between two other waypoints when in edit mode. The user can + drag and drop this ghost waypoint to add a new waypoint to the mission between + the other two waypoints. + +## Map Settings + +
+
+ +
Map settings
+
+
+ +To access the Map Settings: Menu → Settings → Map: + +1. **Map Offset:** The map tiles used in this software are not + perfectly aligned with the real world. Therefore, the user may need + to apply an offset to the map so that the UGV's position in the + real world matches its position on the map. +2. **Change Datum:** The datum is represented by a blue marker on the + map and should be set to a location within 10km of the test site. + The user can change this value in the Map Settings page. Enter the + new values and click the "Set Datum" button. + +## Mission Creation + +To create a new Mission first ensure that the UI is in "Edit Mode" ( +select the pencil icon in the bottom bar). Then open the drop down menu in the bottom +bar and select the "Add Mission" option. This will allow the user to create a new Mission +which can then be defined with Waypoints. + +### Waypoint Mode + +To add new Waypoints to a Mission while edit mode is enabled select the +"Waypoint Mode" button. This will allow the user to place Waypoints at +locations where the user clicks on the map. These will appear as red +Waypoints with the exception of the first waypoint (green) and the last waypoint (yellow). + +:::note + +**The first Waypoint in the Mission must be within 3.0 meters of the UGV's current position.** + +::: + +As Waypoints are placed, a "ghost waypoint" will appear between each pair of real +Waypoints and can be dragged to a new spot to insert a real Waypoint +between them. Waypoints can also be dragged and dropped on the map to +modify their positions. + +### Waypoint Panel + +
+
+ +
Waypoint Panel
+
+
+ +Enable the "Waypoint Panel" toggle to open the list of available Waypoints +within the selected Mission as shown in the figure above. The user can +now rearrange the list, rename Waypoints, add Tasks to the Waypoints, +and modify the final heading and/or tolerance of each Waypoint. The user can +also rename the mission and apply Tasks to when the Mission starts and stops. + +### Rename Mission + +To rename the Mission click the Mission name as it appears in the upper left +hand corner. This should change the text into an input box that can then be +modified. Press enter/click aside to save the change. + +### Mission Tasks + +A Mission can have Tasks assigned to when it starts and when it stops. These +Tasks will run in the order they are listed in and will always run whenever the Mission +starts or stops. + +### Rearrange List of Waypoints + +Waypoints can be rearranged in order of operation in the list. To do this, +enable the "Waypoints Panel" toggle to access the list of Waypoints. Here, the +user will be able to drag and drop the Waypoints to reorder them. + +### Rename Waypoint + +By default, once Waypoints are created they are assigned a default name +which is the word "Waypoint" followed by a numeric value representing the +the number of Waypoints that have been created plus one. The user has the +option to rename these Waypoints in order for them to have more descriptive +meaning. + +To rename a Waypoint follow these steps: + +1. Enable the "Waypoint Panel" toggle. See [Waypoint Panel](#waypoint-panel) + for further details. +2. Click the name of the Waypoint which the user wants to rename. +3. Erase the current name and type the new name. + +### Add Task to Waypoint {#add-task} + +
+
+ +
Add Task to Waypoint
+
+
+ +To add a Task to the end of a Mission: + +1. Click the "+" icon (beside the Gear icon) in the Waypoint Row the Task is + to be added to. + +2. Click the "Add Task" Button that has appeared. + +3. Select the Task from the dropdown list. Standard waypoint icons will be + replaced accordingly depending on the task selected (waypoint icons will keep the colours + assigned to them based on placement). Waypoints in the table will also have a small icon to indicate + if tasks are assigned to the Waypoint accordingly. + + - Dock UGV: + Will dock the UGV to begin charging the UGV's + battery. See [Autonomous Docking](#autonomous-docking) + for more information on the autonomous docking feature. + + - Move PTZ: + Will move the PTZ camera to the position selected + in the task settings. + + Settings: Select the camera position. See + [Pan-Tilt-Zoom (PTZ) View](ui_overview.mdx#ptz-view) for details on how to + save camera positions. + + - Save Image: + Will save an image using one of the UGV camera(s) + to the **/opt/onav/saved_files/media/...** directory and can be retrieved using a tool + such as Filezilla. + + Settings: Select which camera the image will be saved from. + + - Start/Stop Video Recording: + Will start/stop recording video using one of the + UGV camera(s) to the **/opt/onav/saved_files/media/...** folder and can be retrieved + using a tool such as Filezilla. + + Settings: Select which camera the recording will come from. + + - Undock UGV: + Will undock the UGV from the autocharge dock. Once + completed, the UGV can be sent on autonomous missions. It is + often recommended to place the undock task first in the list of Waypoints or as a start Mission Task; + that way, the UGV will automatically continue towards its next + Waypoint once undocked. + + :::note + + If the users places the Undock Task in the start Mission event the first Waypoint should be + approximately 2-3 meters behind the UGVs docked position. + + ::: + + - Wait: + Will pause and wait for the specified number of + seconds at the end of the Waypoint. + + Settings: Enter the amount of time to wait, in seconds. + + - New Custom Task: + Creates a new custom task that is defined by the user. +
+
+ +
Custom Task Settings Dialog
+
+
+ + - Task Name: Task name that will show up in the list of available tasks on the UI. + - Action Server Name: The namespace of the custom task action server. + - Float CSV: A list of comma seperated float values that consist of the numerical inputs to the custom task. + - String CSV: A list of comma seperated string values that consist of the semantic inputs to the custom task. + + See the [Custom Tasks](../features/custom_tasks.mdx) section + for details on how to develop custom tasks for your application. +4. The check box next to the Task name controls mission behaviour in the event that the Task fails. If the checkbox is + checked the Mission will proceed to the next step in it's process, such as the next task or navigating to the next Waypoint. + If its not checked, the Mission will become cancelled upon the Task's failure. +5. Click the Gear icon next to the selected Task to add the required + Settings. + + :::note + + If a waypoint has more than one task assigned to it, the icon will + be replaced with + + ::: + +### Advanced Settings + + + +#### Waypoint Heading + +When creating a Waypoint, the user has the option of setting a final heading +for the Waypoint. For example, when creating a Waypoint at an inspection point, +the user may want the UGV to navigate and stop facing a certain +direction. In [Waypoint Panel](#waypoint-panel), the list of +Waypoints can be seen and the advanced settings of each Waypoint can be accessed +by clicking the "Gear" icon. + +To set the Waypoint's final heading, the user will need to check the +"Final Heading Enabled" checkbox and enter the heading value in +degrees. The heading indicator on the top bar can be used to help set +this value. See the figure below showing the advanced settings. + +:::note + +Waypoints that have a heading or tolerance assigned to them will show a different colour +on their settings icon. + +::: + +
+
+ +
Waypoint Advanced Settings
+
+
+ +The heading that has been entered will only be applied to the Waypoint +(ie. the robot will only align itself with the correct heading at the +Waypoint). If the robot is required to be at specific headings at +other Waypoints the user will need to enter these in for each specific Waypoint. + +#### Waypoint Tolerance + +When creating a Mission, the user has the option of setting a specific +tolerance for each Waypoint. By default, the Waypoint position and orientation +tolerances are 0.3 meters and 180°, respectively. If a specific Waypoint +requires that the tolerances be either increased or decreased, these +values can be modified in the advanced settings. For example, if it's +required that the position and/or orientation at a Waypoint be very accurate, +such as 0.1 meters position and 5° orientation, or looser at 1.0 meter +position, this can be done within these settings. + +In [Waypoint Panel](#waypoint-panel), the list of waypoints can be +seen and the advanced settings of each Waypoint can be accessed by clicking +the "Gear" icon. To set the Waypoint's tolerance, the user will need to +check the "Waypoint Tolerance Enabled" checkbox and enter the position and +orientation values, in meters and degrees, respectively. + +### Constrained Replanning {#constrained_path} + +To enable the visualization of the contrained area of traversal (defined by +the path contraint around the reference path), navigate to the General settings +in the hamburger menu. Enable/disable the visualization of the path ui_route_deviation +distance using the switch button (see image below). + +
+
+ +
General settings
+
+
+ +Once enabled the area of possible deviation will show +over the planned route as can be seen in the following figure. + +
+
+ +
Route with maximum path deviation
+
+
+ +:::note + +If the UGV is manually driven outside of the constrained replanning area +while a Mission is running, the Mission will not be able to be resumed until the +UGV is returned within the navigable area defined by the path contraint. + +::: + +## Mission Execution + +### Start Mission + +There are multiple ways to start a Mission. At the bottom of the UI, the user has the ability to start the currently +selected Mission by clicking the "Play" button . +Starting the Mission this will start the Mission from the first Waypoint. The user may also select the drop down next to the button +to start the Mission from the current UGV position. This is a useful way to start a Mission in the event that the UGV was blocked by +obstacles that were later moved. Another way that a user can start a Mission is by selecting a waypoint in edit mode and then clicking on +"Start Mission from Here" option. If the UGV is within 3 metres of that Waypoint the Mission will start from there. + +
+
+ +
Starting from a specific Waypoint
+
+
+ +When the Mission has been started the Play button will turn green, regardless of how it has been started. + +### Pause Mission + +At the bottom of the UI, the user has the ability to pause the currently +running mission by clicking the "Pause" button . When the +mission has been paused this button will turn yellow. Pausing a mission +allows the user to take time to look around with the camera or to +teleoperate the UGV to a nearby location to perform an inspection. For +ease of operation, the user must PAUSE the active mission if the user +wants to teleoperate the UGV. + +### Cancel Mission/Task + +At the bottom of the UI, the user has the ability to stop the currently +running mission or task by clicking the "Stop" button . When the +mission/task has been cancelled this button will turn red. The name of +the mission/task will be shown to be cancelled in the feedback bar. + +## Autonomous Docking + +
+
+ +
Dock Icon
+
+
+ +### Docking The UGV + +To dock the UGV autonomously, the user should follow these steps: + +- Enable the "Edit Mission" toggle. +- Create a Mission whose Waypoints approach the dock from the front and + whose final Waypoint is within the maximum predock distance which is shown as a circle around the dock. +- Enable the Waypoints Panel toggle to view the list of Waypoints, rename the last + Waypoint to "Dock Waypoint" or something descriptive and add the "Dock + UGV" Task to this Waypoint. If there is more than one dock in the system the user will + have to open the task options and select the dock name from the list. +- Run the Mission. + +### Undocking The UGV + +To undock the UGV autonomously, the user should follow these steps: + +- Enable the "Edit Mission" toggle. Select the "Waypoint Mode" + button. +- Select the Waypoint icon on the bottom bar to create a Waypoint at the + current location of the UGV. This step should either be it's own mission + or it should be the starting point of a mission. +- Enable the Waypoints Panel toggle to view the list of Waypoints, rename this + Waypoint to "Undock Waypoint" or something descriptive and add the + "Undock UGV" task to the Waypoint that was just created. +- Run the Mission. + +### Compatibility with a Doghouse + +In order for the autonomous docking feature to be compatible with a doghouse, the +doghouse must conform to a few specifications: + +- Must be installed on a flat surface, and have no elevation change between the + charge-deck and the outdoor surface (ie. no ramp into the doghouse). +- Must be greater than 1.2 m wide. +- Must be between 1.5 and 2.5 m long. +- Dock target should be installed centered along the back of the doghouse. + +### Recover from Failed Docking or Undocking + +If for any reason, the docking or undocking tasks fail, the user can: + +- Manually drive the UGV towards the dock target, aligning the + charging unit with the receiver on the UGV. +- Manually drive the UGV in reverse away from the dock target. It is + suggested that the user reverse roughly 2-3 meters away from the target, + then wait 1-2 minutes before starting any autonomous navigation + missions. + +## Switching to IndoorNav + +If it is included in the UGV, IndoorNav can be executed through the OutdoorNav software. +To switch between the modes in OutdoorNav select the 'Navigation Mode' option found +in the hamburger menu. This will navigate to a page that shows the current mode and +provides an option to switch. When in IndoorNav mode the user may navigate to +the IndoorNav Web GUI directly or work within the OutdoorNav view as can be seen +below. + +
+
+ +
+
+ +:::note + +When in IndoorNav mode the OutdoorNav Autonomy software is switched off. The UI will +disable OutdoorNav UI features related to Autonomy but will still allow users the +option to view camera streams. + ::: \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.11.0/web_user_interface/ui_manual_mode.mdx b/outdoornav_user_manual_versioned_docs/version-0.11.0/web_user_interface/ui_manual_mode.mdx index 05588284..7c049a0a 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.11.0/web_user_interface/ui_manual_mode.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.11.0/web_user_interface/ui_manual_mode.mdx @@ -1,49 +1,49 @@ ---- -title: Web UI Manual Mode (Teleoperation) -sidebar_label: Web UI Manual Mode (Teleoperation) -sidebar_position: 2 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -The Manual Mode in the Web UI allows the user to operate the UGV -remotely (teleoperate) by using sensors on the UGV to visualize the -environment and by using a joystick to control the motion of the UGV. - -![](/img/outdoornav_images/teleop_danger.png) - -Ensure that you have read [Safety](../safety.mdx) and are -aware of possible hazards when using this product as well as the safety -methods that can be used to stop the moving UGV. - -
-
- -
Teleoperation Components
-
-
- -1. **Speedometer:** An indicator of the UGV's current forward speed. -2. **Joystick:** The joystick will allow the user to move the UGV - manually from the UI. Motion can be sent to the UGV in 360° - directions and the speed can be controlled by the distance of the - joystick from its neutral position. -3. **Sensitivity Scale:** A UGV-specific scale that controls the - maximum allowable UGV velocities at each level. The maximum linear - velocity is 1.0 meters per second and the maximum angular velocity - is 0.5 radians per second. The scale levels are 100%, 80%, 50% and - 20%, with the default set to 80%. -4. **Local Docking Buttons:** The local docking/undocking buttons used - to dock/undock the UGV through the teleop view. To dock, the UGV - must be within the predock distance and facing the dock before the - button is selected. - -## Monitor Wireless Strength - -While teleoperating the UGV, the user will notice that the delay between -the time a command is sent and the time it is executed (and/or visible -on the UI camera views) will increase as the distance increases. This -effect will be further amplified by any obstacles between the UGV and -the base (eg. walls, vehicles, mounds, etc.). It is important to monitor -this delay an be cautious when driving the UGV with larger delay for +--- +title: Web UI Manual Mode (Teleoperation) +sidebar_label: Web UI Manual Mode (Teleoperation) +sidebar_position: 2 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +The Manual Mode in the Web UI allows the user to operate the UGV +remotely (teleoperate) by using sensors on the UGV to visualize the +environment and by using a joystick to control the motion of the UGV. + +![](/img/outdoornav_images/teleop_danger.png) + +Ensure that you have read [Safety](../safety.mdx) and are +aware of possible hazards when using this product as well as the safety +methods that can be used to stop the moving UGV. + +
+
+ +
Teleoperation Components
+
+
+ +1. **Speedometer:** An indicator of the UGV's current forward speed. +2. **Joystick:** The joystick will allow the user to move the UGV + manually from the UI. Motion can be sent to the UGV in 360° + directions and the speed can be controlled by the distance of the + joystick from its neutral position. +3. **Sensitivity Scale:** A UGV-specific scale that controls the + maximum allowable UGV velocities at each level. The maximum linear + velocity is 1.0 meters per second and the maximum angular velocity + is 0.5 radians per second. The scale levels are 100%, 80%, 50% and + 20%, with the default set to 80%. +4. **Local Docking Buttons:** The local docking/undocking buttons used + to dock/undock the UGV through the teleop view. To dock, the UGV + must be within the predock distance and facing the dock before the + button is selected. + +## Monitor Wireless Strength + +While teleoperating the UGV, the user will notice that the delay between +the time a command is sent and the time it is executed (and/or visible +on the UI camera views) will increase as the distance increases. This +effect will be further amplified by any obstacles between the UGV and +the base (eg. walls, vehicles, mounds, etc.). It is important to monitor +this delay an be cautious when driving the UGV with larger delay for risk of crashing into obstacles. \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.11.0/web_user_interface/ui_overview.mdx b/outdoornav_user_manual_versioned_docs/version-0.11.0/web_user_interface/ui_overview.mdx index e9957ce7..4a8e6026 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.11.0/web_user_interface/ui_overview.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.11.0/web_user_interface/ui_overview.mdx @@ -1,423 +1,423 @@ ---- -title: Web UI Overview -sidebar_label: Web UI Overview -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -The Web User Interface (Web UI) provides a easy, graphical, means to -control both manual and autonomous operation of your UGV. The following -sections outline: the components and views of the UI, the details of -operating in manual mode, and the details of operating in autonomous -mode. - -## Main Components - -
-
- -
UI Main Components
-
-
- -1. **Menu:** A dropdown menu allowing the user to access the Dashboard - (ie. Home), Settings, Status, Scheduler and Help pages. The Operator - can also run the UI Virtual Tour from this menu. - -2. **Feedback Bar:** The feedback bar will display information - regarding the execution state of the navigation and of any Tasks - being executed. - -3. **Path Progress Meter:** A meter indicating the percentage complete - of a Mission. - -4. **UGV Position:** The UGV's X and Y position in the world frame - relative to the Datum. Can also be shown in Lat/Lon coordinates - -5. **UGV Heading:** The UGV's heading in the world frame. 0 degrees is North, 90 degrees is East, 180 degrees is South and 270 degrees is West. - -6. **Status Indicator:** The status indicator will display information - regarding various UGV status monitors such as the Emergency Stop, - Surveying, etc. When the UGV is fully operational, the indicator - will be green. Operators can click on the status indicator to see more details - pertaining to the current state as well as past messages. - -7. **GPS Status Indicator:** The GPS status indicators will display GPS - signal accuracy for position (POS indicator) and heading (DIR - indicator). Green indicators represent RTK accuracy and are - currently required for accurate autonomous navigation. Yellow and orange - indicators represent SBAS and SPP accuracy respectively and noticeable - oscillations may occur in such cases. Red indicators mean no GPS signal - and autonomous navigation missions should not be started. - -8. **Battery Life Indicator:** The UGV's battery life indicator. - - :::note - - If the indicator is stuck at 50%, that means that your UGV does not - have a supported battery management system and this indicator is not - active. - - ::: - -9. **Wireless Connection Indicator:** The wireless connection indicator - represents the signal strength between the wifi access point - (typically the Base Station) and the UGV. If the system can support - cellular connections a cellular indicator will appear next to the - wifi icon with the currently active connection being highlighted in green. - -10. **Views List:** A dropdown list of available views, detailed later - in this section. Some of the available views are Map, Camera and 3D - views, etc. - -11. **Record Audio:** If the UGV is equipped with a microphone the user - can start/stop recording manually by clicking this icon. - -12. **Mission List:** View the list of Missions that Operator(s) have - created. - -13. **Edit Mission Toggle:** This toggle allows the Operator to start - creating Waypoints for the current Mission. The Operator will also be able to - drag and drop Waypoints in this mode. Once this button is enabled, - the Waypoint Mode will be available for selection. When a Mission is - started this toggle will be disabled (ie. the Operator will not be able - to modify/add Waypoints). - - :::note - - If the toggle is enabled while an autonomous Mission is running, it - will cancel the current Mission. - - ::: - -14. **Waypoint Panel Toggle:** View list of Waypoints in the current Mission. - -15. **Waypoint Drop Button:** The Waypoint indicator marker on the - bottom bar allows the Operator to place a Waypoint at the location of the UGV. - This action can also be triggered by using the shortcut key combination Shift + X. - -16. **Start Button:** Start the current Mission. - -17. **Pause Button:** Pause the current Mission. Pressing the start button - while paused will continue the current Mission. - -18. **Stop Button:** Cancel the Mission or Task that is currently being - executed. Pressing the start button while when stopped will restart - the list of steps in the current Mission. - - -By opening the dropdown list "Views", on the right side of the UI, the -Operator can access the following views: - -- Map View -- PTZ Camera View (if available) -- Front/Back Camera View (if available) -- 3D View - -## Map View - -
-
- -
Map View
-
-
- -1. **Zoom Buttons:** These buttons allow the user to zoom in/out of the - map levels. -2. **Zoom-to-Fit Button:** This button will zoom the map to where there - is activity (ie. where the datum is set or where Waypoints have been - set on the map. -3. **Pointer Mode Button:** This button allows the user to move the map - and select point on the map to see their coordinate (lat/lon or - x/y). -4. **Waypoint Mode Button:** This button allows the user to place - Waypoints on the map. Users can also select existing Waypoints to - modify/delete them. -5. **UGV:** The blue arrow represents the UGV. Its location is its - position in the world frame and its orientation is the heading in - the world frame. -6. **Base Station:** The yellow antenna icon is the last known location of - the base station based on the last survey performed. By clicking it the - user will be presented with the base station's coordinates, when it was - surveyed, and how many samples were taken during the survey. - -7. **Datum:** The blue Waypoint marker on the map view represents the - location of the reference point (ie. (x,y)=(0,0)) of the world - coordinate system. The world (ie. map) coordinate system is in the - ENU convention. -8. **Scale:** The scale representing the ratio of a distance on the map - to the corresponding distance on the ground. - -## Camera Views - -:::note - -If PTZ and/or Front/Back camera(s) are included on the UGV, their feeds -can be viewed through the UI and the PTZ can be controlled through the -UI. If not, there will not be any PTZ, Front/Back view(s) in the list of -available views. - -::: - -### Pan-Tilt-Zoom (PTZ) View {#ptz-view} - -
-
- -
PTZ Camera View
-
-
- -1. **Tilt Slider:** The left slider can be used to tilt the camera in a - vertical motion, (ie. upwards or downwards motion). By default, the - slider is at its neutral ("zero") position. -2. **Pan Slider:** The bottom slider can be used to pan/rotate the - camera, (ie. rotational motion). By default, the slider is at its - neutral ("zero") position. -3. **Zoom Slider:** The right slider can be used to zoom the camera - feed. By default, the slider is at its neutral ("zero") position. -4. **Save Image:** Depending on the current camera view selected, this - button will save an image to the computer/tablet running the UI. - Images will be saved to the location in which your browser saves - files. -5. **Camera Positions List:** Display the list of available camera - positions that have been saved. These camera positions can be - deleted from this list by clicking the "garbage can" icon beside - the corresponding position. -6. **Save Camera Position:** This button will save the camera position - to be used in the "Move PTZ" task. An example use case would be: - 1. Switch to the PTZ camera view. - 2. Teleoperate the UGV to a location at which the user can inspect - something. - 3. Move the camera sliders to orient the camera such that it is - looking at the inspection point. - 4. Click the "Save Camera Position". - 5. When creating an autonomous mission to this inspection point, - add the "Move PTZ" task to a Waypoint. - 6. Click the settings button beside the task and add the camera - position related to the inspection point. - -### Front and Back Views - -
-
- -
Front View
-
-
- -
-
- -
Back View
-
-
- -## 3D View - -The 3D view allows the user to visualize the pointcloud data being -acquired by the VLP-16 LiDAR. - -
-
- -
3D View
-
-
- -## System Configuration - -### General Settings - -The General settings section can be found in through the upper left hand menu and allows the Operator to modify -general features of the UGV. - -
-
- -
General Settings Page
-
-
- -#### Coordinates - -The Operator can change the coordinate space from X/Y relative to the Datum to Latitude/Longitude. - -#### Save Image Location - -The Operator can choose to store images saved manually to the robot directly or to download them onto their computer. This -feature only affects the manual save image option found on each relevant camera view. - -#### Robot Internet Connection Type - -If the UGV is equipped with SIM card and can switch between Cellular and WiFi connections, the Operator can manually trigger this -change through the general settings page. This switchover will take approximately 30 seconds and will require a refresh on the UI. - -#### Show Path Deviation Distance - -When a mission is running the UGV will have a maximum path deviation distance that it shouldn't cross if it needs to replan. If this -toggle is set to true, while in edit mode this buffer is shown over top of the path as the Operator creates/edits the mission. This -toggle does not disable the path deviation distance feature. - -#### Low Power Mode - -If the UGV is equipped with a Low Power Module this toggle allows the user to switch the UGV into a low power state that will drastically -limit functionality but help conserve power. This mode is best used to help better facilitate charging while the UGV is not in use. - -### Map Source Configuration - -The Web UI ships with access to free -[OpenStreetMap](https://www.openstreetmap.org/) maps. Aerial view -requires access to third-party aerial maps or your own aerial maps. - -The Web UI is pre-configured to work with -[MapBox](https://www.mapbox.com/) and [Bing -Maps](https://www.bingmapsportal.com/) once a suitable map key has been -acquired. Both services offer a free tier that will be sufficient in -almost all cases. - -#### Using OpenStreetMap Maps - -As no key is required to use -[OpenStreetMap](https://www.openstreetmap.org/) maps, the process to -select these maps in the Web UI is simple. - -1. In the Web UI, from the menu, select **Settings→Map** to bring up - the **Map Settings** page. -2. Select **OpenStreetMap** -3. Click **Ok**. - -
-
- -
Using Map Settings to select OpenStreetMap
-
-
- -#### Using MapBox Maps - -Using [MapBox](https://www.mapbox.com/) maps requires a key, which can -then be used by the Web UI. The steps to set up MapBox are outlined -below. - -1. Acquire a MapBox key from the [MapBox - website](https://account.mapbox.com/auth/signup/). Review the - license terms and select the appropriate plan. In most cases, the - free tier will be sufficient. -2. Back in the Web UI, from the menu, select **Settings→Map** to bring - up the **Map Settings** page. -3. Select **MapBox**. -4. Copy the MapBox key from Step 1 into the **Map Key** field. -5. Click **Ok**. - -
-
- -
Using Map Settings to select MapBox
-
-
- -#### Using Bing Maps - -Using [Bing Maps](https://www.bingmapsportal.com/) requires a key, which -can then be used by the Web UI. The steps to set up Bing Maps are -outlined below. - -1. Acquire a Bing Maps key from the [Bing - website](https://www.microsoft.com/en-us/maps/create-a-bing-maps-key). - Review the license terms and select the appropriate plan. In most - cases, the free tier will be sufficient. -2. Back in the Web UI, from the menu, select **Settings→Map** to bring - up the **Map Settings** page. -3. Select **Bing Maps**. -4. Copy the Bing Maps key from Step 1 into the **Map Key** field. -5. Click **Ok**. - -
-
- -
Using Map Settings to select Bing Maps
-
-
- -#### Using Custom Maps {#using_custom_maps} - -Custom Maps allow you to use another set of maps in XYZ format, either -from a third-party map provider or from maps that you have generated on -your own, such as from drone aerial images. Custom maps can be selected -by using the steps below. - -1. Ensure that the maps are accessible on an internal network or on the - Internet by the device that is being used to display the Web UI, - such as a laptop, tablet, or desktop computer. -2. Ensure that the directory structure for the individual tiles is well - defined. See the section below for details on - [Preparing Custom Map Tiles from Drone Aerial Images](#preparing_custom_map_tiles). -3. In the Web UI, from the menu, select **Settings→Map** to bring up - the **Map Settings** page. -4. Select **Custom**. -5. Enter the network path for the maps into the **Custom URL** field. - If hosting the maps on your local computer, this will be similar to - http://localhost:8000/{z}/{x}/{-y}.png. Note how the - URL is parameterized with `{z}`, `{x}`, and `{-y}` values. This will - need to be adapted to match the directory structure of your map tile - images. -6. Click **Ok**. - -
-
- -
Using Map Settings to select Custom maps
-
-
- -#### Preparing Custom Map Tiles from Drone Aerial Images {#preparing_custom_map_tiles} - -In some cases, it is desirable to create your own maps rather than using -third party maps which might be outdated. One way to do this is to use a -drone to capture aerial images and convert those images into map tiles. -While there are many ways to accomplish this, one approach is outlined -below. - -1. Use a drone to collect top-down photos covering the area of - interest. It is highly recommended to use a drone control app that - allows you to specify the area of interest and desired image overlap - (recommended \~75%) and takes care of coverage planning, drone - control, and image acquisition. - -2. Perform ortho-mosaicing/ortho-rectification to stitch the collected - images together into a single orthographic image. [Open Drone - Map](https://www.opendronemap.org/) is a popular open source project - that Clearpath has used for stitching, but there are also paid - services that automate the process. - -3. Georeference the orthographic image. One way to do this is to define - the locations of well-defined features (sewer grates, utility holes, - etc.) based on their known positions, such as their position data - from an existing mapping service (e.g., Google Maps). Open source - tools, such as [QGIS](https://www.qgis.org/en/site/) can help with - this process. - -4. Generate the map tiles. Using Ubuntu, this can be accomplished with - the following commands, where `GEOREFERENCED_IMG.tif` is the output - of the previous step. - - ``` - sudo apt install gdal-bin - gdal2tiles.py - ``` - -5. Use a web server to host the tiles locally. Using Ubuntu, one way to - accomplish this is to use the commands below, which will make the - tiles available at: \. - - ``` - cd /base/directory/of/tiles - python3 -m http.server - ``` - -Once your map tiles are available on the network, you can follow the -steps in [Using Custom Maps](#using_custom_maps) to have the -Web UI use your custom tiles. +--- +title: Web UI Overview +sidebar_label: Web UI Overview +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +The Web User Interface (Web UI) provides a easy, graphical, means to +control both manual and autonomous operation of your UGV. The following +sections outline: the components and views of the UI, the details of +operating in manual mode, and the details of operating in autonomous +mode. + +## Main Components + +
+
+ +
UI Main Components
+
+
+ +1. **Menu:** A dropdown menu allowing the user to access the Dashboard + (ie. Home), Settings, Status, Scheduler and Help pages. The Operator + can also run the UI Virtual Tour from this menu. + +2. **Feedback Bar:** The feedback bar will display information + regarding the execution state of the navigation and of any Tasks + being executed. + +3. **Path Progress Meter:** A meter indicating the percentage complete + of a Mission. + +4. **UGV Position:** The UGV's X and Y position in the world frame + relative to the Datum. Can also be shown in Lat/Lon coordinates + +5. **UGV Heading:** The UGV's heading in the world frame. 0 degrees is North, 90 degrees is East, 180 degrees is South and 270 degrees is West. + +6. **Status Indicator:** The status indicator will display information + regarding various UGV status monitors such as the Emergency Stop, + Surveying, etc. When the UGV is fully operational, the indicator + will be green. Operators can click on the status indicator to see more details + pertaining to the current state as well as past messages. + +7. **GPS Status Indicator:** The GPS status indicators will display GPS + signal accuracy for position (POS indicator) and heading (DIR + indicator). Green indicators represent RTK accuracy and are + currently required for accurate autonomous navigation. Yellow and orange + indicators represent SBAS and SPP accuracy respectively and noticeable + oscillations may occur in such cases. Red indicators mean no GPS signal + and autonomous navigation missions should not be started. + +8. **Battery Life Indicator:** The UGV's battery life indicator. + + :::note + + If the indicator is stuck at 50%, that means that your UGV does not + have a supported battery management system and this indicator is not + active. + + ::: + +9. **Wireless Connection Indicator:** The wireless connection indicator + represents the signal strength between the wifi access point + (typically the Base Station) and the UGV. If the system can support + cellular connections a cellular indicator will appear next to the + wifi icon with the currently active connection being highlighted in green. + +10. **Views List:** A dropdown list of available views, detailed later + in this section. Some of the available views are Map, Camera and 3D + views, etc. + +11. **Record Audio:** If the UGV is equipped with a microphone the user + can start/stop recording manually by clicking this icon. + +12. **Mission List:** View the list of Missions that Operator(s) have + created. + +13. **Edit Mission Toggle:** This toggle allows the Operator to start + creating Waypoints for the current Mission. The Operator will also be able to + drag and drop Waypoints in this mode. Once this button is enabled, + the Waypoint Mode will be available for selection. When a Mission is + started this toggle will be disabled (ie. the Operator will not be able + to modify/add Waypoints). + + :::note + + If the toggle is enabled while an autonomous Mission is running, it + will cancel the current Mission. + + ::: + +14. **Waypoint Panel Toggle:** View list of Waypoints in the current Mission. + +15. **Waypoint Drop Button:** The Waypoint indicator marker on the + bottom bar allows the Operator to place a Waypoint at the location of the UGV. + This action can also be triggered by using the shortcut key combination Shift + X. + +16. **Start Button:** Start the current Mission. + +17. **Pause Button:** Pause the current Mission. Pressing the start button + while paused will continue the current Mission. + +18. **Stop Button:** Cancel the Mission or Task that is currently being + executed. Pressing the start button while when stopped will restart + the list of steps in the current Mission. + + +By opening the dropdown list "Views", on the right side of the UI, the +Operator can access the following views: + +- Map View +- PTZ Camera View (if available) +- Front/Back Camera View (if available) +- 3D View + +## Map View + +
+
+ +
Map View
+
+
+ +1. **Zoom Buttons:** These buttons allow the user to zoom in/out of the + map levels. +2. **Zoom-to-Fit Button:** This button will zoom the map to where there + is activity (ie. where the datum is set or where Waypoints have been + set on the map. +3. **Pointer Mode Button:** This button allows the user to move the map + and select point on the map to see their coordinate (lat/lon or + x/y). +4. **Waypoint Mode Button:** This button allows the user to place + Waypoints on the map. Users can also select existing Waypoints to + modify/delete them. +5. **UGV:** The blue arrow represents the UGV. Its location is its + position in the world frame and its orientation is the heading in + the world frame. +6. **Base Station:** The yellow antenna icon is the last known location of + the base station based on the last survey performed. By clicking it the + user will be presented with the base station's coordinates, when it was + surveyed, and how many samples were taken during the survey. + +7. **Datum:** The blue Waypoint marker on the map view represents the + location of the reference point (ie. (x,y)=(0,0)) of the world + coordinate system. The world (ie. map) coordinate system is in the + ENU convention. +8. **Scale:** The scale representing the ratio of a distance on the map + to the corresponding distance on the ground. + +## Camera Views + +:::note + +If PTZ and/or Front/Back camera(s) are included on the UGV, their feeds +can be viewed through the UI and the PTZ can be controlled through the +UI. If not, there will not be any PTZ, Front/Back view(s) in the list of +available views. + +::: + +### Pan-Tilt-Zoom (PTZ) View {#ptz-view} + +
+
+ +
PTZ Camera View
+
+
+ +1. **Tilt Slider:** The left slider can be used to tilt the camera in a + vertical motion, (ie. upwards or downwards motion). By default, the + slider is at its neutral ("zero") position. +2. **Pan Slider:** The bottom slider can be used to pan/rotate the + camera, (ie. rotational motion). By default, the slider is at its + neutral ("zero") position. +3. **Zoom Slider:** The right slider can be used to zoom the camera + feed. By default, the slider is at its neutral ("zero") position. +4. **Save Image:** Depending on the current camera view selected, this + button will save an image to the computer/tablet running the UI. + Images will be saved to the location in which your browser saves + files. +5. **Camera Positions List:** Display the list of available camera + positions that have been saved. These camera positions can be + deleted from this list by clicking the "garbage can" icon beside + the corresponding position. +6. **Save Camera Position:** This button will save the camera position + to be used in the "Move PTZ" task. An example use case would be: + 1. Switch to the PTZ camera view. + 2. Teleoperate the UGV to a location at which the user can inspect + something. + 3. Move the camera sliders to orient the camera such that it is + looking at the inspection point. + 4. Click the "Save Camera Position". + 5. When creating an autonomous mission to this inspection point, + add the "Move PTZ" task to a Waypoint. + 6. Click the settings button beside the task and add the camera + position related to the inspection point. + +### Front and Back Views + +
+
+ +
Front View
+
+
+ +
+
+ +
Back View
+
+
+ +## 3D View + +The 3D view allows the user to visualize the pointcloud data being +acquired by the VLP-16 LiDAR. + +
+
+ +
3D View
+
+
+ +## System Configuration + +### General Settings + +The General settings section can be found in through the upper left hand menu and allows the Operator to modify +general features of the UGV. + +
+
+ +
General Settings Page
+
+
+ +#### Coordinates + +The Operator can change the coordinate space from X/Y relative to the Datum to Latitude/Longitude. + +#### Save Image Location + +The Operator can choose to store images saved manually to the robot directly or to download them onto their computer. This +feature only affects the manual save image option found on each relevant camera view. + +#### Robot Internet Connection Type + +If the UGV is equipped with SIM card and can switch between Cellular and WiFi connections, the Operator can manually trigger this +change through the general settings page. This switchover will take approximately 30 seconds and will require a refresh on the UI. + +#### Show Path Deviation Distance + +When a mission is running the UGV will have a maximum path deviation distance that it shouldn't cross if it needs to replan. If this +toggle is set to true, while in edit mode this buffer is shown over top of the path as the Operator creates/edits the mission. This +toggle does not disable the path deviation distance feature. + +#### Low Power Mode + +If the UGV is equipped with a Low Power Module this toggle allows the user to switch the UGV into a low power state that will drastically +limit functionality but help conserve power. This mode is best used to help better facilitate charging while the UGV is not in use. + +### Map Source Configuration + +The Web UI ships with access to free +[OpenStreetMap](https://www.openstreetmap.org/) maps. Aerial view +requires access to third-party aerial maps or your own aerial maps. + +The Web UI is pre-configured to work with +[MapBox](https://www.mapbox.com/) and [Bing +Maps](https://www.bingmapsportal.com/) once a suitable map key has been +acquired. Both services offer a free tier that will be sufficient in +almost all cases. + +#### Using OpenStreetMap Maps + +As no key is required to use +[OpenStreetMap](https://www.openstreetmap.org/) maps, the process to +select these maps in the Web UI is simple. + +1. In the Web UI, from the menu, select **Settings→Map** to bring up + the **Map Settings** page. +2. Select **OpenStreetMap** +3. Click **Ok**. + +
+
+ +
Using Map Settings to select OpenStreetMap
+
+
+ +#### Using MapBox Maps + +Using [MapBox](https://www.mapbox.com/) maps requires a key, which can +then be used by the Web UI. The steps to set up MapBox are outlined +below. + +1. Acquire a MapBox key from the [MapBox + website](https://account.mapbox.com/auth/signup/). Review the + license terms and select the appropriate plan. In most cases, the + free tier will be sufficient. +2. Back in the Web UI, from the menu, select **Settings→Map** to bring + up the **Map Settings** page. +3. Select **MapBox**. +4. Copy the MapBox key from Step 1 into the **Map Key** field. +5. Click **Ok**. + +
+
+ +
Using Map Settings to select MapBox
+
+
+ +#### Using Bing Maps + +Using [Bing Maps](https://www.bingmapsportal.com/) requires a key, which +can then be used by the Web UI. The steps to set up Bing Maps are +outlined below. + +1. Acquire a Bing Maps key from the [Bing + website](https://www.microsoft.com/en-us/maps/create-a-bing-maps-key). + Review the license terms and select the appropriate plan. In most + cases, the free tier will be sufficient. +2. Back in the Web UI, from the menu, select **Settings→Map** to bring + up the **Map Settings** page. +3. Select **Bing Maps**. +4. Copy the Bing Maps key from Step 1 into the **Map Key** field. +5. Click **Ok**. + +
+
+ +
Using Map Settings to select Bing Maps
+
+
+ +#### Using Custom Maps {#using_custom_maps} + +Custom Maps allow you to use another set of maps in XYZ format, either +from a third-party map provider or from maps that you have generated on +your own, such as from drone aerial images. Custom maps can be selected +by using the steps below. + +1. Ensure that the maps are accessible on an internal network or on the + Internet by the device that is being used to display the Web UI, + such as a laptop, tablet, or desktop computer. +2. Ensure that the directory structure for the individual tiles is well + defined. See the section below for details on + [Preparing Custom Map Tiles from Drone Aerial Images](#preparing_custom_map_tiles). +3. In the Web UI, from the menu, select **Settings→Map** to bring up + the **Map Settings** page. +4. Select **Custom**. +5. Enter the network path for the maps into the **Custom URL** field. + If hosting the maps on your local computer, this will be similar to + http://localhost:8000/{z}/{x}/{-y}.png. Note how the + URL is parameterized with `{z}`, `{x}`, and `{-y}` values. This will + need to be adapted to match the directory structure of your map tile + images. +6. Click **Ok**. + +
+
+ +
Using Map Settings to select Custom maps
+
+
+ +#### Preparing Custom Map Tiles from Drone Aerial Images {#preparing_custom_map_tiles} + +In some cases, it is desirable to create your own maps rather than using +third party maps which might be outdated. One way to do this is to use a +drone to capture aerial images and convert those images into map tiles. +While there are many ways to accomplish this, one approach is outlined +below. + +1. Use a drone to collect top-down photos covering the area of + interest. It is highly recommended to use a drone control app that + allows you to specify the area of interest and desired image overlap + (recommended \~75%) and takes care of coverage planning, drone + control, and image acquisition. + +2. Perform ortho-mosaicing/ortho-rectification to stitch the collected + images together into a single orthographic image. [Open Drone + Map](https://www.opendronemap.org/) is a popular open source project + that Clearpath has used for stitching, but there are also paid + services that automate the process. + +3. Georeference the orthographic image. One way to do this is to define + the locations of well-defined features (sewer grates, utility holes, + etc.) based on their known positions, such as their position data + from an existing mapping service (e.g., Google Maps). Open source + tools, such as [QGIS](https://www.qgis.org/en/site/) can help with + this process. + +4. Generate the map tiles. Using Ubuntu, this can be accomplished with + the following commands, where `GEOREFERENCED_IMG.tif` is the output + of the previous step. + + ``` + sudo apt install gdal-bin + gdal2tiles.py + ``` + +5. Use a web server to host the tiles locally. Using Ubuntu, one way to + accomplish this is to use the commands below, which will make the + tiles available at: \. + + ``` + cd /base/directory/of/tiles + python3 -m http.server + ``` + +Once your map tiles are available on the network, you can follow the +steps in [Using Custom Maps](#using_custom_maps) to have the +Web UI use your custom tiles. diff --git a/outdoornav_user_manual_versioned_docs/version-0.12.0/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.12.0/_category_.json index c123e1bc..f5966a95 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.12.0/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.12.0/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "OutdoorNav User Manual", - "position": 1 -} +{ + "label": "OutdoorNav User Manual", + "position": 1 +} diff --git a/outdoornav_user_manual_versioned_docs/version-0.12.0/api/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.12.0/api/_category_.json index a6e53920..79c71658 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.12.0/api/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.12.0/api/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Application Programming Interface", - "position": 7 -} +{ + "label": "Application Programming Interface", + "position": 7 +} diff --git a/outdoornav_user_manual_versioned_docs/version-0.12.0/api/api_endpoints/api_endpoints.mdx b/outdoornav_user_manual_versioned_docs/version-0.12.0/api/api_endpoints/api_endpoints.mdx index c65c4150..e1169e6e 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.12.0/api/api_endpoints/api_endpoints.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.12.0/api/api_endpoints/api_endpoints.mdx @@ -1,16 +1,16 @@ ---- -title: API Endpoints -sidebar_label: API Endpoints -sidebar_position: 2 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -The ROS 1 Noetic API can be used to monitor and manage OutdoorNav Software. Details -are available through the child pages. - -- [Platform API](platform_api.mdx) -- [Autonomy API](autonomy_api.mdx) -- [Mission Manager API](mission_manager_api.mdx) -- [Definitions](definitions.mdx) - +--- +title: API Endpoints +sidebar_label: API Endpoints +sidebar_position: 2 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +The ROS 1 Noetic API can be used to monitor and manage OutdoorNav Software. Details +are available through the child pages. + +- [Platform API](platform_api.mdx) +- [Autonomy API](autonomy_api.mdx) +- [Mission Manager API](mission_manager_api.mdx) +- [Definitions](definitions.mdx) + diff --git a/outdoornav_user_manual_versioned_docs/version-0.12.0/api/api_examples/api_examples.mdx b/outdoornav_user_manual_versioned_docs/version-0.12.0/api/api_examples/api_examples.mdx index 333bd135..eb556d30 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.12.0/api/api_examples/api_examples.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.12.0/api/api_examples/api_examples.mdx @@ -1,21 +1,21 @@ ---- -title: API Examples -sidebar_label: API Examples -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -The OutdoorNav API examples are now available and accesible to everyone. A -[Python API library](https://github.com/cpr-application/clearpath_onav_examples) along -with some example scripts are available to build and use for our application. - -A few examples scripts follow with detailed explanations: - -- [Execute Mission from File](./mission_from_file.mdx) -- [Execute Mission with Custom Task](./mission_with_custom_tasks.mdx) -- [Status Monitoring](./monitor_status.mdx) -- [Network of Paths](./network_of_paths.mdx) - -The documentation for the Python API library can be built following the -instructions in the above linked GitHub repository. +--- +title: API Examples +sidebar_label: API Examples +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +The OutdoorNav API examples are now available and accesible to everyone. A +[Python API library](https://github.com/cpr-application/clearpath_onav_examples) along +with some example scripts are available to build and use for our application. + +A few examples scripts follow with detailed explanations: + +- [Execute Mission from File](./mission_from_file.mdx) +- [Execute Mission with Custom Task](./mission_with_custom_tasks.mdx) +- [Status Monitoring](./monitor_status.mdx) +- [Network of Paths](./network_of_paths.mdx) + +The documentation for the Python API library can be built following the +instructions in the above linked GitHub repository. diff --git a/outdoornav_user_manual_versioned_docs/version-0.12.0/api/api_examples/mission_from_file.mdx b/outdoornav_user_manual_versioned_docs/version-0.12.0/api/api_examples/mission_from_file.mdx index eff0f768..0abb4ea9 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.12.0/api/api_examples/mission_from_file.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.12.0/api/api_examples/mission_from_file.mdx @@ -1,210 +1,210 @@ ---- -title: Mission from YAML File -sidebar_label: Mission from YAML File -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -## The Code - -``` python -#! /usr/bin/env python3 - -from cpr_outdoornav_api_examples_lib.ros_node import RosNode -from cpr_outdoornav_api_examples_lib.yaml_config import YamlConfig -import time -import os - -# The file containing the mission configuration (adjust as needed) -MISSION_YAML_FILE = os.environ.get("HOME", "administrator") + "/example_ws/src/" + \ - "CPR-OutdoorNav/src/cpr_outdoornav_api_examples/config/sample_mission.yaml" - -class MissionFromYamlFile(RosNode): - """ - Create and run a mission loaded from a YAML configuration file. - Be sure that your robot is within 3 meters of your first Waypoint prior to starting the mission. - """ - - def __init__(self): - """Initialize the mission details and server connection.""" - - RosNode.__init__(self, 'mission_from_yaml_file') - self.mission = YamlConfig.yamlFileToMission(MISSION_YAML_FILE) - - # NOTE: to save the configuration to file, uncomment the following lines: - # YamlConfig.missionToYamlFile('/tmp/test1.yaml', self.mission) - - def run(self): - """Execute the mission.""" - - if not self.mission.startMission(): - return False - while not self.mission.isMissionComplete(): - time.sleep(1.0) - return self.mission.getMissionSuccess() - - -if __name__ == '__main__': - if MissionFromYamlFile().run(): - print("Mission completed successfully") - else: - print("Mission failed") - -``` - -## The Code Explained - -Let's break down the code. - -``` python -#! /usr/bin/env python3 -``` - -Every Python ROS Node will have this declaration at the top. The first line makes sure your script is executed as a Python3 script. - - -``` python -from cpr_outdoornav_api_examples_lib.ros_node import RosNode -from cpr_outdoornav_api_examples_lib.yaml_config import YamlConfig -``` - -We provide a library of classes that can be used within your file for ease of use. In the above example, we import the RosNode and YamlConfig classes. -The RosNode class is used by all of our examples to initialize a ROS node that will execute the example mission. The YamlConfig class is used to import -a YAML file and convert it to a Mission object. - -``` python -MISSION_YAML_FILE = os.environ.get("HOME", "administrator") + "/example_ws/src/" + \ - "CPR-OutdoorNav/src/cpr_outdoornav_api_examples/config/sample_mission.yaml" -``` - -This defines the file path of the YAML file that contains the mission to be executed. See the [YAML file](#yaml-file) below for the example YAML file -that will be executed. - -``` python -class MissionFromYamlFile(RosNode): -``` - -Creates a class for your example, which inherits a RosNode object. All python mission files are requried to inherit the RosNode class. - -``` python - RosNode.__init__(self, 'mission_from_yaml_file') - self.mission = YamlConfig.yamlFileToMission(MISSION_YAML_FILE)``` -``` - -Initialize the ROS node with name `mission_from_yaml_file` and import the the mission from the yaml config file. The `YamlConfig.yamlFileToMission()` function -reads teh configuration you have created in the YAML file and converts it into a Mission object. - -``` python - if not self.mission.startMission(): - return False -``` - -Upon execution of the script, the `self.mission.startMission()` function creates the mission client if not yet created, connects to the mission action server -and sends the goal to the action server to begin the execution of the mission. - -``` python - while not self.mission.isMissionComplete(): - time.sleep(1.0) - return self.mission.getMissionSuccess() -``` - -`self.mission.isMissionComplete()` monitors the mission status and only proceeds to terminating the mission has completed or been cancelled. - - -## YAML File {#yaml-file} - -The following YAML file is used in the above example mission. - -``` python -mission: - header: - seq: 0 - stamp: - secs: 0 - nsecs: 0 - frame_id: '' - name: "Sample Mission" - uuid: "8f57fd20-8a8c-4748-85ef-be1495b3ee06" - waypoints: - - - name: "Waypoint: 60" - uuid: "3edcedd7-ae0d-47cf-bd23-f7988d2779b7" - latitude: 50.10950820165676 - longitude: -97.31898507913323 - heading: -1.0 - tasks: [] - position_tolerance: -1.0 - yaw_tolerance: -1.0 - - - name: "Waypoint: 61" - uuid: "ad23202e-7067-4f1c-8677-2dc07af1e729" - latitude: 50.1095698924641 - longitude: -97.31929487427445 - heading: -1.0 - tasks: [] - position_tolerance: -1.0 - yaw_tolerance: -1.0 - - - name: "Waypoint: 62" - uuid: "fe452e77-4a26-41b0-b4ab-ee1859612a60" - latitude: 50.109437123117864 - longitude: -97.31946787675591 - heading: -1.0 - tasks: - - - name: "Wait" - uuid: "ec1121a8-7481-420f-b532-c47ea86afcd7" - service_call: "/wait" - version: "0.0.0" - floats: [3.0] - strings: [] - position_tolerance: -1.0 - yaw_tolerance: -1.0 - - - name: "Waypoint: 63" - uuid: "5ed54c1f-1599-497a-9c16-93c7ca6c355e" - latitude: 50.109384820042074 - longitude: -97.3194477601883 - heading: -1.0 - tasks: [] - position_tolerance: -1.0 - yaw_tolerance: -1.0 - - - name: "Waypoint: 64" - uuid: "2e021345-636b-4bd3-81ba-4f6901fdc016" - latitude: 50.10934056359333 - longitude: -97.31936192949982 - heading: -1.0 - tasks: [] - position_tolerance: -1.0 - yaw_tolerance: -1.0 - - - name: "Waypoint: 65" - uuid: "00c041ee-2ca4-40ba-8e38-65ac900d5a1d" - latitude: 50.10946930962604 - longitude: -97.31921709021302 - heading: -1.0 - tasks: [] - position_tolerance: -1.0 - yaw_tolerance: -1.0 - - - name: "Waypoint: 66" - uuid: "a5826fc5-b696-4b63-82aa-cc2e7a426640" - latitude: 50.10949344950718 - longitude: -97.31911382516594 - heading: -1.0 - tasks: [] - position_tolerance: -1.0 - yaw_tolerance: -1.0 - - - name: "Waypoint: 67" - uuid: "7ff204b2-79a3-46da-a8c0-2c734b4c5314" - latitude: 50.10949613171619 - longitude: -97.31898910244675 - heading: -1.0 - tasks: [] - position_tolerance: -1.0 - yaw_tolerance: -1.0 - onav_config: "To be determined" -``` +--- +title: Mission from YAML File +sidebar_label: Mission from YAML File +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +## The Code + +``` python +#! /usr/bin/env python3 + +from cpr_outdoornav_api_examples_lib.ros_node import RosNode +from cpr_outdoornav_api_examples_lib.yaml_config import YamlConfig +import time +import os + +# The file containing the mission configuration (adjust as needed) +MISSION_YAML_FILE = os.environ.get("HOME", "administrator") + "/example_ws/src/" + \ + "CPR-OutdoorNav/src/cpr_outdoornav_api_examples/config/sample_mission.yaml" + +class MissionFromYamlFile(RosNode): + """ + Create and run a mission loaded from a YAML configuration file. + Be sure that your robot is within 3 meters of your first Waypoint prior to starting the mission. + """ + + def __init__(self): + """Initialize the mission details and server connection.""" + + RosNode.__init__(self, 'mission_from_yaml_file') + self.mission = YamlConfig.yamlFileToMission(MISSION_YAML_FILE) + + # NOTE: to save the configuration to file, uncomment the following lines: + # YamlConfig.missionToYamlFile('/tmp/test1.yaml', self.mission) + + def run(self): + """Execute the mission.""" + + if not self.mission.startMission(): + return False + while not self.mission.isMissionComplete(): + time.sleep(1.0) + return self.mission.getMissionSuccess() + + +if __name__ == '__main__': + if MissionFromYamlFile().run(): + print("Mission completed successfully") + else: + print("Mission failed") + +``` + +## The Code Explained + +Let's break down the code. + +``` python +#! /usr/bin/env python3 +``` + +Every Python ROS Node will have this declaration at the top. The first line makes sure your script is executed as a Python3 script. + + +``` python +from cpr_outdoornav_api_examples_lib.ros_node import RosNode +from cpr_outdoornav_api_examples_lib.yaml_config import YamlConfig +``` + +We provide a library of classes that can be used within your file for ease of use. In the above example, we import the RosNode and YamlConfig classes. +The RosNode class is used by all of our examples to initialize a ROS node that will execute the example mission. The YamlConfig class is used to import +a YAML file and convert it to a Mission object. + +``` python +MISSION_YAML_FILE = os.environ.get("HOME", "administrator") + "/example_ws/src/" + \ + "CPR-OutdoorNav/src/cpr_outdoornav_api_examples/config/sample_mission.yaml" +``` + +This defines the file path of the YAML file that contains the mission to be executed. See the [YAML file](#yaml-file) below for the example YAML file +that will be executed. + +``` python +class MissionFromYamlFile(RosNode): +``` + +Creates a class for your example, which inherits a RosNode object. All python mission files are requried to inherit the RosNode class. + +``` python + RosNode.__init__(self, 'mission_from_yaml_file') + self.mission = YamlConfig.yamlFileToMission(MISSION_YAML_FILE)``` +``` + +Initialize the ROS node with name `mission_from_yaml_file` and import the the mission from the yaml config file. The `YamlConfig.yamlFileToMission()` function +reads teh configuration you have created in the YAML file and converts it into a Mission object. + +``` python + if not self.mission.startMission(): + return False +``` + +Upon execution of the script, the `self.mission.startMission()` function creates the mission client if not yet created, connects to the mission action server +and sends the goal to the action server to begin the execution of the mission. + +``` python + while not self.mission.isMissionComplete(): + time.sleep(1.0) + return self.mission.getMissionSuccess() +``` + +`self.mission.isMissionComplete()` monitors the mission status and only proceeds to terminating the mission has completed or been cancelled. + + +## YAML File {#yaml-file} + +The following YAML file is used in the above example mission. + +``` python +mission: + header: + seq: 0 + stamp: + secs: 0 + nsecs: 0 + frame_id: '' + name: "Sample Mission" + uuid: "8f57fd20-8a8c-4748-85ef-be1495b3ee06" + waypoints: + - + name: "Waypoint: 60" + uuid: "3edcedd7-ae0d-47cf-bd23-f7988d2779b7" + latitude: 50.10950820165676 + longitude: -97.31898507913323 + heading: -1.0 + tasks: [] + position_tolerance: -1.0 + yaw_tolerance: -1.0 + - + name: "Waypoint: 61" + uuid: "ad23202e-7067-4f1c-8677-2dc07af1e729" + latitude: 50.1095698924641 + longitude: -97.31929487427445 + heading: -1.0 + tasks: [] + position_tolerance: -1.0 + yaw_tolerance: -1.0 + - + name: "Waypoint: 62" + uuid: "fe452e77-4a26-41b0-b4ab-ee1859612a60" + latitude: 50.109437123117864 + longitude: -97.31946787675591 + heading: -1.0 + tasks: + - + name: "Wait" + uuid: "ec1121a8-7481-420f-b532-c47ea86afcd7" + service_call: "/wait" + version: "0.0.0" + floats: [3.0] + strings: [] + position_tolerance: -1.0 + yaw_tolerance: -1.0 + - + name: "Waypoint: 63" + uuid: "5ed54c1f-1599-497a-9c16-93c7ca6c355e" + latitude: 50.109384820042074 + longitude: -97.3194477601883 + heading: -1.0 + tasks: [] + position_tolerance: -1.0 + yaw_tolerance: -1.0 + - + name: "Waypoint: 64" + uuid: "2e021345-636b-4bd3-81ba-4f6901fdc016" + latitude: 50.10934056359333 + longitude: -97.31936192949982 + heading: -1.0 + tasks: [] + position_tolerance: -1.0 + yaw_tolerance: -1.0 + - + name: "Waypoint: 65" + uuid: "00c041ee-2ca4-40ba-8e38-65ac900d5a1d" + latitude: 50.10946930962604 + longitude: -97.31921709021302 + heading: -1.0 + tasks: [] + position_tolerance: -1.0 + yaw_tolerance: -1.0 + - + name: "Waypoint: 66" + uuid: "a5826fc5-b696-4b63-82aa-cc2e7a426640" + latitude: 50.10949344950718 + longitude: -97.31911382516594 + heading: -1.0 + tasks: [] + position_tolerance: -1.0 + yaw_tolerance: -1.0 + - + name: "Waypoint: 67" + uuid: "7ff204b2-79a3-46da-a8c0-2c734b4c5314" + latitude: 50.10949613171619 + longitude: -97.31898910244675 + heading: -1.0 + tasks: [] + position_tolerance: -1.0 + yaw_tolerance: -1.0 + onav_config: "To be determined" +``` diff --git a/outdoornav_user_manual_versioned_docs/version-0.12.0/api/api_examples/mission_with_custom_tasks.mdx b/outdoornav_user_manual_versioned_docs/version-0.12.0/api/api_examples/mission_with_custom_tasks.mdx index 30ec477e..af8335aa 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.12.0/api/api_examples/mission_with_custom_tasks.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.12.0/api/api_examples/mission_with_custom_tasks.mdx @@ -1,233 +1,233 @@ ---- -title: Mission with Custom Tasks -sidebar_label: Mission with Custom Tasks -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -Before being able to run the examples similar to the one explained below, it is required that you have written your own custom tasks. See the -[Custom Tasks](../../features/custom_tasks.mdx) section for information on how to develop tasks for your application. - -## The Code - -``` python -#! /usr/bin/env python3 - -import rospy -import actionlib -from cpr_outdoornav_api_examples_lib.ros_node import RosNode -from cpr_outdoornav_api_examples_lib.waypoint import Waypoint -from cpr_outdoornav_api_examples_lib.mission import Mission -from clearpath_navigation_msgs.msg import Task, UITaskResult, UITaskAction - - -CUSTOM_ACTION_NAME = "/record_gnss" -UNSPECIFIED_HEADING = -1 - - -class MissionWithCustomTask(RosNode): - """Create and run a mission with 3 waypoints, each of which executes a custom task. - - Our goal is to set up 3 waypoints, then create a mission such that the robot drives - to each waypoint in order. In addition, at each of the waypoints, a custom task will be - called to record the timestamp, goal name, and GPS coordinates. Since this is a custom task, - it is necessary to create an actionlib server to implement the custom task. - - The main component of this example is the mission builder, which builds up the set of goals, - including information on the custom tasks, and runs the mission, to execute the custom task. - - The coordinates used in this example are based on the cpr_agriculture_gazebo - world and should be updated to match the location in which the user's - robot will be operating. - """ - - class MissionBuilder: - """Creates and runs the mission, including custom tasks.""" - - def __init__(self): - """Creates the mission with 3 waypoints and custom tasks.""" - - # First waypoint, with custom task - waypoint_a_name = "A" - custom_task_a = Task() - custom_task_a.name = "my_custom_task_a" # choose any name here - custom_task_a.action_server_name = CUSTOM_ACTION_NAME # must match server name - custom_task_a.version = "1.0" # choose any version - custom_task_a.floats = [1000] # param: unique ID - custom_task_a.strings = [waypoint_a_name] # param: goal name - - # Second waypoint, with custom task - waypoint_b_name = "B" - custom_task_b = Task() - custom_task_b.name = "my_custom_task_b" # choose any name here - custom_task_b.action_server_name = CUSTOM_ACTION_NAME # must match server name - custom_task_b.version = "1.0" # choose any version - custom_task_b.floats = [1001] # param: unique ID - custom_task_b.strings = [waypoint_b_name] # param: goal name - - # Third waypoint, with custom task - waypoint_c_name = "C" - custom_task_c = Task() - custom_task_c.name = "my_custom_task_c" # choose any name here - custom_task_c.action_server_name = CUSTOM_ACTION_NAME # must match server name - custom_task_c.version = "1.0" # choose any version - custom_task_c.floats = [1002] # param: unique ID - custom_task_c.strings = [waypoint_c_name] # param: goal name - - waypoints = [ - Waypoint(waypoint_a_name, "uuid-waypoint-01", 43.50076203007681, -80.546296281104, UNSPECIFIED_HEADING), - Waypoint(waypoint_b_name, "uuid-waypoint-02", 43.50073600330896, -80.54621215801687, UNSPECIFIED_HEADING, [custom_task_b]), - Waypoint(waypoint_c_name, "uuid-waypoint-03", 43.50067256664828, -80.5462159469465, UNSPECIFIED_HEADING, [custom_task_c]), - ] - - # Build mission from two waypoints with custom tasks - self._mission = Mission("Custom task mission", "uuid-mission-1", waypoints) - - def getMission(self): - """Gets a reference to the mission. - - Returns - ------- - A reference to the mission. - """ - return self._mission - - def __init__(self): - """Initializes ROS, the custom task server, GPS subscriber and mission.""" - - RosNode.__init__(self, 'mission_with_custom_task') - self._mission_builder = MissionWithCustomTask.MissionBuilder() - - - def run(self): - """Execute the mission. - - This function blocks until the mission is complete. - - Returns - ------- - True on successful execution of the mission; else False on any error. - """ - - if not self._mission_builder.getMission().startMission(): - return False - while not self._mission_builder.getMission().isMissionComplete(): - rospy.sleep(1.0) - return self._mission_builder.getMission().getMissionSuccess() - - -if __name__ == '__main__': - if MissionWithCustomTask().run(): - print("Mission completed successfully") - else: - print("Mission failed") - rospy.signal_shutdown('Done') -``` - -## The Code Explained - -``` python -import rospy -import actionlib -from cpr_outdoornav_api_examples_lib.ros_node import RosNode -from cpr_outdoornav_api_examples_lib.waypoint import Waypoint -from cpr_outdoornav_api_examples_lib.mission import Mission -from clearpath_navigation_msgs.msg import Task, UITaskResult, UITaskAction -``` - -Import the `RosNode`, `Waypoint` and `Mission` classes which will be used to create the mission to be executed. -We also import the `Task` and `UITask` messages which are used to generate the action servers. - -``` python - class MissionBuilder: - """Creates and runs the mission, including custom tasks.""" - - def __init__(self): - """Creates the mission with 3 waypoints and custom tasks.""" - - # First waypoint, with custom task - waypoint_a_name = "A" - custom_task_a = Task() - custom_task_a.name = "my_custom_task_a" # choose any name here - custom_task_a.action_server_name = CUSTOM_ACTION_NAME # must match server name - custom_task_a.version = "1.0" # choose any version - custom_task_a.floats = [1000] # param: unique ID - custom_task_a.strings = [waypoint_a_name] # param: goal name - - # Second waypoint, with custom task - waypoint_b_name = "B" - custom_task_b = Task() - custom_task_b.name = "my_custom_task_b" # choose any name here - custom_task_b.action_server_name = CUSTOM_ACTION_NAME # must match server name - custom_task_b.version = "1.0" # choose any version - custom_task_b.floats = [1001] # param: unique ID - custom_task_b.strings = [waypoint_b_name] # param: goal name - - # Third waypoint, with custom task - waypoint_c_name = "C" - custom_task_c = Task() - custom_task_c.name = "my_custom_task_c" # choose any name here - custom_task_c.action_server_name = CUSTOM_ACTION_NAME # must match server name - custom_task_c.version = "1.0" # choose any version - custom_task_c.floats = [1002] # param: unique ID - custom_task_c.strings = [waypoint_c_name] # param: goal name - - - waypoints = [ - Waypoint(waypoint_a_name, "uuid-waypoint-01", 50.1095255, -97.3192484, UNSPECIFIED_HEADING, [custom_task_a]), - Waypoint(waypoint_b_name, "uuid-waypoint-02", 50.1094938, -97.3191085, UNSPECIFIED_HEADING, [custom_task_b]), - Waypoint(waypoint_c_name, "uuid-waypoint-03", 50.1094600, -97.3192100, UNSPECIFIED_HEADING, [custom_task_c]), - ] - - # Build mission from two waypoints with custom tasks - self._mission = Mission("Custom task mission", "uuid-mission-1", waypoints) -``` - -We create the `MissionBuilder` subclass that will create the mission to be executed. We initialize custom task objects -where we specify the `action_server_name` field with the specific action of the custom task. These are then added to the -Waypoints as a list of tasks and the Mission object is created. - -``` python - def __init__(self): - """Initializes ROS, the custom task server, GPS subscriber and mission.""" - - RosNode.__init__(self, 'mission_with_custom_task') - self._mission_builder = MissionWithCustomTask.MissionBuilder() -``` - -We initialize the example class by starting a ROS node and initialize the mission to be executed. - -``` python - def run(self): - """Execute the mission. - - This function blocks until the mission is complete. - - Returns - ------- - True on successful execution of the mission; else False on any error. - """ - - if not self._mission_builder.getMission().startMission(): - return False - while not self._mission_builder.getMission().isMissionComplete(): - time.sleep(1.0) - return self._mission_builder.getMission().getMissionSuccess() -``` - -The `run()` function starts the mission and checks for completion. Once complete we terminate the example code. - -``` python -if __name__ == '__main__': - if MissionWithCustomTask().run(): - print("Mission completed successfully") - else: - print("Mission failed") - rospy.signal_shutdown('Done') -``` - -The main python execution block. We first initialize the example class (runs the __init__ function) and then execute the run() function which -executes the mission and outputs the status information. - - +--- +title: Mission with Custom Tasks +sidebar_label: Mission with Custom Tasks +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +Before being able to run the examples similar to the one explained below, it is required that you have written your own custom tasks. See the +[Custom Tasks](../../features/custom_tasks.mdx) section for information on how to develop tasks for your application. + +## The Code + +``` python +#! /usr/bin/env python3 + +import rospy +import actionlib +from cpr_outdoornav_api_examples_lib.ros_node import RosNode +from cpr_outdoornav_api_examples_lib.waypoint import Waypoint +from cpr_outdoornav_api_examples_lib.mission import Mission +from clearpath_navigation_msgs.msg import Task, UITaskResult, UITaskAction + + +CUSTOM_ACTION_NAME = "/record_gnss" +UNSPECIFIED_HEADING = -1 + + +class MissionWithCustomTask(RosNode): + """Create and run a mission with 3 waypoints, each of which executes a custom task. + + Our goal is to set up 3 waypoints, then create a mission such that the robot drives + to each waypoint in order. In addition, at each of the waypoints, a custom task will be + called to record the timestamp, goal name, and GPS coordinates. Since this is a custom task, + it is necessary to create an actionlib server to implement the custom task. + + The main component of this example is the mission builder, which builds up the set of goals, + including information on the custom tasks, and runs the mission, to execute the custom task. + + The coordinates used in this example are based on the cpr_agriculture_gazebo + world and should be updated to match the location in which the user's + robot will be operating. + """ + + class MissionBuilder: + """Creates and runs the mission, including custom tasks.""" + + def __init__(self): + """Creates the mission with 3 waypoints and custom tasks.""" + + # First waypoint, with custom task + waypoint_a_name = "A" + custom_task_a = Task() + custom_task_a.name = "my_custom_task_a" # choose any name here + custom_task_a.action_server_name = CUSTOM_ACTION_NAME # must match server name + custom_task_a.version = "1.0" # choose any version + custom_task_a.floats = [1000] # param: unique ID + custom_task_a.strings = [waypoint_a_name] # param: goal name + + # Second waypoint, with custom task + waypoint_b_name = "B" + custom_task_b = Task() + custom_task_b.name = "my_custom_task_b" # choose any name here + custom_task_b.action_server_name = CUSTOM_ACTION_NAME # must match server name + custom_task_b.version = "1.0" # choose any version + custom_task_b.floats = [1001] # param: unique ID + custom_task_b.strings = [waypoint_b_name] # param: goal name + + # Third waypoint, with custom task + waypoint_c_name = "C" + custom_task_c = Task() + custom_task_c.name = "my_custom_task_c" # choose any name here + custom_task_c.action_server_name = CUSTOM_ACTION_NAME # must match server name + custom_task_c.version = "1.0" # choose any version + custom_task_c.floats = [1002] # param: unique ID + custom_task_c.strings = [waypoint_c_name] # param: goal name + + waypoints = [ + Waypoint(waypoint_a_name, "uuid-waypoint-01", 43.50076203007681, -80.546296281104, UNSPECIFIED_HEADING), + Waypoint(waypoint_b_name, "uuid-waypoint-02", 43.50073600330896, -80.54621215801687, UNSPECIFIED_HEADING, [custom_task_b]), + Waypoint(waypoint_c_name, "uuid-waypoint-03", 43.50067256664828, -80.5462159469465, UNSPECIFIED_HEADING, [custom_task_c]), + ] + + # Build mission from two waypoints with custom tasks + self._mission = Mission("Custom task mission", "uuid-mission-1", waypoints) + + def getMission(self): + """Gets a reference to the mission. + + Returns + ------- + A reference to the mission. + """ + return self._mission + + def __init__(self): + """Initializes ROS, the custom task server, GPS subscriber and mission.""" + + RosNode.__init__(self, 'mission_with_custom_task') + self._mission_builder = MissionWithCustomTask.MissionBuilder() + + + def run(self): + """Execute the mission. + + This function blocks until the mission is complete. + + Returns + ------- + True on successful execution of the mission; else False on any error. + """ + + if not self._mission_builder.getMission().startMission(): + return False + while not self._mission_builder.getMission().isMissionComplete(): + rospy.sleep(1.0) + return self._mission_builder.getMission().getMissionSuccess() + + +if __name__ == '__main__': + if MissionWithCustomTask().run(): + print("Mission completed successfully") + else: + print("Mission failed") + rospy.signal_shutdown('Done') +``` + +## The Code Explained + +``` python +import rospy +import actionlib +from cpr_outdoornav_api_examples_lib.ros_node import RosNode +from cpr_outdoornav_api_examples_lib.waypoint import Waypoint +from cpr_outdoornav_api_examples_lib.mission import Mission +from clearpath_navigation_msgs.msg import Task, UITaskResult, UITaskAction +``` + +Import the `RosNode`, `Waypoint` and `Mission` classes which will be used to create the mission to be executed. +We also import the `Task` and `UITask` messages which are used to generate the action servers. + +``` python + class MissionBuilder: + """Creates and runs the mission, including custom tasks.""" + + def __init__(self): + """Creates the mission with 3 waypoints and custom tasks.""" + + # First waypoint, with custom task + waypoint_a_name = "A" + custom_task_a = Task() + custom_task_a.name = "my_custom_task_a" # choose any name here + custom_task_a.action_server_name = CUSTOM_ACTION_NAME # must match server name + custom_task_a.version = "1.0" # choose any version + custom_task_a.floats = [1000] # param: unique ID + custom_task_a.strings = [waypoint_a_name] # param: goal name + + # Second waypoint, with custom task + waypoint_b_name = "B" + custom_task_b = Task() + custom_task_b.name = "my_custom_task_b" # choose any name here + custom_task_b.action_server_name = CUSTOM_ACTION_NAME # must match server name + custom_task_b.version = "1.0" # choose any version + custom_task_b.floats = [1001] # param: unique ID + custom_task_b.strings = [waypoint_b_name] # param: goal name + + # Third waypoint, with custom task + waypoint_c_name = "C" + custom_task_c = Task() + custom_task_c.name = "my_custom_task_c" # choose any name here + custom_task_c.action_server_name = CUSTOM_ACTION_NAME # must match server name + custom_task_c.version = "1.0" # choose any version + custom_task_c.floats = [1002] # param: unique ID + custom_task_c.strings = [waypoint_c_name] # param: goal name + + + waypoints = [ + Waypoint(waypoint_a_name, "uuid-waypoint-01", 50.1095255, -97.3192484, UNSPECIFIED_HEADING, [custom_task_a]), + Waypoint(waypoint_b_name, "uuid-waypoint-02", 50.1094938, -97.3191085, UNSPECIFIED_HEADING, [custom_task_b]), + Waypoint(waypoint_c_name, "uuid-waypoint-03", 50.1094600, -97.3192100, UNSPECIFIED_HEADING, [custom_task_c]), + ] + + # Build mission from two waypoints with custom tasks + self._mission = Mission("Custom task mission", "uuid-mission-1", waypoints) +``` + +We create the `MissionBuilder` subclass that will create the mission to be executed. We initialize custom task objects +where we specify the `action_server_name` field with the specific action of the custom task. These are then added to the +Waypoints as a list of tasks and the Mission object is created. + +``` python + def __init__(self): + """Initializes ROS, the custom task server, GPS subscriber and mission.""" + + RosNode.__init__(self, 'mission_with_custom_task') + self._mission_builder = MissionWithCustomTask.MissionBuilder() +``` + +We initialize the example class by starting a ROS node and initialize the mission to be executed. + +``` python + def run(self): + """Execute the mission. + + This function blocks until the mission is complete. + + Returns + ------- + True on successful execution of the mission; else False on any error. + """ + + if not self._mission_builder.getMission().startMission(): + return False + while not self._mission_builder.getMission().isMissionComplete(): + time.sleep(1.0) + return self._mission_builder.getMission().getMissionSuccess() +``` + +The `run()` function starts the mission and checks for completion. Once complete we terminate the example code. + +``` python +if __name__ == '__main__': + if MissionWithCustomTask().run(): + print("Mission completed successfully") + else: + print("Mission failed") + rospy.signal_shutdown('Done') +``` + +The main python execution block. We first initialize the example class (runs the __init__ function) and then execute the run() function which +executes the mission and outputs the status information. + + diff --git a/outdoornav_user_manual_versioned_docs/version-0.12.0/api/api_examples/monitor_status.mdx b/outdoornav_user_manual_versioned_docs/version-0.12.0/api/api_examples/monitor_status.mdx index 077a9fcf..a6fb416c 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.12.0/api/api_examples/monitor_status.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.12.0/api/api_examples/monitor_status.mdx @@ -1,152 +1,152 @@ ---- -title: Monitor Status -sidebar_label: Monitor Status -sidebar_position: 2 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -## The Code - -``` python -#! /usr/bin/env python3 - -import rospy -from cpr_outdoornav_api_examples_lib.ros_node import RosNode -from cpr_outdoornav_api_examples_lib.waypoint import Waypoint -from cpr_outdoornav_api_examples_lib.mission import Mission -from cpr_outdoornav_api_examples_lib.platform_status import PlatformStatusMonitor -from cpr_outdoornav_api_examples_lib.control_status import ControlStatusMonitor -from cpr_outdoornav_api_examples_lib.localization_status import LocalizationStatusMonitor -from cpr_outdoornav_api_examples_lib.navigation_status import NavigationStatusMonitor - - -class MonitorStatus(RosNode): - """Run a simple mission and report status throughout. - - The coordinates used in this example are based on the cpr_agriculture_gazebo - world and should be updated to match the location in which the user's - robot will be operating. - """ - - def __init__(self): - """Initialize the mission details and server connection.""" - - RosNode.__init__(self, 'monitor_status') - waypoints = [ - Waypoint("A", "uuid-waypoint-1", 50.1094938, -97.3191085), - Waypoint("B", "uuid-waypoint-2", 50.1095100, -97.3192000), - Waypoint("C", "uuid-waypoint-3", 50.1095255, -97.3192484), - ] - self.mission = Mission("Monitor status mission", "uuid-mission-1", waypoints) - self._platform_status = PlatformStatusMonitor() - self._control_status = ControlStatusMonitor() - self._localization_status = LocalizationStatusMonitor() - self._navigation_status = NavigationStatusMonitor() - - def _reportStatus(self): - """Report the current status.""" - - rospy.loginfo("--------------------------------------------------------") - self._platform_status.report() - self._control_status.report() - self._localization_status.report() - self._navigation_status.report() - - def run(self): - """Execute the mission and report status.""" - - if not self.mission.startMission(): - rospy.logerr("Failed to start mission") - return False - while not self.mission.isMissionComplete(): - self._reportStatus() - rospy.sleep(1.0) - return self.mission.getMissionSuccess() - - -if __name__ == '__main__': - if MonitorStatus().run(): - print("Mission completed successfully") - else: - print("Mission failed") - -``` - -## The Code Explained - -``` python -import rospy -from cpr_outdoornav_api_examples_lib.ros_node import RosNode -from cpr_outdoornav_api_examples_lib.waypoint import Waypoint -from cpr_outdoornav_api_examples_lib.mission import Mission -from cpr_outdoornav_api_examples_lib.platform_status import PlatformStatusMonitor -from cpr_outdoornav_api_examples_lib.control_status import ControlStatusMonitor -from cpr_outdoornav_api_examples_lib.localization_status import LocalizationStatusMonitor -from cpr_outdoornav_api_examples_lib.navigation_status import NavigationStatusMonitor -``` - -Import the `RosNode`, `Waypoint`, `Mission` classes which will be used to create the mission to be executed. We also import the -`PlatformStatusMonitor`, `ControlStatusMonitor`, `LocalizationStatusMonitor`, `NavigationStatusMonitor` classes which are set up to monitor the topics -relavant to the platform, localization, contrle selection an navigation modules respectively. - -``` python - waypoints = [ - Waypoint("A", "uuid-waypoint-1", 50.1094938, -97.3191085), - Waypoint("B", "uuid-waypoint-2", 50.1095100, -97.3192000), - Waypoint("C", "uuid-waypoint-3", 50.1095255, -97.3192484), - ] - self.mission = Mission("Monitor status mission", "uuid-mission-1", waypoints) -``` - -After initializing the ROS node, we create a mission manually by first creating a list of Waypoint objects and then adding then using the waypoint list -to construct the Mission object. - -``` python - self._platform_status = PlatformStatusMonitor() - self._control_status = ControlStatusMonitor() - self._localization_status = LocalizationStatusMonitor() - self._navigation_status = NavigationStatusMonitor() -``` - -We then initialize the platform, control, localization and navigation monitors, which subscribes to several API topics. - -``` python - def _reportStatus(self): - """Report the current status.""" - - rospy.loginfo("--------------------------------------------------------") - self._platform_status.report() - self._control_status.report() - self._localization_status.report() - self._navigation_status.report() -``` - -The `_reportStatus()` function outputs the results of the monitors to the ROS logs. This includes both the internal ROS logs as well as terminal output. - -``` python - def run(self): - """Execute the mission and report status.""" - - if not self.mission.startMission(): - rospy.logerr("Failed to start mission") - return False - while not self.mission.isMissionComplete(): - self._reportStatus() - rospy.sleep(1.0) - return self.mission.getMissionSuccess() -``` - -The `run()` function starts the mission and checks for completion. Every seconds we run the `reportStatus()` function to output the status information. -Once complete we terminate the example code. - -``` python -if __name__ == '__main__': - if MonitorStatus().run(): - print("Mission completed successfully") - else: - print("Mission failed") -``` - -The main python execution block. We first initialize the example class (runs the __init__ function) and then execute the run() function which -executes the mission and outputs the status information. +--- +title: Monitor Status +sidebar_label: Monitor Status +sidebar_position: 2 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +## The Code + +``` python +#! /usr/bin/env python3 + +import rospy +from cpr_outdoornav_api_examples_lib.ros_node import RosNode +from cpr_outdoornav_api_examples_lib.waypoint import Waypoint +from cpr_outdoornav_api_examples_lib.mission import Mission +from cpr_outdoornav_api_examples_lib.platform_status import PlatformStatusMonitor +from cpr_outdoornav_api_examples_lib.control_status import ControlStatusMonitor +from cpr_outdoornav_api_examples_lib.localization_status import LocalizationStatusMonitor +from cpr_outdoornav_api_examples_lib.navigation_status import NavigationStatusMonitor + + +class MonitorStatus(RosNode): + """Run a simple mission and report status throughout. + + The coordinates used in this example are based on the cpr_agriculture_gazebo + world and should be updated to match the location in which the user's + robot will be operating. + """ + + def __init__(self): + """Initialize the mission details and server connection.""" + + RosNode.__init__(self, 'monitor_status') + waypoints = [ + Waypoint("A", "uuid-waypoint-1", 50.1094938, -97.3191085), + Waypoint("B", "uuid-waypoint-2", 50.1095100, -97.3192000), + Waypoint("C", "uuid-waypoint-3", 50.1095255, -97.3192484), + ] + self.mission = Mission("Monitor status mission", "uuid-mission-1", waypoints) + self._platform_status = PlatformStatusMonitor() + self._control_status = ControlStatusMonitor() + self._localization_status = LocalizationStatusMonitor() + self._navigation_status = NavigationStatusMonitor() + + def _reportStatus(self): + """Report the current status.""" + + rospy.loginfo("--------------------------------------------------------") + self._platform_status.report() + self._control_status.report() + self._localization_status.report() + self._navigation_status.report() + + def run(self): + """Execute the mission and report status.""" + + if not self.mission.startMission(): + rospy.logerr("Failed to start mission") + return False + while not self.mission.isMissionComplete(): + self._reportStatus() + rospy.sleep(1.0) + return self.mission.getMissionSuccess() + + +if __name__ == '__main__': + if MonitorStatus().run(): + print("Mission completed successfully") + else: + print("Mission failed") + +``` + +## The Code Explained + +``` python +import rospy +from cpr_outdoornav_api_examples_lib.ros_node import RosNode +from cpr_outdoornav_api_examples_lib.waypoint import Waypoint +from cpr_outdoornav_api_examples_lib.mission import Mission +from cpr_outdoornav_api_examples_lib.platform_status import PlatformStatusMonitor +from cpr_outdoornav_api_examples_lib.control_status import ControlStatusMonitor +from cpr_outdoornav_api_examples_lib.localization_status import LocalizationStatusMonitor +from cpr_outdoornav_api_examples_lib.navigation_status import NavigationStatusMonitor +``` + +Import the `RosNode`, `Waypoint`, `Mission` classes which will be used to create the mission to be executed. We also import the +`PlatformStatusMonitor`, `ControlStatusMonitor`, `LocalizationStatusMonitor`, `NavigationStatusMonitor` classes which are set up to monitor the topics +relavant to the platform, localization, contrle selection an navigation modules respectively. + +``` python + waypoints = [ + Waypoint("A", "uuid-waypoint-1", 50.1094938, -97.3191085), + Waypoint("B", "uuid-waypoint-2", 50.1095100, -97.3192000), + Waypoint("C", "uuid-waypoint-3", 50.1095255, -97.3192484), + ] + self.mission = Mission("Monitor status mission", "uuid-mission-1", waypoints) +``` + +After initializing the ROS node, we create a mission manually by first creating a list of Waypoint objects and then adding then using the waypoint list +to construct the Mission object. + +``` python + self._platform_status = PlatformStatusMonitor() + self._control_status = ControlStatusMonitor() + self._localization_status = LocalizationStatusMonitor() + self._navigation_status = NavigationStatusMonitor() +``` + +We then initialize the platform, control, localization and navigation monitors, which subscribes to several API topics. + +``` python + def _reportStatus(self): + """Report the current status.""" + + rospy.loginfo("--------------------------------------------------------") + self._platform_status.report() + self._control_status.report() + self._localization_status.report() + self._navigation_status.report() +``` + +The `_reportStatus()` function outputs the results of the monitors to the ROS logs. This includes both the internal ROS logs as well as terminal output. + +``` python + def run(self): + """Execute the mission and report status.""" + + if not self.mission.startMission(): + rospy.logerr("Failed to start mission") + return False + while not self.mission.isMissionComplete(): + self._reportStatus() + rospy.sleep(1.0) + return self.mission.getMissionSuccess() +``` + +The `run()` function starts the mission and checks for completion. Every seconds we run the `reportStatus()` function to output the status information. +Once complete we terminate the example code. + +``` python +if __name__ == '__main__': + if MonitorStatus().run(): + print("Mission completed successfully") + else: + print("Mission failed") +``` + +The main python execution block. We first initialize the example class (runs the __init__ function) and then execute the run() function which +executes the mission and outputs the status information. diff --git a/outdoornav_user_manual_versioned_docs/version-0.12.0/api/api_overview.mdx b/outdoornav_user_manual_versioned_docs/version-0.12.0/api/api_overview.mdx index d9c6d616..1bcb0ad9 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.12.0/api/api_overview.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.12.0/api/api_overview.mdx @@ -1,63 +1,63 @@ ---- -title: API Overview -sidebar_label: API Overview -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -While the Web User Interface provides a great way to get started quickly -with OutdoorNav Software, some users will want programmatic control or -may wish to develop their own graphical user interfaces \-- for those -users, the Application Programming Interface (API) provides the -flexibility to do so. This is illustrated in the figure below. - -
-
- -
Interconnection between OutdoorNav Software and UGV Controller
-
-
- -The API is, at present, a [ROS 1 Noetic](http://wiki.ros.org/noetic) API, -but will soon be extended to a ROS 2 API. The API is divided into two -sections, whose details are provided below: - -- [Platform API](api_endpoints/platform_api.mdx): The set of [ROS - Topics](http://wiki.ros.org/Topics) are used to comminucate with the - hardware platform (eg. sensor data, wireless, battery state, command - velocity). This API can be used by autonomy software packages to - interface with the hardware platform. - - [Topics Published by UGV](api_endpoints/platform_api.mdx#topics-published-by-platform): - The set of topics that are published by the hardware platform. - - [Topics Subscribed to by UGV](api_endpoints/platform_api.mdx#topics-subscribed-by-platform): - The set of topics that are subscribed to by the hardware - platform. -- [Autonomy API](api_endpoints/autonomy_api.mdx): The set of [ROS - Topics](http://wiki.ros.org/Topics) that are used for monitoring and - controlling the the hardware platform through the OutdoorNav - autonomy software. - - [Topics Published by Autonomy](api_endpoints/autonomy_api.mdx#topics-published-by-autonomy): - The set of [ROS Topics](http://wiki.ros.org/Topics) published by - OutdoorNav Software, to be subscribed to by the UGV. - - [Topics Subscribed to by Autonomy](api_endpoints/autonomy_api.mdx#topics-subscribed-to-by-autonomy): - The set of [ROS Topics](http://wiki.ros.org/Topics) - subscribed to by OutdoorNav Software, typically published by the - client for directing OutdoorNav operation. - - [Services Exported by Autonomy](api_endpoints/autonomy_api.mdx#services-exported-by-autonomy): - The set of [ROS Services](http://wiki.ros.org/Services) provided - by OutdoorNav Software, for use by the client to modify/control - the behaviour of the Autonomy. - - [Actions Exported by Autonomy](api_endpoints/autonomy_api.mdx#actions-exported-by-autonomy): - The set of [ROS Actions](http://wiki.ros.org/actionlib) provided - by OutdoorNav Software, for use by the client to modify/control - the behaviour of the Autonomy. -- [Mission Manager API](api_endpoints/mission_manager_api.mdx): The set of [ROS - Services](http://wiki.ros.org/Services) that are used for creating, deleting, and modifying OutdoorNav Missions -- [Mission Scheduler API](api_endpoints/mission_scheduler_api.mdx): The set of [ROS Services](http://wiki.ros.org/Services) - that are used for creating, deleting, and modifying OutdoorNav Mission Schedules -- [Definitions](api_endpoints/definitions.mdx): The set of custom - [ROS Message](http://wiki.ros.org/Messages), [ROS - Service](http://wiki.ros.org/Services), and [ROS - Action](http://wiki.ros.org/actionlib) definitions. -- API Examples: Example code to come. +--- +title: API Overview +sidebar_label: API Overview +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +While the Web User Interface provides a great way to get started quickly +with OutdoorNav Software, some users will want programmatic control or +may wish to develop their own graphical user interfaces \-- for those +users, the Application Programming Interface (API) provides the +flexibility to do so. This is illustrated in the figure below. + +
+
+ +
Interconnection between OutdoorNav Software and UGV Controller
+
+
+ +The API is, at present, a [ROS 1 Noetic](http://wiki.ros.org/noetic) API, +but will soon be extended to a ROS 2 API. The API is divided into two +sections, whose details are provided below: + +- [Platform API](api_endpoints/platform_api.mdx): The set of [ROS + Topics](http://wiki.ros.org/Topics) are used to comminucate with the + hardware platform (eg. sensor data, wireless, battery state, command + velocity). This API can be used by autonomy software packages to + interface with the hardware platform. + - [Topics Published by UGV](api_endpoints/platform_api.mdx#topics-published-by-platform): + The set of topics that are published by the hardware platform. + - [Topics Subscribed to by UGV](api_endpoints/platform_api.mdx#topics-subscribed-by-platform): + The set of topics that are subscribed to by the hardware + platform. +- [Autonomy API](api_endpoints/autonomy_api.mdx): The set of [ROS + Topics](http://wiki.ros.org/Topics) that are used for monitoring and + controlling the the hardware platform through the OutdoorNav + autonomy software. + - [Topics Published by Autonomy](api_endpoints/autonomy_api.mdx#topics-published-by-autonomy): + The set of [ROS Topics](http://wiki.ros.org/Topics) published by + OutdoorNav Software, to be subscribed to by the UGV. + - [Topics Subscribed to by Autonomy](api_endpoints/autonomy_api.mdx#topics-subscribed-to-by-autonomy): + The set of [ROS Topics](http://wiki.ros.org/Topics) + subscribed to by OutdoorNav Software, typically published by the + client for directing OutdoorNav operation. + - [Services Exported by Autonomy](api_endpoints/autonomy_api.mdx#services-exported-by-autonomy): + The set of [ROS Services](http://wiki.ros.org/Services) provided + by OutdoorNav Software, for use by the client to modify/control + the behaviour of the Autonomy. + - [Actions Exported by Autonomy](api_endpoints/autonomy_api.mdx#actions-exported-by-autonomy): + The set of [ROS Actions](http://wiki.ros.org/actionlib) provided + by OutdoorNav Software, for use by the client to modify/control + the behaviour of the Autonomy. +- [Mission Manager API](api_endpoints/mission_manager_api.mdx): The set of [ROS + Services](http://wiki.ros.org/Services) that are used for creating, deleting, and modifying OutdoorNav Missions +- [Mission Scheduler API](api_endpoints/mission_scheduler_api.mdx): The set of [ROS Services](http://wiki.ros.org/Services) + that are used for creating, deleting, and modifying OutdoorNav Mission Schedules +- [Definitions](api_endpoints/definitions.mdx): The set of custom + [ROS Message](http://wiki.ros.org/Messages), [ROS + Service](http://wiki.ros.org/Services), and [ROS + Action](http://wiki.ros.org/actionlib) definitions. +- API Examples: Example code to come. diff --git a/outdoornav_user_manual_versioned_docs/version-0.12.0/cpr_hardware.mdx b/outdoornav_user_manual_versioned_docs/version-0.12.0/cpr_hardware.mdx index f60527ff..2d1efdd0 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.12.0/cpr_hardware.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.12.0/cpr_hardware.mdx @@ -1,405 +1,405 @@ ---- -title: "Appendix B: CPR Hardware" -sidebar_label: "Appendix B: CPR Hardware" -sidebar_position: 13 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -When using a Clearpath Robotics UGV and Base Station, the following -hardware setup may be required. - -## Calibrating the IMU - -Although IMU magnetometers are calibrated at the factory to remove any -internal magnetic influences in the device, measurements are still -subject to influence from external magnetic anomalies when the sensor is -installed. These anomalies are divided into two classes: hard iron -offsets and soft iron distortions. Hard iron offsets are created by -objects that produce a magnetic field. Soft iron distortions are -considered deflections or alterations in the existing magnetic field. -Ideally, these influences are mitigated by installing the sensor away -from magnetic sources, such as coils, magnets, and ferrous metal -structures and mounting hardware. However, often these sources are hard -to avoid or are hidden. To mitigate this effect when using the IMU -magnetometer to aid in heading estimations, a field calibration of the -magnetometer after final installation is highly recommended. This means -that the IMU must be calibrated in the same environment that you use -your UGV for autonomous navigation. - -### Microstrain IMU - -If your UGV has a 3DM-GX5-25 Microstrain IMU, the complete instruction -on calibration of your IMU can be found in section 5.4 of the -[datasheet](https://www.microstrain.com/sites/default/files/3dm-gx5-25_user_manual_8500-0012.pdf). -Note that you need a computer with Windows system and the LORD Sensing -MIP Hard and Soft Iron Calibration software installed which can be found -at the Microstrain website. - -### UM6/7 IMU - -If you are using UM6 or UM7 IMUs, you will need the magnetometer display -package which is located at the following address on your UGV: -`~/catkin_ws/Drivers/src/imu_tools/magnetometer_display`. - -Follow these steps to calibrate the IMU on your machine: - -1. Create a catkin workspace on your local machine and copy the package - `magnetometer_display` into your src folder. Build this package with - the `catkin_make` command. - -2. Perform the following command to make the calibration script - executable: - - ``` bash - $ sudo chmod +x calibration.py - ``` - -3. Connect the IMU to your computer and launch the driver. Or if you - are on the same network as your UGV, make your UGV the ROS master - and ensure that you can echo the IMU topic on your computer. - -4. Open the `magnetometer.launch` file in the `magnetometer_display` - package and change the sections shown in the figure below. - Specifically, set `use_mag_field` to true when the IMU is outputting - magnetometer measurements with a `sensor_msgs/MagneticField` - message, otherwise set to false. Microstrain is the only IMU which - uses the MagneticField message type. - -
-
- -
Magnetometer calibration, general launch settings
-
-
- -5. Launch the calibration using the following command: - - ``` bash - $ roslaunch magnetometer_display magnetometer.launch - ``` - -6. Move the IMU around to get good coverage. RViz will display - magnetometer points (red) and will plot current ellipsoid fit - (green) as shown in the figure below. - -
-
- -
Magnetometer calibration, ellipsoid fit plot
-
-
- -7. Ellipsoid fit parameters are displayed in terminal as shown in the - figure below. - -
-
- -
Magnetometer calibration, ellipsoid fit - parameters
-
-
- -8. Once there are enough red points on your fitted ellipsoid, enter the - above calibrations in the IMU driver launch file. Open the - `sensor.launch` file in the `cpr_gps_localization` package and go to - the UM7 (or UM6) section of the launch file. The figure below shows - this section for the UM7. - -
-
- -
Magnetometer calibration, ellipsoid fit settings in launch file
-
-
- - You should enter the parameters generated in the Ellipsoid fit step - as follows (to account for the NED to ENU transform the driver - applies): - - - Launch file X = Terminal Y - - Launch file Y = Terminal X - - Launch file Z = -Terminal Z - -## RTK Positioning GPS Setup - -:::note - -Please skip this section if your robot does not have RTK GPS. - -::: - -The following configuration is for establishing communications between -the Base Station and the UGV using TCP/IP for the purpose of -transmitting RTK corrections. Before starting this procedure, make sure -that you have installed the [SwiftNav -console](https://support.swiftnav.com/support/solutions/articles/44001903699-installing-swift-console). - -### Base Station GPS Configuration - -- Connect the Swift Navigation device to a computer via USB or the USB - to Serial Adapter cable. - -- Open Swift Console and connect to the device. - -- Set the following options in the **ethernet** section as shown in - the figure below. - - 1. ip_config_mode: `Static` - 2. ip_address: `192.168.131.30` - 3. netmask: `255.255.255.0` - -
-
- -
Base Station Ethernet settings
-
-
- -- Set the following options in the **tcp_server1** section as show in - the figure below. - - 1. mode: `SBP` - 2. port: `55556` - 3. enabled_sbp_messages: `72,74,117,65535` - -
-
- -
Base Station TCP1 Server settings
-
-
- -- Set the following options in the **solution** section as shown in - the figure below. - - 1. soln_freq: `10` - 2. correction_age_max: `30` - 3. output_every_n_obs: `10` - 4. dgnss_solution_mode: `Low Latency` - -
-
- -
Base Station Solution settings
-
-
- -- Next the Base Station has to be surveyed. There are two ways of - doing this which are explained in [RTK Survey Positioning](#base-station-survey). -- Click Save to Flash. -- Close Swift Console. -- Disconnect the device from the computer. - -### UGV Position GPS Configuration {#ugv-position-gps-config} - -- Connect the Swift Navigation device to a computer via USB or the USB - to Serial Adapter cable. - -- Open Swift Console and connect to the device. - -- Set the following options in the **ethernet** section as shown in - the figure below. - - 1. ip_config_mode: `Static` - 2. ip_address: `192.168.131.31` - 3. netmask: `255.255.255.0` - -
-
- -
UGV GPS Ethernet settings
-
-
- -- Set the following options in the **tcp_client0** section as show in - the figure below. - - 1. mode: `SBP` - 2. port: `192.168.131.30:55556` - 3. enabled_sbp_messages: `0` - -
-
- -
UGV GPS TCP Client0 settings
-
-
- -- Set the following options in the **solution** section as show in the - figure below. - - 1. soln_freq: `10` - 2. correction_age_max: `30` - 3. output_every_n_obs: `10` - 4. dgnss_solution_mode: `Low Latency` - -
-
- -
UGV GPS Solution settings
-
-
- -- Click Save to Flash. - -- Close Swift Console. - -- Disconnect the device from the computer. - -Once you have entered these settings. Connect your computer to the Wi-Fi -network of the Base Station. Also make sure that the UGC (which is -connected to the UGV GPS unit) is also connected to the Base Station -Wifi. The you should be able to verify connectivity across the devices. -To check the Base Station, complete the following steps. - -- Open Swift Console on you computer -- Select **TCP/IP** -- For IP Address enter `192.168.131.30` -- For IP Port enter `55555` -- Click **OK** -- Select the **Observations** tab -- In the **Remote** section you should see observation data from your - UGV. - -To check the UGV, complete the following steps. - -- Open Swift Console -- Select **TCP/IP** -- For IP Address enter `192.168.131.31` -- For IP Port enter `55555` -- Click **OK** -- Select the **Observations** tab -- In the **Remote** section you should see observation data from your - Base Station. - -Further information on [RTK setup](https://swiftnav.freshdesk.com/support/solutions/articles/44001904334-piksi-multi-gnss-rtk-position-with-stationary-base%7D%7Bhttps://swiftnav.freshdesk.com/support/solutions/articles/44001904334-piksi-multi-gnss-rtk-position-with-stationary-base) -is available from SwiftNav. - -## RTK Survey Positioning {#base-station-survey} - -:::note - -Please skip this section if your UGV does not have RTK GPS. - -::: - -:::warning - -Once you have surveyed the location of the Base Station, you **cannot** -relocate the Base Station throughout your tests. Otherwise, this step -has to be repeated. - -::: - -There are three ways to survey the Base Station location: - -1. OutdoorNav Web User Interface (easiest/accurate), -2. Swiftnav console autosurvey (fastest/least accurate), -3. ROS launch file geodetic survey (for debug output display). - -Using the OutdoorNav Web UI is the easiest and most accurate way to do -this since it runs the ROS geodetic survey tool which uses more samples -to compute the final position of the Base Station than the Swiftnav -console. Using the geodetic ROS survey launch file directly would allow -the user to visualize the output log directly but requires preliminary -knowledge in ROS. - -### Base Station Survey: Web UI - -Using the OutdoorNav Web UI to survey the Base Station is very simple. -See [Survey Base Station](getting_started/system_setup.mdx#survey_base_station) for details. - -### Base Station Survey: Piksi Console - -Use the Piksi console connect the base station GPS. Go to "Settings -\> -surveyed position", click to any field in this section and then click -the button on the top right corner "Auto Survey". The figure below -shows these steps. The last 1000 GPS points will be used to compute the -position of the Base Station. - -
-
- -
Auto Survey
-
-
- -After that, make sure the four fields in "surveyed position" -(broadcast, surveyed lat, surveyed lon, surveyed alt) are consistent -with your location. - -### Base Station Survey: ROS Geodetic Survey - -The `ethz_piksi_ros` repository should be installed in the UGV's -`catkin_ws`. To run the surveying process simply connect your PC to the -Base Station network, `ssh` into the UGV's computer and run the -following: - -``` bash -roslaunch {robot_name}_gps_navigation geodetic_survey.launch -``` - -where `robot_name` is either `jackal`, `husky`, or `warthog` depending -on your UGV. The surveying will begin and you will see a running tally -of the collected data. - -## RTK Heading Setup - -For the rest of this section, it is assumed that a third Swiftnav Duro -device is available with IP address of 192.168.131.32. Note that in -order to change the IP address of a Swiftnav Duro, you need to use the -Swiftnav console and connect to the device with the serial port. - -:::note - -The instructions in this section will overwrite some of the settings set -in [UGV Position GPS Configuration](#ugv-position-gps-config) on the -Position/Reference Duro receiver. This is normal since the configuration -in [UGV Position GPS Configuration](#ugv-position-gps-config) is for a UGV -with only the position Duro receiver. If the heading receiver is -connected as well, please continue with the instructions below. - -::: - -The two Swiftnav Duro GPS device on the UGV are connected via serial -cable. They are also both connected via Ethernet cable to the computer -on the UGV. For computing the heading, on Duro (the one on the rear with -IP address 192.168.131.31) operates only to provide GNSS Observations to -the other Duro that computes an RTK derived heading (the Duro on the -front with IP address 192.168.131.32). For the purposes of this -document, we will call the Duro/Piksi that operates to provide the raw -GNSS observations only the "Reference Receiver" and the Duro/Piksi -producing heading measurements the "Attitude Receiver." - -Use the Swiftnav console to connect to the Reference Receiver (with IP -address of 192.168.131.31) and insert the settings shown in the figure -below. - -
-
- -
Reference Receiver settings
-
-
- -Next, connect to the Attitude Receiver (with IP address of -192.168.131.32) and change the configuration as shown in the figure -below. - -
-
- -
Attitude Receiver settings
-
-
- -For further information please refer to [these instructions](https://swiftnav.freshdesk.com/support/solutions/articles/44001907898-rtk-heading-gnss-compass-configuration%7D%7Bhttps://swiftnav.freshdesk.com/support/solutions/articles/44001907898-rtk-heading-gnss-compass-configuration). - -## Wireless Motion Stop - -Please refer to the hardware user manual of the motion stop device for proper -usage. A trained operator should be used to supervise navigation of the -UGV under autonomous control at all times. The Operator should be -familiar with the use of the wireless motion stop device. +--- +title: "Appendix B: CPR Hardware" +sidebar_label: "Appendix B: CPR Hardware" +sidebar_position: 13 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +When using a Clearpath Robotics UGV and Base Station, the following +hardware setup may be required. + +## Calibrating the IMU + +Although IMU magnetometers are calibrated at the factory to remove any +internal magnetic influences in the device, measurements are still +subject to influence from external magnetic anomalies when the sensor is +installed. These anomalies are divided into two classes: hard iron +offsets and soft iron distortions. Hard iron offsets are created by +objects that produce a magnetic field. Soft iron distortions are +considered deflections or alterations in the existing magnetic field. +Ideally, these influences are mitigated by installing the sensor away +from magnetic sources, such as coils, magnets, and ferrous metal +structures and mounting hardware. However, often these sources are hard +to avoid or are hidden. To mitigate this effect when using the IMU +magnetometer to aid in heading estimations, a field calibration of the +magnetometer after final installation is highly recommended. This means +that the IMU must be calibrated in the same environment that you use +your UGV for autonomous navigation. + +### Microstrain IMU + +If your UGV has a 3DM-GX5-25 Microstrain IMU, the complete instruction +on calibration of your IMU can be found in section 5.4 of the +[datasheet](https://www.microstrain.com/sites/default/files/3dm-gx5-25_user_manual_8500-0012.pdf). +Note that you need a computer with Windows system and the LORD Sensing +MIP Hard and Soft Iron Calibration software installed which can be found +at the Microstrain website. + +### UM6/7 IMU + +If you are using UM6 or UM7 IMUs, you will need the magnetometer display +package which is located at the following address on your UGV: +`~/catkin_ws/Drivers/src/imu_tools/magnetometer_display`. + +Follow these steps to calibrate the IMU on your machine: + +1. Create a catkin workspace on your local machine and copy the package + `magnetometer_display` into your src folder. Build this package with + the `catkin_make` command. + +2. Perform the following command to make the calibration script + executable: + + ``` bash + $ sudo chmod +x calibration.py + ``` + +3. Connect the IMU to your computer and launch the driver. Or if you + are on the same network as your UGV, make your UGV the ROS master + and ensure that you can echo the IMU topic on your computer. + +4. Open the `magnetometer.launch` file in the `magnetometer_display` + package and change the sections shown in the figure below. + Specifically, set `use_mag_field` to true when the IMU is outputting + magnetometer measurements with a `sensor_msgs/MagneticField` + message, otherwise set to false. Microstrain is the only IMU which + uses the MagneticField message type. + +
+
+ +
Magnetometer calibration, general launch settings
+
+
+ +5. Launch the calibration using the following command: + + ``` bash + $ roslaunch magnetometer_display magnetometer.launch + ``` + +6. Move the IMU around to get good coverage. RViz will display + magnetometer points (red) and will plot current ellipsoid fit + (green) as shown in the figure below. + +
+
+ +
Magnetometer calibration, ellipsoid fit plot
+
+
+ +7. Ellipsoid fit parameters are displayed in terminal as shown in the + figure below. + +
+
+ +
Magnetometer calibration, ellipsoid fit + parameters
+
+
+ +8. Once there are enough red points on your fitted ellipsoid, enter the + above calibrations in the IMU driver launch file. Open the + `sensor.launch` file in the `cpr_gps_localization` package and go to + the UM7 (or UM6) section of the launch file. The figure below shows + this section for the UM7. + +
+
+ +
Magnetometer calibration, ellipsoid fit settings in launch file
+
+
+ + You should enter the parameters generated in the Ellipsoid fit step + as follows (to account for the NED to ENU transform the driver + applies): + + - Launch file X = Terminal Y + - Launch file Y = Terminal X + - Launch file Z = -Terminal Z + +## RTK Positioning GPS Setup + +:::note + +Please skip this section if your robot does not have RTK GPS. + +::: + +The following configuration is for establishing communications between +the Base Station and the UGV using TCP/IP for the purpose of +transmitting RTK corrections. Before starting this procedure, make sure +that you have installed the [SwiftNav +console](https://support.swiftnav.com/support/solutions/articles/44001903699-installing-swift-console). + +### Base Station GPS Configuration + +- Connect the Swift Navigation device to a computer via USB or the USB + to Serial Adapter cable. + +- Open Swift Console and connect to the device. + +- Set the following options in the **ethernet** section as shown in + the figure below. + + 1. ip_config_mode: `Static` + 2. ip_address: `192.168.131.30` + 3. netmask: `255.255.255.0` + +
+
+ +
Base Station Ethernet settings
+
+
+ +- Set the following options in the **tcp_server1** section as show in + the figure below. + + 1. mode: `SBP` + 2. port: `55556` + 3. enabled_sbp_messages: `72,74,117,65535` + +
+
+ +
Base Station TCP1 Server settings
+
+
+ +- Set the following options in the **solution** section as shown in + the figure below. + + 1. soln_freq: `10` + 2. correction_age_max: `30` + 3. output_every_n_obs: `10` + 4. dgnss_solution_mode: `Low Latency` + +
+
+ +
Base Station Solution settings
+
+
+ +- Next the Base Station has to be surveyed. There are two ways of + doing this which are explained in [RTK Survey Positioning](#base-station-survey). +- Click Save to Flash. +- Close Swift Console. +- Disconnect the device from the computer. + +### UGV Position GPS Configuration {#ugv-position-gps-config} + +- Connect the Swift Navigation device to a computer via USB or the USB + to Serial Adapter cable. + +- Open Swift Console and connect to the device. + +- Set the following options in the **ethernet** section as shown in + the figure below. + + 1. ip_config_mode: `Static` + 2. ip_address: `192.168.131.31` + 3. netmask: `255.255.255.0` + +
+
+ +
UGV GPS Ethernet settings
+
+
+ +- Set the following options in the **tcp_client0** section as show in + the figure below. + + 1. mode: `SBP` + 2. port: `192.168.131.30:55556` + 3. enabled_sbp_messages: `0` + +
+
+ +
UGV GPS TCP Client0 settings
+
+
+ +- Set the following options in the **solution** section as show in the + figure below. + + 1. soln_freq: `10` + 2. correction_age_max: `30` + 3. output_every_n_obs: `10` + 4. dgnss_solution_mode: `Low Latency` + +
+
+ +
UGV GPS Solution settings
+
+
+ +- Click Save to Flash. + +- Close Swift Console. + +- Disconnect the device from the computer. + +Once you have entered these settings. Connect your computer to the Wi-Fi +network of the Base Station. Also make sure that the UGC (which is +connected to the UGV GPS unit) is also connected to the Base Station +Wifi. The you should be able to verify connectivity across the devices. +To check the Base Station, complete the following steps. + +- Open Swift Console on you computer +- Select **TCP/IP** +- For IP Address enter `192.168.131.30` +- For IP Port enter `55555` +- Click **OK** +- Select the **Observations** tab +- In the **Remote** section you should see observation data from your + UGV. + +To check the UGV, complete the following steps. + +- Open Swift Console +- Select **TCP/IP** +- For IP Address enter `192.168.131.31` +- For IP Port enter `55555` +- Click **OK** +- Select the **Observations** tab +- In the **Remote** section you should see observation data from your + Base Station. + +Further information on [RTK setup](https://swiftnav.freshdesk.com/support/solutions/articles/44001904334-piksi-multi-gnss-rtk-position-with-stationary-base%7D%7Bhttps://swiftnav.freshdesk.com/support/solutions/articles/44001904334-piksi-multi-gnss-rtk-position-with-stationary-base) +is available from SwiftNav. + +## RTK Survey Positioning {#base-station-survey} + +:::note + +Please skip this section if your UGV does not have RTK GPS. + +::: + +:::warning + +Once you have surveyed the location of the Base Station, you **cannot** +relocate the Base Station throughout your tests. Otherwise, this step +has to be repeated. + +::: + +There are three ways to survey the Base Station location: + +1. OutdoorNav Web User Interface (easiest/accurate), +2. Swiftnav console autosurvey (fastest/least accurate), +3. ROS launch file geodetic survey (for debug output display). + +Using the OutdoorNav Web UI is the easiest and most accurate way to do +this since it runs the ROS geodetic survey tool which uses more samples +to compute the final position of the Base Station than the Swiftnav +console. Using the geodetic ROS survey launch file directly would allow +the user to visualize the output log directly but requires preliminary +knowledge in ROS. + +### Base Station Survey: Web UI + +Using the OutdoorNav Web UI to survey the Base Station is very simple. +See [Survey Base Station](getting_started/system_setup.mdx#survey_base_station) for details. + +### Base Station Survey: Piksi Console + +Use the Piksi console connect the base station GPS. Go to "Settings -\> +surveyed position", click to any field in this section and then click +the button on the top right corner "Auto Survey". The figure below +shows these steps. The last 1000 GPS points will be used to compute the +position of the Base Station. + +
+
+ +
Auto Survey
+
+
+ +After that, make sure the four fields in "surveyed position" +(broadcast, surveyed lat, surveyed lon, surveyed alt) are consistent +with your location. + +### Base Station Survey: ROS Geodetic Survey + +The `ethz_piksi_ros` repository should be installed in the UGV's +`catkin_ws`. To run the surveying process simply connect your PC to the +Base Station network, `ssh` into the UGV's computer and run the +following: + +``` bash +roslaunch {robot_name}_gps_navigation geodetic_survey.launch +``` + +where `robot_name` is either `jackal`, `husky`, or `warthog` depending +on your UGV. The surveying will begin and you will see a running tally +of the collected data. + +## RTK Heading Setup + +For the rest of this section, it is assumed that a third Swiftnav Duro +device is available with IP address of 192.168.131.32. Note that in +order to change the IP address of a Swiftnav Duro, you need to use the +Swiftnav console and connect to the device with the serial port. + +:::note + +The instructions in this section will overwrite some of the settings set +in [UGV Position GPS Configuration](#ugv-position-gps-config) on the +Position/Reference Duro receiver. This is normal since the configuration +in [UGV Position GPS Configuration](#ugv-position-gps-config) is for a UGV +with only the position Duro receiver. If the heading receiver is +connected as well, please continue with the instructions below. + +::: + +The two Swiftnav Duro GPS device on the UGV are connected via serial +cable. They are also both connected via Ethernet cable to the computer +on the UGV. For computing the heading, on Duro (the one on the rear with +IP address 192.168.131.31) operates only to provide GNSS Observations to +the other Duro that computes an RTK derived heading (the Duro on the +front with IP address 192.168.131.32). For the purposes of this +document, we will call the Duro/Piksi that operates to provide the raw +GNSS observations only the "Reference Receiver" and the Duro/Piksi +producing heading measurements the "Attitude Receiver." + +Use the Swiftnav console to connect to the Reference Receiver (with IP +address of 192.168.131.31) and insert the settings shown in the figure +below. + +
+
+ +
Reference Receiver settings
+
+
+ +Next, connect to the Attitude Receiver (with IP address of +192.168.131.32) and change the configuration as shown in the figure +below. + +
+
+ +
Attitude Receiver settings
+
+
+ +For further information please refer to [these instructions](https://swiftnav.freshdesk.com/support/solutions/articles/44001907898-rtk-heading-gnss-compass-configuration%7D%7Bhttps://swiftnav.freshdesk.com/support/solutions/articles/44001907898-rtk-heading-gnss-compass-configuration). + +## Wireless Motion Stop + +Please refer to the hardware user manual of the motion stop device for proper +usage. A trained operator should be used to supervise navigation of the +UGV under autonomous control at all times. The Operator should be +familiar with the use of the wireless motion stop device. diff --git a/outdoornav_user_manual_versioned_docs/version-0.12.0/customized_tuning/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.12.0/customized_tuning/_category_.json index 4c27a4d9..d38b7f55 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.12.0/customized_tuning/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.12.0/customized_tuning/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Appendix C: Tuning & Customization", - "position": 14 +{ + "label": "Appendix C: Tuning & Customization", + "position": 14 } \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.12.0/customized_tuning/sensor_customization.mdx b/outdoornav_user_manual_versioned_docs/version-0.12.0/customized_tuning/sensor_customization.mdx index 9d9f115a..f2cce53a 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.12.0/customized_tuning/sensor_customization.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.12.0/customized_tuning/sensor_customization.mdx @@ -1,9 +1,9 @@ ---- -title: "Sensor Customization" -sidebar_label: "Sensor Customization" -sidebar_position: 4 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -Information incoming in a future release. Please contact Clearpath customer support at \ to discuss any related issue. +--- +title: "Sensor Customization" +sidebar_label: "Sensor Customization" +sidebar_position: 4 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +Information incoming in a future release. Please contact Clearpath customer support at \ to discuss any related issue. diff --git a/outdoornav_user_manual_versioned_docs/version-0.12.0/customized_tuning/tuning_instructions/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.12.0/customized_tuning/tuning_instructions/_category_.json index d62e291a..4b3e7b59 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.12.0/customized_tuning/tuning_instructions/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.12.0/customized_tuning/tuning_instructions/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Tuning Instructions", - "position": 2 -} +{ + "label": "Tuning Instructions", + "position": 2 +} diff --git a/outdoornav_user_manual_versioned_docs/version-0.12.0/customized_tuning/tuning_instructions/ackermann_drive_dynamics.mdx b/outdoornav_user_manual_versioned_docs/version-0.12.0/customized_tuning/tuning_instructions/ackermann_drive_dynamics.mdx index 51639337..0125d8dd 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.12.0/customized_tuning/tuning_instructions/ackermann_drive_dynamics.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.12.0/customized_tuning/tuning_instructions/ackermann_drive_dynamics.mdx @@ -1,9 +1,9 @@ ---- -title: "Ackermann Drive" -sidebar_label: "Ackermann Drive" -sidebar_position: 4 -toc_min_heading_level: 2 -toc_max_heading_level: 2 ---- - -Information incoming in release 0.10.0. Please contact Clearpath customer support at support@clearpathrobotics.com to discuss any related issue. +--- +title: "Ackermann Drive" +sidebar_label: "Ackermann Drive" +sidebar_position: 4 +toc_min_heading_level: 2 +toc_max_heading_level: 2 +--- + +Information incoming in release 0.10.0. Please contact Clearpath customer support at support@clearpathrobotics.com to discuss any related issue. diff --git a/outdoornav_user_manual_versioned_docs/version-0.12.0/customized_tuning/tuning_instructions/footprint_tuning.mdx b/outdoornav_user_manual_versioned_docs/version-0.12.0/customized_tuning/tuning_instructions/footprint_tuning.mdx index 4b90f600..6b105ecb 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.12.0/customized_tuning/tuning_instructions/footprint_tuning.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.12.0/customized_tuning/tuning_instructions/footprint_tuning.mdx @@ -1,9 +1,9 @@ ---- -title: "Footprint Tuning" -sidebar_label: "Footprint Tuning" -sidebar_position: 5 -toc_min_heading_level: 2 -toc_max_heading_level: 2 ---- - -Information incoming in release 0.9.0. Please contact Clearpath customer support at \ to discuss any related issue. +--- +title: "Footprint Tuning" +sidebar_label: "Footprint Tuning" +sidebar_position: 5 +toc_min_heading_level: 2 +toc_max_heading_level: 2 +--- + +Information incoming in release 0.9.0. Please contact Clearpath customer support at \ to discuss any related issue. diff --git a/outdoornav_user_manual_versioned_docs/version-0.12.0/customized_tuning/tuning_overview.mdx b/outdoornav_user_manual_versioned_docs/version-0.12.0/customized_tuning/tuning_overview.mdx index 851df29b..77fbabeb 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.12.0/customized_tuning/tuning_overview.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.12.0/customized_tuning/tuning_overview.mdx @@ -1,25 +1,25 @@ ---- -title: "Tuning Overview" -sidebar_label: "Tuning Overview" -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -The scope of Appendix C is to provide information on how to tune the various components of -OutdoorNav. - -Instructions for tuning specific platform types can be found here: - -- [Differential Drive (Skid-Steer) Dynamics](tuning_instructions/differential_drive_dynamics.mdx) -- [Ackermann Drive Dynamics](tuning_instructions/ackermann_drive_dynamics.mdx) - - -Lists of parameters related to each component of the autonomy can be found here: - -- [Localization Parameters](tuning_parameters/localization_parameters.mdx) -- [Navigation Parameters](tuning_parameters/navigation_parameters.mdx) -- [Collision Avoidance Parameters](tuning_parameters/collision_avoidance_parameters.mdx) - -In future releases, we will describe how the user can [Customize their UI](user_interface_customization.mdx) +--- +title: "Tuning Overview" +sidebar_label: "Tuning Overview" +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +The scope of Appendix C is to provide information on how to tune the various components of +OutdoorNav. + +Instructions for tuning specific platform types can be found here: + +- [Differential Drive (Skid-Steer) Dynamics](tuning_instructions/differential_drive_dynamics.mdx) +- [Ackermann Drive Dynamics](tuning_instructions/ackermann_drive_dynamics.mdx) + + +Lists of parameters related to each component of the autonomy can be found here: + +- [Localization Parameters](tuning_parameters/localization_parameters.mdx) +- [Navigation Parameters](tuning_parameters/navigation_parameters.mdx) +- [Collision Avoidance Parameters](tuning_parameters/collision_avoidance_parameters.mdx) + +In future releases, we will describe how the user can [Customize their UI](user_interface_customization.mdx) as well as how to [Customize which Sensors](sensor_customization.mdx) are input into OutdoorNav. \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.12.0/customized_tuning/tuning_parameters/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.12.0/customized_tuning/tuning_parameters/_category_.json index fb6592a9..0e2dc60a 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.12.0/customized_tuning/tuning_parameters/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.12.0/customized_tuning/tuning_parameters/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Tuning Parameters", - "position": 3 -} +{ + "label": "Tuning Parameters", + "position": 3 +} diff --git a/outdoornav_user_manual_versioned_docs/version-0.12.0/customized_tuning/tuning_parameters/navigation_parameters.mdx b/outdoornav_user_manual_versioned_docs/version-0.12.0/customized_tuning/tuning_parameters/navigation_parameters.mdx index b88562a4..d4a2b559 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.12.0/customized_tuning/tuning_parameters/navigation_parameters.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.12.0/customized_tuning/tuning_parameters/navigation_parameters.mdx @@ -1,169 +1,169 @@ ---- -title: "Navigation Parameters" -sidebar_label: "Navigation Parameters" -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 3 ---- - -import versions from "@site/static/versions.js" - -## Controllers {#controllers} - -### Determine the file location of the parameter {#file_location} - -The parameters related to the controller, can be found here: - -``` bash -/opt/onav//app/autonomy/params//navigation/controls_general.yaml -/opt/onav//app/autonomy/params//navigation/mpc_controller.yaml -/opt/onav//app/autonomy/params//navigation/mpc_dock_controller.yaml -``` - -If they are not listed in the above file, it is because they are using the default values and are not being overwritten. - -### MPC Controller {#controller} - -#### MBF Plugins - -Currently we have implemented a Move-Base Flex controller plugin named: **OnavMbfMpcController** - -Two instances of this plugin are loaded at runtime by our navigation node (as seen in the table below). The parameters are equivalent for each instance of the plugin but the values of certain of these parameters are different. - -| Controller name | Description | -|-----------------|-------------| -| **`mpc_controller`** | The controller used during normal navigation and applies to tracking the paths generated between all the mission waypoints. | -| **`mpc_dock_controller`** | The controller used during docking and applies only to tracking the dock and undock paths. | - -#### MPC State Machine - -The MPC controller operates as a state machine that contains the following states: - -| MPC State | Description | Condition | -|-----------|-------------|-----------| -| **`DEFAULT`** | Standard tracking behavior. | Will revert to this state if none of the other state conditions are met. | -| **`GOAL`** | Tracking behavior as the UGV approaches the goal. | Will enter GOAL mode when the `goal_horizon_threshold` parameter distance to the goal has been reached.| -| **`PRECISE`** | State when more precision is required in the tracking. | At the start of the path, we begin in Precise mode to ensure that we have a good start to tracking.| -| **`RESCUE`** | State to rescue the tracker when the UGV is stuck. | Will enter RESCUE mode when UGV is appraching a condition that make it stuck.| -| **`HYSTERESIS`** | State when you the UGV requires compensation for tire flexion. | Will enter HYSTERESIS mode when the UGV detects that it will begin oscillating due to tire deformation. | -| **`CORNER`** | State when there is a curve or a corner ahead. | Will enter CORNER mode when the UGV approaches, within a `corner_lookahead` parameter distance, to a corner with at least `corner_detection_threshold` of a curvature.| - -#### Default State Parameters {#default_state_params} - -The following list defines the default parameters that the MPC controller uses. -For the most part, they apply to all states of the MPC controller. - -| Parameter | Description | Namespace | SI Units | -|-----------|-------------|-----------|:--------:| -| `vehicle_length` | The length (longitudinally) of the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | -| `mpc_horizon` | The prediction horizon of the MPC. | [/navigation/*<controller>*/path_tracker](#file_location) | **s** | -| `max_lookahead` | Maximum distance along the path we seek to follow. Affects how far we do collision checks as well as the maximum velocity of the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | -| `min_lookahead` | Minimum distance along the path we seek to follow. Affects how far we do collision checks as well as the maximum velocity of the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | -| `lookahead_smoother` | Factor between 0 and 1 that determines the smoothness of the change in lookahead distance: 0 means only maximum velocity is used to determine the horizon (can be jumpy but speeds up the UGV faster); 1 means only averaged planned velocity is used to determine the horizon (smoother but speeds up the UGV slowly). | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `lookahead_factor` | How aggressively do we want to increase the lookahead from min_lookahead to max_lookahead | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `mpc_opt_maxiteration` | The maximum number of iterations that the solver will run. Increase this value for better performance, decrease for shorter computation time. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `discretization_steps` | Number of grid points along the MPC prediction; Lower: less accuracy, but faster | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `max_fwd_velocity` | The maximum allowable linear velocity that the MPC controller can compute. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | -| `min_fwd_velocity` | The minimum allowable linear velocity, in any mode, that the MPC controller can compute. This can be used to overcome the different deadbands that different UGVs may have. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | -| `max_rev_velocity` | The maximum allowable reverse linear velocity (ie. positive value), in any mode, that the MPC controller can compute. By default this is set to the `max_fwd_velocity`, so only needed if your maximum linear reverse velocity is different than the forward linear velocity.| [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | -| `max_ang_velocity` | The maximum allowable angular velocity, in any mode, that the MPC controller can compute. This parameter bounds both positive and negative angular velocities. | [/navigation/*<controller>*/path_tracker](#file_location) | **rad/s** | -| `max_accel` | The maximum allowable linear acceleration, in normal navigation mode, that the MPC controller can compute. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s/s** | -| `max_decel` | The maximum allowable linear deceleration (ie. negative value), in any mode, that the MPC controller can compute. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s/s** | -| `max_ang_accel` | The maximum allowable angular acceleration, in any mode, that the MPC controller can compute. This parameter bounds both positive and negative angular accelerations. | [/navigation/*<controller>*/path_tracker](#file_location) | **rad/s/s** | -| `max_lateral_accel` | The maximum allowable lateral acceleration, in any mode, that the MPC controller can compute. This parameter bounds both positive and negative lateral accelerations. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s/s** | -| `stiction_compensator_fwd` | The minimum linear velocity for movement of the UGV. This should typically be the minimum linear velocity that the UGV requires for it to move. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | -| `stiction_compensator_yaw` | The minimum angular velocity for movement of the UGV. This should typically be the minimum angular velocity that the UGV requires for it to move. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | -| `x_weight` | Weight for state x in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `y_weight` | Weight for state y in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `yaw_weight` | Weight for state yaw in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `fwd_v_weight` | Weight for state ẋ (forward velocity) in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `yaw_d_weight` | Weight for state (yaw velocity) in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `fwd_a_weight` | Weight for state ẍ (forward acceleration) in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `yaw_a_weight` | Weight for state (yaw acceleration) in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `horizon_percent_change` | The percentage factor used when shortening the MPC horizon. This will affect how quickly we want to speed up after a curvature slowdown. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `error_slowdown_multiplier` | The amount by which to increase the MPC horizon based on the crosstrack and/or heading error. This should be greater than 1.0 since increasing the MPC horizon will decrease the maximum MPC velocity. ** Less than 1.0 will result in the opposite behaviour which is not the expected behaviour for this parameter. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `crosstrackerror_slowdown` | Threshold on the amount of crosstrack error, above which to a slowdown the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `headingerror_slowdown` | Threshold on the amount of heading error, above which to a slowdown the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `curvature_slowdown` | Threshold on the path curvature, above which to a slowdown the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `endpoint_multiplier` | Weight multiplier of the very last point along the local plan segment in MPC state: DEFAULT. This value ensures convergence/stability of the optimizer by mimicking the MPCs infinite horizon by applying a terminal cost. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `shrinking_horizon_min` | The minimum horizon that will be used in the computation. This value will prevent the horizon from dropping below this value during all the horizon adjustments. | [/navigation/*<controller>*/path_tracker](#file_location) | **s** | -| `crosstrack_tolerance` | The amount of lateral error that the controller will handle before stopping the UGV and replanning a new path. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | -| `reference_trajectory_factor` | A factor that will skew the path parameter. This value should be between 0 and 1. Values closer to 0.0 will skew the path param closer to the UGV, decreasing speed but increasing the accuracy of the path tracking, and vice versa as you approach 1.0. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | - -#### Goal State Parameters {#goal_state_params} - -The following parameters can be modified to tune the controller as it approaches -the goal point as well as its behavior around the goal point. - -| Parameter | Description | Namespace | SI Units | -|-----------|-------------|-----------|:--------:| -| `goal_horizon_threshold` | The distance from the goal point which the MPC state will switch into state: GOAL , and begin reducing the horizon accordingly. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | -| `goal_slowdown_multiplier` | The multiplier by which to increase the MPC horizon during the MPCs GOAL state in order to slow the UGV down from its top speed. This value should be greater than 1.0. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `max_speed_at_goal` | The maximum allowable speed at the goal point for the controller to stop and consider the goal complete. On OEM UGVs, this value should be increased. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | -| `x_weight_goal` | Weight for state x in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `y_weight_goal` | Weight for state y in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `yaw_weight_goal` | Weight for state yaw in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `fwd_v_weight_goal` | Weight for state ẋ (forward velocity) in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `yaw_d_weight_goal` | Weight for state (yaw velocity) in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `fwd_a_weight_goal` | Weight for state ẍ (forward acceleration) in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `yaw_a_weight_goal` | Weight for state (yaw acceleration) in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `endpoint_multiplier_goal` | Weight multiplier of the very last point along the local plan segment in MPC state: GOAL. This value ensures convergence/stability of the optimizer by mimicking the MPCs infinite horizon by applying a terminal cost. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `goal_tolerance_xy_rtk` | The (x, y) tolerance value (ie. radius) assigned to a goal, when RTK is enabled, in order to determine whether or not to consider the goal complete. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | -| `goal_tolerance_yaw_rtk` | The yaw tolerance value (ie. heading) assigned to a goal, when RTK is enabled, in order to determine whether or not to consider the goal complete. | [/navigation/*<controller>*/path_tracker](#file_location) | **rad** | -| `goal_tolerance_xy_nortk` | The (x, y) tolerance value (ie. radius) assigned to a goal, when RTK is disabled, in order to determine whether or not to consider the goal complete. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | -| `goal_tolerance_yaw_nortk` | The yaw tolerance value (ie. heading) assigned to a goal, when RTK is disabled, in order to determine whether or not to consider the goal complete. | [/navigation/*<controller>*/path_tracker](#file_location) | **rad** | - -#### Corner State Parameters {#corner_state_params} - -The following parameters can be modified to tune the behavior of the controller during and as it -as it approaches corners. - -| Parameter | Description | Namespace | SI Units | -|-----------|-------------|-----------|:--------:| -| `corner_segment_slowdown` | Flag to enable/disable the slowdown behaviour in MPC state: CORNER | [/navigation/*<controller>*/path_tracker](#file_location)| **bool** | -| `corner_lookahead` | The distance on the reference path from the UGVs current location, along which to determine if a corner is present. If a corner is present the MPC state will switch to CORNER state and begin reducing the horizon accordingly. | [/navigation/*<controller>*/path_tracker](#file_location)| **m** | -| `corner_detection_threshold` | Threshold on the path curvature, between the UGVs current location and the end of the corner_lookahead distance, above which to switch the MPC in state: CORNER, and begin reducing the horizon accordingly. | [/navigation/*<controller>*/path_tracker](#file_location)| **rad** | -| `corner_slowdown_multiplier` | The multiplier by which to increase the MPC horizon during the MPCs CORNER state in order to slow the UGV down from its top speed. This value should be greater than 1.0. | [/navigation/*<controller>*/path_tracker](#file_location)| **--** | -| `endpoint_multiplier_corner` | Weight multiplier of the very last point along the local plan segment in MPC state: CORNER. This value ensures convergence/stability of the optimizer by mimicking the MPCs infinite horizon by applying a terminal cost. | [/navigation/*<controller>*/path_tracker](#file_location)| **--** | - -#### OEM Specific Parameters {#oem_tuning_params} - -When tuning the controller on a third-party OEM UGV, there are several other considerations -that we will not have taken into account during the tuning of our UGVs. Below, we define -parameters that may be modified to tune the controller for your third-party OEM UGV. - -##### UGV Dynamics {#platform_dynamics_params} - -The following parameters can be used to modify the dynamics model that the contrller uses to -compute command velocities. - -| Parameter | Description | Namespace | SI Units | -|-----------|-------------|-----------|:--------:| -| `no_turn_on_spot_motion` | Flag to enable/disable turn on spot motion. By default, the MPC motion model is represented by a differential drive kinematics. This parameter will modify the MPC motion model to remove turn in place motions and bias the motion in the forward direction. | [/navigation/*<controller>*/path_tracker](#file_location) | - | -| `min_fwd_turn` | | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `pivot_point_offset_x` | The longitudinal offset that can be applied to the MPC model in order to account for a particular UGVs center of rotation | [/navigation/*<controller>*/path_tracker](#file_location) | - | -| `pivot_point_offset_y` | The lateral offset that can be applied to the MPC model in order to account for a particular UGVs center of rotation | [/navigation/*<controller>*/path_tracker](#file_location) | - | -| `min_fwd_turn` | | [/navigation/*<controller>*/path_tracker](#file_location) | **--**| - -##### Delay Compensation {#delay_compensation_params} - -The following parameters can be used to compensate for any delays that are present in the system. - -| Parameter | Description | Namespace | SI Units | -|-----------|-------------|-----------|:--------:| -| `enable_delay_compensation` | A boolean flag to enable/disable the delay compensation feature. The delay compensation feature is used to compensate for low-level dynamics delays that may be present in the UGV to be controlled. The user can apply an input controller delay and the feature will compute command velocities that compensate for such a delay. | [/navigation/*<controller>*/path_tracker](#file_location) | **bool** | -| `controller_delay` | The amount of controller delay that the delay compensation feature will attempt to compensate for, in ms. | [/navigation/*<controller>*/path_tracker](#file_location) | **ms** | - -##### Stop Distance {#stop_distance_params} - -The following parameters can be used to set a specific stop distance away from obstacles. - -| Parameter | Description | Namespace | SI Units | -|-----------|-------------|-----------|:--------:| -| `enable_stop_distance` | A flag to use enable/disable the stop distance feature. The stop distance feature forces the UGV to stop a specified distance in front of obstacles. | [/navigation/*<controller>*/path_tracker](#file_location) | **bool** | -| `obstacle_stop_distance` | The distance at which the UGV will stop in front of a detected obstacle. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | - - -## Path Planners {#path_planners} - -Information incoming in release 0.9. Please contact Clearpath customer support at \ to discuss the issue. +--- +title: "Navigation Parameters" +sidebar_label: "Navigation Parameters" +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 3 +--- + +import versions from "@site/static/versions.js" + +## Controllers {#controllers} + +### Determine the file location of the parameter {#file_location} + +The parameters related to the controller, can be found here: + +``` bash +/opt/onav//app/autonomy/params//navigation/controls_general.yaml +/opt/onav//app/autonomy/params//navigation/mpc_controller.yaml +/opt/onav//app/autonomy/params//navigation/mpc_dock_controller.yaml +``` + +If they are not listed in the above file, it is because they are using the default values and are not being overwritten. + +### MPC Controller {#controller} + +#### MBF Plugins + +Currently we have implemented a Move-Base Flex controller plugin named: **OnavMbfMpcController** + +Two instances of this plugin are loaded at runtime by our navigation node (as seen in the table below). The parameters are equivalent for each instance of the plugin but the values of certain of these parameters are different. + +| Controller name | Description | +|-----------------|-------------| +| **`mpc_controller`** | The controller used during normal navigation and applies to tracking the paths generated between all the mission waypoints. | +| **`mpc_dock_controller`** | The controller used during docking and applies only to tracking the dock and undock paths. | + +#### MPC State Machine + +The MPC controller operates as a state machine that contains the following states: + +| MPC State | Description | Condition | +|-----------|-------------|-----------| +| **`DEFAULT`** | Standard tracking behavior. | Will revert to this state if none of the other state conditions are met. | +| **`GOAL`** | Tracking behavior as the UGV approaches the goal. | Will enter GOAL mode when the `goal_horizon_threshold` parameter distance to the goal has been reached.| +| **`PRECISE`** | State when more precision is required in the tracking. | At the start of the path, we begin in Precise mode to ensure that we have a good start to tracking.| +| **`RESCUE`** | State to rescue the tracker when the UGV is stuck. | Will enter RESCUE mode when UGV is appraching a condition that make it stuck.| +| **`HYSTERESIS`** | State when you the UGV requires compensation for tire flexion. | Will enter HYSTERESIS mode when the UGV detects that it will begin oscillating due to tire deformation. | +| **`CORNER`** | State when there is a curve or a corner ahead. | Will enter CORNER mode when the UGV approaches, within a `corner_lookahead` parameter distance, to a corner with at least `corner_detection_threshold` of a curvature.| + +#### Default State Parameters {#default_state_params} + +The following list defines the default parameters that the MPC controller uses. +For the most part, they apply to all states of the MPC controller. + +| Parameter | Description | Namespace | SI Units | +|-----------|-------------|-----------|:--------:| +| `vehicle_length` | The length (longitudinally) of the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | +| `mpc_horizon` | The prediction horizon of the MPC. | [/navigation/*<controller>*/path_tracker](#file_location) | **s** | +| `max_lookahead` | Maximum distance along the path we seek to follow. Affects how far we do collision checks as well as the maximum velocity of the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | +| `min_lookahead` | Minimum distance along the path we seek to follow. Affects how far we do collision checks as well as the maximum velocity of the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | +| `lookahead_smoother` | Factor between 0 and 1 that determines the smoothness of the change in lookahead distance: 0 means only maximum velocity is used to determine the horizon (can be jumpy but speeds up the UGV faster); 1 means only averaged planned velocity is used to determine the horizon (smoother but speeds up the UGV slowly). | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `lookahead_factor` | How aggressively do we want to increase the lookahead from min_lookahead to max_lookahead | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `mpc_opt_maxiteration` | The maximum number of iterations that the solver will run. Increase this value for better performance, decrease for shorter computation time. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `discretization_steps` | Number of grid points along the MPC prediction; Lower: less accuracy, but faster | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `max_fwd_velocity` | The maximum allowable linear velocity that the MPC controller can compute. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | +| `min_fwd_velocity` | The minimum allowable linear velocity, in any mode, that the MPC controller can compute. This can be used to overcome the different deadbands that different UGVs may have. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | +| `max_rev_velocity` | The maximum allowable reverse linear velocity (ie. positive value), in any mode, that the MPC controller can compute. By default this is set to the `max_fwd_velocity`, so only needed if your maximum linear reverse velocity is different than the forward linear velocity.| [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | +| `max_ang_velocity` | The maximum allowable angular velocity, in any mode, that the MPC controller can compute. This parameter bounds both positive and negative angular velocities. | [/navigation/*<controller>*/path_tracker](#file_location) | **rad/s** | +| `max_accel` | The maximum allowable linear acceleration, in normal navigation mode, that the MPC controller can compute. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s/s** | +| `max_decel` | The maximum allowable linear deceleration (ie. negative value), in any mode, that the MPC controller can compute. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s/s** | +| `max_ang_accel` | The maximum allowable angular acceleration, in any mode, that the MPC controller can compute. This parameter bounds both positive and negative angular accelerations. | [/navigation/*<controller>*/path_tracker](#file_location) | **rad/s/s** | +| `max_lateral_accel` | The maximum allowable lateral acceleration, in any mode, that the MPC controller can compute. This parameter bounds both positive and negative lateral accelerations. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s/s** | +| `stiction_compensator_fwd` | The minimum linear velocity for movement of the UGV. This should typically be the minimum linear velocity that the UGV requires for it to move. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | +| `stiction_compensator_yaw` | The minimum angular velocity for movement of the UGV. This should typically be the minimum angular velocity that the UGV requires for it to move. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | +| `x_weight` | Weight for state x in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `y_weight` | Weight for state y in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `yaw_weight` | Weight for state yaw in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `fwd_v_weight` | Weight for state ẋ (forward velocity) in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `yaw_d_weight` | Weight for state (yaw velocity) in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `fwd_a_weight` | Weight for state ẍ (forward acceleration) in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `yaw_a_weight` | Weight for state (yaw acceleration) in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `horizon_percent_change` | The percentage factor used when shortening the MPC horizon. This will affect how quickly we want to speed up after a curvature slowdown. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `error_slowdown_multiplier` | The amount by which to increase the MPC horizon based on the crosstrack and/or heading error. This should be greater than 1.0 since increasing the MPC horizon will decrease the maximum MPC velocity. ** Less than 1.0 will result in the opposite behaviour which is not the expected behaviour for this parameter. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `crosstrackerror_slowdown` | Threshold on the amount of crosstrack error, above which to a slowdown the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `headingerror_slowdown` | Threshold on the amount of heading error, above which to a slowdown the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `curvature_slowdown` | Threshold on the path curvature, above which to a slowdown the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `endpoint_multiplier` | Weight multiplier of the very last point along the local plan segment in MPC state: DEFAULT. This value ensures convergence/stability of the optimizer by mimicking the MPCs infinite horizon by applying a terminal cost. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `shrinking_horizon_min` | The minimum horizon that will be used in the computation. This value will prevent the horizon from dropping below this value during all the horizon adjustments. | [/navigation/*<controller>*/path_tracker](#file_location) | **s** | +| `crosstrack_tolerance` | The amount of lateral error that the controller will handle before stopping the UGV and replanning a new path. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | +| `reference_trajectory_factor` | A factor that will skew the path parameter. This value should be between 0 and 1. Values closer to 0.0 will skew the path param closer to the UGV, decreasing speed but increasing the accuracy of the path tracking, and vice versa as you approach 1.0. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | + +#### Goal State Parameters {#goal_state_params} + +The following parameters can be modified to tune the controller as it approaches +the goal point as well as its behavior around the goal point. + +| Parameter | Description | Namespace | SI Units | +|-----------|-------------|-----------|:--------:| +| `goal_horizon_threshold` | The distance from the goal point which the MPC state will switch into state: GOAL , and begin reducing the horizon accordingly. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | +| `goal_slowdown_multiplier` | The multiplier by which to increase the MPC horizon during the MPCs GOAL state in order to slow the UGV down from its top speed. This value should be greater than 1.0. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `max_speed_at_goal` | The maximum allowable speed at the goal point for the controller to stop and consider the goal complete. On OEM UGVs, this value should be increased. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | +| `x_weight_goal` | Weight for state x in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `y_weight_goal` | Weight for state y in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `yaw_weight_goal` | Weight for state yaw in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `fwd_v_weight_goal` | Weight for state ẋ (forward velocity) in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `yaw_d_weight_goal` | Weight for state (yaw velocity) in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `fwd_a_weight_goal` | Weight for state ẍ (forward acceleration) in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `yaw_a_weight_goal` | Weight for state (yaw acceleration) in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `endpoint_multiplier_goal` | Weight multiplier of the very last point along the local plan segment in MPC state: GOAL. This value ensures convergence/stability of the optimizer by mimicking the MPCs infinite horizon by applying a terminal cost. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `goal_tolerance_xy_rtk` | The (x, y) tolerance value (ie. radius) assigned to a goal, when RTK is enabled, in order to determine whether or not to consider the goal complete. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | +| `goal_tolerance_yaw_rtk` | The yaw tolerance value (ie. heading) assigned to a goal, when RTK is enabled, in order to determine whether or not to consider the goal complete. | [/navigation/*<controller>*/path_tracker](#file_location) | **rad** | +| `goal_tolerance_xy_nortk` | The (x, y) tolerance value (ie. radius) assigned to a goal, when RTK is disabled, in order to determine whether or not to consider the goal complete. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | +| `goal_tolerance_yaw_nortk` | The yaw tolerance value (ie. heading) assigned to a goal, when RTK is disabled, in order to determine whether or not to consider the goal complete. | [/navigation/*<controller>*/path_tracker](#file_location) | **rad** | + +#### Corner State Parameters {#corner_state_params} + +The following parameters can be modified to tune the behavior of the controller during and as it +as it approaches corners. + +| Parameter | Description | Namespace | SI Units | +|-----------|-------------|-----------|:--------:| +| `corner_segment_slowdown` | Flag to enable/disable the slowdown behaviour in MPC state: CORNER | [/navigation/*<controller>*/path_tracker](#file_location)| **bool** | +| `corner_lookahead` | The distance on the reference path from the UGVs current location, along which to determine if a corner is present. If a corner is present the MPC state will switch to CORNER state and begin reducing the horizon accordingly. | [/navigation/*<controller>*/path_tracker](#file_location)| **m** | +| `corner_detection_threshold` | Threshold on the path curvature, between the UGVs current location and the end of the corner_lookahead distance, above which to switch the MPC in state: CORNER, and begin reducing the horizon accordingly. | [/navigation/*<controller>*/path_tracker](#file_location)| **rad** | +| `corner_slowdown_multiplier` | The multiplier by which to increase the MPC horizon during the MPCs CORNER state in order to slow the UGV down from its top speed. This value should be greater than 1.0. | [/navigation/*<controller>*/path_tracker](#file_location)| **--** | +| `endpoint_multiplier_corner` | Weight multiplier of the very last point along the local plan segment in MPC state: CORNER. This value ensures convergence/stability of the optimizer by mimicking the MPCs infinite horizon by applying a terminal cost. | [/navigation/*<controller>*/path_tracker](#file_location)| **--** | + +#### OEM Specific Parameters {#oem_tuning_params} + +When tuning the controller on a third-party OEM UGV, there are several other considerations +that we will not have taken into account during the tuning of our UGVs. Below, we define +parameters that may be modified to tune the controller for your third-party OEM UGV. + +##### UGV Dynamics {#platform_dynamics_params} + +The following parameters can be used to modify the dynamics model that the contrller uses to +compute command velocities. + +| Parameter | Description | Namespace | SI Units | +|-----------|-------------|-----------|:--------:| +| `no_turn_on_spot_motion` | Flag to enable/disable turn on spot motion. By default, the MPC motion model is represented by a differential drive kinematics. This parameter will modify the MPC motion model to remove turn in place motions and bias the motion in the forward direction. | [/navigation/*<controller>*/path_tracker](#file_location) | - | +| `min_fwd_turn` | | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `pivot_point_offset_x` | The longitudinal offset that can be applied to the MPC model in order to account for a particular UGVs center of rotation | [/navigation/*<controller>*/path_tracker](#file_location) | - | +| `pivot_point_offset_y` | The lateral offset that can be applied to the MPC model in order to account for a particular UGVs center of rotation | [/navigation/*<controller>*/path_tracker](#file_location) | - | +| `min_fwd_turn` | | [/navigation/*<controller>*/path_tracker](#file_location) | **--**| + +##### Delay Compensation {#delay_compensation_params} + +The following parameters can be used to compensate for any delays that are present in the system. + +| Parameter | Description | Namespace | SI Units | +|-----------|-------------|-----------|:--------:| +| `enable_delay_compensation` | A boolean flag to enable/disable the delay compensation feature. The delay compensation feature is used to compensate for low-level dynamics delays that may be present in the UGV to be controlled. The user can apply an input controller delay and the feature will compute command velocities that compensate for such a delay. | [/navigation/*<controller>*/path_tracker](#file_location) | **bool** | +| `controller_delay` | The amount of controller delay that the delay compensation feature will attempt to compensate for, in ms. | [/navigation/*<controller>*/path_tracker](#file_location) | **ms** | + +##### Stop Distance {#stop_distance_params} + +The following parameters can be used to set a specific stop distance away from obstacles. + +| Parameter | Description | Namespace | SI Units | +|-----------|-------------|-----------|:--------:| +| `enable_stop_distance` | A flag to use enable/disable the stop distance feature. The stop distance feature forces the UGV to stop a specified distance in front of obstacles. | [/navigation/*<controller>*/path_tracker](#file_location) | **bool** | +| `obstacle_stop_distance` | The distance at which the UGV will stop in front of a detected obstacle. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | + + +## Path Planners {#path_planners} + +Information incoming in release 0.9. Please contact Clearpath customer support at \ to discuss the issue. diff --git a/outdoornav_user_manual_versioned_docs/version-0.12.0/customized_tuning/user_interface_customization.mdx b/outdoornav_user_manual_versioned_docs/version-0.12.0/customized_tuning/user_interface_customization.mdx index c67bca22..1e7d39c9 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.12.0/customized_tuning/user_interface_customization.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.12.0/customized_tuning/user_interface_customization.mdx @@ -1,9 +1,9 @@ ---- -title: "UI Customization" -sidebar_label: "UI Customization" -sidebar_position: 4 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -Information incoming in a future release. Please contact Clearpath customer support at \ to discuss any related issue. +--- +title: "UI Customization" +sidebar_label: "UI Customization" +sidebar_position: 4 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +Information incoming in a future release. Please contact Clearpath customer support at \ to discuss any related issue. diff --git a/outdoornav_user_manual_versioned_docs/version-0.12.0/faq.mdx b/outdoornav_user_manual_versioned_docs/version-0.12.0/faq.mdx index 374e05b3..ec2efaef 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.12.0/faq.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.12.0/faq.mdx @@ -1,194 +1,194 @@ ---- -title: Frequently Asked Questions -sidebar_label: Frequently Asked Questions -sidebar_position: 10 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -## General - -1. **How do I start, pause or stop a mission?** - - A mission can be started in a few different ways, i) through the web user interface (See [Mission Execution](./web_user_interface/ui_waypoint_mode.mdx#mission-execution)) or, - ii) through the ROS API (See [API Examples](./api/api_examples/api_examples.mdx)). - -2. **When I start a mission the UGV does not move. What could be the - problem?** - - There could be one of several reasons for why this is happening: - - 1. Check that none of the onboard Motion-Stop actuators are - activated. - 2. Check that none of the wireless Motion-Stops are engaged. This - can be checked via the UI (a red Status Indicator means - Motion-Stop is engaged) or the onboard UGV lights (will flash - when Motion-Stop is engaged). - 3. If OutdoorNav is running on a Clearpath Robotics Warthog UGV - that is programmed with a Futaba controller, then ensure that - the controller is turned off. If it is on then it will be - sending "no motion" commands that will be overriding the - autonomy commands. - 4. Check the task settings for each Waypoint in the Mission. - A missing task setting for a Move PTZ task will block the - execution of the Mission it is in. - -3. **What version of ROS is compatible with OutdoorNav?** - - Currently OutdoorNav is developed in ROS 1 (and is built in Docker containers on top of ROS 1 Noetic). - So, the recommended ROS version is ROS 1 Noetic. However, although not recommended, it is still - possible to use ROS 1 Melodic. Some issues may arise related to the mismatched message types. - Also, if trying to run any python scripts as Melodic targets Python2, whereas Noetic targets Python3. - - Finally, official ROS 2 compatibility is currently unsupported. In theory, if you only have ROS 2 installed - on your system, you can try to install ROS 1 Noetic as well and set up a ros1_to_ros2 bridge. Since the - OutdoorNav software is packaged in Dockers, it will communicate directly ROS 1 and then the data can be - redirected by the ros1_to_ros2 bridge to ROS 2. - -4. **How can I record ROS data?** - - There are two ways to record ROS data. The first is [through the UI](./features/rosbag_recorder.mdx) and the - second is the more traditional method of accessing the command line of the UGV's computer and running - [rosbag record commands](http://wiki.ros.org/rosbag/Commandline). - -5. **Where do all the video/audio/images get saved from the mission tasks?** - - All of the data that gets saved (ROSbags, video recordings, audio recordings, and saved images) gets stored on - UGV's computer at the following location: `/opt/onav/saved_files/...` - -## Autonomy - -1. **Am I able to send the UGV on a repeated loop?** - - When generating a single mission on the UI or through the API, it is not possible for the - mission to start at the location of the robot and end at the location of the robot. This has to do with - the navigation thinking that the UGV has already arrived at its goal and will not generate a path through - the Waypoints. However, it is possible to split the mission into two missions (ie. one to go to a - location and the second to return to the starting point). With these two missions you will then either be - able to send each mission one after the other or you can use the [Mission Scheduler](./features/mission_scheduler.mdx). - Add the two missions to the schedule and you will have the ability to also repeat this loop as many times as needed. - -2. **Why is surveying failing?** - - There are several checks that should be done: - - - Check that the base station is powered on, and that all the devices inside are powered on. - - From the UGV's computer, check that you can ping the base station. - -``` bash -ping 192.168.131.30 -``` - -  If all of these tests PASS, contact [Support](./support.mdx). - -3. **Is it possible to increase the maximum velocity of the UGV?** - - The OutdoorNav software has been tune for specific maximum velocities depending on the platform, - 1.2 m/s, 1.0 m/s and 2.0 m/s for Jackal, Husky and Warthog UGVs, respectively. The Husky maximum velocity - is 1.0 m/s so increasing above this is not possible however if you would like to increase the maximum - velocity for either the Jackal or the Warthog, further tuning may be required. Consult the - [tuning guide](./customized_tuning/tuning_instructions/differential_drive_dynamics.mdx) and contact - [Support](./support.mdx) if required. - -4. **My robot it detecting too many obstacles and replanning too frequently. How can I resolve this?** - - Please consult the [Limitations](./features/collision_avoidance.mdx#limitations) section of the collisison - avoidance feature. It will describe some limits to the obstaacle detection and can help you improve the - smoothness of the navigation. - -5. **I am getting a 'Robot too far off path warning'. What should I do?** - - These types of warnings appear on the UI under two conditions: - i) If the robot indicator (blue arrow on the UI) is not within 3.0 meters of the first Waypoint (the Green one on the UI). - ii) If the robot is outside of the allowable navigable space (defined by the path contraint, default: 3.0 meters around the reference path). - Enable the visualization of the [path contraint](./web_user_interface/ui_waypoint_mode.mdx#constrained_path) and Teleop the robot back into the - navigable space. - -6. **How can I remove certain sensors from the collision avoidance pipeline?** - - If your robot is equipped with collision avoidance sensors (eg. Velodyne, Hokuyo, Sick LMS), it is - possible to enable/disable the throughput of each sensor data into the collision avoidance pipeline. - Consult the [Collision Avoidance](./features/collision_avoidance.mdx) section for these instructions. - -7. **Can I use OutdoorNav without using the UI?** - - We empower customers to send mission via either the UI or our [ROS 1 API](./api/api_overview.mdx). Through this - API, you are enabled to write either CPP code or Python scripts where you would generate your mission, survey the base station, - set the datum, assign [custom tasks](./features/custom_tasks.mdx) to your mission. If using Python, we provide a set of libraries that - speed up the develpment process. See some of the [example codes](./api/api_examples/api_examples.mdx) for an idea of how to generate these scripts. - -## Web User Interface - -1. **How do I delete a waypoint on the UI?** - - Make sure the **Edit Missions** toggle is enabled, then click the - **Waypoint Mode** button. Now you can click the Waypoint you wish to - delete. A drop down list will appear. Select **Delete**. - -2. **How do I add a Task to a Waypoint on the UI?** - - See [Add Task to Waypoint](./web_user_interface/ui_waypoint_mode.mdx#add-task) for information on how - to add a Task to a Waypoint. - -3. **Why is the "Save Image" Task failing?** - - Check the Waypoints that have a **Save Image** task in the Waypoint panel. - If you see a red warning triangle beside the **Save Image** task it means - that the settings for this task were not properly set. Set them and rerun - the mission. - -4. **Are we able to make any changes to the UI?** - - Unfortunately, users are not currently enabled to make modifications to the user interface. - This feature will be available in a future release. Please direct any feature requests to [Support](./support.mdx). - -5. **What to do if my custom task is not working?** - - Ensure that you have followed the [Custom Tasks](./features/custom_tasks.mdx) instructions. When adding the - custom task to a Waypoint, it is important to double check that all the [fields](./web_user_interface/ui_waypoint_mode.mdx#add-task) - for your custom task are correct. - -6. **Why are either of the GNSS Status indicator (POS and/or DIR) on the UI not Green?** - - i) If the **POS** indicator is YELLOW, and you are using an RTK base station: - - Check communication between the robot and the base station by pinging 192.168.131.30 (from the UGV's computer) - - Re-survey the base station - - Access the [Swift Console](https://support.swiftnav.com/support/solutions/articles/44001391679-swift-console) using - the both the base station IP (192.168.131.30) and the position unit IP (192.168.131.31) and ensure that certain - settings are set correctly: - On the base station unit: - 1) surveyed_position/broadcast = True - tcp_server1/mode = SBP - tcp_server1/enabled sbp messages = 72,74,117,65535,114 - tcp_server1/address = 55556 - On the position unit: - 2) tcp_client0/mode = SBP - tcp_client0/enabled sbp messages = 0 - tcp_client0/address = 192.168.131.30:55556 - ii) If the **POS** indicator is RED: - - Check communication between the robot and the position GNSS unit by pinging 192.168.131.31 (from the UGV's computer) - - Access the [Swift Console](https://support.swiftnav.com/support/solutions/articles/44001391679-swift-console) using - the position unit IP (192.168.131.31) and ensure that the unit is working by checking that satellites are being - tracked in the "Tracking" tab. - - iii) If the **DIR** indicator is YELLOW, - - Access the [Swift Console](https://support.swiftnav.com/support/solutions/articles/44001391679-swift-console) using - the position unit IP (192.168.131.31) and the heading unit IP (192.168.131.32), and ensure that certain - settings are set correctly: - On the position unit: - 1) tcp_server1/mode = SBP - tcp_server1/enabled sbp messages = 74,117 - tcp_server1/address = 55556 - On the heading unit: - 2) tcp_client0/mode = SBP - tcp_client0/enabled sbp messages = 0 - tcp_client0/address = 192.168.131.31:55556 - solution/dgnss_solution_mode = Time Matched - solution/heading offset = 0 - solution/send heading = True - solution/soln freq = 5 - solution/output ever n obs = 1 - - iv) If the **DIR** indicator is RED: - - Check communication between the robot and the position GNSS unit by pinging 192.168.131.31 (from the UGV's computer) - +--- +title: Frequently Asked Questions +sidebar_label: Frequently Asked Questions +sidebar_position: 10 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +## General + +1. **How do I start, pause or stop a mission?** + + A mission can be started in a few different ways, i) through the web user interface (See [Mission Execution](./web_user_interface/ui_waypoint_mode.mdx#mission-execution)) or, + ii) through the ROS API (See [API Examples](./api/api_examples/api_examples.mdx)). + +2. **When I start a mission the UGV does not move. What could be the + problem?** + + There could be one of several reasons for why this is happening: + + 1. Check that none of the onboard Motion-Stop actuators are + activated. + 2. Check that none of the wireless Motion-Stops are engaged. This + can be checked via the UI (a red Status Indicator means + Motion-Stop is engaged) or the onboard UGV lights (will flash + when Motion-Stop is engaged). + 3. If OutdoorNav is running on a Clearpath Robotics Warthog UGV + that is programmed with a Futaba controller, then ensure that + the controller is turned off. If it is on then it will be + sending "no motion" commands that will be overriding the + autonomy commands. + 4. Check the task settings for each Waypoint in the Mission. + A missing task setting for a Move PTZ task will block the + execution of the Mission it is in. + +3. **What version of ROS is compatible with OutdoorNav?** + + Currently OutdoorNav is developed in ROS 1 (and is built in Docker containers on top of ROS 1 Noetic). + So, the recommended ROS version is ROS 1 Noetic. However, although not recommended, it is still + possible to use ROS 1 Melodic. Some issues may arise related to the mismatched message types. + Also, if trying to run any python scripts as Melodic targets Python2, whereas Noetic targets Python3. + + Finally, official ROS 2 compatibility is currently unsupported. In theory, if you only have ROS 2 installed + on your system, you can try to install ROS 1 Noetic as well and set up a ros1_to_ros2 bridge. Since the + OutdoorNav software is packaged in Dockers, it will communicate directly ROS 1 and then the data can be + redirected by the ros1_to_ros2 bridge to ROS 2. + +4. **How can I record ROS data?** + + There are two ways to record ROS data. The first is [through the UI](./features/rosbag_recorder.mdx) and the + second is the more traditional method of accessing the command line of the UGV's computer and running + [rosbag record commands](http://wiki.ros.org/rosbag/Commandline). + +5. **Where do all the video/audio/images get saved from the mission tasks?** + + All of the data that gets saved (ROSbags, video recordings, audio recordings, and saved images) gets stored on + UGV's computer at the following location: `/opt/onav/saved_files/...` + +## Autonomy + +1. **Am I able to send the UGV on a repeated loop?** + + When generating a single mission on the UI or through the API, it is not possible for the + mission to start at the location of the robot and end at the location of the robot. This has to do with + the navigation thinking that the UGV has already arrived at its goal and will not generate a path through + the Waypoints. However, it is possible to split the mission into two missions (ie. one to go to a + location and the second to return to the starting point). With these two missions you will then either be + able to send each mission one after the other or you can use the [Mission Scheduler](./features/mission_scheduler.mdx). + Add the two missions to the schedule and you will have the ability to also repeat this loop as many times as needed. + +2. **Why is surveying failing?** + + There are several checks that should be done: + + - Check that the base station is powered on, and that all the devices inside are powered on. + - From the UGV's computer, check that you can ping the base station. + +``` bash +ping 192.168.131.30 +``` + +  If all of these tests PASS, contact [Support](./support.mdx). + +3. **Is it possible to increase the maximum velocity of the UGV?** + + The OutdoorNav software has been tune for specific maximum velocities depending on the platform, + 1.2 m/s, 1.0 m/s and 2.0 m/s for Jackal, Husky and Warthog UGVs, respectively. The Husky maximum velocity + is 1.0 m/s so increasing above this is not possible however if you would like to increase the maximum + velocity for either the Jackal or the Warthog, further tuning may be required. Consult the + [tuning guide](./customized_tuning/tuning_instructions/differential_drive_dynamics.mdx) and contact + [Support](./support.mdx) if required. + +4. **My robot it detecting too many obstacles and replanning too frequently. How can I resolve this?** + + Please consult the [Limitations](./features/collision_avoidance.mdx#limitations) section of the collisison + avoidance feature. It will describe some limits to the obstaacle detection and can help you improve the + smoothness of the navigation. + +5. **I am getting a 'Robot too far off path warning'. What should I do?** + + These types of warnings appear on the UI under two conditions: + i) If the robot indicator (blue arrow on the UI) is not within 3.0 meters of the first Waypoint (the Green one on the UI). + ii) If the robot is outside of the allowable navigable space (defined by the path contraint, default: 3.0 meters around the reference path). + Enable the visualization of the [path contraint](./web_user_interface/ui_waypoint_mode.mdx#constrained_path) and Teleop the robot back into the + navigable space. + +6. **How can I remove certain sensors from the collision avoidance pipeline?** + + If your robot is equipped with collision avoidance sensors (eg. Velodyne, Hokuyo, Sick LMS), it is + possible to enable/disable the throughput of each sensor data into the collision avoidance pipeline. + Consult the [Collision Avoidance](./features/collision_avoidance.mdx) section for these instructions. + +7. **Can I use OutdoorNav without using the UI?** + + We empower customers to send mission via either the UI or our [ROS 1 API](./api/api_overview.mdx). Through this + API, you are enabled to write either CPP code or Python scripts where you would generate your mission, survey the base station, + set the datum, assign [custom tasks](./features/custom_tasks.mdx) to your mission. If using Python, we provide a set of libraries that + speed up the develpment process. See some of the [example codes](./api/api_examples/api_examples.mdx) for an idea of how to generate these scripts. + +## Web User Interface + +1. **How do I delete a waypoint on the UI?** + + Make sure the **Edit Missions** toggle is enabled, then click the + **Waypoint Mode** button. Now you can click the Waypoint you wish to + delete. A drop down list will appear. Select **Delete**. + +2. **How do I add a Task to a Waypoint on the UI?** + + See [Add Task to Waypoint](./web_user_interface/ui_waypoint_mode.mdx#add-task) for information on how + to add a Task to a Waypoint. + +3. **Why is the "Save Image" Task failing?** + + Check the Waypoints that have a **Save Image** task in the Waypoint panel. + If you see a red warning triangle beside the **Save Image** task it means + that the settings for this task were not properly set. Set them and rerun + the mission. + +4. **Are we able to make any changes to the UI?** + + Unfortunately, users are not currently enabled to make modifications to the user interface. + This feature will be available in a future release. Please direct any feature requests to [Support](./support.mdx). + +5. **What to do if my custom task is not working?** + + Ensure that you have followed the [Custom Tasks](./features/custom_tasks.mdx) instructions. When adding the + custom task to a Waypoint, it is important to double check that all the [fields](./web_user_interface/ui_waypoint_mode.mdx#add-task) + for your custom task are correct. + +6. **Why are either of the GNSS Status indicator (POS and/or DIR) on the UI not Green?** + + i) If the **POS** indicator is YELLOW, and you are using an RTK base station: + - Check communication between the robot and the base station by pinging 192.168.131.30 (from the UGV's computer) + - Re-survey the base station + - Access the [Swift Console](https://support.swiftnav.com/support/solutions/articles/44001391679-swift-console) using + the both the base station IP (192.168.131.30) and the position unit IP (192.168.131.31) and ensure that certain + settings are set correctly: + On the base station unit: + 1) surveyed_position/broadcast = True + tcp_server1/mode = SBP + tcp_server1/enabled sbp messages = 72,74,117,65535,114 + tcp_server1/address = 55556 + On the position unit: + 2) tcp_client0/mode = SBP + tcp_client0/enabled sbp messages = 0 + tcp_client0/address = 192.168.131.30:55556 + ii) If the **POS** indicator is RED: + - Check communication between the robot and the position GNSS unit by pinging 192.168.131.31 (from the UGV's computer) + - Access the [Swift Console](https://support.swiftnav.com/support/solutions/articles/44001391679-swift-console) using + the position unit IP (192.168.131.31) and ensure that the unit is working by checking that satellites are being + tracked in the "Tracking" tab. + + iii) If the **DIR** indicator is YELLOW, + - Access the [Swift Console](https://support.swiftnav.com/support/solutions/articles/44001391679-swift-console) using + the position unit IP (192.168.131.31) and the heading unit IP (192.168.131.32), and ensure that certain + settings are set correctly: + On the position unit: + 1) tcp_server1/mode = SBP + tcp_server1/enabled sbp messages = 74,117 + tcp_server1/address = 55556 + On the heading unit: + 2) tcp_client0/mode = SBP + tcp_client0/enabled sbp messages = 0 + tcp_client0/address = 192.168.131.31:55556 + solution/dgnss_solution_mode = Time Matched + solution/heading offset = 0 + solution/send heading = True + solution/soln freq = 5 + solution/output ever n obs = 1 + + iv) If the **DIR** indicator is RED: + - Check communication between the robot and the position GNSS unit by pinging 192.168.131.31 (from the UGV's computer) + diff --git a/outdoornav_user_manual_versioned_docs/version-0.12.0/features/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.12.0/features/_category_.json index 732c6cb7..3bf04f17 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.12.0/features/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.12.0/features/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "OutdoorNav Features", - "position": 8 -} +{ + "label": "OutdoorNav Features", + "position": 8 +} diff --git a/outdoornav_user_manual_versioned_docs/version-0.12.0/features/assisted_teleoperation.mdx b/outdoornav_user_manual_versioned_docs/version-0.12.0/features/assisted_teleoperation.mdx index 74f5e010..036ffe22 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.12.0/features/assisted_teleoperation.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.12.0/features/assisted_teleoperation.mdx @@ -1,105 +1,105 @@ ---- -title: Assisted Teleoperation -sidebar_label: Assisted Teleoperation -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -:::danger SAFETY WARNING - -Making changes to any of the following variables will decrease system safety. It is recommended that users -only modify these parameters in consultation with [Clearpath Robotics Support](../support.mdx). - -::: - -:::note - -Changes to any of the following variables will only take effect after power cycling the UGV. - -::: - - -As of version 0.12.0, the OutdoorNav software contains an assisted teleoperation feature that will help users -teleoperate their UGV safely, without worry of colliding into obstacles. - -
-
- -
Block Diagram of Assisted Teleoperation Twist Mux
-
-
- - -The assisted teleoperation feature is intended to work with the following sources of velocity input: - -| Input source | Topic | -|--------------|--------| -| UI Joystick | `/ui_teleop/cmd_vel` | -| PS4 Controlller | `/bluetooth_teleop/cmd_vel` or `/joy_teleop/cmd_vel`| -| Logitech Controller | `/joy_teleop/cmd_vel` | - - -The Assisted teleop feature will **NOT** work on the following sources of velocity input: - -| Input source | Topic | -|--------------|-------| -| External Command | `/cmd_vel` | -| Keyboard Command | `/kb_teleop/cmd_vel` | -| Interactive Marker | `/twist_marker_server/cmd_vel` | - -The Assisted Teleoperation feature can be activated/deactivated according to your required application requirements. -This can be done by setting the **ENABLE_ASSISTED_TELEOP** environment variable in the -`/opt/onav//config/autonomy.env` file, where *onav_version* -is the currently running version of OutdoorNav. - -## Functionality - -The intended purpose for the assisted teleoperation feature is to provide some software level safety for users while they are teleoperating the UGV. -This feature is intended to solely provide software level safety and does not use any hardware level PLCs to trigger a motor disconnect. It is to be -treated as a tool that provides a sense of security to the user, such that they will not accidentally crash the UGV any obstacles. The feature -constantly monitors the 2D/3D LiDAR sensor data that it is provided and uses this information to control the velocity of the UGV. As the UGV -approaches obstacles, it will decrease the velocity of the UGV and will bring the UGV to a complete stop if the user continues to drive -towards the oncoming obstacle. - -For visualization details of the assisted teleoperation feature, please consult the [UI Manual Mode](../web_user_interface/ui_manual_mode.mdx) page. - -### Enable/Disable from the UI - -From the OutdoorNav UI you are able to enable/disable the "Teleop Assist" by using the toggle that is located by the UI joystick. - -### Enable/Disable using Joystick - -To disable the "Teleop Assist" when driving the UGV with the PS4 or Logitech controllers, you will need to press and hold the following button: - -| Controller Type | Button | -|--------------|-------| -| PS4 controller | **O** | -| Logitech controller | **B** | - -### Error/Warnings - -OutdoorNav will throw warnings and display them on the UI related to the status of the assisted teleoperation feature. -Below are the errors/warnings you may see: - -| Error/Warning | Reason | -|---------------|--------| -| **"Error: Failed to communicate with the Assisted Teleop node"** | The assisted teleoperation node is not running or has crashed | -| **"Error: No sensors configured"** | The assisted teleoperation node is running but no sensors have been configured to be used as obstacle detection sources | -| **"Error: Invalid twist_mux configuration"** | The twists mux configuration has been modified and does not satisfy the requirements for safe operation under the requirements of assisted teleoperation | -| **"Error: Unknown platform type"** | The assisted teleoperation node cannot determine the type of platform you are on | -| **"WARNING: Assisted teleoperation OFF due to service"** | The UI toggle switch or the `/assisted_teleop/enable` service has disabled assisted teloperation | -| **"WARNING: Assisted teleoperation OFF due to joystick override"** | The enable/disable button on the UGV remote joystick has been pressed | -| **"WARNING: Assisted teleoperation OFF due to sensor timeout"** | Communication has been lost between the assisted teloperation node and one of the configured 2D/3D detection sensors. | -| **"Warning: Robot is in a collision state and cannot be driven while assisted teleop is enabled. Please disable assisted teleop to recover."** | The robot is is a state where is is too close to an obstacle. This will mostly occur when you are at a charge dock but may also occur if you are driving/rotating in a tight space. You may need to disable the Teleop Assist to continue remote operation | - - -## Limitations - -The assisted teleoperation features has similar limitations to those of our collision avoidance features. -Performance degradation will be experiences in rain and/or snow conditions, as well as in tall grass environments. -The assisted teleoperation feature also only work if obstacles are detected by the 3D sensors. If obstacles appear -in any of the UGVs blind spots, the assisted teleoperation feature will not prevent collision with these obstacles. +--- +title: Assisted Teleoperation +sidebar_label: Assisted Teleoperation +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +:::danger SAFETY WARNING + +Making changes to any of the following variables will decrease system safety. It is recommended that users +only modify these parameters in consultation with [Clearpath Robotics Support](../support.mdx). + +::: + +:::note + +Changes to any of the following variables will only take effect after power cycling the UGV. + +::: + + +As of version 0.12.0, the OutdoorNav software contains an assisted teleoperation feature that will help users +teleoperate their UGV safely, without worry of colliding into obstacles. + +
+
+ +
Block Diagram of Assisted Teleoperation Twist Mux
+
+
+ + +The assisted teleoperation feature is intended to work with the following sources of velocity input: + +| Input source | Topic | +|--------------|--------| +| UI Joystick | `/ui_teleop/cmd_vel` | +| PS4 Controlller | `/bluetooth_teleop/cmd_vel` or `/joy_teleop/cmd_vel`| +| Logitech Controller | `/joy_teleop/cmd_vel` | + + +The Assisted teleop feature will **NOT** work on the following sources of velocity input: + +| Input source | Topic | +|--------------|-------| +| External Command | `/cmd_vel` | +| Keyboard Command | `/kb_teleop/cmd_vel` | +| Interactive Marker | `/twist_marker_server/cmd_vel` | + +The Assisted Teleoperation feature can be activated/deactivated according to your required application requirements. +This can be done by setting the **ENABLE_ASSISTED_TELEOP** environment variable in the +`/opt/onav//config/autonomy.env` file, where *onav_version* +is the currently running version of OutdoorNav. + +## Functionality + +The intended purpose for the assisted teleoperation feature is to provide some software level safety for users while they are teleoperating the UGV. +This feature is intended to solely provide software level safety and does not use any hardware level PLCs to trigger a motor disconnect. It is to be +treated as a tool that provides a sense of security to the user, such that they will not accidentally crash the UGV any obstacles. The feature +constantly monitors the 2D/3D LiDAR sensor data that it is provided and uses this information to control the velocity of the UGV. As the UGV +approaches obstacles, it will decrease the velocity of the UGV and will bring the UGV to a complete stop if the user continues to drive +towards the oncoming obstacle. + +For visualization details of the assisted teleoperation feature, please consult the [UI Manual Mode](../web_user_interface/ui_manual_mode.mdx) page. + +### Enable/Disable from the UI + +From the OutdoorNav UI you are able to enable/disable the "Teleop Assist" by using the toggle that is located by the UI joystick. + +### Enable/Disable using Joystick + +To disable the "Teleop Assist" when driving the UGV with the PS4 or Logitech controllers, you will need to press and hold the following button: + +| Controller Type | Button | +|--------------|-------| +| PS4 controller | **O** | +| Logitech controller | **B** | + +### Error/Warnings + +OutdoorNav will throw warnings and display them on the UI related to the status of the assisted teleoperation feature. +Below are the errors/warnings you may see: + +| Error/Warning | Reason | +|---------------|--------| +| **"Error: Failed to communicate with the Assisted Teleop node"** | The assisted teleoperation node is not running or has crashed | +| **"Error: No sensors configured"** | The assisted teleoperation node is running but no sensors have been configured to be used as obstacle detection sources | +| **"Error: Invalid twist_mux configuration"** | The twists mux configuration has been modified and does not satisfy the requirements for safe operation under the requirements of assisted teleoperation | +| **"Error: Unknown platform type"** | The assisted teleoperation node cannot determine the type of platform you are on | +| **"WARNING: Assisted teleoperation OFF due to service"** | The UI toggle switch or the `/assisted_teleop/enable` service has disabled assisted teloperation | +| **"WARNING: Assisted teleoperation OFF due to joystick override"** | The enable/disable button on the UGV remote joystick has been pressed | +| **"WARNING: Assisted teleoperation OFF due to sensor timeout"** | Communication has been lost between the assisted teloperation node and one of the configured 2D/3D detection sensors. | +| **"Warning: Robot is in a collision state and cannot be driven while assisted teleop is enabled. Please disable assisted teleop to recover."** | The robot is is a state where is is too close to an obstacle. This will mostly occur when you are at a charge dock but may also occur if you are driving/rotating in a tight space. You may need to disable the Teleop Assist to continue remote operation | + + +## Limitations + +The assisted teleoperation features has similar limitations to those of our collision avoidance features. +Performance degradation will be experiences in rain and/or snow conditions, as well as in tall grass environments. +The assisted teleoperation feature also only work if obstacles are detected by the 3D sensors. If obstacles appear +in any of the UGVs blind spots, the assisted teleoperation feature will not prevent collision with these obstacles. diff --git a/outdoornav_user_manual_versioned_docs/version-0.12.0/features/custom_tasks.mdx b/outdoornav_user_manual_versioned_docs/version-0.12.0/features/custom_tasks.mdx index 5b117699..056e3ff5 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.12.0/features/custom_tasks.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.12.0/features/custom_tasks.mdx @@ -1,206 +1,206 @@ ---- -title: Custom Tasks -sidebar_label: Custom Tasks -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -Users can create their custom tasks for their application following a specific template. -When creating these tasks, the user should begin by creating a python file in the -**/opt/onav/\/app/custom_tasks/** directory, where *onav_version* -is the currently running version of OutdoorNav. The file should be written following -the instructions provided below: - -1. Import the `custom_task_base` package. - -```python -#!/usr/bin/python3 - -from onav_tasks.custom_task_base import * -``` - -2. The user should then create a class name to replace `CustomTask` and initialize it with the -`CustomTaskBase`'s __init__ function and the action server name for the task. - -```python -class CustomTask(CustomTaskBase): - def __init__(self): - # The derived class must always call the super() and provide the action server name. - # This name will need to be unique among custom tasks and must match what is in the - # UI. - super().__init__("custom_task_name") -``` - -:::note - -The `CustomTaskBase` exposes a `SimpleActionServer` (see here -for further details) object as `_as`, a `UITaskFeedback` object as `_feedback` and a `UITaskResults` object as `_result` to be used as part of -the tasks functionality. - -::: - -3. The last requirement is that the `CustomTask` needs to have the `run_task(self, goal)` function be defined, -which takes in the UITaskGoal. - -```python - def run_task(self, goal): -``` - -:::note - -When running the task users may handle errors through the action servers `set_aborted()` function. When this function is called the entire mission -will be aborted. - -::: - -4. Restarting the UGV will trigger the system to load the custom task that was created, making it available for mission use. -If a custom task is not configured properly the custom task manager will ignore the task and proceed loading in the next task while logging an error with ROS. - - -## Sample Custom Tasks - -### Input Looper - -Below is a sample template file named "input_looper.py" which iterates throught the two data variables and publishes them to the feedback -topic. If neither of the variables have any data in them the task is aborted. - -```python -#!/usr/bin/python3 - -from onav_tasks.custom_task_base import * - -class InputLooperTask(CustomTaskBase): - def __init__(self): - # The derived class must always call the super() and provide the action server name. - # This name will need to be unique among custom tasks and must match what is in the - # UI. - super().__init__("input_looper") - - def run_task(self, goal): - if len(goal.strings) == 0 and len(goal.floats) == 0: - # Task and running mission will be aborted in this case - self._as.set_aborted() - return False - - # Loop through the strings and float values and publish them each to the /input_looper/feedback topic - for string in goal.strings: - self._feedback.state = string - self._as.publish_feedback(self._feedback) - - for num in goal.floats: - self._feedback.state = str(num) - self._as.publish_feedback(self._feedback) - - # Returning True or False will not currently impact the mission but will write the current state to the - # /task/result topic accordingly. - return True -``` - -### Record GNSS Data - -Below is a sample custom task file named "record_gnss.py" which outputs the current GNSS data to the console. - -```python -#!/usr/bin/python3 - -from onav_tasks.custom_task_base import * -from sensor_msgs.msg import NavSatFix -from threading import Lock -import rospy - -class RecorGNSSTask(CustomTaskBase): - def __init__(self): - super().__init__("record_gnss") - self._sub = rospy.Subscriber("/sensors/gps_0/fix", NavSatFix, self.gpsSubscriberCallback) - self.gps_lat = 0.0 - self.gps_lon = 0.0 - self._gps_coordinates_lock = Lock() - - def run_task(self, goal): - feedback = UITaskFeedback() - feedback.state = 'Recording GNSS lat/lon' - self._as.publish_feedback(feedback) - msg = "" - with self._gps_coordinates_lock: - msg = "ID: %f Name: %s Latitude: %f Longitude: %f" % ( - goal.floats[0], goal.strings[0], self.gps_lat, self.gps_lon) - rospy.loginfo(msg) - return True - - def gpsSubscriberCallback(self, msg): - with self._gps_coordinates_lock: - self.gps_lat = msg.latitude - self.gps_lon = msg.longitude -``` - - -### Move PTZ camera to a Lat/Lon - -Below is a more advanced custom task. The file is "move_ptz_lat_lon.py" which pans a PTZ camera to point to a specific lat/lon coordinate. - -```python -from onav_tasks.custom_task_base import * -import actionlib -from clearpath_localization_msgs.srv import * -from clearpath_navigation_msgs.msg import * -from nav_msgs.msg import Odometry -from ptz_action_server_msgs.msg import PtzAction -import ptz_action_server_msgs.msg -import math -from math import remainder, tau -import rospy -from sensor_msgs import * -from tf.transformations import euler_from_quaternion, quaternion_from_euler - - - -class MovePtzLatLon(CustomTaskBase): - def __init__(self): - super().__init__("move_ptz_lat_lon") - self.localization_subscriber_ = rospy.Subscriber("/localization/odom", Odometry, self.localizationCallback) - self.move_ptz_client_ = actionlib.SimpleActionClient('/sensors/camera_0/move_ptz', PtzAction) - self.service_ = rospy.ServiceProxy('/localization/lat_lon_to_xy', ConvertLatLonToCartesian) - self.current_pose = Odometry() - - def localizationCallback(self, odom_msg): - self.current_pose = odom_msg - - def run_task(self, goal): - if len(goal.strings) == 0 and len(goal.floats) == 0: - rospy.logwarn('Warning') - self._as.set_aborted() - return False - goal_latitude = goal.floats[0] - goal_longitude = goal.floats[1] - goal_zoom = goal.floats[2] - str2 = 'Received goal latitude: ' + str(goal_latitude) + ', goal longitude: ' + str(goal_longitude) + ', zoom: ' + str(goal_zoom) - feedback = UITaskFeedback() - feedback.state = 'Aiming camera at lat-lon (' + str(goal_latitude) + ', ' + str(goal_longitude)+')' - self._as.publish_feedback(feedback) - orientation_q = self.current_pose.pose.pose.orientation - orientation_list = [orientation_q.x, orientation_q.y, orientation_q.z, orientation_q.w] - (roll, pitch, yaw) = euler_from_quaternion (orientation_list) - - gps_msg = sensor_msgs.msg.NavSatFix() - gps_msg.latitude = goal_latitude - gps_msg.longitude = goal_longitude - goal_utm = self.service_(gps_msg) - - goal_x = goal_utm.pose.pose.position.x - goal_y = goal_utm.pose.pose.position.y - - goal_angle = math.atan2(goal_y - self.current_pose.pose.pose.position.y, goal_x - self.current_pose.pose.pose.position.x) - pan_angle = math.remainder(goal_angle - yaw, math.tau) - print(pan_angle) - - self.move_ptz_client_.wait_for_server() - goal = ptz_action_server_msgs.msg.PtzGoal() - goal.pan=pan_angle - goal.tilt=0 - goal.zoom=goal_zoom - self.move_ptz_client_.send_goal(goal) - self.move_ptz_client_.wait_for_result() - print(self.move_ptz_client_.get_result()) - return True -``` +--- +title: Custom Tasks +sidebar_label: Custom Tasks +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +Users can create their custom tasks for their application following a specific template. +When creating these tasks, the user should begin by creating a python file in the +**/opt/onav/\/app/custom_tasks/** directory, where *onav_version* +is the currently running version of OutdoorNav. The file should be written following +the instructions provided below: + +1. Import the `custom_task_base` package. + +```python +#!/usr/bin/python3 + +from onav_tasks.custom_task_base import * +``` + +2. The user should then create a class name to replace `CustomTask` and initialize it with the +`CustomTaskBase`'s __init__ function and the action server name for the task. + +```python +class CustomTask(CustomTaskBase): + def __init__(self): + # The derived class must always call the super() and provide the action server name. + # This name will need to be unique among custom tasks and must match what is in the + # UI. + super().__init__("custom_task_name") +``` + +:::note + +The `CustomTaskBase` exposes a `SimpleActionServer` (see here +for further details) object as `_as`, a `UITaskFeedback` object as `_feedback` and a `UITaskResults` object as `_result` to be used as part of +the tasks functionality. + +::: + +3. The last requirement is that the `CustomTask` needs to have the `run_task(self, goal)` function be defined, +which takes in the UITaskGoal. + +```python + def run_task(self, goal): +``` + +:::note + +When running the task users may handle errors through the action servers `set_aborted()` function. When this function is called the entire mission +will be aborted. + +::: + +4. Restarting the UGV will trigger the system to load the custom task that was created, making it available for mission use. +If a custom task is not configured properly the custom task manager will ignore the task and proceed loading in the next task while logging an error with ROS. + + +## Sample Custom Tasks + +### Input Looper + +Below is a sample template file named "input_looper.py" which iterates throught the two data variables and publishes them to the feedback +topic. If neither of the variables have any data in them the task is aborted. + +```python +#!/usr/bin/python3 + +from onav_tasks.custom_task_base import * + +class InputLooperTask(CustomTaskBase): + def __init__(self): + # The derived class must always call the super() and provide the action server name. + # This name will need to be unique among custom tasks and must match what is in the + # UI. + super().__init__("input_looper") + + def run_task(self, goal): + if len(goal.strings) == 0 and len(goal.floats) == 0: + # Task and running mission will be aborted in this case + self._as.set_aborted() + return False + + # Loop through the strings and float values and publish them each to the /input_looper/feedback topic + for string in goal.strings: + self._feedback.state = string + self._as.publish_feedback(self._feedback) + + for num in goal.floats: + self._feedback.state = str(num) + self._as.publish_feedback(self._feedback) + + # Returning True or False will not currently impact the mission but will write the current state to the + # /task/result topic accordingly. + return True +``` + +### Record GNSS Data + +Below is a sample custom task file named "record_gnss.py" which outputs the current GNSS data to the console. + +```python +#!/usr/bin/python3 + +from onav_tasks.custom_task_base import * +from sensor_msgs.msg import NavSatFix +from threading import Lock +import rospy + +class RecorGNSSTask(CustomTaskBase): + def __init__(self): + super().__init__("record_gnss") + self._sub = rospy.Subscriber("/sensors/gps_0/fix", NavSatFix, self.gpsSubscriberCallback) + self.gps_lat = 0.0 + self.gps_lon = 0.0 + self._gps_coordinates_lock = Lock() + + def run_task(self, goal): + feedback = UITaskFeedback() + feedback.state = 'Recording GNSS lat/lon' + self._as.publish_feedback(feedback) + msg = "" + with self._gps_coordinates_lock: + msg = "ID: %f Name: %s Latitude: %f Longitude: %f" % ( + goal.floats[0], goal.strings[0], self.gps_lat, self.gps_lon) + rospy.loginfo(msg) + return True + + def gpsSubscriberCallback(self, msg): + with self._gps_coordinates_lock: + self.gps_lat = msg.latitude + self.gps_lon = msg.longitude +``` + + +### Move PTZ camera to a Lat/Lon + +Below is a more advanced custom task. The file is "move_ptz_lat_lon.py" which pans a PTZ camera to point to a specific lat/lon coordinate. + +```python +from onav_tasks.custom_task_base import * +import actionlib +from clearpath_localization_msgs.srv import * +from clearpath_navigation_msgs.msg import * +from nav_msgs.msg import Odometry +from ptz_action_server_msgs.msg import PtzAction +import ptz_action_server_msgs.msg +import math +from math import remainder, tau +import rospy +from sensor_msgs import * +from tf.transformations import euler_from_quaternion, quaternion_from_euler + + + +class MovePtzLatLon(CustomTaskBase): + def __init__(self): + super().__init__("move_ptz_lat_lon") + self.localization_subscriber_ = rospy.Subscriber("/localization/odom", Odometry, self.localizationCallback) + self.move_ptz_client_ = actionlib.SimpleActionClient('/sensors/camera_0/move_ptz', PtzAction) + self.service_ = rospy.ServiceProxy('/localization/lat_lon_to_xy', ConvertLatLonToCartesian) + self.current_pose = Odometry() + + def localizationCallback(self, odom_msg): + self.current_pose = odom_msg + + def run_task(self, goal): + if len(goal.strings) == 0 and len(goal.floats) == 0: + rospy.logwarn('Warning') + self._as.set_aborted() + return False + goal_latitude = goal.floats[0] + goal_longitude = goal.floats[1] + goal_zoom = goal.floats[2] + str2 = 'Received goal latitude: ' + str(goal_latitude) + ', goal longitude: ' + str(goal_longitude) + ', zoom: ' + str(goal_zoom) + feedback = UITaskFeedback() + feedback.state = 'Aiming camera at lat-lon (' + str(goal_latitude) + ', ' + str(goal_longitude)+')' + self._as.publish_feedback(feedback) + orientation_q = self.current_pose.pose.pose.orientation + orientation_list = [orientation_q.x, orientation_q.y, orientation_q.z, orientation_q.w] + (roll, pitch, yaw) = euler_from_quaternion (orientation_list) + + gps_msg = sensor_msgs.msg.NavSatFix() + gps_msg.latitude = goal_latitude + gps_msg.longitude = goal_longitude + goal_utm = self.service_(gps_msg) + + goal_x = goal_utm.pose.pose.position.x + goal_y = goal_utm.pose.pose.position.y + + goal_angle = math.atan2(goal_y - self.current_pose.pose.pose.position.y, goal_x - self.current_pose.pose.pose.position.x) + pan_angle = math.remainder(goal_angle - yaw, math.tau) + print(pan_angle) + + self.move_ptz_client_.wait_for_server() + goal = ptz_action_server_msgs.msg.PtzGoal() + goal.pan=pan_angle + goal.tilt=0 + goal.zoom=goal_zoom + self.move_ptz_client_.send_goal(goal) + self.move_ptz_client_.wait_for_result() + print(self.move_ptz_client_.get_result()) + return True +``` diff --git a/outdoornav_user_manual_versioned_docs/version-0.12.0/features/mission_scheduler.mdx b/outdoornav_user_manual_versioned_docs/version-0.12.0/features/mission_scheduler.mdx index aef2ea67..27828578 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.12.0/features/mission_scheduler.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.12.0/features/mission_scheduler.mdx @@ -1,50 +1,50 @@ ---- -title: Mission Scheduler -sidebar_label: Mission Scheduler -sidebar_position: 4 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -### Scheduling missions - -By selecting the "SCHEDULER" option from the upper left hand menu, the user can open the Mission Scheduler interface. This interface -allows users to schedule groups of missions to run at a later time. These schedules can be set to run only once or to be looped over a period of time. -For example, a user could create a schedule that will run 3 missions starting at 9 AM and run every hour 8 times. Once the last iteration is run, the -schedule will disable itself and can be re-enabled to run again later. The view itself can be found in the image below and is elaborated further afterwards. - -:::note - -Presently only Waypoint Missions can be scheduled with the scheduler. A future update will allow users to schedule both Map and -Waypoint Missions together in a single schedule. - -::: - -
-
- -
Mission Scheduler View
-
-
- -#### Adding/Updating a Schedule - -The user can either create a new schedule by filling in the appropriate fields or edit a schedule by selecting the pencil icon for that schedule -in the bottom table. The input fields are outlined as follows: - -- Name: The name of the schedule. -- Start Time: The browser's local time that the schedule will start. This is stored as UTC time on the robot. -- Enabled: Enables/Disables the schedule. When schedules are completed they will disable themselves. -- Missions: The list of missions that will run. The schedule will run the missions in the order that they are added. -- Schedule Mode: Sets the kind of schedule mode to be either "Run Once" or "Looped". If it is set to run once, the next 2 inputs will be disabled. -- Loops: The number of iterations the schedule should run for. If for example it is set to Loop 5 times then the schedule will run 5 times (instead of run once and then re-runs 5 times). -- Loop Interval: The amount of time between the start of successive loop iterations. This is independent of the mission duration. -- Minimum Battery Charge: The minimum battery percentage that the UGV should be at to run the schedule. -- Timeout: The maximum amount of time to spend on running a single loop of the schedule. If a loop exceeds this timeout value the schedule is assumed to have failed and alerts the user - accordingly. This can be set to 0 to disable the timeout feature. - -#### Schedule Table - -Schedules found in the database are displayed in a simple table at the bottom of the screen. Schedules can be enabled, edited or deleted from this table through the -icons on the right hand side. The schedules can also be sorted by name or start time in ascending/descending order. The next schedule to run (if one is available) will have +--- +title: Mission Scheduler +sidebar_label: Mission Scheduler +sidebar_position: 4 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +### Scheduling missions + +By selecting the "SCHEDULER" option from the upper left hand menu, the user can open the Mission Scheduler interface. This interface +allows users to schedule groups of missions to run at a later time. These schedules can be set to run only once or to be looped over a period of time. +For example, a user could create a schedule that will run 3 missions starting at 9 AM and run every hour 8 times. Once the last iteration is run, the +schedule will disable itself and can be re-enabled to run again later. The view itself can be found in the image below and is elaborated further afterwards. + +:::note + +Presently only Waypoint Missions can be scheduled with the scheduler. A future update will allow users to schedule both Map and +Waypoint Missions together in a single schedule. + +::: + +
+
+ +
Mission Scheduler View
+
+
+ +#### Adding/Updating a Schedule + +The user can either create a new schedule by filling in the appropriate fields or edit a schedule by selecting the pencil icon for that schedule +in the bottom table. The input fields are outlined as follows: + +- Name: The name of the schedule. +- Start Time: The browser's local time that the schedule will start. This is stored as UTC time on the robot. +- Enabled: Enables/Disables the schedule. When schedules are completed they will disable themselves. +- Missions: The list of missions that will run. The schedule will run the missions in the order that they are added. +- Schedule Mode: Sets the kind of schedule mode to be either "Run Once" or "Looped". If it is set to run once, the next 2 inputs will be disabled. +- Loops: The number of iterations the schedule should run for. If for example it is set to Loop 5 times then the schedule will run 5 times (instead of run once and then re-runs 5 times). +- Loop Interval: The amount of time between the start of successive loop iterations. This is independent of the mission duration. +- Minimum Battery Charge: The minimum battery percentage that the UGV should be at to run the schedule. +- Timeout: The maximum amount of time to spend on running a single loop of the schedule. If a loop exceeds this timeout value the schedule is assumed to have failed and alerts the user + accordingly. This can be set to 0 to disable the timeout feature. + +#### Schedule Table + +Schedules found in the database are displayed in a simple table at the bottom of the screen. Schedules can be enabled, edited or deleted from this table through the +icons on the right hand side. The schedules can also be sorted by name or start time in ascending/descending order. The next schedule to run (if one is available) will have a small information icon next to it's name and will also be reported at the top of the screen. \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.12.0/features/navigation.mdx b/outdoornav_user_manual_versioned_docs/version-0.12.0/features/navigation.mdx index d2e0284d..5b4dfa2d 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.12.0/features/navigation.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.12.0/features/navigation.mdx @@ -1,38 +1,38 @@ ---- -title: Navigation Features -sidebar_label: Navigation Features -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -:::danger SAFETY WARNING - -Making changes to any of the following variables may decrease system safety. It is recommended that users -only modify these parameters in consultation with Clearpath Robotics Support. - -::: - -:::note - -Changes to any of the following variables will only take effect after power cycling the UGV. - -::: - -The OutdoorNav Software contains a set of features that can be enabled -or disabled according to your required application requirements. These -features can be enabled or disabled through the use of environment -variables, which should be added to the -`/opt/onav//config/autonomy.env` file, where *onav_version* -is the currently running version of OutdoorNav. The following table describes -the available features, their default state and any additional parameters -that we expose that may also be included to tune the feature. - -| Feature | Description | -|-----------------------------|----------------------------------------| -| **Collision Avoidance** | Collision avoidance is the UGV's ability to detect obstacles and stop/maneuver around the obstacle without any collisions. If `true`, the UGV will detect obstacles and if `false` no obstacles will be detected. Setting to `false` is not recommended and may cause harm to property or to individuals.

Environment Variable: `ENABLE_COLLISION_AVOIDANCE` (Default: `true`). | -| **Constrained Planning** | The constrained replanning feature, which is always enabled, restricts the area in which the UGV can plan paths. For example, if the default `PATH_CONSTRAINT` of 3.0 m is used, the UGV will not be allowed to 1) produce paths that drive it more than 3.0 meters from the initial path, and 2) fail to compute paths if the UGV is further than 3.0 meters from the any of the Waypoints. This allowable planning/navigation area can be shown on the map over the connecting lines between Waypoints. See [Constrained Replanning](../web_user_interface/ui_waypoint_mode.mdx#constrained_path) for further details.

Use the `PATH_CONSTRAINT` environment variable to modify the path constraint (in meters). | -| **Path Smoothing** | Generate paths according to a specified turning radius.

Environment Variable: `ENABLE_DUBINS_PATH_SMOOTHER` (Default: `false`).

Use the `TURN_RADIUS` environment variable to modify the radius of the planned paths (in meters). | -| **Stop Distance** | The stop distance feature allows the UGV to stop a predefined distance away from obstacles. This is useful if a UGV cannot drive in reverse and needs the required room in front of it to replan around an obstacle.

Environment Variable: `ENABLE_STOP_DISTANCE` (Default: `false`)

Use the `STOP_DISTANCE` environment variable to modify the stop distance (in meters). Note that if the stop distance is larger than 4.5 meters for the Clearpath Robotics Jackal and Husky UGVs, or 10.0 meters for the Clearpath Robotics Warthog UGV, the computational load will increase and may cause a decrease in performance in the navigation. | -| **Delay Compensation** | The delay compensation feature is able to compensate for mechanical delay on UGVs where either the accelerator introduces delay into the linear velocity or the steering introduces delay in the angular velocity. This feature is not required for Clearpath Robotics UGVs as negligible delay is present in our system.

Environment Variable: `ENABLE_DELAY_COMPENSATION` (Default: `false`)

Use the `CONTROLLER_DELAY` environment variable to modify the amount of delay to be compensated (in milliseconds). | -| **Docking** | If purchased, autonomous docking will allow the user to autonomously dock/undock their UGV. If not purchased, enabling this environment variable will do nothing.

Environment Variable: `OUTDORRNAV_ENABLE_DOCKING` (Default: `false`).| +--- +title: Navigation Features +sidebar_label: Navigation Features +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +:::danger SAFETY WARNING + +Making changes to any of the following variables may decrease system safety. It is recommended that users +only modify these parameters in consultation with Clearpath Robotics Support. + +::: + +:::note + +Changes to any of the following variables will only take effect after power cycling the UGV. + +::: + +The OutdoorNav Software contains a set of features that can be enabled +or disabled according to your required application requirements. These +features can be enabled or disabled through the use of environment +variables, which should be added to the +`/opt/onav//config/autonomy.env` file, where *onav_version* +is the currently running version of OutdoorNav. The following table describes +the available features, their default state and any additional parameters +that we expose that may also be included to tune the feature. + +| Feature | Description | +|-----------------------------|----------------------------------------| +| **Collision Avoidance** | Collision avoidance is the UGV's ability to detect obstacles and stop/maneuver around the obstacle without any collisions. If `true`, the UGV will detect obstacles and if `false` no obstacles will be detected. Setting to `false` is not recommended and may cause harm to property or to individuals.

Environment Variable: `ENABLE_COLLISION_AVOIDANCE` (Default: `true`). | +| **Constrained Planning** | The constrained replanning feature, which is always enabled, restricts the area in which the UGV can plan paths. For example, if the default `PATH_CONSTRAINT` of 3.0 m is used, the UGV will not be allowed to 1) produce paths that drive it more than 3.0 meters from the initial path, and 2) fail to compute paths if the UGV is further than 3.0 meters from the any of the Waypoints. This allowable planning/navigation area can be shown on the map over the connecting lines between Waypoints. See [Constrained Replanning](../web_user_interface/ui_waypoint_mode.mdx#constrained_path) for further details.

Use the `PATH_CONSTRAINT` environment variable to modify the path constraint (in meters). | +| **Path Smoothing** | Generate paths according to a specified turning radius.

Environment Variable: `ENABLE_DUBINS_PATH_SMOOTHER` (Default: `false`).

Use the `TURN_RADIUS` environment variable to modify the radius of the planned paths (in meters). | +| **Stop Distance** | The stop distance feature allows the UGV to stop a predefined distance away from obstacles. This is useful if a UGV cannot drive in reverse and needs the required room in front of it to replan around an obstacle.

Environment Variable: `ENABLE_STOP_DISTANCE` (Default: `false`)

Use the `STOP_DISTANCE` environment variable to modify the stop distance (in meters). Note that if the stop distance is larger than 4.5 meters for the Clearpath Robotics Jackal and Husky UGVs, or 10.0 meters for the Clearpath Robotics Warthog UGV, the computational load will increase and may cause a decrease in performance in the navigation. | +| **Delay Compensation** | The delay compensation feature is able to compensate for mechanical delay on UGVs where either the accelerator introduces delay into the linear velocity or the steering introduces delay in the angular velocity. This feature is not required for Clearpath Robotics UGVs as negligible delay is present in our system.

Environment Variable: `ENABLE_DELAY_COMPENSATION` (Default: `false`)

Use the `CONTROLLER_DELAY` environment variable to modify the amount of delay to be compensated (in milliseconds). | +| **Docking** | If purchased, autonomous docking will allow the user to autonomously dock/undock their UGV. If not purchased, enabling this environment variable will do nothing.

Environment Variable: `OUTDORRNAV_ENABLE_DOCKING` (Default: `false`).| diff --git a/outdoornav_user_manual_versioned_docs/version-0.12.0/features/rosbag_recorder.mdx b/outdoornav_user_manual_versioned_docs/version-0.12.0/features/rosbag_recorder.mdx index 70a6c687..25fa0cda 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.12.0/features/rosbag_recorder.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.12.0/features/rosbag_recorder.mdx @@ -1,34 +1,34 @@ ---- -title: ROSbag Recorder -sidebar_label: ROSbag Recorder -sidebar_position: 5 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -If you need to perform a quick rosbag recording from the UI you can do -so by navigating to the Settings dropdown in the upper left hand menu and -select **Start rosbag recording**. This will record a rosbag of the -following topics (or all the topics in the namespace if followed by a -`/*`): - -- '/rosout(.*)' -- '/twist_marker_server/(.*)' -- '/dock/(.*)' -- '/laser_target_tracker/(.*)' -- '/localization/(.*)' -- '/localization_core/(.*)' -- '/localization_helper/(.*)' -- '/mission/(.*)' -- '/navigation/(.*)' -- '/onboard_systems/(.*)' -- '/platform/(.*)' -- '/swiftnav/(.*)' -- '/sensors/gps(.*)' -- '/sensors/imu(.*)' -- '/target/(.*)' -- '/tf(.*)' - -To stop the recording navigate to the Settings drop down and select -**Stop rosbag recording**. This will save the rosbag with the date and -time as its file name in the `/opt/onav/saved_files/rosbags/` directory. +--- +title: ROSbag Recorder +sidebar_label: ROSbag Recorder +sidebar_position: 5 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +If you need to perform a quick rosbag recording from the UI you can do +so by navigating to the Settings dropdown in the upper left hand menu and +select **Start rosbag recording**. This will record a rosbag of the +following topics (or all the topics in the namespace if followed by a +`/*`): + +- '/rosout(.*)' +- '/twist_marker_server/(.*)' +- '/dock/(.*)' +- '/laser_target_tracker/(.*)' +- '/localization/(.*)' +- '/localization_core/(.*)' +- '/localization_helper/(.*)' +- '/mission/(.*)' +- '/navigation/(.*)' +- '/onboard_systems/(.*)' +- '/platform/(.*)' +- '/swiftnav/(.*)' +- '/sensors/gps(.*)' +- '/sensors/imu(.*)' +- '/target/(.*)' +- '/tf(.*)' + +To stop the recording navigate to the Settings drop down and select +**Stop rosbag recording**. This will save the rosbag with the date and +time as its file name in the `/opt/onav/saved_files/rosbags/` directory. diff --git a/outdoornav_user_manual_versioned_docs/version-0.12.0/getting_started/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.12.0/getting_started/_category_.json index 8b4a486d..9a9747ef 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.12.0/getting_started/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.12.0/getting_started/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Getting Started", - "position": 5 -} +{ + "label": "Getting Started", + "position": 5 +} diff --git a/outdoornav_user_manual_versioned_docs/version-0.12.0/getting_started/first_time_checklist.mdx b/outdoornav_user_manual_versioned_docs/version-0.12.0/getting_started/first_time_checklist.mdx index e7298e8a..9044c8da 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.12.0/getting_started/first_time_checklist.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.12.0/getting_started/first_time_checklist.mdx @@ -1,114 +1,114 @@ ---- -title: First Time Use Checklist -sidebar_label: First Time Use Checklist -sidebar_position: 2 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -## Hardware Setup - -### ☐ Has the Base Station been set up? - -Ensure that the Base Station has been set up approximately 5 meters -away from any buildings and is currently powered on. See -[System Startup](system_setup.mdx) for further -instructions related to setting up the Base Station. - -### ☐ Is the UGV connected to the Base Station? - -Check to see that the UGV can be pinged from the Base Station network. -See [Connecting to Web UI](system_setup.mdx#connecting_to_web_ui) for further -details. - -## Software Setup - -### ☐ Is ROS running on the UGV? - -SSH into the UGV and run `rostopic list` to generate a list of the -rostopics that are currently available. The list is generally fairly -long so if you are looking for any specific topic please refer to -[API Endpoints](../api/api_endpoints/api_endpoints.mdx). You can also check the -ROS status through the OutdoorNAV UI by referring to the diagnostics section -on the Status page. - -### ☐ Is the OutdoorNAV software running? - -Check to see if the relevant dockers are running (ssh into the UGV and -run `docker ps` which should show at least 5 separate docker containers -running). - -### ☐ Is the computer using the UI connected to the Base Station network? - -This can be confirmed by following the steps found in -[Connecting to Web UI](system_setup.mdx#connecting_to_web_ui). - -### ☐ Have you surveyed the Base Station? - -See [RTK Survey Positioning](../cpr_hardware.mdx#base-station-survey) for -information on how and when to survey the Base station. - -### ☐ Do you have a strong GPS signal? - -After surveying the Base Station check the upper right hand corner of -the UI to confirm that you have a strong GPS signal (the POS and DIR -icons should be green). If either of these icons are not green refer -to [Checking GPS RTK Fix](../cpr_hardware.mdx#base-station-survey) for further -troubleshooting information. - -### ☐ Is the map loading correctly? - -Currently the map requires internet access to load. Refer to -[Loading Map Tiles](system_setup.mdx#loading_map_tiles) for more details -related to setting up the map. - -### ☐ Has the Datum been set? - -See [Set Datum](system_setup.mdx#set-datum) for information on how -to set the Datum variables. - -### ☐ If docking is enabled has the location been set? - -If the Clearpath Robotics autonomous docking package was purchased the -docking location will need to be set. See -[Set Dock Location](system_setup.mdx#set-dock-location) for information on -how to set the docking location. - -### ☐ Is the Navbar status icon functioning? - -To check if the Navbar icon is functioning, trigger the UGV's motion stop -and check to see if it has turned to a red icon. Clicking the icon -will bring up the status information as well as any recent messages -(see below). - -![](/img/outdoornav_images/ugvStatusMessages.png) - -## Using the UI - -The following items are general checks to ensure that the UI is working -properly. - -### ☐ Can the virtual joystick drive the UGV? - -See [Web UI Manual Mode](../web_user_interface/ui_manual_mode.mdx) for further details -related to this. - -### ☐ Can you create a new mission? - -Select the mission list and then click on `Add Mission` to create a -new mission. To add new waypoints for the mission refer to -[Mission Creation](../web_user_interface/ui_waypoint_mode.mdx#mission-creation). - -### ☐ After creating a new mission, can you execute the mission? - -To execute a mission refer to [Mission Execution](../web_user_interface/ui_waypoint_mode.mdx#mission-execution). - -### ☐ Are the cameras (if present) active in the view bar section when running the mission? - -For more information related to camera views see -[Camera Views](../web_user_interface/ui_overview.mdx#camera-views). - -### ☐ Can you select a camera and save an image after it loads on the main screen? - -See [Pan-Tilt-Zoom (PTZ) View ](../web_user_interface/ui_overview.mdx#ptz-view) for more details related +--- +title: First Time Use Checklist +sidebar_label: First Time Use Checklist +sidebar_position: 2 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +## Hardware Setup + +### ☐ Has the Base Station been set up? + +Ensure that the Base Station has been set up approximately 5 meters +away from any buildings and is currently powered on. See +[System Startup](system_setup.mdx) for further +instructions related to setting up the Base Station. + +### ☐ Is the UGV connected to the Base Station? + +Check to see that the UGV can be pinged from the Base Station network. +See [Connecting to Web UI](system_setup.mdx#connecting_to_web_ui) for further +details. + +## Software Setup + +### ☐ Is ROS running on the UGV? + +SSH into the UGV and run `rostopic list` to generate a list of the +rostopics that are currently available. The list is generally fairly +long so if you are looking for any specific topic please refer to +[API Endpoints](../api/api_endpoints/api_endpoints.mdx). You can also check the +ROS status through the OutdoorNAV UI by referring to the diagnostics section +on the Status page. + +### ☐ Is the OutdoorNAV software running? + +Check to see if the relevant dockers are running (ssh into the UGV and +run `docker ps` which should show at least 5 separate docker containers +running). + +### ☐ Is the computer using the UI connected to the Base Station network? + +This can be confirmed by following the steps found in +[Connecting to Web UI](system_setup.mdx#connecting_to_web_ui). + +### ☐ Have you surveyed the Base Station? + +See [RTK Survey Positioning](../cpr_hardware.mdx#base-station-survey) for +information on how and when to survey the Base station. + +### ☐ Do you have a strong GPS signal? + +After surveying the Base Station check the upper right hand corner of +the UI to confirm that you have a strong GPS signal (the POS and DIR +icons should be green). If either of these icons are not green refer +to [Checking GPS RTK Fix](../cpr_hardware.mdx#base-station-survey) for further +troubleshooting information. + +### ☐ Is the map loading correctly? + +Currently the map requires internet access to load. Refer to +[Loading Map Tiles](system_setup.mdx#loading_map_tiles) for more details +related to setting up the map. + +### ☐ Has the Datum been set? + +See [Set Datum](system_setup.mdx#set-datum) for information on how +to set the Datum variables. + +### ☐ If docking is enabled has the location been set? + +If the Clearpath Robotics autonomous docking package was purchased the +docking location will need to be set. See +[Set Dock Location](system_setup.mdx#set-dock-location) for information on +how to set the docking location. + +### ☐ Is the Navbar status icon functioning? + +To check if the Navbar icon is functioning, trigger the UGV's motion stop +and check to see if it has turned to a red icon. Clicking the icon +will bring up the status information as well as any recent messages +(see below). + +![](/img/outdoornav_images/ugvStatusMessages.png) + +## Using the UI + +The following items are general checks to ensure that the UI is working +properly. + +### ☐ Can the virtual joystick drive the UGV? + +See [Web UI Manual Mode](../web_user_interface/ui_manual_mode.mdx) for further details +related to this. + +### ☐ Can you create a new mission? + +Select the mission list and then click on `Add Mission` to create a +new mission. To add new waypoints for the mission refer to +[Mission Creation](../web_user_interface/ui_waypoint_mode.mdx#mission-creation). + +### ☐ After creating a new mission, can you execute the mission? + +To execute a mission refer to [Mission Execution](../web_user_interface/ui_waypoint_mode.mdx#mission-execution). + +### ☐ Are the cameras (if present) active in the view bar section when running the mission? + +For more information related to camera views see +[Camera Views](../web_user_interface/ui_overview.mdx#camera-views). + +### ☐ Can you select a camera and save an image after it loads on the main screen? + +See [Pan-Tilt-Zoom (PTZ) View ](../web_user_interface/ui_overview.mdx#ptz-view) for more details related to saving images. \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.12.0/getting_started/system_setup.mdx b/outdoornav_user_manual_versioned_docs/version-0.12.0/getting_started/system_setup.mdx index c8060f35..173227ff 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.12.0/getting_started/system_setup.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.12.0/getting_started/system_setup.mdx @@ -1,230 +1,230 @@ ---- -title: System Setup -sidebar_label: System Setup -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -This section outlines how to set up your OutdoorNav system for some -preliminary testing with the OutdoorNav Software on a UGV. For details -on simulation, refer to [Simulation](../simulation.mdx). - -These instructions assume that the UGV is already powered ON. - - - -## Connecting to Web UI {#connecting_to_web_ui} - -The web server for the UI typically runs on a computer on the UGV. As -such, it is necessary for the networking setup on the UGV to be complete -and for all related hardware to be powered on. - -:::note - -In the case of Clearpath Robotics OutdoorNav Hardware, ensure that the -Base Station is powered ON. - -::: - -Follow the steps below to connect to the Web UI. - -1. Connect your computer to the same network as the UGV. - - :::note - - For Clearpath Robotics OutdoorNav Hardware, use the Base Station - network. Enter the network list and find the wireless network - related for your UGV. The SSID of the network is located in the - Robosmith manual that was shipped with your UGV. - - ::: - -2. Open an Internet browser (preferably Chrome) on your computer. - -3. Enter the UGV's IP address followed by a forward slash in the - search bar. A bookmark of this page can also be created for future - sessions. - - :::note - - For Clearpath Robotics OutdoorNav Hardware, this will be - **192.168.131.1/** for normal use cases and **192.168.131.5/** for - systems with a separate OutdoorNav computer (including the - OutdoorNav Starter Kit and the OutdoorNav Backpack. - - ::: - -The above steps will open the Web UI, which will allow the user to -operate the UGV in Manual Mode (teleoperation) or in Autonomous Mode -(missions). Upon startup the user will be presented with a page that -shows the End-User License Agreement. This page will be visible each -time the UGV is restarted but only on the first navigation to the page. -The EULA should be reviewed prior to using the system. - -## Loading Map Tiles {#loading_map_tiles} - -The Web UI does not cache map tiles on the browser; therefore, the user -will need to ensure their computer has a connection to an Internet -source to load the map tiles. There are a several options to achieve -this: - -1. If the system includes a Base Station that is connected to the - Internet, you will be able to access the Internet and therefore map - tiles over the base station network without needing any further - updates. -2. Connect your phone via USB to your computer (or tablet) and enable - USB tethering on your phone to share the Internet from your phone. -3. Switch your computer (or tablet) to a network that is connected to - the Internet, zoom in/out of the map to load the tiles then switch - back to the original network. - -## Survey Base Station {#survey_base_station} - -If your system includes a Base Station, it must be surveyed using the -steps below to be able to to operate the UGV autonomously. - -1. Access the Menu → Settings → Map. -2. In the **Survey Base Station** section, click the **Start** button - begin the surveying process. - -During surveying, the Status Indicator will turn orange -and return to its green default state when surveying is -done . -Only then should the UGV be sent on autonomous missions. -The entire surveying will take approximately 5 minutes. A feedback bar -will also be displayed showing the current progress of the surveying. Do -not refresh the page or you will lose the feedback bar. - -:::warning - -For an accurate survey, do NOT move the Base Station during this -process. After the surveying has completed, the Base Station should not -be moved unless required. If you need to move the Base Station or it has -been moved accidentally, the surveying process needs to be run again. - -::: - -## Set Datum - -Before operating the UGV autonomously, the user will need to set the -datum, which is the reference point in the world coordinate frame. - -1. Access the Menu → Settings → Map. - -2. In the **Change Datum** section, enter the latitude and longitude of - a location close to the test site (within 10km). Decimal lat/lon are - expected. Use a minimum of 6 decimal places. - -3. Click **Set Datum** button to set the new datum. - - The user should see the blue dot (datum) and the blue arrow (UGV) - move to the test site. If the GPS status indicators are green, the - UGV should be at its correct position on the map as well as facing - in the correct direction. - -## Set Dock Location - -:::note - -If the Clearpath Robotics autonomous docking package has been purchased, -follow these instructions to set up the dock location. Otherwise, this -section can be skipped. - -::: - -:::warning - -Keep the area around the dock free of objects and people. There is no -obstacle detection between the pre-docking point and the dock; -similarly, there is no obstacle detection during the undocking -operation. - -::: - -
-
- -
Autocharge Dock
-
-
- -Before being able to dock the UGV autonomously, set up the dock -location. Follow these steps to position the UGV in its correct position -and orientation. - -1. Power ON the UGV and computer and wait for the system to finish - booting. For example, on the Clearpath Robotics Husky, booting is - complete when the COMM indicator turns green. - -2. Start by manually driving the UGV to the dock target and align it as - straight and centered as possible so that it begins charging. The - Wibotic receiver on the UGV should be centered longitudinally and - laterally with the circle on the Wibotic transmitter (TR-300). - -3. Let the UGV sit in this position for 2 minutes to acquire an RTK GPS - fix. The POS (position) and DIR (heading) GPS status indicators on - the UI should read as follows: . - - **If the GPS status indicators are yellow or red, the selected - location of the dock is NOT appropriate. Please change the dock - location such that the GPS antennas have a clearer visibility.** - -4. On the UI, access the drop down menu on the top-left of the page, - select **Settings** and click the **Add New Dock Location** button. The - dock location will be stored in 5 - 10 seconds as data is collected. - -If the Base Station has been moved (and therefore been resurveyed), or -if the dock has been moved to a new location, the user will need to -reset the location of the dock. This is done in the following manner: - -1. Repeat the previous set of instructions from step 1 to 4. - -2. While in **Edit Mode** select the dock on the UI. A drop down should appear - with the option to reset the dock location. Select that option. - -3. After approximately 5 - 10 seconds the dock location should be updated and the UI will - reflect the change accordingly. - -## Checking GPS RTK Fix {#checking-gpt-rtk-fix} - -Each time the UGV has been powered up (or moved from a GPS-denied -environment to a GPS-available environment), let the UGV sit in this -position for 2 minutes to acquire an RTK GPS fix. The POS (position) and -DIR (heading) GPS status indicators on the UI should be green: . - -**If the GPS status indicators are yellow or red, the selected location -does not have an adequate GPS signal. Move the UGV such that the GPS -antennas have a clearer visibility.** - -If using Switft Navigation Duros and/or a Clearpath Robotics Base -Station, each of these will have a solid blue LED on all of them when -the RTK GPS fix is acquired. - -## Recording a Rosbag - -See the [ROSbag Recorder](../features/rosbag_recorder.mdx) section for details on recording ROS data either. - -## Subsequent Sections - -The following sections of this manual will outline the instructions for -different tasks that can be accomplished while operating the UGV. - -1. **Web User Interface:** - - Overview of the Web UI components as well as the available views - and icons/buttons associated with them. - - - Overview of the buttons required to operate the UGV in Manual - Mode (teleoperation). - - - Overview of how to send missions using the Map mode. - - - Overview of how to send missions using the Waypoint mode. - -2. **Application Programming Interface:** Details on how to control the - UGV programmatically. -3. **OutdoorNav Features** Details on the features available as part of the - navigation software. -4. **Simulation:** Details on how to simulate autonomous operation of - the UGV. -5. **FAQs:** A list of frequently asked questions. +--- +title: System Setup +sidebar_label: System Setup +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +This section outlines how to set up your OutdoorNav system for some +preliminary testing with the OutdoorNav Software on a UGV. For details +on simulation, refer to [Simulation](../simulation.mdx). + +These instructions assume that the UGV is already powered ON. + + + +## Connecting to Web UI {#connecting_to_web_ui} + +The web server for the UI typically runs on a computer on the UGV. As +such, it is necessary for the networking setup on the UGV to be complete +and for all related hardware to be powered on. + +:::note + +In the case of Clearpath Robotics OutdoorNav Hardware, ensure that the +Base Station is powered ON. + +::: + +Follow the steps below to connect to the Web UI. + +1. Connect your computer to the same network as the UGV. + + :::note + + For Clearpath Robotics OutdoorNav Hardware, use the Base Station + network. Enter the network list and find the wireless network + related for your UGV. The SSID of the network is located in the + Robosmith manual that was shipped with your UGV. + + ::: + +2. Open an Internet browser (preferably Chrome) on your computer. + +3. Enter the UGV's IP address followed by a forward slash in the + search bar. A bookmark of this page can also be created for future + sessions. + + :::note + + For Clearpath Robotics OutdoorNav Hardware, this will be + **192.168.131.1/** for normal use cases and **192.168.131.5/** for + systems with a separate OutdoorNav computer (including the + OutdoorNav Starter Kit and the OutdoorNav Backpack. + + ::: + +The above steps will open the Web UI, which will allow the user to +operate the UGV in Manual Mode (teleoperation) or in Autonomous Mode +(missions). Upon startup the user will be presented with a page that +shows the End-User License Agreement. This page will be visible each +time the UGV is restarted but only on the first navigation to the page. +The EULA should be reviewed prior to using the system. + +## Loading Map Tiles {#loading_map_tiles} + +The Web UI does not cache map tiles on the browser; therefore, the user +will need to ensure their computer has a connection to an Internet +source to load the map tiles. There are a several options to achieve +this: + +1. If the system includes a Base Station that is connected to the + Internet, you will be able to access the Internet and therefore map + tiles over the base station network without needing any further + updates. +2. Connect your phone via USB to your computer (or tablet) and enable + USB tethering on your phone to share the Internet from your phone. +3. Switch your computer (or tablet) to a network that is connected to + the Internet, zoom in/out of the map to load the tiles then switch + back to the original network. + +## Survey Base Station {#survey_base_station} + +If your system includes a Base Station, it must be surveyed using the +steps below to be able to to operate the UGV autonomously. + +1. Access the Menu → Settings → Map. +2. In the **Survey Base Station** section, click the **Start** button + begin the surveying process. + +During surveying, the Status Indicator will turn orange +and return to its green default state when surveying is +done . +Only then should the UGV be sent on autonomous missions. +The entire surveying will take approximately 5 minutes. A feedback bar +will also be displayed showing the current progress of the surveying. Do +not refresh the page or you will lose the feedback bar. + +:::warning + +For an accurate survey, do NOT move the Base Station during this +process. After the surveying has completed, the Base Station should not +be moved unless required. If you need to move the Base Station or it has +been moved accidentally, the surveying process needs to be run again. + +::: + +## Set Datum + +Before operating the UGV autonomously, the user will need to set the +datum, which is the reference point in the world coordinate frame. + +1. Access the Menu → Settings → Map. + +2. In the **Change Datum** section, enter the latitude and longitude of + a location close to the test site (within 10km). Decimal lat/lon are + expected. Use a minimum of 6 decimal places. + +3. Click **Set Datum** button to set the new datum. + + The user should see the blue dot (datum) and the blue arrow (UGV) + move to the test site. If the GPS status indicators are green, the + UGV should be at its correct position on the map as well as facing + in the correct direction. + +## Set Dock Location + +:::note + +If the Clearpath Robotics autonomous docking package has been purchased, +follow these instructions to set up the dock location. Otherwise, this +section can be skipped. + +::: + +:::warning + +Keep the area around the dock free of objects and people. There is no +obstacle detection between the pre-docking point and the dock; +similarly, there is no obstacle detection during the undocking +operation. + +::: + +
+
+ +
Autocharge Dock
+
+
+ +Before being able to dock the UGV autonomously, set up the dock +location. Follow these steps to position the UGV in its correct position +and orientation. + +1. Power ON the UGV and computer and wait for the system to finish + booting. For example, on the Clearpath Robotics Husky, booting is + complete when the COMM indicator turns green. + +2. Start by manually driving the UGV to the dock target and align it as + straight and centered as possible so that it begins charging. The + Wibotic receiver on the UGV should be centered longitudinally and + laterally with the circle on the Wibotic transmitter (TR-300). + +3. Let the UGV sit in this position for 2 minutes to acquire an RTK GPS + fix. The POS (position) and DIR (heading) GPS status indicators on + the UI should read as follows: . + + **If the GPS status indicators are yellow or red, the selected + location of the dock is NOT appropriate. Please change the dock + location such that the GPS antennas have a clearer visibility.** + +4. On the UI, access the drop down menu on the top-left of the page, + select **Settings** and click the **Add New Dock Location** button. The + dock location will be stored in 5 - 10 seconds as data is collected. + +If the Base Station has been moved (and therefore been resurveyed), or +if the dock has been moved to a new location, the user will need to +reset the location of the dock. This is done in the following manner: + +1. Repeat the previous set of instructions from step 1 to 4. + +2. While in **Edit Mode** select the dock on the UI. A drop down should appear + with the option to reset the dock location. Select that option. + +3. After approximately 5 - 10 seconds the dock location should be updated and the UI will + reflect the change accordingly. + +## Checking GPS RTK Fix {#checking-gpt-rtk-fix} + +Each time the UGV has been powered up (or moved from a GPS-denied +environment to a GPS-available environment), let the UGV sit in this +position for 2 minutes to acquire an RTK GPS fix. The POS (position) and +DIR (heading) GPS status indicators on the UI should be green: . + +**If the GPS status indicators are yellow or red, the selected location +does not have an adequate GPS signal. Move the UGV such that the GPS +antennas have a clearer visibility.** + +If using Switft Navigation Duros and/or a Clearpath Robotics Base +Station, each of these will have a solid blue LED on all of them when +the RTK GPS fix is acquired. + +## Recording a Rosbag + +See the [ROSbag Recorder](../features/rosbag_recorder.mdx) section for details on recording ROS data either. + +## Subsequent Sections + +The following sections of this manual will outline the instructions for +different tasks that can be accomplished while operating the UGV. + +1. **Web User Interface:** + - Overview of the Web UI components as well as the available views + and icons/buttons associated with them. + + - Overview of the buttons required to operate the UGV in Manual + Mode (teleoperation). + + - Overview of how to send missions using the Map mode. + + - Overview of how to send missions using the Waypoint mode. + +2. **Application Programming Interface:** Details on how to control the + UGV programmatically. +3. **OutdoorNav Features** Details on the features available as part of the + navigation software. +4. **Simulation:** Details on how to simulate autonomous operation of + the UGV. +5. **FAQs:** A list of frequently asked questions. diff --git a/outdoornav_user_manual_versioned_docs/version-0.12.0/getting_started/terminal_interface.mdx b/outdoornav_user_manual_versioned_docs/version-0.12.0/getting_started/terminal_interface.mdx index aeedd85f..662608d6 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.12.0/getting_started/terminal_interface.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.12.0/getting_started/terminal_interface.mdx @@ -1,244 +1,244 @@ ---- -title: Command Line Interface -sidebar_label: Command Line Interface -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -By default, the OutdoorNav Software begins automatically when the system -is powered on. This section outlines the OutdoorNav Command Line Interface (CLI), -the set of commands that can be used by developers who are debugging -the system or who want more precise control for managing the OutdoorNav -software. - -## Connecting to the OutdoorNav Computer {#connecting-to-outdoornav-computer} - -To connect to your UGV, consult its corresponding user manual. - -If you are using a Clearpath Robotics UGV with a separate OutdoorNav Computer, -first `ssh` to the UGV using the details provided in the UGV user -manual. Then, if a separate OutdoorNav Computer exists, you can -connect to it by running: - -``` bash -ssh administrator@192.168.131.5 -``` - -## OutdoorNav CLI Installation - -The OutdoorNav CLI is pre-installed on Clearpath robots. If it has not -been installed on your system, it can be installed by running the following -on the OutdoorNav Computer: - -```bash -sudo apt-get install python3-onav-cli -``` - -:::note - -The command above requires that the Clearpath Package Server has been -configured on your OutdoorNav Computer. This is pre-configured on -Clearpath robots. Refer to details on the -[Clearpath Package Server](http://packages.clearpathrobotics.com/) if -this is not configured on your computer. - -::: - -## Listing the OutdoorNav CLI Commands and Getting Help - -To list all of the CLI commands, run the following on the OutdoorNav Computer: - -```bash -onav help -``` - -The CLI commands are: - -- `install`: Download and configure OutdoorNav -- `key`: Get, set, or delete your OutdoorNav license key -- `download`: Download OutdoorNav, but do not configure it -- `configure`: (Re)configure OutdoorNav -- `upgrade`: Upgrade OutdoorNav to the latest vesion -- `uninstall`: Uninstall OutdoorNav -- `depends`: Verify and install dependencies -- `start`: Start OutdoorNav -- `stop`: Stop OutdoorNav -- `status`: Check the status of OutdoorNav -- `logs`: View OutdoorNav logs -- `versions`: Print versions available to install -- `help`: Show available commands - -To get help on an individual command, use the `-h` option. For example, to -get help on the `install` command, run `onav install -h`: - -``` -usage: onav install [-h] [-k KEY] [-b] [-c] [-H] VERSION - -positional arguments: - VERSION The OutdoorNav version to install (e.g. 0.11.0) - -optional arguments: - -h, --help show this help message and exit - -k KEY, --key KEY Your OutdoorNav installation key - -b, --backpack Configure in backpack/bridged mode - -c, --clean Clean any configurations from a prior installation -``` - -## Starting and Stopping the OutdoorNav Software {#starting-outdoornav} - -On UGV startup, all the sensors, the user interface, as well as the -autonomy software are set to start automatically. When debugging or when -greater control is desired, the CLI can be used to start and stop -the OutdoorNav software, in whole or in part. - -To see the current status of OutdoorNav software, run: - -```bash -onav status -``` - -To start the OutdoorNav software if it is not running, use the following command, -which starts the latest version of the software by default: - -```bash -onav start -``` - -To stop the OutdoorNav software, run: - -```bash -onav stop -``` - -## Stopping and Restarting the Autonomy Software Only - -To use the UGV without the autonomy software, use the following -command to stop the nodes and prevent them from automatic startup: - -``` bash -onav stop -s autonomy -``` - -The autonomy software can be restarted by running: - -``` bash -onav start -s autonomy -``` - -## Stopping/Restarting the Sensors - -To use the UGV without the sensors, use these commands to disable the -nodes and prevent them from automatic startup: - -``` bash -onav stop -s sensors -``` - -:::note - -This command will only disable the drivers for the sensors that are started -by the OutdoorNav software. This includes the GNSS units, the Microstrain IMU, -and any LiDAR/Stereo detection sources (not limited to Velodyne LiDARs, Realsense -cameras, 2D Lidars). - -::: - -The sensors software can be restarted by running: - -``` -onav start -s sensors -``` - -## Accessing the OutdoorNav Software Logs - -To check the logs of the OutdoorNav software, use the `onav logs` command -with the appropriate service. For example, to view the logs for the sensors -service, run: - -```bash -onav logs sensors -``` - -## Installing the OutdoorNav Software - -OutdoorNav is typically pre-installed on Clearpath robots, so most users should -not need to do a first-time installation of the software, though the process -is outlined below as a reference. - -As a first step, confirm that the robot has internet access. For example, confirm -that the following command is successful: - -``` -ping 8.8.8.8 -``` - -Second, the required dependencies need to be installed by running: - -```bash -onav depends -``` - -Third, a key needs to be added onto the robot to enable the installation -process. Contact [Clearpath Support](../support) if you did not receive your key. -To add your key, run the following, replacing `` with the actual value: - -```bash -onav key -``` - -Fourth, list the versions available for installation by running: - -```bash -onav versions -``` - -Fifth, install the OutdoorNav software for the desired version (typically the -newest version), by running the following, replacing `` with -the version to be installed: - -```bash -onav install -``` - -When prompted, trigger the reboot. - -Finally, following the reboot, run the following command to start the OutdoorNav -software. This will only be required the first time after installation. - -```bash -onav start -``` - -## Upgrading the OutdoorNav Software - -After receiving a notice that a new version of the OutdoorNav Software is -available, use the `onav upgrade` command with the appropriate version. -For example, to upgrade to the newest avialbel version that you are eligible -to receive, run the following command: - -``` -onav upgrade -``` - -:::note - -The upgrade requires internet access to download the new software. -Confirm that the OutdoorNav Computer has internet access by running a command -such as: - -``` -ping 8.8.8.8 -``` - -::: - -## Uninstalling Old Versions of OutdoorNav Software - -If old versions of OutdoorNav software are no longer being used, they can -be removed with the `onav uninstall` command. For example, to uninstall 0.11.0 -run: - -``` -onav uninstall 0.11.0 +--- +title: Command Line Interface +sidebar_label: Command Line Interface +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +By default, the OutdoorNav Software begins automatically when the system +is powered on. This section outlines the OutdoorNav Command Line Interface (CLI), +the set of commands that can be used by developers who are debugging +the system or who want more precise control for managing the OutdoorNav +software. + +## Connecting to the OutdoorNav Computer {#connecting-to-outdoornav-computer} + +To connect to your UGV, consult its corresponding user manual. + +If you are using a Clearpath Robotics UGV with a separate OutdoorNav Computer, +first `ssh` to the UGV using the details provided in the UGV user +manual. Then, if a separate OutdoorNav Computer exists, you can +connect to it by running: + +``` bash +ssh administrator@192.168.131.5 +``` + +## OutdoorNav CLI Installation + +The OutdoorNav CLI is pre-installed on Clearpath robots. If it has not +been installed on your system, it can be installed by running the following +on the OutdoorNav Computer: + +```bash +sudo apt-get install python3-onav-cli +``` + +:::note + +The command above requires that the Clearpath Package Server has been +configured on your OutdoorNav Computer. This is pre-configured on +Clearpath robots. Refer to details on the +[Clearpath Package Server](http://packages.clearpathrobotics.com/) if +this is not configured on your computer. + +::: + +## Listing the OutdoorNav CLI Commands and Getting Help + +To list all of the CLI commands, run the following on the OutdoorNav Computer: + +```bash +onav help +``` + +The CLI commands are: + +- `install`: Download and configure OutdoorNav +- `key`: Get, set, or delete your OutdoorNav license key +- `download`: Download OutdoorNav, but do not configure it +- `configure`: (Re)configure OutdoorNav +- `upgrade`: Upgrade OutdoorNav to the latest vesion +- `uninstall`: Uninstall OutdoorNav +- `depends`: Verify and install dependencies +- `start`: Start OutdoorNav +- `stop`: Stop OutdoorNav +- `status`: Check the status of OutdoorNav +- `logs`: View OutdoorNav logs +- `versions`: Print versions available to install +- `help`: Show available commands + +To get help on an individual command, use the `-h` option. For example, to +get help on the `install` command, run `onav install -h`: + +``` +usage: onav install [-h] [-k KEY] [-b] [-c] [-H] VERSION + +positional arguments: + VERSION The OutdoorNav version to install (e.g. 0.11.0) + +optional arguments: + -h, --help show this help message and exit + -k KEY, --key KEY Your OutdoorNav installation key + -b, --backpack Configure in backpack/bridged mode + -c, --clean Clean any configurations from a prior installation +``` + +## Starting and Stopping the OutdoorNav Software {#starting-outdoornav} + +On UGV startup, all the sensors, the user interface, as well as the +autonomy software are set to start automatically. When debugging or when +greater control is desired, the CLI can be used to start and stop +the OutdoorNav software, in whole or in part. + +To see the current status of OutdoorNav software, run: + +```bash +onav status +``` + +To start the OutdoorNav software if it is not running, use the following command, +which starts the latest version of the software by default: + +```bash +onav start +``` + +To stop the OutdoorNav software, run: + +```bash +onav stop +``` + +## Stopping and Restarting the Autonomy Software Only + +To use the UGV without the autonomy software, use the following +command to stop the nodes and prevent them from automatic startup: + +``` bash +onav stop -s autonomy +``` + +The autonomy software can be restarted by running: + +``` bash +onav start -s autonomy +``` + +## Stopping/Restarting the Sensors + +To use the UGV without the sensors, use these commands to disable the +nodes and prevent them from automatic startup: + +``` bash +onav stop -s sensors +``` + +:::note + +This command will only disable the drivers for the sensors that are started +by the OutdoorNav software. This includes the GNSS units, the Microstrain IMU, +and any LiDAR/Stereo detection sources (not limited to Velodyne LiDARs, Realsense +cameras, 2D Lidars). + +::: + +The sensors software can be restarted by running: + +``` +onav start -s sensors +``` + +## Accessing the OutdoorNav Software Logs + +To check the logs of the OutdoorNav software, use the `onav logs` command +with the appropriate service. For example, to view the logs for the sensors +service, run: + +```bash +onav logs sensors +``` + +## Installing the OutdoorNav Software + +OutdoorNav is typically pre-installed on Clearpath robots, so most users should +not need to do a first-time installation of the software, though the process +is outlined below as a reference. + +As a first step, confirm that the robot has internet access. For example, confirm +that the following command is successful: + +``` +ping 8.8.8.8 +``` + +Second, the required dependencies need to be installed by running: + +```bash +onav depends +``` + +Third, a key needs to be added onto the robot to enable the installation +process. Contact [Clearpath Support](../support) if you did not receive your key. +To add your key, run the following, replacing `` with the actual value: + +```bash +onav key +``` + +Fourth, list the versions available for installation by running: + +```bash +onav versions +``` + +Fifth, install the OutdoorNav software for the desired version (typically the +newest version), by running the following, replacing `` with +the version to be installed: + +```bash +onav install +``` + +When prompted, trigger the reboot. + +Finally, following the reboot, run the following command to start the OutdoorNav +software. This will only be required the first time after installation. + +```bash +onav start +``` + +## Upgrading the OutdoorNav Software + +After receiving a notice that a new version of the OutdoorNav Software is +available, use the `onav upgrade` command with the appropriate version. +For example, to upgrade to the newest avialbel version that you are eligible +to receive, run the following command: + +``` +onav upgrade +``` + +:::note + +The upgrade requires internet access to download the new software. +Confirm that the OutdoorNav Computer has internet access by running a command +such as: + +``` +ping 8.8.8.8 +``` + +::: + +## Uninstalling Old Versions of OutdoorNav Software + +If old versions of OutdoorNav software are no longer being used, they can +be removed with the `onav uninstall` command. For example, to uninstall 0.11.0 +run: + +``` +onav uninstall 0.11.0 ``` \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.12.0/getting_started/tf_validation.mdx b/outdoornav_user_manual_versioned_docs/version-0.12.0/getting_started/tf_validation.mdx index 72327dbc..ab05b15f 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.12.0/getting_started/tf_validation.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.12.0/getting_started/tf_validation.mdx @@ -1,80 +1,80 @@ ---- -title: TF Validation -sidebar_label: TF Validation -sidebar_position: 4 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -:::note - -Sensor transform (TF) validation should only be required if the performance -is noticeably poor, such as when the UGV drifts off of the planned path or -oscillations occur around the path). - -::: - -The coordinate transformation of the two GPS antennas, the IMU, the 2D -and 3D Lidars to the base_link of the UGV should have already been set -prior to receiving the UGV. However, ensure that they are set correctly. - -The ROS coordinate frame base_link, shown in the figure below, is -located at the center of the bottom plate of the UGV. The environment -variables below should be taken with respect to this coordinate frame. -The X axis is in red (and pointing towards the front of the UGV), Y in -green (pointing towards the left of the UGV) and Z in blue (pointing -towards the sky). - -You can check the current value of the environment variables by running -the following on the robot (host) computer (and setting \ -to the names listed in the table below). - -``` bash -printenv | grep -``` - -The environment variables for the position and orientation of each -sensor are provided in the table below. - -_OutdoorNav sensor position and orientation environment variables_ - -| Environment Variable | Function | -|----------------------|---------------------------------------| -| POSITION_GPS_XYZ | [X,Y,Z] position, in meters, of the position GNSS antenna with respect to the base_link coordinate frame. | -| POSITION_GPS_RPY | [Roll,Pitch,Yaw], in radians, of the position GNSS antenna with respect to the base_link coordinate frame. | -| HEADING_GPS_XYZ | [X,Y,Z] position, in meters, of the heading GNSS antenna with respect to the base_link coordinate frame. | -| HEADING_GPS_RPY | [Roll,Pitch,Yaw], in radians, of the heading GNSS antenna with respect to the base_link coordinate frame. | -| MICROSTRAIN_XYZ | [X,Y,Z] position, in meters, of the IMU with respect to the base_link coordinate frame. | -| MICROSTRAIN_RPY | [Roll,Pitch,Yaw], in radians, of the IMU with respect to the base_link coordinate frame. | -| VLP_XYZ | [X,Y,Z] position, in meters, of the 3D Lidar with respect to the base_link coordinate frame. | -| VLP_RPY | [Roll,Pitch,Yaw], in radians, of the 3D Lidar with respect to the base_link coordinate frame. | -| LMS1XX_XYZ | [X,Y,Z] position, in meters, of the 2D Lidar with respect to the base_link coordinate frame. | -| LMS1XX_RPY | [Roll,Pitch,Yaw], in radians, of the 2D Lidar with respect to the base_link coordinate frame. | -| HOKUYO_XYZ | [X,Y,Z] position, in meters, of the 2D Lidar with respect to the base_link coordinate frame. | -| HOKUYO_RPY | [Roll,Pitch,Yaw], in radians, of the 2D Lidar with respect to the base_link coordinate frame. | -| D435_XYZ | [X,Y,Z] position, in meters, of the 2D Lidar with respect to the base_link coordinate frame. | -| D435_RPY | [Roll,Pitch,Yaw], in radians, of the 2D Lidar with respect to the base_link coordinate frame. | - -There may also be 2 of each of these detection sensors. The corresponding environment -variable is prefixed with `REAR_`. - -:::note - -When the printed Y axis on the IMU is pointing towards the front of the -robot (i.e., aligned to X axis of base_link), MICROSTRAIN_RPY = [0, 0, 0]. - -::: - -:::warning - -If you decide to move any of these sensors, you must modify these -variables accordingly in the `/opt/onav/outdoornav_host_setup.sh` file (on the host). - -
-
- -
base_link coordinate frame
-
-
- -::: +--- +title: TF Validation +sidebar_label: TF Validation +sidebar_position: 4 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +:::note + +Sensor transform (TF) validation should only be required if the performance +is noticeably poor, such as when the UGV drifts off of the planned path or +oscillations occur around the path). + +::: + +The coordinate transformation of the two GPS antennas, the IMU, the 2D +and 3D Lidars to the base_link of the UGV should have already been set +prior to receiving the UGV. However, ensure that they are set correctly. + +The ROS coordinate frame base_link, shown in the figure below, is +located at the center of the bottom plate of the UGV. The environment +variables below should be taken with respect to this coordinate frame. +The X axis is in red (and pointing towards the front of the UGV), Y in +green (pointing towards the left of the UGV) and Z in blue (pointing +towards the sky). + +You can check the current value of the environment variables by running +the following on the robot (host) computer (and setting \ +to the names listed in the table below). + +``` bash +printenv | grep +``` + +The environment variables for the position and orientation of each +sensor are provided in the table below. + +_OutdoorNav sensor position and orientation environment variables_ + +| Environment Variable | Function | +|----------------------|---------------------------------------| +| POSITION_GPS_XYZ | [X,Y,Z] position, in meters, of the position GNSS antenna with respect to the base_link coordinate frame. | +| POSITION_GPS_RPY | [Roll,Pitch,Yaw], in radians, of the position GNSS antenna with respect to the base_link coordinate frame. | +| HEADING_GPS_XYZ | [X,Y,Z] position, in meters, of the heading GNSS antenna with respect to the base_link coordinate frame. | +| HEADING_GPS_RPY | [Roll,Pitch,Yaw], in radians, of the heading GNSS antenna with respect to the base_link coordinate frame. | +| MICROSTRAIN_XYZ | [X,Y,Z] position, in meters, of the IMU with respect to the base_link coordinate frame. | +| MICROSTRAIN_RPY | [Roll,Pitch,Yaw], in radians, of the IMU with respect to the base_link coordinate frame. | +| VLP_XYZ | [X,Y,Z] position, in meters, of the 3D Lidar with respect to the base_link coordinate frame. | +| VLP_RPY | [Roll,Pitch,Yaw], in radians, of the 3D Lidar with respect to the base_link coordinate frame. | +| LMS1XX_XYZ | [X,Y,Z] position, in meters, of the 2D Lidar with respect to the base_link coordinate frame. | +| LMS1XX_RPY | [Roll,Pitch,Yaw], in radians, of the 2D Lidar with respect to the base_link coordinate frame. | +| HOKUYO_XYZ | [X,Y,Z] position, in meters, of the 2D Lidar with respect to the base_link coordinate frame. | +| HOKUYO_RPY | [Roll,Pitch,Yaw], in radians, of the 2D Lidar with respect to the base_link coordinate frame. | +| D435_XYZ | [X,Y,Z] position, in meters, of the 2D Lidar with respect to the base_link coordinate frame. | +| D435_RPY | [Roll,Pitch,Yaw], in radians, of the 2D Lidar with respect to the base_link coordinate frame. | + +There may also be 2 of each of these detection sensors. The corresponding environment +variable is prefixed with `REAR_`. + +:::note + +When the printed Y axis on the IMU is pointing towards the front of the +robot (i.e., aligned to X axis of base_link), MICROSTRAIN_RPY = [0, 0, 0]. + +::: + +:::warning + +If you decide to move any of these sensors, you must modify these +variables accordingly in the `/opt/onav/outdoornav_host_setup.sh` file (on the host). + +
+
+ +
base_link coordinate frame
+
+
+ +::: diff --git a/outdoornav_user_manual_versioned_docs/version-0.12.0/index.mdx b/outdoornav_user_manual_versioned_docs/version-0.12.0/index.mdx index 09a63a7f..3d1655b9 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.12.0/index.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.12.0/index.mdx @@ -1,18 +1,18 @@ ---- -title: OutdoorNav User Manual -sidebar_label: OutdoorNav User Manual -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -
-
- -
-
- -OutdoorNav is an outdoor autonomy software platform designed for vehicle developers, -OEMs and robotics researchers. Compatible with Clearpath outdoor mobile platforms -and third-party vehicles, OutdoorNav provides reliable, industry-leading GPS-based +--- +title: OutdoorNav User Manual +sidebar_label: OutdoorNav User Manual +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +
+
+ +
+
+ +OutdoorNav is an outdoor autonomy software platform designed for vehicle developers, +OEMs and robotics researchers. Compatible with Clearpath outdoor mobile platforms +and third-party vehicles, OutdoorNav provides reliable, industry-leading GPS-based navigation for faster, more efficient autonomous vehicle development. \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.12.0/integration_requirements/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.12.0/integration_requirements/_category_.json index e9e0ff1d..adbe22cb 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.12.0/integration_requirements/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.12.0/integration_requirements/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Appendix A: UGV Integration Requirements", - "position": 12 +{ + "label": "Appendix A: UGV Integration Requirements", + "position": 12 } \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.12.0/integration_requirements/hardware_integration_requirements/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.12.0/integration_requirements/hardware_integration_requirements/_category_.json index 75ebaf1b..7950de6b 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.12.0/integration_requirements/hardware_integration_requirements/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.12.0/integration_requirements/hardware_integration_requirements/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Hardware Kit Installation", - "position": 2 -} +{ + "label": "Hardware Kit Installation", + "position": 2 +} diff --git a/outdoornav_user_manual_versioned_docs/version-0.12.0/integration_requirements/integration_overview.mdx b/outdoornav_user_manual_versioned_docs/version-0.12.0/integration_requirements/integration_overview.mdx index 00cf8a07..72d78ae3 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.12.0/integration_requirements/integration_overview.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.12.0/integration_requirements/integration_overview.mdx @@ -1,34 +1,34 @@ ---- -title: "Integration Overview" -sidebar_label: "Integration Overview" -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -The scope of work to transform a non-autonomous UGV into an autonomous -one will vary depending on the exact hardware capabilities and software -interfaces of the UGV. Development work will be required by Clearpath -Robotics, the end user, or a third party developer to bring the UGV into -compliance with the requirements listed in the table below. This may -involve implementing encoders and controllers to provide velocity -control of the UGV and implementing a CAN bus to ROS interface with -kinematic control. The table below provides a general outline of the -requirements; the detailed requirements are covered in the following -sections. - -_Navigation hardware and software general integration scope of work_ - -| \# | Task | Note | -|-----|----------------------------------|---------------------------------| -| 1 | **Convert UGV to drive by wire** | If required; can be a significant electromechanical integration | -| 1.1 | Implement actuated steering and throttle control if necessary | | -| 1.2 | Implement the encoder and controller hardware to provide wheel velocity control and odometry feedback | May require electronic power steering position feedback and controller | -| 2 | **Create a ROS interface** | | -| 2.1 | Commission an OutdoorNav computer running Ubuntu 20.04 and ROS Noetic | | -| 2.2 | Create a ROS interface to the UGV Often interfacing via CAN bus motor controllers and UGV controller | | -| 2.3 | Create a ROS driver including UGV kinematics with ROS-control | Accepts velocity input, commands motor controllers, provides other status feedback | -| 3 | **Install and configure OutdoorNav Hardware and Software** | | -| 3.1 | Install OutdoorNav computer and sensors on the UGV | Provide mechanical mounting, power and ethernet communication to UGV computer | -| 3.2 | Install, update and configure OutdoorNav Software on computer | Configure for sensor mounting locations, UGV kinematics and data topics. Can be done remotely with assistance from Clearpath Robotics Engineering. Approximately 1-2 days. | -| 3.3 | Tune the path planning and following controllers for new UGV | Can be done at a Clearpath Robotics facility. Can often be done at end user facility via remote login from Clearpath Robotics Engineering. Approximately 2-5 days. | +--- +title: "Integration Overview" +sidebar_label: "Integration Overview" +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +The scope of work to transform a non-autonomous UGV into an autonomous +one will vary depending on the exact hardware capabilities and software +interfaces of the UGV. Development work will be required by Clearpath +Robotics, the end user, or a third party developer to bring the UGV into +compliance with the requirements listed in the table below. This may +involve implementing encoders and controllers to provide velocity +control of the UGV and implementing a CAN bus to ROS interface with +kinematic control. The table below provides a general outline of the +requirements; the detailed requirements are covered in the following +sections. + +_Navigation hardware and software general integration scope of work_ + +| \# | Task | Note | +|-----|----------------------------------|---------------------------------| +| 1 | **Convert UGV to drive by wire** | If required; can be a significant electromechanical integration | +| 1.1 | Implement actuated steering and throttle control if necessary | | +| 1.2 | Implement the encoder and controller hardware to provide wheel velocity control and odometry feedback | May require electronic power steering position feedback and controller | +| 2 | **Create a ROS interface** | | +| 2.1 | Commission an OutdoorNav computer running Ubuntu 20.04 and ROS Noetic | | +| 2.2 | Create a ROS interface to the UGV Often interfacing via CAN bus motor controllers and UGV controller | | +| 2.3 | Create a ROS driver including UGV kinematics with ROS-control | Accepts velocity input, commands motor controllers, provides other status feedback | +| 3 | **Install and configure OutdoorNav Hardware and Software** | | +| 3.1 | Install OutdoorNav computer and sensors on the UGV | Provide mechanical mounting, power and ethernet communication to UGV computer | +| 3.2 | Install, update and configure OutdoorNav Software on computer | Configure for sensor mounting locations, UGV kinematics and data topics. Can be done remotely with assistance from Clearpath Robotics Engineering. Approximately 1-2 days. | +| 3.3 | Tune the path planning and following controllers for new UGV | Can be done at a Clearpath Robotics facility. Can often be done at end user facility via remote login from Clearpath Robotics Engineering. Approximately 2-5 days. | diff --git a/outdoornav_user_manual_versioned_docs/version-0.12.0/integration_requirements/interface_control_requirements.mdx b/outdoornav_user_manual_versioned_docs/version-0.12.0/integration_requirements/interface_control_requirements.mdx index a603485b..d9906ed6 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.12.0/integration_requirements/interface_control_requirements.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.12.0/integration_requirements/interface_control_requirements.mdx @@ -1,119 +1,119 @@ ---- -title: "ROS Interface Control Requirements" -sidebar_label: "ROS Interface Control Requirements" -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -## ROS Interface Control Checklist - -Prior to the installation and tuning of Clearpath Robotics (CPR) -OutdoorNav software on your platform (robot computer), CPR requires that the platform's -ROS interface satisfies the conditions listed below. Ensure that all of the requirements -are satisfied for a smooth installation and tuning process. - -![](/img/outdoornav_images/onav_interface_control.png) - -| | Requirement | -|------|------------------------------------------------------------------| -| | The platform computer is on the 192.168.131.xxx subnet (ideally in the range 1-4). | -| | The platform computer has an installation of [ROS 1 Noetic](http://wiki.ros.org/noetic/Installation). | -| | A URDF is supplied to CPR by the customer, in which the `base_link` coordinate frame is defined according to the [REP-105 base-link](https://www.ros.org/reps/rep-0105.html#base-link) ROS standard. | -| | The platform outputs [tf2_msgs/TFMessage](http://docs.ros.org/en/jade/api/tf2_msgs/html/msg/TFMessage.html) messages on the ROS standard `/tf` topic, at a minimum rate of **30 Hz**. | -| | The platform outputs a latched [tf2_msgs/TFMessage](http://docs.ros.org/en/jade/api/tf2_msgs/html/msg/TFMessage.html) message on the ROS standard `/tf_static` topic. This should include any fixed frames of ROS enabled devices/sensors that are available on your platform. | -| | The platform computer has a velocity controller that accepts, as input, [geometry_msgs/Twist](http://docs.ros.org/en/melodic/api/geometry_msgs/html/msg/Twist.html) messages on the ROS standard `/cmd_vel` topic, at a minimum rate of **10 Hz**. | -| | The platform computer has a velocity controller that tracks the input velocity and outputs the resulting platform velocity on the `/platform/cmd_vel` topic. | -| | The platform outputs [nav_msgs/Odometry](http://docs.ros.org/en/noetic/api/nav_msgs/html/msg/Odometry.html) messages on the `/platform/odom` topic, at a minimum rate of **10 Hz**. | -| | The `/platform/odom` topic publishes its data with the header.frame_id = `odom` and the child_frame_id = `base_link`, as per the [REP-105 odom](https://www.ros.org/reps/rep-0105.html#odom) ROS standard. **IMPORTANT**: The platform should however not broadcast the `odom` --> `base_link` transformation since the OutdoorNav software will do so. | -| | If available, the platform odometry output has less than ±5% linear position error. | -| | If available, the platform odometry output has less than ±5% orientation error. | -| | The platform outputs [std_msgs/Bool](http://docs.ros.org/en/noetic/api/std_msgs/html/msg/Bool.html) messages on the `/platform/emergency_stop` topic, at a minimum rate of **5 Hz**, indicating whether or not the platform is in a stopped state. | -| | Perform the validation tests described in [Interface Control Validation Test](#interface-control-validation) section and [record a rosbag](http://wiki.ros.org/rosbag/Commandline#rosbag_record) of all of your topics. The linear and angular velocities of the three trial runs recorded should be noted here:

Trial #1: Linear x: , Angular z:
Trial #2: Linear x: , Angular z:
Trial #3: Linear x: , Angular z:
| - -:::note - -Consult the [Platform API](../api/api_endpoints/platform_api.mdx#topics-published-by-platform) for -detailed information on the published/subscribed platform topics. - -::: - -If the platform is an Ackermann (or double Ackermann) drive vehicle: - -| | Requirement | -|------|------------------------------------------------------------------| -| | A conversion from [geometry_msgs/Twist](http://docs.ros.org/en/melodic/api/geometry_msgs/html/msg/Twist.html) messages to Ackermann inputs is provided. | - -:::note - -Ackermann drive platforms require both steering and throttle inputs to -drive the platform. It is required that our OutdoorNav output `/cmd_vel` -be converted into a message suitable to your platform. An example of an -Ackermann message type can be found -[here](http://wiki.ros.org/teb_local_planner/Tutorials/Planning%20for%20car-like%20robots). -This may satisfy your particular platform, and is only a starting point -on how to do this conversion. - -::: - -If the platform computer is running a version of ROS 2: - -| | Requirement | -|------|------------------------------------------------------------------| -| | The platform computer has a [ROS 2 to ROS 1 bridge](https://github.com/ros2/ros1_bridge) is installed to enable the exchange of messages between the two ROS versions. | - -Signature: Date: - -## Interface Control Validation Test {#interface-control-validation} - -The following test is designed to validate the platforms velocity -controller. It will be required that you command the robot to drive in -three circles, of varying radii, by applying the following command to -the platform. - -``` bash -rostopic pub -r 10 /cmd_vel geometry_msgs/Twist "linear: -x: ___ -y: 0.0 -z: 0.0 -angular: -x: 0.0 -y: 0.0 -z: ___" -``` - -The three trials that we request will vary between platforms depending -on the its maximum linear $(v_\{max\})$ and angular velocities -$(\omega_\{max\})$, minimum linear $(v_\{min\})$ and angular velocities -$(\omega_\{min\})$, as well as limitations due to the minimum allowable -turning radius $(r_\{min\})$. Of these three trials, we would like to see -data within three linear velocity bands, as seen in the table below, -resulting in three different turning radii. For the purpose of these -tests, the following formula can be used when determining the required -linear and angular velocities to apply: $r = v/\omega$. - -| Trial \# | Linear X Bands \[m/s\] | Example Linear X Band \[m/s\] | -| ---------|--------------------------------------------|-------------------------------------| -| 1 | $v_\{min\} \cdot [1.0, 1.5]$ | $[0.5, 0.75]$ | -| 2 | $((v_\{max\} - v_\{min\})/2) \cdot [0.9, 1.1]$ | $[2.025, 2.475]$ | -| 3 | $v_\{max\} \cdot [0.9, 1.0]$ | $[4.5, 5.0]$ | - -As an example, a platform with specs $v \in [0.5, 5.0]$, $r_\{min\} = 3$ -would have linear x velocity bands as listed in the table above. The -trials could then be as outlined in the table below. - -| Trial \# | Linear X \[m/s\] | Angular Z \[rad/s\] |Turn Radius \[m\] | -|-----------|--------------------|---------------------|------------------| -| 1 | 0.75 | 0.25 | 3 | -| 2 | 2.25 | 0.5 | 4.5 | -| 3 | 4.5 | 0.75 | 6 | - -Finally, the test data in the collected ROSbag should include the -following: - -1. `/tf` and `/tf_static` -2. `/platform/cmd_vel` -3. `/platform/odom` -4. `/cmd_vel` -5. `/platform/emergency_stop` (if available) -6. raw NavSatFix data from a GPS unit (if possible). +--- +title: "ROS Interface Control Requirements" +sidebar_label: "ROS Interface Control Requirements" +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +## ROS Interface Control Checklist + +Prior to the installation and tuning of Clearpath Robotics (CPR) +OutdoorNav software on your platform (robot computer), CPR requires that the platform's +ROS interface satisfies the conditions listed below. Ensure that all of the requirements +are satisfied for a smooth installation and tuning process. + +![](/img/outdoornav_images/onav_interface_control.png) + +| | Requirement | +|------|------------------------------------------------------------------| +| | The platform computer is on the 192.168.131.xxx subnet (ideally in the range 1-4). | +| | The platform computer has an installation of [ROS 1 Noetic](http://wiki.ros.org/noetic/Installation). | +| | A URDF is supplied to CPR by the customer, in which the `base_link` coordinate frame is defined according to the [REP-105 base-link](https://www.ros.org/reps/rep-0105.html#base-link) ROS standard. | +| | The platform outputs [tf2_msgs/TFMessage](http://docs.ros.org/en/jade/api/tf2_msgs/html/msg/TFMessage.html) messages on the ROS standard `/tf` topic, at a minimum rate of **30 Hz**. | +| | The platform outputs a latched [tf2_msgs/TFMessage](http://docs.ros.org/en/jade/api/tf2_msgs/html/msg/TFMessage.html) message on the ROS standard `/tf_static` topic. This should include any fixed frames of ROS enabled devices/sensors that are available on your platform. | +| | The platform computer has a velocity controller that accepts, as input, [geometry_msgs/Twist](http://docs.ros.org/en/melodic/api/geometry_msgs/html/msg/Twist.html) messages on the ROS standard `/cmd_vel` topic, at a minimum rate of **10 Hz**. | +| | The platform computer has a velocity controller that tracks the input velocity and outputs the resulting platform velocity on the `/platform/cmd_vel` topic. | +| | The platform outputs [nav_msgs/Odometry](http://docs.ros.org/en/noetic/api/nav_msgs/html/msg/Odometry.html) messages on the `/platform/odom` topic, at a minimum rate of **10 Hz**. | +| | The `/platform/odom` topic publishes its data with the header.frame_id = `odom` and the child_frame_id = `base_link`, as per the [REP-105 odom](https://www.ros.org/reps/rep-0105.html#odom) ROS standard. **IMPORTANT**: The platform should however not broadcast the `odom` --> `base_link` transformation since the OutdoorNav software will do so. | +| | If available, the platform odometry output has less than ±5% linear position error. | +| | If available, the platform odometry output has less than ±5% orientation error. | +| | The platform outputs [std_msgs/Bool](http://docs.ros.org/en/noetic/api/std_msgs/html/msg/Bool.html) messages on the `/platform/emergency_stop` topic, at a minimum rate of **5 Hz**, indicating whether or not the platform is in a stopped state. | +| | Perform the validation tests described in [Interface Control Validation Test](#interface-control-validation) section and [record a rosbag](http://wiki.ros.org/rosbag/Commandline#rosbag_record) of all of your topics. The linear and angular velocities of the three trial runs recorded should be noted here:

Trial #1: Linear x: , Angular z:
Trial #2: Linear x: , Angular z:
Trial #3: Linear x: , Angular z:
| + +:::note + +Consult the [Platform API](../api/api_endpoints/platform_api.mdx#topics-published-by-platform) for +detailed information on the published/subscribed platform topics. + +::: + +If the platform is an Ackermann (or double Ackermann) drive vehicle: + +| | Requirement | +|------|------------------------------------------------------------------| +| | A conversion from [geometry_msgs/Twist](http://docs.ros.org/en/melodic/api/geometry_msgs/html/msg/Twist.html) messages to Ackermann inputs is provided. | + +:::note + +Ackermann drive platforms require both steering and throttle inputs to +drive the platform. It is required that our OutdoorNav output `/cmd_vel` +be converted into a message suitable to your platform. An example of an +Ackermann message type can be found +[here](http://wiki.ros.org/teb_local_planner/Tutorials/Planning%20for%20car-like%20robots). +This may satisfy your particular platform, and is only a starting point +on how to do this conversion. + +::: + +If the platform computer is running a version of ROS 2: + +| | Requirement | +|------|------------------------------------------------------------------| +| | The platform computer has a [ROS 2 to ROS 1 bridge](https://github.com/ros2/ros1_bridge) is installed to enable the exchange of messages between the two ROS versions. | + +Signature: Date: + +## Interface Control Validation Test {#interface-control-validation} + +The following test is designed to validate the platforms velocity +controller. It will be required that you command the robot to drive in +three circles, of varying radii, by applying the following command to +the platform. + +``` bash +rostopic pub -r 10 /cmd_vel geometry_msgs/Twist "linear: +x: ___ +y: 0.0 +z: 0.0 +angular: +x: 0.0 +y: 0.0 +z: ___" +``` + +The three trials that we request will vary between platforms depending +on the its maximum linear $(v_\{max\})$ and angular velocities +$(\omega_\{max\})$, minimum linear $(v_\{min\})$ and angular velocities +$(\omega_\{min\})$, as well as limitations due to the minimum allowable +turning radius $(r_\{min\})$. Of these three trials, we would like to see +data within three linear velocity bands, as seen in the table below, +resulting in three different turning radii. For the purpose of these +tests, the following formula can be used when determining the required +linear and angular velocities to apply: $r = v/\omega$. + +| Trial \# | Linear X Bands \[m/s\] | Example Linear X Band \[m/s\] | +| ---------|--------------------------------------------|-------------------------------------| +| 1 | $v_\{min\} \cdot [1.0, 1.5]$ | $[0.5, 0.75]$ | +| 2 | $((v_\{max\} - v_\{min\})/2) \cdot [0.9, 1.1]$ | $[2.025, 2.475]$ | +| 3 | $v_\{max\} \cdot [0.9, 1.0]$ | $[4.5, 5.0]$ | + +As an example, a platform with specs $v \in [0.5, 5.0]$, $r_\{min\} = 3$ +would have linear x velocity bands as listed in the table above. The +trials could then be as outlined in the table below. + +| Trial \# | Linear X \[m/s\] | Angular Z \[rad/s\] |Turn Radius \[m\] | +|-----------|--------------------|---------------------|------------------| +| 1 | 0.75 | 0.25 | 3 | +| 2 | 2.25 | 0.5 | 4.5 | +| 3 | 4.5 | 0.75 | 6 | + +Finally, the test data in the collected ROSbag should include the +following: + +1. `/tf` and `/tf_static` +2. `/platform/cmd_vel` +3. `/platform/odom` +4. `/cmd_vel` +5. `/platform/emergency_stop` (if available) +6. raw NavSatFix data from a GPS unit (if possible). diff --git a/outdoornav_user_manual_versioned_docs/version-0.12.0/integration_requirements/software_integration_instructions.mdx b/outdoornav_user_manual_versioned_docs/version-0.12.0/integration_requirements/software_integration_instructions.mdx index 2184246f..64f7fee6 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.12.0/integration_requirements/software_integration_instructions.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.12.0/integration_requirements/software_integration_instructions.mdx @@ -1,132 +1,132 @@ ---- -title: "Software Integration Instructions" -sidebar_label: "Software Integration Instructions" -sidebar_position: 4 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -import versions from "@site/static/versions.js" - -Prior to installing the OutdoorNav software, ensure that you have completed the relevant [Hardware Kit Checklist](hardware_integration_requirements/hardware_integration_requirements.mdx). If installing on a secondary/backpack/Starter Kit computer, ensure to have also completed the: -- [Interface Control Checklist](interface_control_requirements.mdx) - -All the following instructions, unless otherwise specified, are to be run on the OutdoorNav computer. - -### Install Command-line Interface Tool (CLI) {#install-cli} - - -{` -sudo apt update -sudo apt install python3-onav-cli -`} - - -### Install OutdoorNav - - -{` -onav install -k -`} - - -where `license_key` is the license key that you have been assigned and `VERSION` is the version -of the software to be installed (eg. 0.11.0). Only one license key can be used per UGV. - -:::note - -In some cases, including first-time installations, a reboot is required after installing -the required dependencies. In this case, it is necessary to re-run -the `onav install -k ` command again following the reboot to complete -the installation. - -::: - -### Configure UGV Footprint {#configure-platform-footprint} - -If the UGV has sensors and/or parts that protrude outside of the UGV body, then a few environment variables will need to be modified to adjust the footprint of the robot. Things that could be extending past the footprint could include but are not limited to: - -- GPS antennae, -- Charging receivers, -- Arms, -- etc... - -Change the environment variables from the Table below, in the following file: - -``` -cd /opt/onav//config -nano autonomy.env -``` - -| Environment Variable | Description | Default | -|-----------------------------|----------------------------------------|---------| -| **FOOTPRINT_OFFSET_POS_X** | Distance from base_link to the furthest edge of any part/sensor at the front of the robot | 0.5 | -| **FOOTPRINT_OFFSET_NEG_X** | Distance from base_link to the furthest edge of any part/sensor at the rear of the robot | -0.5 | -| **FOOTPRINT_OFFSET_POS_Y** | Distance from base_link to the furthest edge of any part/sensor at the left of the robot | 0.35 | -| **FOOTPRINT_OFFSET_NEG_Y** | Distance from base_link to the furthest edge of any part/sensor at the right of the robot | -0.35 | - - -### Start/Stop the OutdoorNav - -To start up the OutdoorNav software run: - - -{` -onav start -`} - - -If you wish to start individual profiles or services, run `onav start -h` to see available profiles/services. - -To stop the OutdoorNav software run: - - -{` -onav stop -`} - - -For more information and available ONAV CLI commands, see the [Terminal Interface](../getting_started/terminal_interface.mdx) section. - -### Test OutdoorNav Installation - -1. Ping all of the network sensors to ensure proper communication with the UGV or secondary computer. - -2. Check the following topics and make sure there is data being published to them: - -``` bash -rostopic echo -n 1 /platform/odom -rostopic echo -n 1 /platform/cmd_vel - -rostopic echo -n 1 /localization/odom - -# GNSS units -rostopic echo /sensors/gps_/fix - -# IMU (if included) -rostopic echo -n 1 /sensors/imu_/data - -# Velodyne/Ouster/LMS1XX/Hokuyo/OutdoorScan (if included) -rostopic echo /sensors/lidar_/pointcloud -rostopic echo /sensors/lidar_/scan - -# Realsense D435 Front (if included) -rostopic echo -n 1 /sensors/stereo_0/pointcloud --noarr -rostopic echo -n 1 /sensors/stereo_0/image --noarr -rostopic echo -n 1 /sensors/stereo_0/depth/image_rect_raw --noarr - -# Realsense D435 Rear (if included) -rostopic echo -n 1 /sensors/stereo_1/pointcloud --noarr -rostopic echo -n 1 /sensors/stereo_1/image --noarr -rostopic echo -n 1 /sensors/stereo_1/depth/image_rect_raw --noarr -``` - -\ will be the number of the sensor as it was loaded into the software. Eg. If you have a VLP and an LMS1XX, then the VLP will be lidar_0, and the LMS1XX will be lidar_1. If we only have an LMS1XX, then it would be lidar_0. Ie. the 3D lidars have a higher "priority" and therefore will be loaded first. - -:::note - -The 2D LiDARs (LMS1XX, Hokuyo) will not have a pointcloud topic. - -::: - -Once installation is complete, you can proceed to [Getting Started](../getting_started/system_setup.mdx) to start using the software. +--- +title: "Software Integration Instructions" +sidebar_label: "Software Integration Instructions" +sidebar_position: 4 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +import versions from "@site/static/versions.js" + +Prior to installing the OutdoorNav software, ensure that you have completed the relevant [Hardware Kit Checklist](hardware_integration_requirements/hardware_integration_requirements.mdx). If installing on a secondary/backpack/Starter Kit computer, ensure to have also completed the: +- [Interface Control Checklist](interface_control_requirements.mdx) + +All the following instructions, unless otherwise specified, are to be run on the OutdoorNav computer. + +### Install Command-line Interface Tool (CLI) {#install-cli} + + +{` +sudo apt update +sudo apt install python3-onav-cli +`} + + +### Install OutdoorNav + + +{` +onav install -k +`} + + +where `license_key` is the license key that you have been assigned and `VERSION` is the version +of the software to be installed (eg. 0.11.0). Only one license key can be used per UGV. + +:::note + +In some cases, including first-time installations, a reboot is required after installing +the required dependencies. In this case, it is necessary to re-run +the `onav install -k ` command again following the reboot to complete +the installation. + +::: + +### Configure UGV Footprint {#configure-platform-footprint} + +If the UGV has sensors and/or parts that protrude outside of the UGV body, then a few environment variables will need to be modified to adjust the footprint of the robot. Things that could be extending past the footprint could include but are not limited to: + +- GPS antennae, +- Charging receivers, +- Arms, +- etc... + +Change the environment variables from the Table below, in the following file: + +``` +cd /opt/onav//config +nano autonomy.env +``` + +| Environment Variable | Description | Default | +|-----------------------------|----------------------------------------|---------| +| **FOOTPRINT_OFFSET_POS_X** | Distance from base_link to the furthest edge of any part/sensor at the front of the robot | 0.5 | +| **FOOTPRINT_OFFSET_NEG_X** | Distance from base_link to the furthest edge of any part/sensor at the rear of the robot | -0.5 | +| **FOOTPRINT_OFFSET_POS_Y** | Distance from base_link to the furthest edge of any part/sensor at the left of the robot | 0.35 | +| **FOOTPRINT_OFFSET_NEG_Y** | Distance from base_link to the furthest edge of any part/sensor at the right of the robot | -0.35 | + + +### Start/Stop the OutdoorNav + +To start up the OutdoorNav software run: + + +{` +onav start +`} + + +If you wish to start individual profiles or services, run `onav start -h` to see available profiles/services. + +To stop the OutdoorNav software run: + + +{` +onav stop +`} + + +For more information and available ONAV CLI commands, see the [Terminal Interface](../getting_started/terminal_interface.mdx) section. + +### Test OutdoorNav Installation + +1. Ping all of the network sensors to ensure proper communication with the UGV or secondary computer. + +2. Check the following topics and make sure there is data being published to them: + +``` bash +rostopic echo -n 1 /platform/odom +rostopic echo -n 1 /platform/cmd_vel + +rostopic echo -n 1 /localization/odom + +# GNSS units +rostopic echo /sensors/gps_/fix + +# IMU (if included) +rostopic echo -n 1 /sensors/imu_/data + +# Velodyne/Ouster/LMS1XX/Hokuyo/OutdoorScan (if included) +rostopic echo /sensors/lidar_/pointcloud +rostopic echo /sensors/lidar_/scan + +# Realsense D435 Front (if included) +rostopic echo -n 1 /sensors/stereo_0/pointcloud --noarr +rostopic echo -n 1 /sensors/stereo_0/image --noarr +rostopic echo -n 1 /sensors/stereo_0/depth/image_rect_raw --noarr + +# Realsense D435 Rear (if included) +rostopic echo -n 1 /sensors/stereo_1/pointcloud --noarr +rostopic echo -n 1 /sensors/stereo_1/image --noarr +rostopic echo -n 1 /sensors/stereo_1/depth/image_rect_raw --noarr +``` + +\ will be the number of the sensor as it was loaded into the software. Eg. If you have a VLP and an LMS1XX, then the VLP will be lidar_0, and the LMS1XX will be lidar_1. If we only have an LMS1XX, then it would be lidar_0. Ie. the 3D lidars have a higher "priority" and therefore will be loaded first. + +:::note + +The 2D LiDARs (LMS1XX, Hokuyo) will not have a pointcloud topic. + +::: + +Once installation is complete, you can proceed to [Getting Started](../getting_started/system_setup.mdx) to start using the software. diff --git a/outdoornav_user_manual_versioned_docs/version-0.12.0/overview/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.12.0/overview/_category_.json index 663e4088..8414dc7f 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.12.0/overview/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.12.0/overview/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Overview", - "position": 4 -} +{ + "label": "Overview", + "position": 4 +} diff --git a/outdoornav_user_manual_versioned_docs/version-0.12.0/overview/overview_hardware_requirements.mdx b/outdoornav_user_manual_versioned_docs/version-0.12.0/overview/overview_hardware_requirements.mdx index b6abe65e..0883eba8 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.12.0/overview/overview_hardware_requirements.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.12.0/overview/overview_hardware_requirements.mdx @@ -1,44 +1,44 @@ ---- -title: Hardware Requirements -sidebar_label: Hardware Requirements -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -OutdoorNav Software works with compatible UGVs, either from Clearpath -Robotics or third parties. High level requirements for compatible UGVs -are outlined below. Detailed qualification requirements are outlined in -[UGV Integration Requirements](../integration_requirements/integration_overview.mdx). - -## Requirements - -OutdoorNav software does not communicate directly with the UGV motors. -Rather, it publishes target linear and angular velocities packaged in -the [ROS Twist message](http://docs.ros.org/en/noetic/api/geometry_msgs/html/msg/Twist.html) -format and relies on the low level velocity controller of the vehicle to -translate these velocities into correct motor control commands. -Therefore, OutdoorNav Software requires that the UGV must accept the -control commands sent in the [ROS Twist message](http://docs.ros.org/en/noetic/api/geometry_msgs/html/msg/Twist.html) -format. More detailed requirements are outlined in the following table. - -| # | Requirement | Notes | -| - | --------------------------------- | ----------------------------------- | -| 1 | The UGV must be a differential drive or Ackermann drive configuration | Ackerman drive is currently available as a custom implementation; standard in 2023 | -| 2 | The UGV must have velocity control of the wheels and provide kinematic control of the platform | | -| 3 | The UGV shall provide odometry feedback of the wheel direction and velocities and/or steering position | Recommended encoder resolution of 500 ticks per revolution or greater | -| 4 | The UGV should have an emergency stop system with status feedback | | -| 5 | The UGV must accept ROS 1 Twist Commands on the `/cmd_vel` topic | See [API Endpoints](../api/api_endpoints/api_endpoints.mdx); ROS 2 interface available in future release | -| 6 | The UGV must provide odometry and status feedback through ROS topics | See [API Endpoints](../api/api_endpoints/api_endpoints.mdx) | - -## Typical Hardware - -While a variety of different sensors and equipment can be used with -OutdoorNav Software, the following are used most commonly: - -- Clearpath Robotics UGV: Jackal, Husky or Warthog -- GPS System: Dual DURO RTK system or NovAtel Terrastar -- IMU: Microstrain 3DM-GX5-25 -- 3D Laser Sensor: Velodyne VLP-16 -- Tablet Computer: Getac F110 -- Clearpath Long Range Network Station with RTK corrections ("Base Station") +--- +title: Hardware Requirements +sidebar_label: Hardware Requirements +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +OutdoorNav Software works with compatible UGVs, either from Clearpath +Robotics or third parties. High level requirements for compatible UGVs +are outlined below. Detailed qualification requirements are outlined in +[UGV Integration Requirements](../integration_requirements/integration_overview.mdx). + +## Requirements + +OutdoorNav software does not communicate directly with the UGV motors. +Rather, it publishes target linear and angular velocities packaged in +the [ROS Twist message](http://docs.ros.org/en/noetic/api/geometry_msgs/html/msg/Twist.html) +format and relies on the low level velocity controller of the vehicle to +translate these velocities into correct motor control commands. +Therefore, OutdoorNav Software requires that the UGV must accept the +control commands sent in the [ROS Twist message](http://docs.ros.org/en/noetic/api/geometry_msgs/html/msg/Twist.html) +format. More detailed requirements are outlined in the following table. + +| # | Requirement | Notes | +| - | --------------------------------- | ----------------------------------- | +| 1 | The UGV must be a differential drive or Ackermann drive configuration | Ackerman drive is currently available as a custom implementation; standard in 2023 | +| 2 | The UGV must have velocity control of the wheels and provide kinematic control of the platform | | +| 3 | The UGV shall provide odometry feedback of the wheel direction and velocities and/or steering position | Recommended encoder resolution of 500 ticks per revolution or greater | +| 4 | The UGV should have an emergency stop system with status feedback | | +| 5 | The UGV must accept ROS 1 Twist Commands on the `/cmd_vel` topic | See [API Endpoints](../api/api_endpoints/api_endpoints.mdx); ROS 2 interface available in future release | +| 6 | The UGV must provide odometry and status feedback through ROS topics | See [API Endpoints](../api/api_endpoints/api_endpoints.mdx) | + +## Typical Hardware + +While a variety of different sensors and equipment can be used with +OutdoorNav Software, the following are used most commonly: + +- Clearpath Robotics UGV: Jackal, Husky or Warthog +- GPS System: Dual DURO RTK system or NovAtel Terrastar +- IMU: Microstrain 3DM-GX5-25 +- 3D Laser Sensor: Velodyne VLP-16 +- Tablet Computer: Getac F110 +- Clearpath Long Range Network Station with RTK corrections ("Base Station") diff --git a/outdoornav_user_manual_versioned_docs/version-0.12.0/overview/overview_introduction.mdx b/outdoornav_user_manual_versioned_docs/version-0.12.0/overview/overview_introduction.mdx index 83bfa1d6..4f3f1bf7 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.12.0/overview/overview_introduction.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.12.0/overview/overview_introduction.mdx @@ -1,93 +1,93 @@ ---- -title: Introduction -sidebar_label: Introduction -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -## Summary - -OutdoorNav Software is a software package developed by Clearpath -Robotics for autonomous and manual navigation of Unmanned Ground -Vehicles (UGVs) in outdoor environments. - -
-
- -
Web UI Mission Planning View
-
-
- -
-
- -
Web UI Front Camera View
-
-
- -## Compatible Platforms - -While it has been optimized for use with OutdoorNav Hardware from -Clearpath Robotics -([Husky](https://clearpathrobotics.com/husky-unmanned-ground-vehicle-robot/), -[Jackal](https://clearpathrobotics.com/jackal-small-unmanned-ground-vehicle/), -and -[Warthog](https://clearpathrobotics.com/warthog-unmanned-ground-vehicle-robot/)), -it has been designed so that it can be added easily to third-party UGVs. - -
-
- -
Clearpath Robotics Warthog UGV with navigation equipment and operator control unit
-
-
- -## Key Features - -Key features of OutdoorNav Software include: - -- Mission Planning and Autonomous Navigation - - - Robust GPS-based localization with sensor fusion of IMU, LiDAR - and platform odometry - - Autonomous path following via waypoints - - Obstacle Detection and Avoidance: Stop and wait or - autonomously plan a collision-free path around obstacles - without the need to stop - -- Teleoperation - - - Operate the robot remotely using an on-screen or physical - joystick - - Visualize what the robot sees by displaying its network - cameras and LiDAR data - -- Web User Interface (Web UI) - - - Build missions containing sets of paths, with optional task - execution on each path; tasks can be standard tasks (eg. save - camera image) or user provided functions - - View the robot's live position and attitude on the map - - Display robot data such as velocity, signal strength, status - of the motion stop, status of navigation system, and battery charge - - Save and export Missions - -- Application Programming Interface (API) - - - Build your own application and UI by accessing the navigation - API to control the UGV through software or implement fleet - management by accessing the mission API - -- Simulation - - - Begin development of your application prior to purchasing - licenses or commissioning hardware with OutdoorNav software and - the ROS Gazebo simulator - -- Third Party Integration - - - The Web UI and API can be accessed through a network connection; - cloud-based services are available from third parties to - facilitate remote connections and networking to robot hardware - such as Formant.io and Freedom Robotics +--- +title: Introduction +sidebar_label: Introduction +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +## Summary + +OutdoorNav Software is a software package developed by Clearpath +Robotics for autonomous and manual navigation of Unmanned Ground +Vehicles (UGVs) in outdoor environments. + +
+
+ +
Web UI Mission Planning View
+
+
+ +
+
+ +
Web UI Front Camera View
+
+
+ +## Compatible Platforms + +While it has been optimized for use with OutdoorNav Hardware from +Clearpath Robotics +([Husky](https://clearpathrobotics.com/husky-unmanned-ground-vehicle-robot/), +[Jackal](https://clearpathrobotics.com/jackal-small-unmanned-ground-vehicle/), +and +[Warthog](https://clearpathrobotics.com/warthog-unmanned-ground-vehicle-robot/)), +it has been designed so that it can be added easily to third-party UGVs. + +
+
+ +
Clearpath Robotics Warthog UGV with navigation equipment and operator control unit
+
+
+ +## Key Features + +Key features of OutdoorNav Software include: + +- Mission Planning and Autonomous Navigation + + - Robust GPS-based localization with sensor fusion of IMU, LiDAR + and platform odometry + - Autonomous path following via waypoints + - Obstacle Detection and Avoidance: Stop and wait or + autonomously plan a collision-free path around obstacles + without the need to stop + +- Teleoperation + + - Operate the robot remotely using an on-screen or physical + joystick + - Visualize what the robot sees by displaying its network + cameras and LiDAR data + +- Web User Interface (Web UI) + + - Build missions containing sets of paths, with optional task + execution on each path; tasks can be standard tasks (eg. save + camera image) or user provided functions + - View the robot's live position and attitude on the map + - Display robot data such as velocity, signal strength, status + of the motion stop, status of navigation system, and battery charge + - Save and export Missions + +- Application Programming Interface (API) + + - Build your own application and UI by accessing the navigation + API to control the UGV through software or implement fleet + management by accessing the mission API + +- Simulation + + - Begin development of your application prior to purchasing + licenses or commissioning hardware with OutdoorNav software and + the ROS Gazebo simulator + +- Third Party Integration + + - The Web UI and API can be accessed through a network connection; + cloud-based services are available from third parties to + facilitate remote connections and networking to robot hardware + such as Formant.io and Freedom Robotics diff --git a/outdoornav_user_manual_versioned_docs/version-0.12.0/overview/overview_operating_conditions.mdx b/outdoornav_user_manual_versioned_docs/version-0.12.0/overview/overview_operating_conditions.mdx index c02228aa..6e0b17a5 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.12.0/overview/overview_operating_conditions.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.12.0/overview/overview_operating_conditions.mdx @@ -1,177 +1,177 @@ ---- -title: Operating Conditions -sidebar_label: Operating Conditions -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -OutdoorNav Software is designed and tested for use in rugged outdoor -environments. - -## Operating Conditions - -### Terrain - -OutdoorNav Software is compatible with terrains in which the UGV can be -driven manually without excessive slipping. The performance limits will -be a function of the base UGV traction. - -Using Clearpath Robotics Husky, Jackal, and Warthog as a the base UGV, -OutdoorNav Software is suitable for use in the following terrains: - -- asphalt -- concrete -- grass -- snow - -:::note - -Grass should not exceed 30 cm in height if collision avoidance is -enabled. - -::: - -:::note - -Winter/studded tires may be required for proper traction on snow. - -::: - -OutdoorNav Software is currently **not** suitable in the following -terrains: - -- ice -- loose gravel - -:::note - -Support for loose gravel environments is currently being tested and is -expected to be available in late 2023. - -::: - -The terrain capabilities of third-party UGVs will be dependent on a -variety of factors including the vehicle mass, the tire treading, and -motor power. - -### Environment - -OutdoorNav Software is suitable for use in the following environmental -conditions: - -- light rainfall (drizzle) -- light snowfall (powdery snow) - -:::note - -If erratic behavior, such as frequent replanning, is perceived in these -light precipitation conditions, disabling the "continuous planning" -feature may help. - -::: - -OutdoorNav Software is **not** suitable for use in the following -environmental conditions: - -- heavy rainfall -- heavy snowfall - -:::note - -If navigation is required in heavy rain or snow, disabling the collision -avoidance feature will allow the UGV to navigate properly. This should -be done with caution. - -![](/img/outdoornav_images/gps_danger.png) - -::: - -## Performance - -The performance of the system is highly dependent on both the base UGV, -the sensors, the system integration details, and the environment. The -following table provides typical performance metrics for Clearpath -Robotics Jackal and Husky UGVs. - -_System Performance for Husky/Jackal with Typical Sensors_ - -| | Starter Sensor Kit | Standard Sensor Kit (No RTK) | Standard Sensor Kit (RTK) | -|----------------------------------------|-----------------------------------|----------------------------------|----------------------------------| -| GPS sensors | UBlox F9P | 2x SwiftNav Duro | 2x SwiftNav Duro | -| Location accuracy (position & heading) | Less than 60 cm
Less than 10° | Less than 30 cm
Less than 5° | Less than 5 cm
Less than 2° | -| Path tracking accuracy (approximate) | 20 cm | 15 cm | 10 cm | - -## Limitations - -While OutdoorNav Software operates effectively in a range of rugged -outdoor environments, the operator should be aware of the following -limitations and plan accordingly. - -_OutdoorNav System Limitations_ - -| Limitation | Details | -|--------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| RTK accuracy | Localization accuracy for the Standard (RTK) configuration assumes the base station location has been accurately surveyed. | -| Localization accuracy | Localization accuracy is influenced by the quality of GNSS data that is available. Navigating in GNSS denied areas (e.g., under bridges, near tall buildings, etc.) will cause degradation in localization performance. | -| Negative obstacle detection not present | Outdoor Navigation Software does not have negative obstacle detection capability. Your UGV will not detect stairs, cliffs, potholes, depressions or edges and may drive into these obstacles causing harm to people or property. | -| Limited obstacle detection in vertical dimension | The small vertical field of view of 3D LiDARs limits the vertical obstacle detection capability of the OutdoorNav Software. See [Obstacle Detection Limitations](#obstacle-detection-limitations) for details. | -| Low traction may cause UGV to get stuck | Your UGV may navigate itself into a situation where wheels slip or do not make contact with the ground. | -| Rain and snow may affect obstacle detection | Adverse weather conditions may obscure obstacle detection and avoidance data from the VLP-16 LiDAR. Obstacle detection and avoidance may not function in all weather conditions and must be disabled to navigate in heavy snow or rain. | -| Maximum distance between two Viapoints | Distance between any two consecutive Viapoints of a Mission should be less than 20 meters. This will ensure that the global planner can find a valid path to the next Viapoint for the UGV in case there is an obstacle on the path of the UGV. | -| WiFi range limits | The current configurations of the OutdoorNav Software will continue navigation if the WiFi disconnects or goes out of range. The Web UI will reconnect once the WiFi has reconnected but certain functions of the UI may be limited such as the ability to issue a pause/stop commands or sending new missions to the UGV. | -| Wireless motion stop range limits | The UGV will motion stop if the UGV is driven out of range of the wireless motion stop device. | -| RTK GPS limited by WiFi range | If WiFi goes out of range, your UGV will not receive RTK corrections from the Base Station. This can potentially decrease the accuracy of the GPS signal which can subsequently degrade path following performance of your system. | -| Obstacle detection may cause UGV to become stuck | The UGV may stop and become stuck if obstacles are detected and not cleared from its path. If obstacle avoidance is enabled, it may not be able to calculate an acceptable path to the next Viapoint or Goal Point under all circumstances. This will result in the UGV becoming stuck and failing its Mission. | -| Failure to set Datum causes undefined behavior | If the Datum is not set or is not synchronized with the navigation module, the UGV's driven path is undefined and will move unpredictably if Missions are sent in this state. | -| Zones are not currently supported | It is not possible to define “keep-out” or “unsafe” zones that the UGV needs to avoid. Rather, careful use of Waypoint placement by the operator can be used to keep the UGV at a safe distance from unsafe zones. | -| No collision avoidance during teleoperation mode | When operating in Manual Mode (Teleoperation), no collision avoidance is enabled. The operator is responsible for avoiding collisions. | - -### Obstacle Detection Limitations {#obstacle-detection-limitations} - -The maximum collision avoidance range for the OutdoorNav Software is -UGV-dependent and is related to the maximum speed of the UGV. These -ranges for Clearpath Robotics UGVs are: - -- Jackal UGV: 4.5 meters -- Husky UGV: 4.5 meters -- Warthog UGV: 15.0 meters - -While the sensors are able to detect objects at further distances, the -OutdoorNav Software only considers obstacles detected within these -distances for collision avoidance. That is, the UGV will only begin to -decelerate as it detects obstacles within this range. - -The detection itself is also related to the horizontal size -(width/diameter) of the obstacle. The limitations in detecting objects -with small horizontal size are described in the table below. - -_Maximum Reliable Obstacle Detection Distance from UGV, according to Obstacle Horizontal Size_ - -| Object Size (Horizontal) | Starter Sensor Kit | Standard Sensor Kit | -|--------------------------|----------------------------------------------------------------|----------------------------------------------------------------| -| Less than 0.6 cm | No reliable detection | No reliable detection | -| 0.6 to 1.0 cm | 0.8 m | No reliable detection | -| 1.0 to 3.0 cm | 2.0 m | 1.75 m | -| Greater than 3.0 cm | Maximum collision avoidance distance (UGV-specific; see above) | Maximum collision avoidance distance (UGV-specific; see above) | - -Finally, the OutdoorNav Software bounds the obstacle detection to -prevent ground hits and to remove detections above the UGV body. The -following bounds are relative to the ground, assuming a flat surface. -Obstacles that are entirely below the lower bound or entirely above the -upper bound are not considered obstacles and will not be avoided. - -_Obstacle Detection Vertical Bounds_ - -| Vertical Bound | Jackal UGV | Husky UGV | Warthog UGV | -|-----------------------|------------|-----------|-------------| -| Lower Detection Bound | 0.3 m | 0.3 m | 0.3 m | -| Upper Detection Bound | 0.8 m | 1.3 m | 1.8 m | - -:::note - -The vertical detection bounds above are for the Standard Sensor Kit or a -custom sensor configuration that includes a Velodyne. The vertical -detection bounds for the Starter Sensor Kit have yet to be determined. - +--- +title: Operating Conditions +sidebar_label: Operating Conditions +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +OutdoorNav Software is designed and tested for use in rugged outdoor +environments. + +## Operating Conditions + +### Terrain + +OutdoorNav Software is compatible with terrains in which the UGV can be +driven manually without excessive slipping. The performance limits will +be a function of the base UGV traction. + +Using Clearpath Robotics Husky, Jackal, and Warthog as a the base UGV, +OutdoorNav Software is suitable for use in the following terrains: + +- asphalt +- concrete +- grass +- snow + +:::note + +Grass should not exceed 30 cm in height if collision avoidance is +enabled. + +::: + +:::note + +Winter/studded tires may be required for proper traction on snow. + +::: + +OutdoorNav Software is currently **not** suitable in the following +terrains: + +- ice +- loose gravel + +:::note + +Support for loose gravel environments is currently being tested and is +expected to be available in late 2023. + +::: + +The terrain capabilities of third-party UGVs will be dependent on a +variety of factors including the vehicle mass, the tire treading, and +motor power. + +### Environment + +OutdoorNav Software is suitable for use in the following environmental +conditions: + +- light rainfall (drizzle) +- light snowfall (powdery snow) + +:::note + +If erratic behavior, such as frequent replanning, is perceived in these +light precipitation conditions, disabling the "continuous planning" +feature may help. + +::: + +OutdoorNav Software is **not** suitable for use in the following +environmental conditions: + +- heavy rainfall +- heavy snowfall + +:::note + +If navigation is required in heavy rain or snow, disabling the collision +avoidance feature will allow the UGV to navigate properly. This should +be done with caution. + +![](/img/outdoornav_images/gps_danger.png) + +::: + +## Performance + +The performance of the system is highly dependent on both the base UGV, +the sensors, the system integration details, and the environment. The +following table provides typical performance metrics for Clearpath +Robotics Jackal and Husky UGVs. + +_System Performance for Husky/Jackal with Typical Sensors_ + +| | Starter Sensor Kit | Standard Sensor Kit (No RTK) | Standard Sensor Kit (RTK) | +|----------------------------------------|-----------------------------------|----------------------------------|----------------------------------| +| GPS sensors | UBlox F9P | 2x SwiftNav Duro | 2x SwiftNav Duro | +| Location accuracy (position & heading) | Less than 60 cm
Less than 10° | Less than 30 cm
Less than 5° | Less than 5 cm
Less than 2° | +| Path tracking accuracy (approximate) | 20 cm | 15 cm | 10 cm | + +## Limitations + +While OutdoorNav Software operates effectively in a range of rugged +outdoor environments, the operator should be aware of the following +limitations and plan accordingly. + +_OutdoorNav System Limitations_ + +| Limitation | Details | +|--------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| RTK accuracy | Localization accuracy for the Standard (RTK) configuration assumes the base station location has been accurately surveyed. | +| Localization accuracy | Localization accuracy is influenced by the quality of GNSS data that is available. Navigating in GNSS denied areas (e.g., under bridges, near tall buildings, etc.) will cause degradation in localization performance. | +| Negative obstacle detection not present | Outdoor Navigation Software does not have negative obstacle detection capability. Your UGV will not detect stairs, cliffs, potholes, depressions or edges and may drive into these obstacles causing harm to people or property. | +| Limited obstacle detection in vertical dimension | The small vertical field of view of 3D LiDARs limits the vertical obstacle detection capability of the OutdoorNav Software. See [Obstacle Detection Limitations](#obstacle-detection-limitations) for details. | +| Low traction may cause UGV to get stuck | Your UGV may navigate itself into a situation where wheels slip or do not make contact with the ground. | +| Rain and snow may affect obstacle detection | Adverse weather conditions may obscure obstacle detection and avoidance data from the VLP-16 LiDAR. Obstacle detection and avoidance may not function in all weather conditions and must be disabled to navigate in heavy snow or rain. | +| Maximum distance between two Viapoints | Distance between any two consecutive Viapoints of a Mission should be less than 20 meters. This will ensure that the global planner can find a valid path to the next Viapoint for the UGV in case there is an obstacle on the path of the UGV. | +| WiFi range limits | The current configurations of the OutdoorNav Software will continue navigation if the WiFi disconnects or goes out of range. The Web UI will reconnect once the WiFi has reconnected but certain functions of the UI may be limited such as the ability to issue a pause/stop commands or sending new missions to the UGV. | +| Wireless motion stop range limits | The UGV will motion stop if the UGV is driven out of range of the wireless motion stop device. | +| RTK GPS limited by WiFi range | If WiFi goes out of range, your UGV will not receive RTK corrections from the Base Station. This can potentially decrease the accuracy of the GPS signal which can subsequently degrade path following performance of your system. | +| Obstacle detection may cause UGV to become stuck | The UGV may stop and become stuck if obstacles are detected and not cleared from its path. If obstacle avoidance is enabled, it may not be able to calculate an acceptable path to the next Viapoint or Goal Point under all circumstances. This will result in the UGV becoming stuck and failing its Mission. | +| Failure to set Datum causes undefined behavior | If the Datum is not set or is not synchronized with the navigation module, the UGV's driven path is undefined and will move unpredictably if Missions are sent in this state. | +| Zones are not currently supported | It is not possible to define “keep-out” or “unsafe” zones that the UGV needs to avoid. Rather, careful use of Waypoint placement by the operator can be used to keep the UGV at a safe distance from unsafe zones. | +| No collision avoidance during teleoperation mode | When operating in Manual Mode (Teleoperation), no collision avoidance is enabled. The operator is responsible for avoiding collisions. | + +### Obstacle Detection Limitations {#obstacle-detection-limitations} + +The maximum collision avoidance range for the OutdoorNav Software is +UGV-dependent and is related to the maximum speed of the UGV. These +ranges for Clearpath Robotics UGVs are: + +- Jackal UGV: 4.5 meters +- Husky UGV: 4.5 meters +- Warthog UGV: 15.0 meters + +While the sensors are able to detect objects at further distances, the +OutdoorNav Software only considers obstacles detected within these +distances for collision avoidance. That is, the UGV will only begin to +decelerate as it detects obstacles within this range. + +The detection itself is also related to the horizontal size +(width/diameter) of the obstacle. The limitations in detecting objects +with small horizontal size are described in the table below. + +_Maximum Reliable Obstacle Detection Distance from UGV, according to Obstacle Horizontal Size_ + +| Object Size (Horizontal) | Starter Sensor Kit | Standard Sensor Kit | +|--------------------------|----------------------------------------------------------------|----------------------------------------------------------------| +| Less than 0.6 cm | No reliable detection | No reliable detection | +| 0.6 to 1.0 cm | 0.8 m | No reliable detection | +| 1.0 to 3.0 cm | 2.0 m | 1.75 m | +| Greater than 3.0 cm | Maximum collision avoidance distance (UGV-specific; see above) | Maximum collision avoidance distance (UGV-specific; see above) | + +Finally, the OutdoorNav Software bounds the obstacle detection to +prevent ground hits and to remove detections above the UGV body. The +following bounds are relative to the ground, assuming a flat surface. +Obstacles that are entirely below the lower bound or entirely above the +upper bound are not considered obstacles and will not be avoided. + +_Obstacle Detection Vertical Bounds_ + +| Vertical Bound | Jackal UGV | Husky UGV | Warthog UGV | +|-----------------------|------------|-----------|-------------| +| Lower Detection Bound | 0.3 m | 0.3 m | 0.3 m | +| Upper Detection Bound | 0.8 m | 1.3 m | 1.8 m | + +:::note + +The vertical detection bounds above are for the Standard Sensor Kit or a +custom sensor configuration that includes a Velodyne. The vertical +detection bounds for the Starter Sensor Kit have yet to be determined. + ::: \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.12.0/overview/overview_scope.mdx b/outdoornav_user_manual_versioned_docs/version-0.12.0/overview/overview_scope.mdx index ba0092f1..f1a32607 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.12.0/overview/overview_scope.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.12.0/overview/overview_scope.mdx @@ -1,15 +1,15 @@ ---- -title: Scope -sidebar_label: Scope -sidebar_position: 2 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -This documentation focuses on the OutdoorNav Software itself, including -hardware dependencies and integration, but not the specifics of UGV -hardware. For details on compatible Clearpath Robotics UGVs and custom -hardware integrations, contact \ or check -out our [YouTube channel](https://www.youtube.com/channel/UCNPP3C-ZK3mwpG2x89VE-2Q). - - +--- +title: Scope +sidebar_label: Scope +sidebar_position: 2 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +This documentation focuses on the OutdoorNav Software itself, including +hardware dependencies and integration, but not the specifics of UGV +hardware. For details on compatible Clearpath Robotics UGVs and custom +hardware integrations, contact \ or check +out our [YouTube channel](https://www.youtube.com/channel/UCNPP3C-ZK3mwpG2x89VE-2Q). + + diff --git a/outdoornav_user_manual_versioned_docs/version-0.12.0/release_notes.mdx b/outdoornav_user_manual_versioned_docs/version-0.12.0/release_notes.mdx index 009c126a..2da17ffe 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.12.0/release_notes.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.12.0/release_notes.mdx @@ -1,316 +1,316 @@ ---- -title: Release Notes -sidebar_label: Release Notes -sidebar_position: 2 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -import Style from '/assets/css/changelog.css'; - -
- -## 0.12.0 - -### New Features -- Modified mission planning modes. Now includes: - - Map mode (which allows the user to create maps of an environment - and send mission using said map) - - Waypoint mode (which allows the user to create more direct mission - by placing waypoints directly on the Aerial overlay) -- Added an Assisted teleoperation feature to prevent robot collisions with - obstacles when it is being teleoperated. -- Added the upgrade command to the CLI tool. Customers can now upgrade their - software as long as they are eligible to be upgraded to the newest version. - Please contact [Support](./support.mdx) for more information. -- New visualization of status command in CLI tool -- Added a filebrowser extension to access/view the robot filesystem for easier - media access - -### API Features - -- Added new message definitions and service calls for the storage/editing of Maps - -### Bug Fixes - -- 1973: Fixed python “machineid” error during installation -- 2089: Fixed the no serial number on /platform/id topic -- 2169: Fixed the mission manager/scheduler still requesting during Teleop only mode - -### Known Issues - -- 1396: Robot gets temporarily stuck at start of mission when near a Waypoint -- 1844: [MPC] Maximum acceleration param doesn't appear to have any effect -- 2332: upgrading from 0.11 to 0.12.0 in teleoperation only configuration and Q62 - installed causes duplication of axis driver. Please contact [Support](./support.mdx) - if you run into this issue. -- 2344: Autonomy not going down during low-power mode -- 2360: Waypoint/Map modes use different mouse click to open context menus - -## 0.11.0 - -### New Features - -- Command Line Tool used to install/update/manage OutdoorNav -- Added the End User License Agreement to the UI upon start up -- Light and PTZ Pan/Tilt controls can now be mapped to a controller -- OutdoorNav/IndoorNav switch over improvements -- Can now place waypoints at UGV location via shortcut key (Shift + X) - -### API Features - -- Can now delete multiple mission objects (missions, waypoints, tasks) in single call -- Stack Light can now be manually overridden/muted -- Added ability to import single missions to the robot - -### Bug Fixes - -- 1688: Move PTZ task only ever uses the first PTZ camera's positions -- 2011: Filter false "Move PTZ Failure" notifications when moving PTZ camera - -### Known Issues - -- 1396: Robot gets temporarily stuck at start of mission when near a Waypoint -- 1844: [MPC] Maximum acceleration param doesn't appear to have any effect - -## 0.10.0 - -### New Features - -- Added the ability to start mission from a specific Waypoint -- Added the ability to resume mission from current location -- Added the option to include on-start and on-stop tasks to a Mission -- Added the option to continue a Mission if a Task should fail -- Full release of the API examples repository to the public (link API examples top level page) - -### API Features - -- Action definition changes (see [API Endpoints](./api/api_endpoints/autonomy_api.mdx)) - - Mission.action added from_start and *start_waypoint_uuid* fields - - ExecuteMissionByUuid.action: added from_start and *start_waypoint_uuid* fields -- Message Definition changes - - Mission.msg: added an array of on_start and and array of on_stop tasks fields - - Task.msg: added a boolean allow_failure field -- Updated /safety/safety_stop message type (see [Definitions](./api/api_endpoints/definitions.mdx#msg-safety)) -- Added import/export services for /dock, /mission_manager/ and /mission_scheduler features - -### Bug Fixes - -- 1546: Robot cannot start mission part-way through if a task is assigned on any Waypoint prior to its location -- 1764: Importing missions with docking tasks fails to bring in docks - -### Known Issues - -- 1396: Robot gets temporarily stuck at start of mission when near a Waypoint -- 1844: [MPC] Maximum acceleration param doesn't appear to have any effect - -## 0.9.0 - -### New Features - -- Operators can now Schedule Missions to run at specific times (see [Mission Scheduler](./features/mission_scheduler.mdx)) -- Added in support for BulletCat12 Microhard WiFi and Cellular connections -- Allow Audio recording as both tasks and manual operations if UGV has Microphones -- Create custom tasks that can be run during missions (see [Custom Tasks](./features/custom_tasks.mdx)) -- If installed with PDU, UGV can be set to Low Power mode to better conserve power -- New navigation topics added to ROS Autonomy API (see [API Endpoints](./api/api_endpoints/autonomy_api.mdx)): - - /navigation/progress - - /navigation/motion_state - - /navigation/metrics -- Improved precision of docking -- Improved autonomy feedback when something goes wrong in the mission to increase the diagnosability of the error -- Updated Navigation features available to the customer: - - Continuous Replanning renamed to Continuous Planning and is always enabled. - - Constrained Planning is always enabled. Environment Variable to update the path constraint has been modified - (see [Navigation](./features/navigation.mdx)) - - Removed Obstacle Avoidance Mode. The UGV will always attempt to avoid obstacles. - - Removed Path Smoothing. This is always enabled. - - Docking feature added for customers who have purchased a dock. - -### Bug Fixes - -- 1324: Allow single Waypoint missions and/or tasks on first waypoint (required for undocking through tasks). -- 1340: Undocking not working through tasks -- 1607: Fixed MovePTZ task failures - -### Known Issues - -- 131: Software upgrade process not documented fully. -- 609: Realsense D435 collision avoidance not fully tuned. -- 751: Wireless icon in UI doesn't work for Ubiquity hardware. -- 1396: Robot gets temporarily stuck at start of mission when near a Waypoint. -- 1546: Robot cannot start mission part-way through if a task is assigned on any Waypoint prior to its location. - -## 0.8.0 - -### New Features - -- Inertial Measurement Units (IMUs) integrated into localization. -- Added localization status topic (see [API Endpoints](./api/api_endpoints/autonomy_api.mdx#localizationstatus)). -- Added re-localization service (see [API Endpoints](./api/api_endpoints/definitions.mdx#srv-reset-localization)). -- Additional diagnostic information in the status view. -- Docking improvements including: multiple docks, visual representation of docks on map, - local docking/undocking through teleop view. Docking only functional with 2D LiDARs. -- Customization & Tuning Appendix C added. Lists of tuning parameters for navigation - and collision avoidance are now available. As well as, instructions/process on how to - tune UGVs with differential drive dynamics. Instructions for UGVs with Ackermann dynamics - are on their way. - -### Bug Fixes - -- 1134: Display/Hide Datum Point not working. -- 1139: Issues with non-husky platforms. -- 1137: Refreshing page re-enables edit button while mission running. -- 1276: Feedback added for incorrect first Waypoint placement. - -### Known Issues - -- 131: Software upgrade process not documented fully. -- 609: Realsense D435 collision avoidance not fully tuned. -- 751: Wireless icon in UI doesn't work for Ubiquity hardware. -- 1138: Issues with greying out Waypoints in edge cases. -- 1324: Allow single Waypoint missions and/or tasks on first waypoint (required for undocking through tasks). -- 1340: Undocking not working through tasks. - -## 0.7.0 - -### New Features - -- Goal terminology has been removed from the mission generation nomenclature (see - [Definitions](./web_user_interface/ui_waypoint_mode.mdx#definitions)) - Users can now add tasks, apply final headings, and set navigation tolerances - to any Waypoint in a Mission. -- Drag and Drop of Waypoints now available in Edit Mode. -- New Waypoints can be inserted between existing Waypoints in a Mission. -- Mission API now available to create/edit/load missions, waypoints and tasks. -- Mission execution via mission ID is now available. -- The base station location is now displayed in the UI after carrying out an automated survey. -- New coloring scheme for GNSS status icons to provide more accurate information. - -### Bug Fixes - -- 996: Axis camera missing ptz_state - -### Known Issues - -- 131: Software upgrade process not documented fully. -- 609: Realsense D435 collision avoidance not fully tuned. -- 751: Wireless icon in UI doesn't work for Ubiquity hardware. -- 1134: Display/Hide Datum point not working. -- 1137: Refreshing page re-enables edit button while mission running. -- 1138: Issues with greying out Waypoints in edge cases. - -## 0.6.0 - -### New Features - -- OutdoorNav ROS API updated. API now divided into Platform and - Autonomy sections. See [API Overview](./api/api_overview.mdx) - for more details. -- Simulation environment created with charge dock, base station and - camera plugins. -- Added deviation path visualization to UI when constrained replanning - is enabled. -- Modified goalpoint icons to reflect tasks assigned to them. -- Added the ability to record rosbags from UI. -- Added GPS signal strength to status page. -- Added improvements to PTZ controls (cosmetic changes, ability to - disable zoom, added a reset mark). -- User can set map source from OpenStreet, MapBox, Bing Maps, or - custom map tiles through UI. - -### Bug Fixes - -- 632: Prevent users from changing mission while a mission is running. -- 661: Removed map view when no map is provided in default-state.json. - file. -- 712: Fixed front end hanging when user opens menu from any view - other than main view. -- 716: Removed connecting lines from disabled goals. - -### Known Issues - -- 131: Software upgrade process not documented fully. -- 609: Realsense D435 collision avoidance not fully tuned. -- 751: Wireless icon in UI doesn't work for Ubiquity hardware. -- 756: Waypoints stop turning grey when they are hit if a waypoint is - skipped. - -## 0.5.0 - -### New Features - -- Sensor Kit Options: Starter, Standard, Backpack. -- New localization module. -- Added support for UBlox F9K and F9P GNSS receivers in the - localization module. -- Added support for either single or dual Swiftnav Duro/Piksi GNSS - receiver(s) in the localization module. -- Added support for Realsense D435 camera in collision avoidance - module. -- New/updated user modifiable environment variables for sensor and - navigation tuning. -- Added a Virtual Guided tour of the application for first time users. -- Added StreetView and Bing map tiles (to existing MapBox tile). -- Allow users to specify custom map tile source. -- Added cosmetic changes to traversed waypoints as well as a robot. - status icon with ROS topic health information. - -### Bug Fixes - -- 253: Replace default camera image for camera views when stream is - unavailable. -- 281: Fixed navigation latched in a PAUSE state. -- 574: Fixed map settings page to not rerender when robots position - changes. - -### Known Issues - -- 131: Software upgrade process not documented fully. -- 609: Realsense D435 collision avoidance not fully tuned. - -## 0.4.0 - -### New Features - -- Improved wireless charger docking workflow and added ROS Noetic - docking support. -- Added option to record videos from cameras. -- Improved Docker setup to allow concurrent installation with - IndoorNav. -- Added initial support for integration with - [Formant](https://formant.io/). -- Added Docker installation support for Jackal and Warthog robots. - -### Bug Fixes - -- 480: Added rate limiter for continuous planner. -- 490: Fixed base station survey pop up to better reflect survey time. - -### Known Issues - -- 131: Software upgrade process not documented fully. - -## 0.3.0 - -### New Features - -- Upgraded from ROS Melodic to ROS Noetic. -- Published initial performance metrics. -- Updated system architecture to work in Docker containers. - -### Bug Fixes - -- 266: Allowed map offsets to be set more than once without needing to - reset them back to zero. -- 365: Updated costmap to handle large stop distances properly. -- 377: Fixed handling of goal tolerances of 0.02m or less. -- 389: Fixed issue with goal being skipped in some cases where final - heading was specified. - -### Known Issues - -- 131: Software upgrade process not documented fully. -- 150: Docking not yet implemented in Noetic. - +--- +title: Release Notes +sidebar_label: Release Notes +sidebar_position: 2 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +import Style from '/assets/css/changelog.css'; + +
+ +## 0.12.0 + +### New Features +- Modified mission planning modes. Now includes: + - Map mode (which allows the user to create maps of an environment + and send mission using said map) + - Waypoint mode (which allows the user to create more direct mission + by placing waypoints directly on the Aerial overlay) +- Added an Assisted teleoperation feature to prevent robot collisions with + obstacles when it is being teleoperated. +- Added the upgrade command to the CLI tool. Customers can now upgrade their + software as long as they are eligible to be upgraded to the newest version. + Please contact [Support](./support.mdx) for more information. +- New visualization of status command in CLI tool +- Added a filebrowser extension to access/view the robot filesystem for easier + media access + +### API Features + +- Added new message definitions and service calls for the storage/editing of Maps + +### Bug Fixes + +- 1973: Fixed python “machineid” error during installation +- 2089: Fixed the no serial number on /platform/id topic +- 2169: Fixed the mission manager/scheduler still requesting during Teleop only mode + +### Known Issues + +- 1396: Robot gets temporarily stuck at start of mission when near a Waypoint +- 1844: [MPC] Maximum acceleration param doesn't appear to have any effect +- 2332: upgrading from 0.11 to 0.12.0 in teleoperation only configuration and Q62 + installed causes duplication of axis driver. Please contact [Support](./support.mdx) + if you run into this issue. +- 2344: Autonomy not going down during low-power mode +- 2360: Waypoint/Map modes use different mouse click to open context menus + +## 0.11.0 + +### New Features + +- Command Line Tool used to install/update/manage OutdoorNav +- Added the End User License Agreement to the UI upon start up +- Light and PTZ Pan/Tilt controls can now be mapped to a controller +- OutdoorNav/IndoorNav switch over improvements +- Can now place waypoints at UGV location via shortcut key (Shift + X) + +### API Features + +- Can now delete multiple mission objects (missions, waypoints, tasks) in single call +- Stack Light can now be manually overridden/muted +- Added ability to import single missions to the robot + +### Bug Fixes + +- 1688: Move PTZ task only ever uses the first PTZ camera's positions +- 2011: Filter false "Move PTZ Failure" notifications when moving PTZ camera + +### Known Issues + +- 1396: Robot gets temporarily stuck at start of mission when near a Waypoint +- 1844: [MPC] Maximum acceleration param doesn't appear to have any effect + +## 0.10.0 + +### New Features + +- Added the ability to start mission from a specific Waypoint +- Added the ability to resume mission from current location +- Added the option to include on-start and on-stop tasks to a Mission +- Added the option to continue a Mission if a Task should fail +- Full release of the API examples repository to the public (link API examples top level page) + +### API Features + +- Action definition changes (see [API Endpoints](./api/api_endpoints/autonomy_api.mdx)) + - Mission.action added from_start and *start_waypoint_uuid* fields + - ExecuteMissionByUuid.action: added from_start and *start_waypoint_uuid* fields +- Message Definition changes + - Mission.msg: added an array of on_start and and array of on_stop tasks fields + - Task.msg: added a boolean allow_failure field +- Updated /safety/safety_stop message type (see [Definitions](./api/api_endpoints/definitions.mdx#msg-safety)) +- Added import/export services for /dock, /mission_manager/ and /mission_scheduler features + +### Bug Fixes + +- 1546: Robot cannot start mission part-way through if a task is assigned on any Waypoint prior to its location +- 1764: Importing missions with docking tasks fails to bring in docks + +### Known Issues + +- 1396: Robot gets temporarily stuck at start of mission when near a Waypoint +- 1844: [MPC] Maximum acceleration param doesn't appear to have any effect + +## 0.9.0 + +### New Features + +- Operators can now Schedule Missions to run at specific times (see [Mission Scheduler](./features/mission_scheduler.mdx)) +- Added in support for BulletCat12 Microhard WiFi and Cellular connections +- Allow Audio recording as both tasks and manual operations if UGV has Microphones +- Create custom tasks that can be run during missions (see [Custom Tasks](./features/custom_tasks.mdx)) +- If installed with PDU, UGV can be set to Low Power mode to better conserve power +- New navigation topics added to ROS Autonomy API (see [API Endpoints](./api/api_endpoints/autonomy_api.mdx)): + - /navigation/progress + - /navigation/motion_state + - /navigation/metrics +- Improved precision of docking +- Improved autonomy feedback when something goes wrong in the mission to increase the diagnosability of the error +- Updated Navigation features available to the customer: + - Continuous Replanning renamed to Continuous Planning and is always enabled. + - Constrained Planning is always enabled. Environment Variable to update the path constraint has been modified + (see [Navigation](./features/navigation.mdx)) + - Removed Obstacle Avoidance Mode. The UGV will always attempt to avoid obstacles. + - Removed Path Smoothing. This is always enabled. + - Docking feature added for customers who have purchased a dock. + +### Bug Fixes + +- 1324: Allow single Waypoint missions and/or tasks on first waypoint (required for undocking through tasks). +- 1340: Undocking not working through tasks +- 1607: Fixed MovePTZ task failures + +### Known Issues + +- 131: Software upgrade process not documented fully. +- 609: Realsense D435 collision avoidance not fully tuned. +- 751: Wireless icon in UI doesn't work for Ubiquity hardware. +- 1396: Robot gets temporarily stuck at start of mission when near a Waypoint. +- 1546: Robot cannot start mission part-way through if a task is assigned on any Waypoint prior to its location. + +## 0.8.0 + +### New Features + +- Inertial Measurement Units (IMUs) integrated into localization. +- Added localization status topic (see [API Endpoints](./api/api_endpoints/autonomy_api.mdx#localizationstatus)). +- Added re-localization service (see [API Endpoints](./api/api_endpoints/definitions.mdx#srv-reset-localization)). +- Additional diagnostic information in the status view. +- Docking improvements including: multiple docks, visual representation of docks on map, + local docking/undocking through teleop view. Docking only functional with 2D LiDARs. +- Customization & Tuning Appendix C added. Lists of tuning parameters for navigation + and collision avoidance are now available. As well as, instructions/process on how to + tune UGVs with differential drive dynamics. Instructions for UGVs with Ackermann dynamics + are on their way. + +### Bug Fixes + +- 1134: Display/Hide Datum Point not working. +- 1139: Issues with non-husky platforms. +- 1137: Refreshing page re-enables edit button while mission running. +- 1276: Feedback added for incorrect first Waypoint placement. + +### Known Issues + +- 131: Software upgrade process not documented fully. +- 609: Realsense D435 collision avoidance not fully tuned. +- 751: Wireless icon in UI doesn't work for Ubiquity hardware. +- 1138: Issues with greying out Waypoints in edge cases. +- 1324: Allow single Waypoint missions and/or tasks on first waypoint (required for undocking through tasks). +- 1340: Undocking not working through tasks. + +## 0.7.0 + +### New Features + +- Goal terminology has been removed from the mission generation nomenclature (see + [Definitions](./web_user_interface/ui_waypoint_mode.mdx#definitions)) + Users can now add tasks, apply final headings, and set navigation tolerances + to any Waypoint in a Mission. +- Drag and Drop of Waypoints now available in Edit Mode. +- New Waypoints can be inserted between existing Waypoints in a Mission. +- Mission API now available to create/edit/load missions, waypoints and tasks. +- Mission execution via mission ID is now available. +- The base station location is now displayed in the UI after carrying out an automated survey. +- New coloring scheme for GNSS status icons to provide more accurate information. + +### Bug Fixes + +- 996: Axis camera missing ptz_state + +### Known Issues + +- 131: Software upgrade process not documented fully. +- 609: Realsense D435 collision avoidance not fully tuned. +- 751: Wireless icon in UI doesn't work for Ubiquity hardware. +- 1134: Display/Hide Datum point not working. +- 1137: Refreshing page re-enables edit button while mission running. +- 1138: Issues with greying out Waypoints in edge cases. + +## 0.6.0 + +### New Features + +- OutdoorNav ROS API updated. API now divided into Platform and + Autonomy sections. See [API Overview](./api/api_overview.mdx) + for more details. +- Simulation environment created with charge dock, base station and + camera plugins. +- Added deviation path visualization to UI when constrained replanning + is enabled. +- Modified goalpoint icons to reflect tasks assigned to them. +- Added the ability to record rosbags from UI. +- Added GPS signal strength to status page. +- Added improvements to PTZ controls (cosmetic changes, ability to + disable zoom, added a reset mark). +- User can set map source from OpenStreet, MapBox, Bing Maps, or + custom map tiles through UI. + +### Bug Fixes + +- 632: Prevent users from changing mission while a mission is running. +- 661: Removed map view when no map is provided in default-state.json. + file. +- 712: Fixed front end hanging when user opens menu from any view + other than main view. +- 716: Removed connecting lines from disabled goals. + +### Known Issues + +- 131: Software upgrade process not documented fully. +- 609: Realsense D435 collision avoidance not fully tuned. +- 751: Wireless icon in UI doesn't work for Ubiquity hardware. +- 756: Waypoints stop turning grey when they are hit if a waypoint is + skipped. + +## 0.5.0 + +### New Features + +- Sensor Kit Options: Starter, Standard, Backpack. +- New localization module. +- Added support for UBlox F9K and F9P GNSS receivers in the + localization module. +- Added support for either single or dual Swiftnav Duro/Piksi GNSS + receiver(s) in the localization module. +- Added support for Realsense D435 camera in collision avoidance + module. +- New/updated user modifiable environment variables for sensor and + navigation tuning. +- Added a Virtual Guided tour of the application for first time users. +- Added StreetView and Bing map tiles (to existing MapBox tile). +- Allow users to specify custom map tile source. +- Added cosmetic changes to traversed waypoints as well as a robot. + status icon with ROS topic health information. + +### Bug Fixes + +- 253: Replace default camera image for camera views when stream is + unavailable. +- 281: Fixed navigation latched in a PAUSE state. +- 574: Fixed map settings page to not rerender when robots position + changes. + +### Known Issues + +- 131: Software upgrade process not documented fully. +- 609: Realsense D435 collision avoidance not fully tuned. + +## 0.4.0 + +### New Features + +- Improved wireless charger docking workflow and added ROS Noetic + docking support. +- Added option to record videos from cameras. +- Improved Docker setup to allow concurrent installation with + IndoorNav. +- Added initial support for integration with + [Formant](https://formant.io/). +- Added Docker installation support for Jackal and Warthog robots. + +### Bug Fixes + +- 480: Added rate limiter for continuous planner. +- 490: Fixed base station survey pop up to better reflect survey time. + +### Known Issues + +- 131: Software upgrade process not documented fully. + +## 0.3.0 + +### New Features + +- Upgraded from ROS Melodic to ROS Noetic. +- Published initial performance metrics. +- Updated system architecture to work in Docker containers. + +### Bug Fixes + +- 266: Allowed map offsets to be set more than once without needing to + reset them back to zero. +- 365: Updated costmap to handle large stop distances properly. +- 377: Fixed handling of goal tolerances of 0.02m or less. +- 389: Fixed issue with goal being skipped in some cases where final + heading was specified. + +### Known Issues + +- 131: Software upgrade process not documented fully. +- 150: Docking not yet implemented in Noetic. +
\ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.12.0/safety.mdx b/outdoornav_user_manual_versioned_docs/version-0.12.0/safety.mdx index ea70a51b..ba0e8ddf 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.12.0/safety.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.12.0/safety.mdx @@ -1,144 +1,144 @@ ---- -title: Safety -sidebar_label: Safety -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -## Important Safety Information - -The use of Unmanned Ground Vehicles (UGVs) can result in unexpected and -dangerous behavior. Although Clearpath Robotics endeavors to create safe -and reliable software and systems, autonomous outdoor UGVs should not be -considered safe for unsupervised use around humans or other obstacles. -No level of safety and reliability of software and non-safety rated -hardware components is guaranteed. - -Clearpath strongly recommends that users carry out a risk assessment -related to their application and deployment of autonomous UGVs. The -ISO-12100 standard [Risk assessment and risk reduction](https://www.iso.org/standard/51528.html) provides guidance on -performing risk assessments. - -Functional safety in robotics is often achieved through the use of -safety related parts and control systems to minimize risks such as -safety LiDARs for obstacle detection. These hardware components must be -designed into the UGV hardware and can be tightly integrated with -navigation software. Clearpath Robotics recommends that this process be -undertaken after the product or process has been fully defined. It can -be a significant design effort. - -## Safety Notice Levels - -For Clearpath Robotics hardware and software, the risk level is captured -using the following types of labels. - -![](/img/outdoornav_images/safety_information.png) - -## General Hazard Labels - -Review the following to learn more about the labels that may be used on -Clearpath Robotics products. Hazards can also apply to attachments and -accessories used in conjunction with a Clearpath Robotics product. UGVs -from other providers may present additional hazards and risks. - -_General Hazards_ - -| Label | Label Title | Label Description | -|--------------------------------------------------------------------------------------|----------------------|------------------------------------------| -|
| Automatic Motion Hazard | Clearpath Robotics UGVs may begin moving suddenly, either autonomously or when being driven manually. Always be aware of Clearpath Robotics products and their potential for movement. | -|
| Crushing Risk | Objects or personnel can be crushed between the Clearpath Robotics UGV and another object. Keep hands and other objects clear of crush points at all times. Keep clear of all docking Clearpath Robotics UGVs. | -|
| Electrical Shock Risk | Clearpath Robotics UGVs contain circuitry and batteries that may cause electrical shock if not properly insulated. | -|
| Entanglement Risk | Clearpath Robotics UGVs as well as their cameras can lead to entanglement of hair or dangling materials during their rotation. Keep hair and dangling materials away from Clearpath Robotics UGVs during motion. | -|
| Environmental Hazard | Clearpath Robotics UGVs contain batteries and materials that may require special disposal methods. Consult local regulations. | -|
| Falling Object Risk | Beware of objects that may have shifted in any Clearpath Robotics UGV crate as they pose a risk of falling when opened. | -|
| High Surface Temperature Risk | UGV computer heat sinks and UGV motors can become extremely hot during operation. | -|
| Impact Risk | Clearpath Robotics UGVs travelling through a facility can potentially impact objects and personnel. Keep clear of all docking Clearpath Robotics UGVs. | -|
| Laser Radiation Risk | Clearpath Robotics UGVs may use Class 1 laser products. These provide no hazard during normal use, however it is not recommended to stare directly into the beam(s). | -|
| Material Hazard - Lithium | Lithium UGV batteries contain harmful material. Always use proper handling procedures when handling UGV batteries. | -|
| Manual Load Lifting Risk | Always use ergonomic techniques when manually lifting loads. | -|
| Pinching Risk | Keep hands and other objects clear of pinch points at all times. Keep clear of all docking Clearpath Robotics UGVs. | -|
| Radio Frequency Risk | Clearpath Robotics UGVs and/or accessories may use radio frequency (RF) radiating antennas. These provide no hazard during normal use, however prolonged exposure around the antenna is not recommended. | -|
| Tripping Hazard | Clearpath Robotics products may pose a tripping hazard. | - -## Safety Awareness - -Personnel present during the operation of an Unmanned Ground Vehicle -(UGV) need to be made aware or be accompanied by personnel who are -familiar with the specific risks and hazards associated with autonomous -mobile robots (AMR). The following checklist identifies basic topics -that should be addressed by site-specific worker and visitor safety -orientation training. - -
- -
- -- Proper PPE must be worn, including safety footwear (ie. steel toe). -- Crossing into the path of a moving UGV should be avoided, as well as - placing or throwing obstacles into the path of a moving UGV. - -
- -
- -- Be aware that a UGV can be anywhere in the operating area of the - facility at any time, and may pose a tripping hazard even when not - in motion. -- Personnel need to be aware of the UGV docking and charging areas, - where detection fields are reduced. -- Personnel should be aware that Clearpath Robotics UGVs LiDAR safety - scanners use a class 1 laser and high intensity LED. -- Personnel should keep all loose clothing and body parts away from - UGVs, accessories, attachments, and payloads, while they are in - autonomous operation. Using an Emergency Stop button is the only - acceptable manner of interacting with a Clearpath Robotics UGV or - attachment while it is being operated autonomously. - -In addition to the preceding basic items for all workers and visitors, -the following should be considered for facility personnel, including -drivers of other UGVs: - -- When required to move a product manually, personnel must ensure it - is in an Emergency Stop state or shut down completely and should not - push manually for prolonged periods. -- Alert personnel that while operating a Clearpath Robotics UGV - outside of the Autonomy State, they are solely responsible for - obstacle and collision avoidance. -- Maintenance of a Clearpath UGV not outlined in either this document - or the operations and maintenance manual can only be performed by a - Clearpath Robotics Authorized Personnel. - -To reduce the risk of harming people or damaging properties, a trained -operator must monitor the behavior of the UGV under autonomous -navigation mode at all times. The operator should use the wireless -emergency stop device to immediately avert any possible damaging or -dangerous behavior from the UGV. Failure in proper use of the software -might result in collision of the UGV into objects. - -- The minimum height for detecting obstacles under ideal operation - conditions (flat ground, no snow/rain/fog, normal operation of the - LiDAR, etc) when using the standard Clearpath Robotics OutdoorNav - Hardware package on a Husky is typically 0.2 meters high at 2.3 - meters distance away from the UGV. Your UGV may differ. Ensure that - low-height obstacles are removed from the potential path of the UGV - prior to operation. -- OutdoorNav Software does not have negative obstacle detection - capability. This means that your UGV will not detect stairs, cliffs - or edges and may drive off these obstacles causing harm to people or - properties as well as potentially damage the UGV. -- Adverse weather conditions may obscure obstacle detection and - avoidance data from the VLP-16 LiDAR. Obstacle detection and - avoidance may not function properly in snow, rain or fog. -- The current configurations of the OutdoorNav Software will continue - navigation if the WiFi disconnects or goes out of range. The Web UI - will reconnect once the WiFi has reconnected but certain functions - of the Web UI may be limited such as the ability to issue a stop - command or send new missions to the UGV. -- If connection of the UGV to the base station is lost (e.g., WiFi - goes out of range, low battery level, etc), UGV will not receive RTK - corrections from the base station. This can potentially decrease the - accuracy of the GPS signal which can subsequently degrade path - following performance of your system. -- Obstacle detection and avoidance is disabled during the docking and - undocking operations. Keep this area clear of people and objects. +--- +title: Safety +sidebar_label: Safety +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +## Important Safety Information + +The use of Unmanned Ground Vehicles (UGVs) can result in unexpected and +dangerous behavior. Although Clearpath Robotics endeavors to create safe +and reliable software and systems, autonomous outdoor UGVs should not be +considered safe for unsupervised use around humans or other obstacles. +No level of safety and reliability of software and non-safety rated +hardware components is guaranteed. + +Clearpath strongly recommends that users carry out a risk assessment +related to their application and deployment of autonomous UGVs. The +ISO-12100 standard [Risk assessment and risk reduction](https://www.iso.org/standard/51528.html) provides guidance on +performing risk assessments. + +Functional safety in robotics is often achieved through the use of +safety related parts and control systems to minimize risks such as +safety LiDARs for obstacle detection. These hardware components must be +designed into the UGV hardware and can be tightly integrated with +navigation software. Clearpath Robotics recommends that this process be +undertaken after the product or process has been fully defined. It can +be a significant design effort. + +## Safety Notice Levels + +For Clearpath Robotics hardware and software, the risk level is captured +using the following types of labels. + +![](/img/outdoornav_images/safety_information.png) + +## General Hazard Labels + +Review the following to learn more about the labels that may be used on +Clearpath Robotics products. Hazards can also apply to attachments and +accessories used in conjunction with a Clearpath Robotics product. UGVs +from other providers may present additional hazards and risks. + +_General Hazards_ + +| Label | Label Title | Label Description | +|--------------------------------------------------------------------------------------|----------------------|------------------------------------------| +|
| Automatic Motion Hazard | Clearpath Robotics UGVs may begin moving suddenly, either autonomously or when being driven manually. Always be aware of Clearpath Robotics products and their potential for movement. | +|
| Crushing Risk | Objects or personnel can be crushed between the Clearpath Robotics UGV and another object. Keep hands and other objects clear of crush points at all times. Keep clear of all docking Clearpath Robotics UGVs. | +|
| Electrical Shock Risk | Clearpath Robotics UGVs contain circuitry and batteries that may cause electrical shock if not properly insulated. | +|
| Entanglement Risk | Clearpath Robotics UGVs as well as their cameras can lead to entanglement of hair or dangling materials during their rotation. Keep hair and dangling materials away from Clearpath Robotics UGVs during motion. | +|
| Environmental Hazard | Clearpath Robotics UGVs contain batteries and materials that may require special disposal methods. Consult local regulations. | +|
| Falling Object Risk | Beware of objects that may have shifted in any Clearpath Robotics UGV crate as they pose a risk of falling when opened. | +|
| High Surface Temperature Risk | UGV computer heat sinks and UGV motors can become extremely hot during operation. | +|
| Impact Risk | Clearpath Robotics UGVs travelling through a facility can potentially impact objects and personnel. Keep clear of all docking Clearpath Robotics UGVs. | +|
| Laser Radiation Risk | Clearpath Robotics UGVs may use Class 1 laser products. These provide no hazard during normal use, however it is not recommended to stare directly into the beam(s). | +|
| Material Hazard - Lithium | Lithium UGV batteries contain harmful material. Always use proper handling procedures when handling UGV batteries. | +|
| Manual Load Lifting Risk | Always use ergonomic techniques when manually lifting loads. | +|
| Pinching Risk | Keep hands and other objects clear of pinch points at all times. Keep clear of all docking Clearpath Robotics UGVs. | +|
| Radio Frequency Risk | Clearpath Robotics UGVs and/or accessories may use radio frequency (RF) radiating antennas. These provide no hazard during normal use, however prolonged exposure around the antenna is not recommended. | +|
| Tripping Hazard | Clearpath Robotics products may pose a tripping hazard. | + +## Safety Awareness + +Personnel present during the operation of an Unmanned Ground Vehicle +(UGV) need to be made aware or be accompanied by personnel who are +familiar with the specific risks and hazards associated with autonomous +mobile robots (AMR). The following checklist identifies basic topics +that should be addressed by site-specific worker and visitor safety +orientation training. + +
+ +
+ +- Proper PPE must be worn, including safety footwear (ie. steel toe). +- Crossing into the path of a moving UGV should be avoided, as well as + placing or throwing obstacles into the path of a moving UGV. + +
+ +
+ +- Be aware that a UGV can be anywhere in the operating area of the + facility at any time, and may pose a tripping hazard even when not + in motion. +- Personnel need to be aware of the UGV docking and charging areas, + where detection fields are reduced. +- Personnel should be aware that Clearpath Robotics UGVs LiDAR safety + scanners use a class 1 laser and high intensity LED. +- Personnel should keep all loose clothing and body parts away from + UGVs, accessories, attachments, and payloads, while they are in + autonomous operation. Using an Emergency Stop button is the only + acceptable manner of interacting with a Clearpath Robotics UGV or + attachment while it is being operated autonomously. + +In addition to the preceding basic items for all workers and visitors, +the following should be considered for facility personnel, including +drivers of other UGVs: + +- When required to move a product manually, personnel must ensure it + is in an Emergency Stop state or shut down completely and should not + push manually for prolonged periods. +- Alert personnel that while operating a Clearpath Robotics UGV + outside of the Autonomy State, they are solely responsible for + obstacle and collision avoidance. +- Maintenance of a Clearpath UGV not outlined in either this document + or the operations and maintenance manual can only be performed by a + Clearpath Robotics Authorized Personnel. + +To reduce the risk of harming people or damaging properties, a trained +operator must monitor the behavior of the UGV under autonomous +navigation mode at all times. The operator should use the wireless +emergency stop device to immediately avert any possible damaging or +dangerous behavior from the UGV. Failure in proper use of the software +might result in collision of the UGV into objects. + +- The minimum height for detecting obstacles under ideal operation + conditions (flat ground, no snow/rain/fog, normal operation of the + LiDAR, etc) when using the standard Clearpath Robotics OutdoorNav + Hardware package on a Husky is typically 0.2 meters high at 2.3 + meters distance away from the UGV. Your UGV may differ. Ensure that + low-height obstacles are removed from the potential path of the UGV + prior to operation. +- OutdoorNav Software does not have negative obstacle detection + capability. This means that your UGV will not detect stairs, cliffs + or edges and may drive off these obstacles causing harm to people or + properties as well as potentially damage the UGV. +- Adverse weather conditions may obscure obstacle detection and + avoidance data from the VLP-16 LiDAR. Obstacle detection and + avoidance may not function properly in snow, rain or fog. +- The current configurations of the OutdoorNav Software will continue + navigation if the WiFi disconnects or goes out of range. The Web UI + will reconnect once the WiFi has reconnected but certain functions + of the Web UI may be limited such as the ability to issue a stop + command or send new missions to the UGV. +- If connection of the UGV to the base station is lost (e.g., WiFi + goes out of range, low battery level, etc), UGV will not receive RTK + corrections from the base station. This can potentially decrease the + accuracy of the GPS signal which can subsequently degrade path + following performance of your system. +- Obstacle detection and avoidance is disabled during the docking and + undocking operations. Keep this area clear of people and objects. diff --git a/outdoornav_user_manual_versioned_docs/version-0.12.0/simulation.mdx b/outdoornav_user_manual_versioned_docs/version-0.12.0/simulation.mdx index 44cff5f7..86043ef7 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.12.0/simulation.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.12.0/simulation.mdx @@ -1,20 +1,20 @@ ---- -title: Simulation -sidebar_label: Simulation -sidebar_position: 9 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -Simulation with OutdoorNav Software can be useful in several ways. - -- It provides an easy (and low cost!) way of evaluating the main - features in OutdoorNav Software prior to purchasing. -- It allows missions to be planned, executed, and refined in a - repeatable way prior to deployment on UGV hardware. This can be - particularly helpful when integrating OutdoorNav into a larger - software solution, such as a fleet manager. - -At present, OutdoorNav Software simulation is restricted to internal -Clearpath Robotics development and select partners, but is planned for +--- +title: Simulation +sidebar_label: Simulation +sidebar_position: 9 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +Simulation with OutdoorNav Software can be useful in several ways. + +- It provides an easy (and low cost!) way of evaluating the main + features in OutdoorNav Software prior to purchasing. +- It allows missions to be planned, executed, and refined in a + repeatable way prior to deployment on UGV hardware. This can be + particularly helpful when integrating OutdoorNav into a larger + software solution, such as a fleet manager. + +At present, OutdoorNav Software simulation is restricted to internal +Clearpath Robotics development and select partners, but is planned for full deployment. Check back soon for further details. \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.12.0/support.mdx b/outdoornav_user_manual_versioned_docs/version-0.12.0/support.mdx index 9212d99f..4da40f82 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.12.0/support.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.12.0/support.mdx @@ -1,11 +1,11 @@ ---- -title: Support -sidebar_label: Support -sidebar_position: 11 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -import OutdoorNavSupport from "/components/support_outdoornav.mdx"; - +--- +title: Support +sidebar_label: Support +sidebar_position: 11 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +import OutdoorNavSupport from "/components/support_outdoornav.mdx"; + \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.12.0/web_user_interface/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.12.0/web_user_interface/_category_.json index a07ca158..31b78035 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.12.0/web_user_interface/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.12.0/web_user_interface/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Web User Interface", - "position": 6 -} +{ + "label": "Web User Interface", + "position": 6 +} diff --git a/outdoornav_user_manual_versioned_docs/version-0.12.0/web_user_interface/ui_manual_mode.mdx b/outdoornav_user_manual_versioned_docs/version-0.12.0/web_user_interface/ui_manual_mode.mdx index 1447f480..927755c4 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.12.0/web_user_interface/ui_manual_mode.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.12.0/web_user_interface/ui_manual_mode.mdx @@ -1,55 +1,55 @@ ---- -title: Web UI Manual Mode (Teleoperation) -sidebar_label: Web UI Manual Mode (Teleoperation) -sidebar_position: 2 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -The Manual Mode in the Web UI allows the user to operate the UGV -remotely (teleoperate) by using sensors on the UGV to visualize the -environment and by using a joystick to control the motion of the UGV. - -![](/img/outdoornav_images/teleop_danger.png) - -Ensure that you have read [Safety](../safety.mdx) and are -aware of possible hazards when using this product as well as the safety -methods that can be used to stop the moving UGV. - -
-
- -
Teleoperation Components
-
-
- -1. **Error/Warning Bar:** A bar along the top of the page reporting - the error or warning status of the Assisted Teleoperation feature. -2. **Joystick:** The joystick will allow the user to move the UGV - manually from the UI. Motion can be sent to the UGV in 360° - directions and the speed can be controlled by the distance of the - joystick from its neutral position. Four fixed direction buttons are - now present to move the UGV in purely forward/reverse directions or - clockwise/counter-clockwise. Finally, we overlay an obstacle map - on top of the joystick, representing obstacle distances from the - UGV. -3. **Speedometer:** An indicator of the UGV's current linear speed. -4. **Sensitivity Scale:** A UGV-specific scale that controls the - maximum allowable UGV velocities at each level. The default maximum - linear velocity is 1.0 meters per second and the maximum angular - velocity is 0.5 radians per second. These can be changed in the - [General Settings](./ui_overview.mdx#config-general-settings) page. - The scale levels are 100%, 80%, 50% and 20%, with the default set - to 80%. -5. **Teleop Assist Toggle:** The "Teleop Assist" toggle can be used to - enable/disable the Assisted Teleoperation feature. - -## Monitor Wireless Strength - -While teleoperating the UGV, the user will notice that the delay between -the time a command is sent and the time it is executed (and/or visible -on the UI camera views) will increase as the distance increases. This -effect will be further amplified by any obstacles between the UGV and -the base (eg. walls, vehicles, mounds, etc.). It is important to monitor -this delay an be cautious when driving the UGV with larger delay for +--- +title: Web UI Manual Mode (Teleoperation) +sidebar_label: Web UI Manual Mode (Teleoperation) +sidebar_position: 2 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +The Manual Mode in the Web UI allows the user to operate the UGV +remotely (teleoperate) by using sensors on the UGV to visualize the +environment and by using a joystick to control the motion of the UGV. + +![](/img/outdoornav_images/teleop_danger.png) + +Ensure that you have read [Safety](../safety.mdx) and are +aware of possible hazards when using this product as well as the safety +methods that can be used to stop the moving UGV. + +
+
+ +
Teleoperation Components
+
+
+ +1. **Error/Warning Bar:** A bar along the top of the page reporting + the error or warning status of the Assisted Teleoperation feature. +2. **Joystick:** The joystick will allow the user to move the UGV + manually from the UI. Motion can be sent to the UGV in 360° + directions and the speed can be controlled by the distance of the + joystick from its neutral position. Four fixed direction buttons are + now present to move the UGV in purely forward/reverse directions or + clockwise/counter-clockwise. Finally, we overlay an obstacle map + on top of the joystick, representing obstacle distances from the + UGV. +3. **Speedometer:** An indicator of the UGV's current linear speed. +4. **Sensitivity Scale:** A UGV-specific scale that controls the + maximum allowable UGV velocities at each level. The default maximum + linear velocity is 1.0 meters per second and the maximum angular + velocity is 0.5 radians per second. These can be changed in the + [General Settings](./ui_overview.mdx#config-general-settings) page. + The scale levels are 100%, 80%, 50% and 20%, with the default set + to 80%. +5. **Teleop Assist Toggle:** The "Teleop Assist" toggle can be used to + enable/disable the Assisted Teleoperation feature. + +## Monitor Wireless Strength + +While teleoperating the UGV, the user will notice that the delay between +the time a command is sent and the time it is executed (and/or visible +on the UI camera views) will increase as the distance increases. This +effect will be further amplified by any obstacles between the UGV and +the base (eg. walls, vehicles, mounds, etc.). It is important to monitor +this delay an be cautious when driving the UGV with larger delay for risk of crashing into obstacles. \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.12.0/web_user_interface/ui_overview.mdx b/outdoornav_user_manual_versioned_docs/version-0.12.0/web_user_interface/ui_overview.mdx index a1ddd5b6..4e1367b0 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.12.0/web_user_interface/ui_overview.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.12.0/web_user_interface/ui_overview.mdx @@ -1,623 +1,623 @@ ---- -title: Web UI Overview -sidebar_label: Web UI Overview -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -The Web User Interface (Web UI) provides a easy, graphical, means to -control both manual and autonomous operation of your UGV. The following -sections outline: the components and views of the UI, the details of -operating in manual mode, and the details of operating in autonomous -mode. - -## Main Components - -
-
- -
UI Main Components
-
-
- -1. **Menu:** A dropdown menu allowing the user to access the Dashboard - (ie. Home), Settings, Status, Scheduler, Help, and File pages. The User - can also run the UI Virtual Tour from this menu. - -2. **Feedback Bar:** The feedback bar will display information - regarding the execution state of the navigation and of any Tasks - being executed. - -3. **Path Progress Meter:** A meter indicating the percentage complete - of a Mission. - -4. **UGV Position:** The UGV's X and Y position in the world frame - relative to the Datum. Can also be shown in Lat/Lon coordinates - -5. **UGV Heading:** The UGV's heading in the world frame. 0 degrees is North, 90 degrees is East, 180 degrees is South and 270 degrees is West. - -6. **Status Indicator:** The status indicator will display information - regarding various UGV status monitors such as the Emergency Stop, - Surveying, etc. When the UGV is fully operational, the indicator - will be green. Operators can click on the status indicator to see more details - pertaining to the current state as well as past messages. - -7. **GPS Status Indicator:** The GPS status indicators will display GPS - signal accuracy for position (POS indicator) and heading (DIR - indicator). Green indicators represent RTK accuracy and are - currently required for accurate autonomous navigation. Yellow and orange - indicators represent SBAS and SPP accuracy respectively and noticeable - oscillations may occur in such cases. Red indicators mean no GPS signal - and autonomous navigation missions should not be started. - -8. **Battery Life Indicator:** The UGV's battery life indicator. - - :::note - - If the indicator is stuck at 50%, that means that your UGV does not - have a supported battery management system and this indicator is not - active. - - ::: - -9. **Wireless Connection Indicator:** The wireless connection indicator - represents the signal strength between the wifi access point - (typically the Base Station) and the UGV. If the system can support - cellular connections a cellular indicator will appear next to the - wifi icon with the currently active connection being highlighted in green. - -10. **Stack Light:** If a Stack Light is configured for the UGV its current status - will show here. - -11. **Views List:** A dropdown list of available views, detailed later - in this section. Some of the available views are Map, Camera and 3D - views, etc. - -12. **Local Docking/Undocking:** The local docking/undocking buttons used - to dock/undock the UGV. The UGV must have it's charging adaptor facing the dock - when performing the local dock action. - -13. **Lights Control:** If the UGV is equipped with software controllable lights they can be - controlled through a simple drop down button as well as relevant hotkeys, - depending on the configuration. - -14. **Record Audio:** If the UGV is equipped with a microphone the user - can start/stop recording manually by clicking this icon. - -15. **Mission Execution Buttons:** These buttons allow users to Start, Pause and Stop an - autonomous mission. - - -By opening the dropdown list "Views", on the right side of the UI, the -Operator can access the following views: - -- Map View -- PTZ Camera View (if available) -- Front/Back Camera View (if available) - -## Map View - -
-
- -
Map View
-
-
- -1. **Zoom Buttons:** These buttons allow the user to zoom in/out of the - map levels. -2. **Zoom-to-Fit Button:** This button will zoom the map to where there - is activity (ie. where the datum is set or where features have been - set on the map. -3. **UGV:** The blue arrow represents the UGV. Its location is its - position in the world frame and its orientation is the heading in - the world frame. -4. **Base Station:** The yellow antenna icon is the last known location of - the base station based on the last survey performed. By clicking it the - user will be presented with the base station's coordinates, when it was - surveyed, and how many samples were taken during the survey. -5. **Dock:** If a dock is configured for the UGV it will appear on the map in - this format. When in Waypoint mode the Docks pre-dock radius will appear as - a circle around the dock when in Edit Mission mode. -6. **Datum:** The blue Waypoint marker on the map view represents the - location of the reference point (ie. (x,y)=(0,0)) of the world - coordinate system. The world (ie. map) coordinate system is in the - ENU convention. - -## Camera Views - -:::note - -If PTZ and/or Front/Back camera(s) are included on the UGV, their feeds -can be viewed through the UI and the PTZ can be controlled through the -UI. If not, there will not be any PTZ, Front/Back view(s) in the list of -available views. - -::: - -### Pan-Tilt-Zoom (PTZ) View {#ptz-view} - -
-
- -
PTZ Camera View
-
-
- -1. **Tilt Slider:** The left slider can be used to tilt the camera in a - vertical motion, (ie. upwards or downwards motion). By default, the - slider is at its neutral ("zero") position. -2. **Pan Slider:** The bottom slider can be used to pan/rotate the - camera, (ie. rotational motion). By default, the slider is at its - neutral ("zero") position. -3. **Zoom Slider:** The right slider can be used to zoom the camera - feed. By default, the slider is at its neutral ("zero") position. -4. **Save Image:** Depending on the current camera view selected, this - button will save an image to the computer/tablet running the UI. - Images will be saved to the location in which your browser saves - files. -5. **Camera Positions List:** Display the list of available camera - positions that have been saved. These camera positions can be - deleted from this list by clicking the "garbage can" icon beside - the corresponding position. -6. **Save Camera Position:** This button will save the camera position - to be used in the "Move PTZ" task. An example use case would be: - 1. Switch to the PTZ camera view. - 2. Teleoperate the UGV to a location at which the user can inspect - something. - 3. Move the camera sliders to orient the camera such that it is - looking at the inspection point. - 4. Click the "Save Camera Position". - 5. When creating an autonomous mission to this inspection point, - add the "Move PTZ" task to a Waypoint. - 6. Click the settings button beside the task and add the camera - position related to the inspection point. - -### Front and Back Views - -
-
- -
Front View
-
-
- -
-
- -
Back View
-
-
- -## 3D View - -The 3D view allows the user to visualize the pointcloud data being -acquired by the VLP-16 LiDAR. - -
-
- -
3D View
-
-
- -## System Configuration - -### General Settings {#config-general-settings} - -The General settings section can be found in through the upper left hand menu and allows the Operator to modify -general features of the UGV. - -
-
- -
General Settings Page
-
-
- -#### Coordinates - -The Operator can change the coordinate space from X/Y relative to the Datum to Latitude/Longitude. - -#### Save Image Location - -The Operator can choose to store images saved manually to the robot directly or to download them onto their computer. This -feature only affects the manual save image option found on each relevant camera view. - -#### Robot Internet Connection Type - -If the UGV is equipped with SIM card and can switch between Cellular and WiFi connections, the Operator can manually trigger this -change through the general settings page. This switchover will take approximately 30 seconds and will require a refresh on the UI. - -#### Show Path Deviation Distance - -When a mission is running the UGV will have a maximum path deviation distance that it shouldn't cross if it needs to replan. If this -toggle is set to true, while in edit mode this buffer is shown over top of the path as the Operator creates/edits the mission. This -toggle does not disable the path deviation distance feature. - -#### Low Power Mode - -If the UGV is equipped with a Low Power Module this toggle allows the user to switch the UGV into a low power state that will drastically -limit functionality but help conserve power. This mode is best used to help better facilitate charging while the UGV is not in use. - -#### Joystick Max Speeds - -The Operator can choose to set the Maximum Linear Speed and the Maximum Angular Speed that the teleoperation will use. These are limited to the -maximum speeds of the UGV itself. - -### Aerial Overlay Settings - -
-
- -
Aerial Overlay settings
-
-
- -To access the Aerial Overlay Settings: Menu → Settings → Aerial Overlay: - -1. **Offset:** The map tiles used in this software are not - perfectly aligned with the real world. Therefore, the user may need - to apply an offset to the map so that the UGV's position in the - real world matches its position on the map. -2. **Change Datum:** The datum is represented by a blue marker on the - map and should be set to a location within 10km of the test site. - The user can change this value in the Map Settings page. Enter the - new values and click the "Set Datum" button. - -### Map Source Configuration - -The Web UI ships with access to free -[OpenStreetMap](https://www.openstreetmap.org/) maps. Aerial view -requires access to third-party aerial maps or your own aerial maps. - -The Web UI is pre-configured to work with -[MapBox](https://www.mapbox.com/) and [Bing -Maps](https://www.bingmapsportal.com/) once a suitable map key has been -acquired. Both services offer a free tier that will be sufficient in -almost all cases. - -#### Using OpenStreetMap Maps - -As no key is required to use -[OpenStreetMap](https://www.openstreetmap.org/) maps, the process to -select these maps in the Web UI is simple. - -1. In the Web UI, from the menu, select **Settings→Map** to bring up - the **Map Settings** page. -2. Select **OpenStreetMap** -3. Click **Ok**. - -
-
- -
Using Map Settings to select OpenStreetMap
-
-
- -#### Using MapBox Maps - -Using [MapBox](https://www.mapbox.com/) maps requires a key, which can -then be used by the Web UI. The steps to set up MapBox are outlined -below. - -1. Acquire a MapBox key from the [MapBox - website](https://account.mapbox.com/auth/signup/). Review the - license terms and select the appropriate plan. In most cases, the - free tier will be sufficient. -2. Back in the Web UI, from the menu, select **Settings→Map** to bring - up the **Map Settings** page. -3. Select **MapBox**. -4. Copy the MapBox key from Step 1 into the **Map Key** field. -5. Click **Ok**. - -
-
- -
Using Map Settings to select MapBox
-
-
- -#### Using Bing Maps - -Using [Bing Maps](https://www.bingmapsportal.com/) requires a key, which -can then be used by the Web UI. The steps to set up Bing Maps are -outlined below. - -1. Acquire a Bing Maps key from the [Bing - website](https://www.microsoft.com/en-us/maps/create-a-bing-maps-key). - Review the license terms and select the appropriate plan. In most - cases, the free tier will be sufficient. -2. Back in the Web UI, from the menu, select **Settings→Map** to bring - up the **Map Settings** page. -3. Select **Bing Maps**. -4. Copy the Bing Maps key from Step 1 into the **Map Key** field. -5. Click **Ok**. - -
-
- -
Using Map Settings to select Bing Maps
-
-
- -#### Using Custom Maps {#using_custom_maps} - -Custom Maps allow you to use another set of maps in XYZ format, either -from a third-party map provider or from maps that you have generated on -your own, such as from drone aerial images. Custom maps can be selected -by using the steps below. - -1. Ensure that the maps are accessible on an internal network or on the - Internet by the device that is being used to display the Web UI, - such as a laptop, tablet, or desktop computer. -2. Ensure that the directory structure for the individual tiles is well - defined. See the section below for details on - [Preparing Custom Map Tiles from Drone Aerial Images](#preparing_custom_map_tiles). -3. In the Web UI, from the menu, select **Settings→Map** to bring up - the **Map Settings** page. -4. Select **Custom**. -5. Enter the network path for the maps into the **Custom URL** field. - If hosting the maps on your local computer, this will be similar to - http://localhost:8000/{z}/{x}/{-y}.png. Note how the - URL is parameterized with `{z}`, `{x}`, and `{-y}` values. This will - need to be adapted to match the directory structure of your map tile - images. -6. Click **Ok**. - -
-
- -
Using Map Settings to select Custom maps
-
-
- -#### Preparing Custom Map Tiles from Drone Aerial Images {#preparing_custom_map_tiles} - -In some cases, it is desirable to create your own maps rather than using -third party maps which might be outdated. One way to do this is to use a -drone to capture aerial images and convert those images into map tiles. -While there are many ways to accomplish this, one approach is outlined -below. - -1. Use a drone to collect top-down photos covering the area of - interest. It is highly recommended to use a drone control app that - allows you to specify the area of interest and desired image overlap - (recommended \~75%) and takes care of coverage planning, drone - control, and image acquisition. - -2. Perform ortho-mosaicing/ortho-rectification to stitch the collected - images together into a single orthographic image. [Open Drone - Map](https://www.opendronemap.org/) is a popular open source project - that Clearpath has used for stitching, but there are also paid - services that automate the process. - -3. Georeference the orthographic image. One way to do this is to define - the locations of well-defined features (sewer grates, utility holes, - etc.) based on their known positions, such as their position data - from an existing mapping service (e.g., Google Maps). Open source - tools, such as [QGIS](https://www.qgis.org/en/site/) can help with - this process. - -4. Generate the map tiles. Using Ubuntu, this can be accomplished with - the following commands, where `GEOREFERENCED_IMG.tif` is the output - of the previous step. - - ``` - sudo apt install gdal-bin - gdal2tiles.py - ``` - -5. Use a web server to host the tiles locally. Using Ubuntu, one way to - accomplish this is to use the commands below, which will make the - tiles available at: \. - - ``` - cd /base/directory/of/tiles - python3 -m http.server - ``` - -Once your map tiles are available on the network, you can follow the -steps in [Using Custom Maps](#using_custom_maps) to have the -Web UI use your custom tiles. - -## Autonomous Features - -There are presently 2 autonomous modes that the UGV can be used in, [Waypoint Mode](ui_waypoint_mode.mdx) and [Map Mode](ui_map_mode.mdx). -While each mode leverages different features, some are shared and are elaborated on here. - -:::note - -Some objects that appear on the overlay have context menus associated with them. However there is a known issue related to opening this context menu -between Autonomy modes. At present to open a context menu in the Waypoint Mode, left click the object, and when in Map Mode right click the object. -This issue will be reconciled in a future release. - -::: - -### Tasks - -When running a mission autonomously the user can assign tasks to various events. These tasks, along with their decoration icons, are found below: - -- Dock Robot: - Will dock the UGV to begin charging the UGV's - battery. There are 3 kinds of docking that can be used; Network, Radius and Local. - See [Autonomous Docking](#autonomous-docking) for more information on - the autonomous docking feature. - -- Move PTZ: - Will move the PTZ camera to the position selected - in the task settings. - - Settings: Select the camera position. See - [Pan-Tilt-Zoom (PTZ) View](ui_overview.mdx#ptz-view) for details on how to - save camera positions. - -- Save Image: - Will save an image using one of the UGV camera(s) - to the /opt/onav/saved_files/media/... directory and can be retrieved using a tool - such as FileZilla or by navigating to the Files section in the hamburger menu. - - Settings: Select which camera the image will be saved from. - -- / Start/Stop Video Recording: - Will start/stop recording video using one of the - UGV camera(s) to the /opt/onav/saved_files/media/... folder and can be retrieved - using a tool such as FileZilla or by navigating to the Files section in the hamburger menu. - - Settings: Select which camera the recording will come from. - -- Start/Stop Audio Recording: - Will start/stop recording audio using one of the - UGV microphone(s) to the /opt/onav/saved_files/media/... folder and can be retrieved - using a tool such as FileZilla or by navigating to the Files section in the hamburger menu. - - Settings: Select which microphone the recording will come from. - -- Undock UGV: - Will undock the UGV from the autocharge dock. Once - completed, the UGV can be sent on autonomous missions. It is - often recommended to place the undock task first in the list of Waypoints or as a start Mission Task; - that way, the UGV will automatically continue towards its next - Waypoint once undocked. - - :::note - - If the users places the Undock Task in the start Mission event for a Waypoint Mission the first Waypoint should be - approximately 2-3 meters behind the UGV's docked position. - - ::: - -- Wait: - Will pause and wait for the specified number of - seconds at the end of the Waypoint. - - Settings: Enter the amount of time to wait, in seconds. - -- New Custom Task: - Creates a new custom task that is defined by the user. -
-
- -
Custom Task Settings Dialog
-
-
- - - Task Name: Task name that will show up in the list of available tasks on the UI. - - Action Server Name: The namespace of the custom task action server. - - Float CSV: A list of comma seperated float values that consist of the numerical inputs to the custom task. - - String CSV: A list of comma seperated string values that consist of the semantic inputs to the custom task. - - See the [Custom Tasks](../features/custom_tasks.mdx) section - for details on how to develop custom tasks for your application. - - -:::note - -If a Waypoint/Goalpoint has more than one task assigned to it, the icon will -be replaced with a sheet of paper icon like so: - -::: - -### Autonomous Docking - -
-
- -
Dock Icon
-
-
- -### Docking The UGV - -To dock the UGV autonomously the user can use the following methods: - -#### Dock (Local) - -If there is a valid dock within its driveable range the UGV will attempt to dock. -This docking method can be done by selecting the Dock button in the bottom bar or by adding a -"Dock Robot (Local)" task to either an event or a mission point. - -#### Dock (Radius) - -If the UGV is within the specified docks radius the UGV will first navigate to a predock location -and then attempt to dock. When in Waypoint Mode a user can dock via this method as follows: - -- Enable the "Edit Mission" toggle. -- Maneuver the UGV so that is somewhere within the dock's radius. -- Click the dock that the UGV will be docking at and select "Dock Robot Here". - -This docking method can also be accomplished by adding a "Dock Robot (Radius)" task to either -an event or a mission point. A dock will need to be provided for the task to function which can be done -through the task settings modal. - -#### Dock (Network) - -:::note - -This mode is only available in [Map mode](ui_map_mode.mdx). Please see the Map mode page for further -details on map generation. - -::: - -If the UGV and the dock are within a map's driveable area the UGV will first navigate to a -predock location based on the map paths available. A user can dock manually using this method as follows: - -- Enable the "Edit Map" toggle. -- Maneuver the UGV so that is within the driveable range of the map. -- Ensure the dock is within the driveable range of the map. -- Right click the dock that the UGV will be docking at and select "Dock Robot Here". - -This docking method can also be accomplished by adding a "Dock Robot (Network)" task to either an -event or a mission point. A dock will need to be provided for the task to function which can be done -through the task settings modal. - -### Undocking The UGV - -To undock the UGV autonomously, the user can apply a "Undock Robot" task to a mission event or -point. The user can also click the Undock button in the bottom bar's left hand corner. - -### Compatibility with a Doghouse - -In order for the autonomous docking feature to be compatible with a doghouse, the -doghouse must conform to a few specifications: - -- Must be installed on a flat surface, and have no elevation change between the - charge-dock and the outdoor surface (ie. no ramp into the doghouse). -- Must be greater than 1.2 m wide. -- Must be between 1.5 and 2.5 m long. -- Dock target should be installed centered along the back of the doghouse. - -### Recover from Failed Docking or Undocking - -If for any reason, the docking or undocking tasks fail, the user can: - -- Manually drive the UGV towards the dock target, aligning the - charging unit with the receiver on the UGV. -- Manually drive the UGV in reverse away from the dock target. It is - suggested that the user reverse roughly 2-3 meters away from the target, - then wait 1-2 minutes before starting any autonomous navigation - missions. - -## Switching to IndoorNav - -If it is included in the UGV, IndoorNav can be executed through the OutdoorNav software. -To switch between the modes in OutdoorNav select the 'Navigation Mode' option found -in the hamburger menu. This will navigate to a page that shows the current mode and -provides an option to switch. When in IndoorNav mode the user may navigate to -the IndoorNav Web GUI directly or work within the OutdoorNav view as can be seen -below. - -
-
- -
-
- -:::note - -When in IndoorNav mode the OutdoorNav Autonomy software is switched off. The UI will -disable OutdoorNav UI features related to Autonomy but will still allow users the -option to view camera streams. - +--- +title: Web UI Overview +sidebar_label: Web UI Overview +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +The Web User Interface (Web UI) provides a easy, graphical, means to +control both manual and autonomous operation of your UGV. The following +sections outline: the components and views of the UI, the details of +operating in manual mode, and the details of operating in autonomous +mode. + +## Main Components + +
+
+ +
UI Main Components
+
+
+ +1. **Menu:** A dropdown menu allowing the user to access the Dashboard + (ie. Home), Settings, Status, Scheduler, Help, and File pages. The User + can also run the UI Virtual Tour from this menu. + +2. **Feedback Bar:** The feedback bar will display information + regarding the execution state of the navigation and of any Tasks + being executed. + +3. **Path Progress Meter:** A meter indicating the percentage complete + of a Mission. + +4. **UGV Position:** The UGV's X and Y position in the world frame + relative to the Datum. Can also be shown in Lat/Lon coordinates + +5. **UGV Heading:** The UGV's heading in the world frame. 0 degrees is North, 90 degrees is East, 180 degrees is South and 270 degrees is West. + +6. **Status Indicator:** The status indicator will display information + regarding various UGV status monitors such as the Emergency Stop, + Surveying, etc. When the UGV is fully operational, the indicator + will be green. Operators can click on the status indicator to see more details + pertaining to the current state as well as past messages. + +7. **GPS Status Indicator:** The GPS status indicators will display GPS + signal accuracy for position (POS indicator) and heading (DIR + indicator). Green indicators represent RTK accuracy and are + currently required for accurate autonomous navigation. Yellow and orange + indicators represent SBAS and SPP accuracy respectively and noticeable + oscillations may occur in such cases. Red indicators mean no GPS signal + and autonomous navigation missions should not be started. + +8. **Battery Life Indicator:** The UGV's battery life indicator. + + :::note + + If the indicator is stuck at 50%, that means that your UGV does not + have a supported battery management system and this indicator is not + active. + + ::: + +9. **Wireless Connection Indicator:** The wireless connection indicator + represents the signal strength between the wifi access point + (typically the Base Station) and the UGV. If the system can support + cellular connections a cellular indicator will appear next to the + wifi icon with the currently active connection being highlighted in green. + +10. **Stack Light:** If a Stack Light is configured for the UGV its current status + will show here. + +11. **Views List:** A dropdown list of available views, detailed later + in this section. Some of the available views are Map, Camera and 3D + views, etc. + +12. **Local Docking/Undocking:** The local docking/undocking buttons used + to dock/undock the UGV. The UGV must have it's charging adaptor facing the dock + when performing the local dock action. + +13. **Lights Control:** If the UGV is equipped with software controllable lights they can be + controlled through a simple drop down button as well as relevant hotkeys, + depending on the configuration. + +14. **Record Audio:** If the UGV is equipped with a microphone the user + can start/stop recording manually by clicking this icon. + +15. **Mission Execution Buttons:** These buttons allow users to Start, Pause and Stop an + autonomous mission. + + +By opening the dropdown list "Views", on the right side of the UI, the +Operator can access the following views: + +- Map View +- PTZ Camera View (if available) +- Front/Back Camera View (if available) + +## Map View + +
+
+ +
Map View
+
+
+ +1. **Zoom Buttons:** These buttons allow the user to zoom in/out of the + map levels. +2. **Zoom-to-Fit Button:** This button will zoom the map to where there + is activity (ie. where the datum is set or where features have been + set on the map. +3. **UGV:** The blue arrow represents the UGV. Its location is its + position in the world frame and its orientation is the heading in + the world frame. +4. **Base Station:** The yellow antenna icon is the last known location of + the base station based on the last survey performed. By clicking it the + user will be presented with the base station's coordinates, when it was + surveyed, and how many samples were taken during the survey. +5. **Dock:** If a dock is configured for the UGV it will appear on the map in + this format. When in Waypoint mode the Docks pre-dock radius will appear as + a circle around the dock when in Edit Mission mode. +6. **Datum:** The blue Waypoint marker on the map view represents the + location of the reference point (ie. (x,y)=(0,0)) of the world + coordinate system. The world (ie. map) coordinate system is in the + ENU convention. + +## Camera Views + +:::note + +If PTZ and/or Front/Back camera(s) are included on the UGV, their feeds +can be viewed through the UI and the PTZ can be controlled through the +UI. If not, there will not be any PTZ, Front/Back view(s) in the list of +available views. + +::: + +### Pan-Tilt-Zoom (PTZ) View {#ptz-view} + +
+
+ +
PTZ Camera View
+
+
+ +1. **Tilt Slider:** The left slider can be used to tilt the camera in a + vertical motion, (ie. upwards or downwards motion). By default, the + slider is at its neutral ("zero") position. +2. **Pan Slider:** The bottom slider can be used to pan/rotate the + camera, (ie. rotational motion). By default, the slider is at its + neutral ("zero") position. +3. **Zoom Slider:** The right slider can be used to zoom the camera + feed. By default, the slider is at its neutral ("zero") position. +4. **Save Image:** Depending on the current camera view selected, this + button will save an image to the computer/tablet running the UI. + Images will be saved to the location in which your browser saves + files. +5. **Camera Positions List:** Display the list of available camera + positions that have been saved. These camera positions can be + deleted from this list by clicking the "garbage can" icon beside + the corresponding position. +6. **Save Camera Position:** This button will save the camera position + to be used in the "Move PTZ" task. An example use case would be: + 1. Switch to the PTZ camera view. + 2. Teleoperate the UGV to a location at which the user can inspect + something. + 3. Move the camera sliders to orient the camera such that it is + looking at the inspection point. + 4. Click the "Save Camera Position". + 5. When creating an autonomous mission to this inspection point, + add the "Move PTZ" task to a Waypoint. + 6. Click the settings button beside the task and add the camera + position related to the inspection point. + +### Front and Back Views + +
+
+ +
Front View
+
+
+ +
+
+ +
Back View
+
+
+ +## 3D View + +The 3D view allows the user to visualize the pointcloud data being +acquired by the VLP-16 LiDAR. + +
+
+ +
3D View
+
+
+ +## System Configuration + +### General Settings {#config-general-settings} + +The General settings section can be found in through the upper left hand menu and allows the Operator to modify +general features of the UGV. + +
+
+ +
General Settings Page
+
+
+ +#### Coordinates + +The Operator can change the coordinate space from X/Y relative to the Datum to Latitude/Longitude. + +#### Save Image Location + +The Operator can choose to store images saved manually to the robot directly or to download them onto their computer. This +feature only affects the manual save image option found on each relevant camera view. + +#### Robot Internet Connection Type + +If the UGV is equipped with SIM card and can switch between Cellular and WiFi connections, the Operator can manually trigger this +change through the general settings page. This switchover will take approximately 30 seconds and will require a refresh on the UI. + +#### Show Path Deviation Distance + +When a mission is running the UGV will have a maximum path deviation distance that it shouldn't cross if it needs to replan. If this +toggle is set to true, while in edit mode this buffer is shown over top of the path as the Operator creates/edits the mission. This +toggle does not disable the path deviation distance feature. + +#### Low Power Mode + +If the UGV is equipped with a Low Power Module this toggle allows the user to switch the UGV into a low power state that will drastically +limit functionality but help conserve power. This mode is best used to help better facilitate charging while the UGV is not in use. + +#### Joystick Max Speeds + +The Operator can choose to set the Maximum Linear Speed and the Maximum Angular Speed that the teleoperation will use. These are limited to the +maximum speeds of the UGV itself. + +### Aerial Overlay Settings + +
+
+ +
Aerial Overlay settings
+
+
+ +To access the Aerial Overlay Settings: Menu → Settings → Aerial Overlay: + +1. **Offset:** The map tiles used in this software are not + perfectly aligned with the real world. Therefore, the user may need + to apply an offset to the map so that the UGV's position in the + real world matches its position on the map. +2. **Change Datum:** The datum is represented by a blue marker on the + map and should be set to a location within 10km of the test site. + The user can change this value in the Map Settings page. Enter the + new values and click the "Set Datum" button. + +### Map Source Configuration + +The Web UI ships with access to free +[OpenStreetMap](https://www.openstreetmap.org/) maps. Aerial view +requires access to third-party aerial maps or your own aerial maps. + +The Web UI is pre-configured to work with +[MapBox](https://www.mapbox.com/) and [Bing +Maps](https://www.bingmapsportal.com/) once a suitable map key has been +acquired. Both services offer a free tier that will be sufficient in +almost all cases. + +#### Using OpenStreetMap Maps + +As no key is required to use +[OpenStreetMap](https://www.openstreetmap.org/) maps, the process to +select these maps in the Web UI is simple. + +1. In the Web UI, from the menu, select **Settings→Map** to bring up + the **Map Settings** page. +2. Select **OpenStreetMap** +3. Click **Ok**. + +
+
+ +
Using Map Settings to select OpenStreetMap
+
+
+ +#### Using MapBox Maps + +Using [MapBox](https://www.mapbox.com/) maps requires a key, which can +then be used by the Web UI. The steps to set up MapBox are outlined +below. + +1. Acquire a MapBox key from the [MapBox + website](https://account.mapbox.com/auth/signup/). Review the + license terms and select the appropriate plan. In most cases, the + free tier will be sufficient. +2. Back in the Web UI, from the menu, select **Settings→Map** to bring + up the **Map Settings** page. +3. Select **MapBox**. +4. Copy the MapBox key from Step 1 into the **Map Key** field. +5. Click **Ok**. + +
+
+ +
Using Map Settings to select MapBox
+
+
+ +#### Using Bing Maps + +Using [Bing Maps](https://www.bingmapsportal.com/) requires a key, which +can then be used by the Web UI. The steps to set up Bing Maps are +outlined below. + +1. Acquire a Bing Maps key from the [Bing + website](https://www.microsoft.com/en-us/maps/create-a-bing-maps-key). + Review the license terms and select the appropriate plan. In most + cases, the free tier will be sufficient. +2. Back in the Web UI, from the menu, select **Settings→Map** to bring + up the **Map Settings** page. +3. Select **Bing Maps**. +4. Copy the Bing Maps key from Step 1 into the **Map Key** field. +5. Click **Ok**. + +
+
+ +
Using Map Settings to select Bing Maps
+
+
+ +#### Using Custom Maps {#using_custom_maps} + +Custom Maps allow you to use another set of maps in XYZ format, either +from a third-party map provider or from maps that you have generated on +your own, such as from drone aerial images. Custom maps can be selected +by using the steps below. + +1. Ensure that the maps are accessible on an internal network or on the + Internet by the device that is being used to display the Web UI, + such as a laptop, tablet, or desktop computer. +2. Ensure that the directory structure for the individual tiles is well + defined. See the section below for details on + [Preparing Custom Map Tiles from Drone Aerial Images](#preparing_custom_map_tiles). +3. In the Web UI, from the menu, select **Settings→Map** to bring up + the **Map Settings** page. +4. Select **Custom**. +5. Enter the network path for the maps into the **Custom URL** field. + If hosting the maps on your local computer, this will be similar to + http://localhost:8000/{z}/{x}/{-y}.png. Note how the + URL is parameterized with `{z}`, `{x}`, and `{-y}` values. This will + need to be adapted to match the directory structure of your map tile + images. +6. Click **Ok**. + +
+
+ +
Using Map Settings to select Custom maps
+
+
+ +#### Preparing Custom Map Tiles from Drone Aerial Images {#preparing_custom_map_tiles} + +In some cases, it is desirable to create your own maps rather than using +third party maps which might be outdated. One way to do this is to use a +drone to capture aerial images and convert those images into map tiles. +While there are many ways to accomplish this, one approach is outlined +below. + +1. Use a drone to collect top-down photos covering the area of + interest. It is highly recommended to use a drone control app that + allows you to specify the area of interest and desired image overlap + (recommended \~75%) and takes care of coverage planning, drone + control, and image acquisition. + +2. Perform ortho-mosaicing/ortho-rectification to stitch the collected + images together into a single orthographic image. [Open Drone + Map](https://www.opendronemap.org/) is a popular open source project + that Clearpath has used for stitching, but there are also paid + services that automate the process. + +3. Georeference the orthographic image. One way to do this is to define + the locations of well-defined features (sewer grates, utility holes, + etc.) based on their known positions, such as their position data + from an existing mapping service (e.g., Google Maps). Open source + tools, such as [QGIS](https://www.qgis.org/en/site/) can help with + this process. + +4. Generate the map tiles. Using Ubuntu, this can be accomplished with + the following commands, where `GEOREFERENCED_IMG.tif` is the output + of the previous step. + + ``` + sudo apt install gdal-bin + gdal2tiles.py + ``` + +5. Use a web server to host the tiles locally. Using Ubuntu, one way to + accomplish this is to use the commands below, which will make the + tiles available at: \. + + ``` + cd /base/directory/of/tiles + python3 -m http.server + ``` + +Once your map tiles are available on the network, you can follow the +steps in [Using Custom Maps](#using_custom_maps) to have the +Web UI use your custom tiles. + +## Autonomous Features + +There are presently 2 autonomous modes that the UGV can be used in, [Waypoint Mode](ui_waypoint_mode.mdx) and [Map Mode](ui_map_mode.mdx). +While each mode leverages different features, some are shared and are elaborated on here. + +:::note + +Some objects that appear on the overlay have context menus associated with them. However there is a known issue related to opening this context menu +between Autonomy modes. At present to open a context menu in the Waypoint Mode, left click the object, and when in Map Mode right click the object. +This issue will be reconciled in a future release. + +::: + +### Tasks + +When running a mission autonomously the user can assign tasks to various events. These tasks, along with their decoration icons, are found below: + +- Dock Robot: + Will dock the UGV to begin charging the UGV's + battery. There are 3 kinds of docking that can be used; Network, Radius and Local. + See [Autonomous Docking](#autonomous-docking) for more information on + the autonomous docking feature. + +- Move PTZ: + Will move the PTZ camera to the position selected + in the task settings. + + Settings: Select the camera position. See + [Pan-Tilt-Zoom (PTZ) View](ui_overview.mdx#ptz-view) for details on how to + save camera positions. + +- Save Image: + Will save an image using one of the UGV camera(s) + to the /opt/onav/saved_files/media/... directory and can be retrieved using a tool + such as FileZilla or by navigating to the Files section in the hamburger menu. + + Settings: Select which camera the image will be saved from. + +- / Start/Stop Video Recording: + Will start/stop recording video using one of the + UGV camera(s) to the /opt/onav/saved_files/media/... folder and can be retrieved + using a tool such as FileZilla or by navigating to the Files section in the hamburger menu. + + Settings: Select which camera the recording will come from. + +- Start/Stop Audio Recording: + Will start/stop recording audio using one of the + UGV microphone(s) to the /opt/onav/saved_files/media/... folder and can be retrieved + using a tool such as FileZilla or by navigating to the Files section in the hamburger menu. + + Settings: Select which microphone the recording will come from. + +- Undock UGV: + Will undock the UGV from the autocharge dock. Once + completed, the UGV can be sent on autonomous missions. It is + often recommended to place the undock task first in the list of Waypoints or as a start Mission Task; + that way, the UGV will automatically continue towards its next + Waypoint once undocked. + + :::note + + If the users places the Undock Task in the start Mission event for a Waypoint Mission the first Waypoint should be + approximately 2-3 meters behind the UGV's docked position. + + ::: + +- Wait: + Will pause and wait for the specified number of + seconds at the end of the Waypoint. + + Settings: Enter the amount of time to wait, in seconds. + +- New Custom Task: + Creates a new custom task that is defined by the user. +
+
+ +
Custom Task Settings Dialog
+
+
+ + - Task Name: Task name that will show up in the list of available tasks on the UI. + - Action Server Name: The namespace of the custom task action server. + - Float CSV: A list of comma seperated float values that consist of the numerical inputs to the custom task. + - String CSV: A list of comma seperated string values that consist of the semantic inputs to the custom task. + + See the [Custom Tasks](../features/custom_tasks.mdx) section + for details on how to develop custom tasks for your application. + + +:::note + +If a Waypoint/Goalpoint has more than one task assigned to it, the icon will +be replaced with a sheet of paper icon like so: + +::: + +### Autonomous Docking + +
+
+ +
Dock Icon
+
+
+ +### Docking The UGV + +To dock the UGV autonomously the user can use the following methods: + +#### Dock (Local) + +If there is a valid dock within its driveable range the UGV will attempt to dock. +This docking method can be done by selecting the Dock button in the bottom bar or by adding a +"Dock Robot (Local)" task to either an event or a mission point. + +#### Dock (Radius) + +If the UGV is within the specified docks radius the UGV will first navigate to a predock location +and then attempt to dock. When in Waypoint Mode a user can dock via this method as follows: + +- Enable the "Edit Mission" toggle. +- Maneuver the UGV so that is somewhere within the dock's radius. +- Click the dock that the UGV will be docking at and select "Dock Robot Here". + +This docking method can also be accomplished by adding a "Dock Robot (Radius)" task to either +an event or a mission point. A dock will need to be provided for the task to function which can be done +through the task settings modal. + +#### Dock (Network) + +:::note + +This mode is only available in [Map mode](ui_map_mode.mdx). Please see the Map mode page for further +details on map generation. + +::: + +If the UGV and the dock are within a map's driveable area the UGV will first navigate to a +predock location based on the map paths available. A user can dock manually using this method as follows: + +- Enable the "Edit Map" toggle. +- Maneuver the UGV so that is within the driveable range of the map. +- Ensure the dock is within the driveable range of the map. +- Right click the dock that the UGV will be docking at and select "Dock Robot Here". + +This docking method can also be accomplished by adding a "Dock Robot (Network)" task to either an +event or a mission point. A dock will need to be provided for the task to function which can be done +through the task settings modal. + +### Undocking The UGV + +To undock the UGV autonomously, the user can apply a "Undock Robot" task to a mission event or +point. The user can also click the Undock button in the bottom bar's left hand corner. + +### Compatibility with a Doghouse + +In order for the autonomous docking feature to be compatible with a doghouse, the +doghouse must conform to a few specifications: + +- Must be installed on a flat surface, and have no elevation change between the + charge-dock and the outdoor surface (ie. no ramp into the doghouse). +- Must be greater than 1.2 m wide. +- Must be between 1.5 and 2.5 m long. +- Dock target should be installed centered along the back of the doghouse. + +### Recover from Failed Docking or Undocking + +If for any reason, the docking or undocking tasks fail, the user can: + +- Manually drive the UGV towards the dock target, aligning the + charging unit with the receiver on the UGV. +- Manually drive the UGV in reverse away from the dock target. It is + suggested that the user reverse roughly 2-3 meters away from the target, + then wait 1-2 minutes before starting any autonomous navigation + missions. + +## Switching to IndoorNav + +If it is included in the UGV, IndoorNav can be executed through the OutdoorNav software. +To switch between the modes in OutdoorNav select the 'Navigation Mode' option found +in the hamburger menu. This will navigate to a page that shows the current mode and +provides an option to switch. When in IndoorNav mode the user may navigate to +the IndoorNav Web GUI directly or work within the OutdoorNav view as can be seen +below. + +
+
+ +
+
+ +:::note + +When in IndoorNav mode the OutdoorNav Autonomy software is switched off. The UI will +disable OutdoorNav UI features related to Autonomy but will still allow users the +option to view camera streams. + ::: \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.12.0/web_user_interface/ui_waypoint_mode.mdx b/outdoornav_user_manual_versioned_docs/version-0.12.0/web_user_interface/ui_waypoint_mode.mdx index daf67ed9..e092a4e7 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.12.0/web_user_interface/ui_waypoint_mode.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.12.0/web_user_interface/ui_waypoint_mode.mdx @@ -1,271 +1,271 @@ ---- -title: Web UI Waypoint Mode -sidebar_label: Web UI Waypoint Mode -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -![](/img/outdoornav_images/gps_danger.png) - -Ensure that the [Safety](../safety.mdx) document has been -read and the user is aware of possible hazards when using this product as well as the safety -methods that can be used to stop the moving UGV. - -The Autonomous Mode of OutdoorNav Software is a set of robotic -navigation modules that enables robotics developers to define and then -autonomously execute missions on UGVs, getting work done without -requiring direct operator action. This software is composed of four main -modules: localization, navigation, safety monitoring and user control -unit. This a combination of Clearpath's proprietary packages and custom -configured open-source packages from ROS community. Please see the -software architecture section for more information. - -## Definitions {#definitions} - -The list below defines what a "Mission" is as well as its components. -These components are referred to throughout this manual. - -- **Mission** A Mission is a set of one or more Waypoints. -- **Path** The list of Waypoints that will determine the path - for the specific Mission. -- **Waypoint** A Waypoint is any geographical point referenced by its - position relative to the datum in meters. -- **Task** A Task is an automated activity or wait time implemented as - a ROS action at a specific Waypoint. Tasks are called in the order they are - added to a Waypoint. -- **Ghost Waypoint** A transparent waypoint that is not part of the mission. This - Waypoint appears between two other waypoints when in edit mode. The user can - drag and drop this ghost waypoint to add a new waypoint to the mission between - the other two waypoints. - -## Mission Creation - -To create a new Mission first ensure that the UI is in "Edit Mode" ( -select the pencil icon in the bottom bar). Then open the drop down menu in the bottom -bar and select the "Add Mission" option. This will allow the user to create a new Mission -which can then be defined with Waypoints. - -### Waypoint Mode - -To add new Waypoints to a Mission while edit mode is enabled select the -"Waypoint Mode" button. This will allow the user to place Waypoints at -locations where the user clicks on the map. These will appear as red -Waypoints with the exception of the first waypoint (green) and the last waypoint (yellow). - -:::note - -**The first Waypoint in the Mission must be within 3.0 meters of the UGV's current position.** - -::: - -As Waypoints are placed, a "ghost waypoint" will appear between each pair of real -Waypoints and can be dragged to a new spot to insert a real Waypoint -between them. Waypoints can also be dragged and dropped on the map to -modify their positions. - -### Waypoint Panel - -
-
- -
Waypoint Panel
-
-
- -Enable the "Waypoint Panel" toggle to open the list of available Waypoints -within the selected Mission as shown in the figure above. The user can -now rearrange the list, rename Waypoints, add Tasks to the Waypoints, -and modify the final heading and/or tolerance of each Waypoint. The user can -also rename the mission and apply Tasks to when the Mission starts and stops. - -### Rename Mission - -To rename the Mission click the Mission name as it appears in the upper left -hand corner. This should change the text into an input box that can then be -modified. Press enter/click aside to save the change. - -### Mission Tasks - -A Mission can have Tasks assigned to when it starts and when it stops. These -Tasks will run in the order they are listed in and will always run whenever the Mission -starts or stops. - -### Rearrange List of Waypoints - -Waypoints can be rearranged in order of operation in the list. To do this, -enable the "Waypoints Panel" toggle to access the list of Waypoints. Here, the -user will be able to drag and drop the Waypoints to reorder them. - -### Rename Waypoint - -By default, once Waypoints are created they are assigned a default name -which is the word "Waypoint" followed by a numeric value representing the -the number of Waypoints that have been created plus one. The user has the -option to rename these Waypoints in order for them to have more descriptive -meaning. - -To rename a Waypoint follow these steps: - -1. Enable the "Waypoint Panel" toggle. See [Waypoint Panel](#waypoint-panel) - for further details. -2. Click the name of the Waypoint which the user wants to rename. -3. Erase the current name and type the new name. - -### Add Task to Waypoint {#add-task} - -
-
- -
Add Task to Waypoint
-
-
- -To add a Task to the end of a Mission: - -1. Click the "+" icon (beside the Gear icon) in the Waypoint Row the Task is - to be added to. - -2. Click the "Add Task" Button that has appeared. - -3. Select the Task from the dropdown list. Standard waypoint icons will be - replaced accordingly depending on the task selected (waypoint icons will keep the colours - assigned to them based on placement). Waypoints in the table will also have a small icon to indicate - if tasks are assigned to the Waypoint accordingly. - -4. The check box next to the Task name controls mission behaviour in the event that the Task fails. If the checkbox is - checked the Mission will proceed to the next step in it's process, such as the next task or navigating to the next Waypoint. - If its not checked, the Mission will become cancelled upon the Task's failure. -5. Click the Gear icon next to the selected Task to add the required - Settings. - - :::note - - If a waypoint has more than one task assigned to it, the icon will - be replaced with - - ::: - -### Advanced Settings - - - -#### Waypoint Heading - -When creating a Waypoint, the user has the option of setting a final heading -for the Waypoint. For example, when creating a Waypoint at an inspection point, -the user may want the UGV to navigate and stop facing a certain -direction. In [Waypoint Panel](#waypoint-panel), the list of -Waypoints can be seen and the advanced settings of each Waypoint can be accessed -by clicking the "Gear" icon. - -To set the Waypoint's final heading, the user will need to check the -"Final Heading Enabled" checkbox and enter the heading value in -degrees. The heading indicator on the top bar can be used to help set -this value. See the figure below showing the advanced settings. - -:::note - -Waypoints that have a heading or tolerance assigned to them will show a different colour -on their settings icon. - -::: - -
-
- -
Waypoint Advanced Settings
-
-
- -The heading that has been entered will only be applied to the Waypoint -(ie. the robot will only align itself with the correct heading at the -Waypoint). If the robot is required to be at specific headings at -other Waypoints the user will need to enter these in for each specific Waypoint. - -#### Waypoint Tolerance - -When creating a Mission, the user has the option of setting a specific -tolerance for each Waypoint. By default, the Waypoint position and orientation -tolerances are 0.3 meters and 180°, respectively. If a specific Waypoint -requires that the tolerances be either increased or decreased, these -values can be modified in the advanced settings. For example, if it's -required that the position and/or orientation at a Waypoint be very accurate, -such as 0.1 meters position and 5° orientation, or looser at 1.0 meter -position, this can be done within these settings. - -In [Waypoint Panel](#waypoint-panel), the list of waypoints can be -seen and the advanced settings of each Waypoint can be accessed by clicking -the "Gear" icon. To set the Waypoint's tolerance, the user will need to -check the "Waypoint Tolerance Enabled" checkbox and enter the position and -orientation values, in meters and degrees, respectively. - -### Constrained Replanning {#constrained_path} - -To enable the visualization of the contrained area of traversal (defined by -the path contraint around the reference path), navigate to the General settings -in the hamburger menu. Enable/disable the visualization of the path ui_route_deviation -distance using the switch button (see image below). - -
-
- -
General settings
-
-
- -Once enabled the area of possible deviation will show -over the planned route as can be seen in the following figure. - -
-
- -
Route with maximum path deviation
-
-
- -:::note - -If the UGV is manually driven outside of the constrained replanning area -while a Mission is running, the Mission will not be able to be resumed until the -UGV is returned within the navigable area defined by the path contraint. - -::: - -## Mission Execution - -### Start Mission - -There are multiple ways to start a Mission. At the bottom of the UI, the user has the ability to start the currently -selected Mission by clicking the "Play" button . -Starting the Mission this will start the Mission from the first Waypoint. The user may also select the drop down next to the button -to start the Mission from the current UGV position. This is a useful way to start a Mission in the event that the UGV was blocked by -obstacles that were later moved. Another way that a user can start a Mission is by selecting a waypoint in edit mode and then clicking on -"Start Mission from Here" option. If the UGV is within 3 metres of that Waypoint the Mission will start from there. - -
-
- -
Starting from a specific Waypoint
-
-
- -When the Mission has been started the Play button will turn green, regardless of how it has been started. - -### Pause Mission - -At the bottom of the UI, the user has the ability to pause the currently -running mission by clicking the "Pause" button . When the -mission has been paused this button will turn yellow. Pausing a mission -allows the user to take time to look around with the camera or to -teleoperate the UGV to a nearby location to perform an inspection. For -ease of operation, the user must PAUSE the active mission if the user -wants to teleoperate the UGV. - -### Cancel Mission/Task - -At the bottom of the UI, the user has the ability to stop the currently -running mission or task by clicking the "Stop" button . When the -mission/task has been cancelled this button will turn red. The name of -the mission/task will be shown to be cancelled in the feedback bar. - +--- +title: Web UI Waypoint Mode +sidebar_label: Web UI Waypoint Mode +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +![](/img/outdoornav_images/gps_danger.png) + +Ensure that the [Safety](../safety.mdx) document has been +read and the user is aware of possible hazards when using this product as well as the safety +methods that can be used to stop the moving UGV. + +The Autonomous Mode of OutdoorNav Software is a set of robotic +navigation modules that enables robotics developers to define and then +autonomously execute missions on UGVs, getting work done without +requiring direct operator action. This software is composed of four main +modules: localization, navigation, safety monitoring and user control +unit. This a combination of Clearpath's proprietary packages and custom +configured open-source packages from ROS community. Please see the +software architecture section for more information. + +## Definitions {#definitions} + +The list below defines what a "Mission" is as well as its components. +These components are referred to throughout this manual. + +- **Mission** A Mission is a set of one or more Waypoints. +- **Path** The list of Waypoints that will determine the path + for the specific Mission. +- **Waypoint** A Waypoint is any geographical point referenced by its + position relative to the datum in meters. +- **Task** A Task is an automated activity or wait time implemented as + a ROS action at a specific Waypoint. Tasks are called in the order they are + added to a Waypoint. +- **Ghost Waypoint** A transparent waypoint that is not part of the mission. This + Waypoint appears between two other waypoints when in edit mode. The user can + drag and drop this ghost waypoint to add a new waypoint to the mission between + the other two waypoints. + +## Mission Creation + +To create a new Mission first ensure that the UI is in "Edit Mode" ( +select the pencil icon in the bottom bar). Then open the drop down menu in the bottom +bar and select the "Add Mission" option. This will allow the user to create a new Mission +which can then be defined with Waypoints. + +### Waypoint Mode + +To add new Waypoints to a Mission while edit mode is enabled select the +"Waypoint Mode" button. This will allow the user to place Waypoints at +locations where the user clicks on the map. These will appear as red +Waypoints with the exception of the first waypoint (green) and the last waypoint (yellow). + +:::note + +**The first Waypoint in the Mission must be within 3.0 meters of the UGV's current position.** + +::: + +As Waypoints are placed, a "ghost waypoint" will appear between each pair of real +Waypoints and can be dragged to a new spot to insert a real Waypoint +between them. Waypoints can also be dragged and dropped on the map to +modify their positions. + +### Waypoint Panel + +
+
+ +
Waypoint Panel
+
+
+ +Enable the "Waypoint Panel" toggle to open the list of available Waypoints +within the selected Mission as shown in the figure above. The user can +now rearrange the list, rename Waypoints, add Tasks to the Waypoints, +and modify the final heading and/or tolerance of each Waypoint. The user can +also rename the mission and apply Tasks to when the Mission starts and stops. + +### Rename Mission + +To rename the Mission click the Mission name as it appears in the upper left +hand corner. This should change the text into an input box that can then be +modified. Press enter/click aside to save the change. + +### Mission Tasks + +A Mission can have Tasks assigned to when it starts and when it stops. These +Tasks will run in the order they are listed in and will always run whenever the Mission +starts or stops. + +### Rearrange List of Waypoints + +Waypoints can be rearranged in order of operation in the list. To do this, +enable the "Waypoints Panel" toggle to access the list of Waypoints. Here, the +user will be able to drag and drop the Waypoints to reorder them. + +### Rename Waypoint + +By default, once Waypoints are created they are assigned a default name +which is the word "Waypoint" followed by a numeric value representing the +the number of Waypoints that have been created plus one. The user has the +option to rename these Waypoints in order for them to have more descriptive +meaning. + +To rename a Waypoint follow these steps: + +1. Enable the "Waypoint Panel" toggle. See [Waypoint Panel](#waypoint-panel) + for further details. +2. Click the name of the Waypoint which the user wants to rename. +3. Erase the current name and type the new name. + +### Add Task to Waypoint {#add-task} + +
+
+ +
Add Task to Waypoint
+
+
+ +To add a Task to the end of a Mission: + +1. Click the "+" icon (beside the Gear icon) in the Waypoint Row the Task is + to be added to. + +2. Click the "Add Task" Button that has appeared. + +3. Select the Task from the dropdown list. Standard waypoint icons will be + replaced accordingly depending on the task selected (waypoint icons will keep the colours + assigned to them based on placement). Waypoints in the table will also have a small icon to indicate + if tasks are assigned to the Waypoint accordingly. + +4. The check box next to the Task name controls mission behaviour in the event that the Task fails. If the checkbox is + checked the Mission will proceed to the next step in it's process, such as the next task or navigating to the next Waypoint. + If its not checked, the Mission will become cancelled upon the Task's failure. +5. Click the Gear icon next to the selected Task to add the required + Settings. + + :::note + + If a waypoint has more than one task assigned to it, the icon will + be replaced with + + ::: + +### Advanced Settings + + + +#### Waypoint Heading + +When creating a Waypoint, the user has the option of setting a final heading +for the Waypoint. For example, when creating a Waypoint at an inspection point, +the user may want the UGV to navigate and stop facing a certain +direction. In [Waypoint Panel](#waypoint-panel), the list of +Waypoints can be seen and the advanced settings of each Waypoint can be accessed +by clicking the "Gear" icon. + +To set the Waypoint's final heading, the user will need to check the +"Final Heading Enabled" checkbox and enter the heading value in +degrees. The heading indicator on the top bar can be used to help set +this value. See the figure below showing the advanced settings. + +:::note + +Waypoints that have a heading or tolerance assigned to them will show a different colour +on their settings icon. + +::: + +
+
+ +
Waypoint Advanced Settings
+
+
+ +The heading that has been entered will only be applied to the Waypoint +(ie. the robot will only align itself with the correct heading at the +Waypoint). If the robot is required to be at specific headings at +other Waypoints the user will need to enter these in for each specific Waypoint. + +#### Waypoint Tolerance + +When creating a Mission, the user has the option of setting a specific +tolerance for each Waypoint. By default, the Waypoint position and orientation +tolerances are 0.3 meters and 180°, respectively. If a specific Waypoint +requires that the tolerances be either increased or decreased, these +values can be modified in the advanced settings. For example, if it's +required that the position and/or orientation at a Waypoint be very accurate, +such as 0.1 meters position and 5° orientation, or looser at 1.0 meter +position, this can be done within these settings. + +In [Waypoint Panel](#waypoint-panel), the list of waypoints can be +seen and the advanced settings of each Waypoint can be accessed by clicking +the "Gear" icon. To set the Waypoint's tolerance, the user will need to +check the "Waypoint Tolerance Enabled" checkbox and enter the position and +orientation values, in meters and degrees, respectively. + +### Constrained Replanning {#constrained_path} + +To enable the visualization of the contrained area of traversal (defined by +the path contraint around the reference path), navigate to the General settings +in the hamburger menu. Enable/disable the visualization of the path ui_route_deviation +distance using the switch button (see image below). + +
+
+ +
General settings
+
+
+ +Once enabled the area of possible deviation will show +over the planned route as can be seen in the following figure. + +
+
+ +
Route with maximum path deviation
+
+
+ +:::note + +If the UGV is manually driven outside of the constrained replanning area +while a Mission is running, the Mission will not be able to be resumed until the +UGV is returned within the navigable area defined by the path contraint. + +::: + +## Mission Execution + +### Start Mission + +There are multiple ways to start a Mission. At the bottom of the UI, the user has the ability to start the currently +selected Mission by clicking the "Play" button . +Starting the Mission this will start the Mission from the first Waypoint. The user may also select the drop down next to the button +to start the Mission from the current UGV position. This is a useful way to start a Mission in the event that the UGV was blocked by +obstacles that were later moved. Another way that a user can start a Mission is by selecting a waypoint in edit mode and then clicking on +"Start Mission from Here" option. If the UGV is within 3 metres of that Waypoint the Mission will start from there. + +
+
+ +
Starting from a specific Waypoint
+
+
+ +When the Mission has been started the Play button will turn green, regardless of how it has been started. + +### Pause Mission + +At the bottom of the UI, the user has the ability to pause the currently +running mission by clicking the "Pause" button . When the +mission has been paused this button will turn yellow. Pausing a mission +allows the user to take time to look around with the camera or to +teleoperate the UGV to a nearby location to perform an inspection. For +ease of operation, the user must PAUSE the active mission if the user +wants to teleoperate the UGV. + +### Cancel Mission/Task + +At the bottom of the UI, the user has the ability to stop the currently +running mission or task by clicking the "Stop" button . When the +mission/task has been cancelled this button will turn red. The name of +the mission/task will be shown to be cancelled in the feedback bar. + diff --git a/outdoornav_user_manual_versioned_docs/version-0.13.0/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.13.0/_category_.json index c123e1bc..f5966a95 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.13.0/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.13.0/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "OutdoorNav User Manual", - "position": 1 -} +{ + "label": "OutdoorNav User Manual", + "position": 1 +} diff --git a/outdoornav_user_manual_versioned_docs/version-0.13.0/api/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.13.0/api/_category_.json index a6e53920..79c71658 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.13.0/api/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.13.0/api/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Application Programming Interface", - "position": 7 -} +{ + "label": "Application Programming Interface", + "position": 7 +} diff --git a/outdoornav_user_manual_versioned_docs/version-0.13.0/api/api_endpoints/api_endpoints.mdx b/outdoornav_user_manual_versioned_docs/version-0.13.0/api/api_endpoints/api_endpoints.mdx index c65c4150..e1169e6e 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.13.0/api/api_endpoints/api_endpoints.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.13.0/api/api_endpoints/api_endpoints.mdx @@ -1,16 +1,16 @@ ---- -title: API Endpoints -sidebar_label: API Endpoints -sidebar_position: 2 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -The ROS 1 Noetic API can be used to monitor and manage OutdoorNav Software. Details -are available through the child pages. - -- [Platform API](platform_api.mdx) -- [Autonomy API](autonomy_api.mdx) -- [Mission Manager API](mission_manager_api.mdx) -- [Definitions](definitions.mdx) - +--- +title: API Endpoints +sidebar_label: API Endpoints +sidebar_position: 2 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +The ROS 1 Noetic API can be used to monitor and manage OutdoorNav Software. Details +are available through the child pages. + +- [Platform API](platform_api.mdx) +- [Autonomy API](autonomy_api.mdx) +- [Mission Manager API](mission_manager_api.mdx) +- [Definitions](definitions.mdx) + diff --git a/outdoornav_user_manual_versioned_docs/version-0.13.0/api/api_examples/api_examples.mdx b/outdoornav_user_manual_versioned_docs/version-0.13.0/api/api_examples/api_examples.mdx index 333bd135..eb556d30 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.13.0/api/api_examples/api_examples.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.13.0/api/api_examples/api_examples.mdx @@ -1,21 +1,21 @@ ---- -title: API Examples -sidebar_label: API Examples -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -The OutdoorNav API examples are now available and accesible to everyone. A -[Python API library](https://github.com/cpr-application/clearpath_onav_examples) along -with some example scripts are available to build and use for our application. - -A few examples scripts follow with detailed explanations: - -- [Execute Mission from File](./mission_from_file.mdx) -- [Execute Mission with Custom Task](./mission_with_custom_tasks.mdx) -- [Status Monitoring](./monitor_status.mdx) -- [Network of Paths](./network_of_paths.mdx) - -The documentation for the Python API library can be built following the -instructions in the above linked GitHub repository. +--- +title: API Examples +sidebar_label: API Examples +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +The OutdoorNav API examples are now available and accesible to everyone. A +[Python API library](https://github.com/cpr-application/clearpath_onav_examples) along +with some example scripts are available to build and use for our application. + +A few examples scripts follow with detailed explanations: + +- [Execute Mission from File](./mission_from_file.mdx) +- [Execute Mission with Custom Task](./mission_with_custom_tasks.mdx) +- [Status Monitoring](./monitor_status.mdx) +- [Network of Paths](./network_of_paths.mdx) + +The documentation for the Python API library can be built following the +instructions in the above linked GitHub repository. diff --git a/outdoornav_user_manual_versioned_docs/version-0.13.0/api/api_examples/mission_from_file.mdx b/outdoornav_user_manual_versioned_docs/version-0.13.0/api/api_examples/mission_from_file.mdx index eff0f768..0abb4ea9 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.13.0/api/api_examples/mission_from_file.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.13.0/api/api_examples/mission_from_file.mdx @@ -1,210 +1,210 @@ ---- -title: Mission from YAML File -sidebar_label: Mission from YAML File -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -## The Code - -``` python -#! /usr/bin/env python3 - -from cpr_outdoornav_api_examples_lib.ros_node import RosNode -from cpr_outdoornav_api_examples_lib.yaml_config import YamlConfig -import time -import os - -# The file containing the mission configuration (adjust as needed) -MISSION_YAML_FILE = os.environ.get("HOME", "administrator") + "/example_ws/src/" + \ - "CPR-OutdoorNav/src/cpr_outdoornav_api_examples/config/sample_mission.yaml" - -class MissionFromYamlFile(RosNode): - """ - Create and run a mission loaded from a YAML configuration file. - Be sure that your robot is within 3 meters of your first Waypoint prior to starting the mission. - """ - - def __init__(self): - """Initialize the mission details and server connection.""" - - RosNode.__init__(self, 'mission_from_yaml_file') - self.mission = YamlConfig.yamlFileToMission(MISSION_YAML_FILE) - - # NOTE: to save the configuration to file, uncomment the following lines: - # YamlConfig.missionToYamlFile('/tmp/test1.yaml', self.mission) - - def run(self): - """Execute the mission.""" - - if not self.mission.startMission(): - return False - while not self.mission.isMissionComplete(): - time.sleep(1.0) - return self.mission.getMissionSuccess() - - -if __name__ == '__main__': - if MissionFromYamlFile().run(): - print("Mission completed successfully") - else: - print("Mission failed") - -``` - -## The Code Explained - -Let's break down the code. - -``` python -#! /usr/bin/env python3 -``` - -Every Python ROS Node will have this declaration at the top. The first line makes sure your script is executed as a Python3 script. - - -``` python -from cpr_outdoornav_api_examples_lib.ros_node import RosNode -from cpr_outdoornav_api_examples_lib.yaml_config import YamlConfig -``` - -We provide a library of classes that can be used within your file for ease of use. In the above example, we import the RosNode and YamlConfig classes. -The RosNode class is used by all of our examples to initialize a ROS node that will execute the example mission. The YamlConfig class is used to import -a YAML file and convert it to a Mission object. - -``` python -MISSION_YAML_FILE = os.environ.get("HOME", "administrator") + "/example_ws/src/" + \ - "CPR-OutdoorNav/src/cpr_outdoornav_api_examples/config/sample_mission.yaml" -``` - -This defines the file path of the YAML file that contains the mission to be executed. See the [YAML file](#yaml-file) below for the example YAML file -that will be executed. - -``` python -class MissionFromYamlFile(RosNode): -``` - -Creates a class for your example, which inherits a RosNode object. All python mission files are requried to inherit the RosNode class. - -``` python - RosNode.__init__(self, 'mission_from_yaml_file') - self.mission = YamlConfig.yamlFileToMission(MISSION_YAML_FILE)``` -``` - -Initialize the ROS node with name `mission_from_yaml_file` and import the the mission from the yaml config file. The `YamlConfig.yamlFileToMission()` function -reads teh configuration you have created in the YAML file and converts it into a Mission object. - -``` python - if not self.mission.startMission(): - return False -``` - -Upon execution of the script, the `self.mission.startMission()` function creates the mission client if not yet created, connects to the mission action server -and sends the goal to the action server to begin the execution of the mission. - -``` python - while not self.mission.isMissionComplete(): - time.sleep(1.0) - return self.mission.getMissionSuccess() -``` - -`self.mission.isMissionComplete()` monitors the mission status and only proceeds to terminating the mission has completed or been cancelled. - - -## YAML File {#yaml-file} - -The following YAML file is used in the above example mission. - -``` python -mission: - header: - seq: 0 - stamp: - secs: 0 - nsecs: 0 - frame_id: '' - name: "Sample Mission" - uuid: "8f57fd20-8a8c-4748-85ef-be1495b3ee06" - waypoints: - - - name: "Waypoint: 60" - uuid: "3edcedd7-ae0d-47cf-bd23-f7988d2779b7" - latitude: 50.10950820165676 - longitude: -97.31898507913323 - heading: -1.0 - tasks: [] - position_tolerance: -1.0 - yaw_tolerance: -1.0 - - - name: "Waypoint: 61" - uuid: "ad23202e-7067-4f1c-8677-2dc07af1e729" - latitude: 50.1095698924641 - longitude: -97.31929487427445 - heading: -1.0 - tasks: [] - position_tolerance: -1.0 - yaw_tolerance: -1.0 - - - name: "Waypoint: 62" - uuid: "fe452e77-4a26-41b0-b4ab-ee1859612a60" - latitude: 50.109437123117864 - longitude: -97.31946787675591 - heading: -1.0 - tasks: - - - name: "Wait" - uuid: "ec1121a8-7481-420f-b532-c47ea86afcd7" - service_call: "/wait" - version: "0.0.0" - floats: [3.0] - strings: [] - position_tolerance: -1.0 - yaw_tolerance: -1.0 - - - name: "Waypoint: 63" - uuid: "5ed54c1f-1599-497a-9c16-93c7ca6c355e" - latitude: 50.109384820042074 - longitude: -97.3194477601883 - heading: -1.0 - tasks: [] - position_tolerance: -1.0 - yaw_tolerance: -1.0 - - - name: "Waypoint: 64" - uuid: "2e021345-636b-4bd3-81ba-4f6901fdc016" - latitude: 50.10934056359333 - longitude: -97.31936192949982 - heading: -1.0 - tasks: [] - position_tolerance: -1.0 - yaw_tolerance: -1.0 - - - name: "Waypoint: 65" - uuid: "00c041ee-2ca4-40ba-8e38-65ac900d5a1d" - latitude: 50.10946930962604 - longitude: -97.31921709021302 - heading: -1.0 - tasks: [] - position_tolerance: -1.0 - yaw_tolerance: -1.0 - - - name: "Waypoint: 66" - uuid: "a5826fc5-b696-4b63-82aa-cc2e7a426640" - latitude: 50.10949344950718 - longitude: -97.31911382516594 - heading: -1.0 - tasks: [] - position_tolerance: -1.0 - yaw_tolerance: -1.0 - - - name: "Waypoint: 67" - uuid: "7ff204b2-79a3-46da-a8c0-2c734b4c5314" - latitude: 50.10949613171619 - longitude: -97.31898910244675 - heading: -1.0 - tasks: [] - position_tolerance: -1.0 - yaw_tolerance: -1.0 - onav_config: "To be determined" -``` +--- +title: Mission from YAML File +sidebar_label: Mission from YAML File +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +## The Code + +``` python +#! /usr/bin/env python3 + +from cpr_outdoornav_api_examples_lib.ros_node import RosNode +from cpr_outdoornav_api_examples_lib.yaml_config import YamlConfig +import time +import os + +# The file containing the mission configuration (adjust as needed) +MISSION_YAML_FILE = os.environ.get("HOME", "administrator") + "/example_ws/src/" + \ + "CPR-OutdoorNav/src/cpr_outdoornav_api_examples/config/sample_mission.yaml" + +class MissionFromYamlFile(RosNode): + """ + Create and run a mission loaded from a YAML configuration file. + Be sure that your robot is within 3 meters of your first Waypoint prior to starting the mission. + """ + + def __init__(self): + """Initialize the mission details and server connection.""" + + RosNode.__init__(self, 'mission_from_yaml_file') + self.mission = YamlConfig.yamlFileToMission(MISSION_YAML_FILE) + + # NOTE: to save the configuration to file, uncomment the following lines: + # YamlConfig.missionToYamlFile('/tmp/test1.yaml', self.mission) + + def run(self): + """Execute the mission.""" + + if not self.mission.startMission(): + return False + while not self.mission.isMissionComplete(): + time.sleep(1.0) + return self.mission.getMissionSuccess() + + +if __name__ == '__main__': + if MissionFromYamlFile().run(): + print("Mission completed successfully") + else: + print("Mission failed") + +``` + +## The Code Explained + +Let's break down the code. + +``` python +#! /usr/bin/env python3 +``` + +Every Python ROS Node will have this declaration at the top. The first line makes sure your script is executed as a Python3 script. + + +``` python +from cpr_outdoornav_api_examples_lib.ros_node import RosNode +from cpr_outdoornav_api_examples_lib.yaml_config import YamlConfig +``` + +We provide a library of classes that can be used within your file for ease of use. In the above example, we import the RosNode and YamlConfig classes. +The RosNode class is used by all of our examples to initialize a ROS node that will execute the example mission. The YamlConfig class is used to import +a YAML file and convert it to a Mission object. + +``` python +MISSION_YAML_FILE = os.environ.get("HOME", "administrator") + "/example_ws/src/" + \ + "CPR-OutdoorNav/src/cpr_outdoornav_api_examples/config/sample_mission.yaml" +``` + +This defines the file path of the YAML file that contains the mission to be executed. See the [YAML file](#yaml-file) below for the example YAML file +that will be executed. + +``` python +class MissionFromYamlFile(RosNode): +``` + +Creates a class for your example, which inherits a RosNode object. All python mission files are requried to inherit the RosNode class. + +``` python + RosNode.__init__(self, 'mission_from_yaml_file') + self.mission = YamlConfig.yamlFileToMission(MISSION_YAML_FILE)``` +``` + +Initialize the ROS node with name `mission_from_yaml_file` and import the the mission from the yaml config file. The `YamlConfig.yamlFileToMission()` function +reads teh configuration you have created in the YAML file and converts it into a Mission object. + +``` python + if not self.mission.startMission(): + return False +``` + +Upon execution of the script, the `self.mission.startMission()` function creates the mission client if not yet created, connects to the mission action server +and sends the goal to the action server to begin the execution of the mission. + +``` python + while not self.mission.isMissionComplete(): + time.sleep(1.0) + return self.mission.getMissionSuccess() +``` + +`self.mission.isMissionComplete()` monitors the mission status and only proceeds to terminating the mission has completed or been cancelled. + + +## YAML File {#yaml-file} + +The following YAML file is used in the above example mission. + +``` python +mission: + header: + seq: 0 + stamp: + secs: 0 + nsecs: 0 + frame_id: '' + name: "Sample Mission" + uuid: "8f57fd20-8a8c-4748-85ef-be1495b3ee06" + waypoints: + - + name: "Waypoint: 60" + uuid: "3edcedd7-ae0d-47cf-bd23-f7988d2779b7" + latitude: 50.10950820165676 + longitude: -97.31898507913323 + heading: -1.0 + tasks: [] + position_tolerance: -1.0 + yaw_tolerance: -1.0 + - + name: "Waypoint: 61" + uuid: "ad23202e-7067-4f1c-8677-2dc07af1e729" + latitude: 50.1095698924641 + longitude: -97.31929487427445 + heading: -1.0 + tasks: [] + position_tolerance: -1.0 + yaw_tolerance: -1.0 + - + name: "Waypoint: 62" + uuid: "fe452e77-4a26-41b0-b4ab-ee1859612a60" + latitude: 50.109437123117864 + longitude: -97.31946787675591 + heading: -1.0 + tasks: + - + name: "Wait" + uuid: "ec1121a8-7481-420f-b532-c47ea86afcd7" + service_call: "/wait" + version: "0.0.0" + floats: [3.0] + strings: [] + position_tolerance: -1.0 + yaw_tolerance: -1.0 + - + name: "Waypoint: 63" + uuid: "5ed54c1f-1599-497a-9c16-93c7ca6c355e" + latitude: 50.109384820042074 + longitude: -97.3194477601883 + heading: -1.0 + tasks: [] + position_tolerance: -1.0 + yaw_tolerance: -1.0 + - + name: "Waypoint: 64" + uuid: "2e021345-636b-4bd3-81ba-4f6901fdc016" + latitude: 50.10934056359333 + longitude: -97.31936192949982 + heading: -1.0 + tasks: [] + position_tolerance: -1.0 + yaw_tolerance: -1.0 + - + name: "Waypoint: 65" + uuid: "00c041ee-2ca4-40ba-8e38-65ac900d5a1d" + latitude: 50.10946930962604 + longitude: -97.31921709021302 + heading: -1.0 + tasks: [] + position_tolerance: -1.0 + yaw_tolerance: -1.0 + - + name: "Waypoint: 66" + uuid: "a5826fc5-b696-4b63-82aa-cc2e7a426640" + latitude: 50.10949344950718 + longitude: -97.31911382516594 + heading: -1.0 + tasks: [] + position_tolerance: -1.0 + yaw_tolerance: -1.0 + - + name: "Waypoint: 67" + uuid: "7ff204b2-79a3-46da-a8c0-2c734b4c5314" + latitude: 50.10949613171619 + longitude: -97.31898910244675 + heading: -1.0 + tasks: [] + position_tolerance: -1.0 + yaw_tolerance: -1.0 + onav_config: "To be determined" +``` diff --git a/outdoornav_user_manual_versioned_docs/version-0.13.0/api/api_examples/mission_with_custom_tasks.mdx b/outdoornav_user_manual_versioned_docs/version-0.13.0/api/api_examples/mission_with_custom_tasks.mdx index 30ec477e..af8335aa 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.13.0/api/api_examples/mission_with_custom_tasks.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.13.0/api/api_examples/mission_with_custom_tasks.mdx @@ -1,233 +1,233 @@ ---- -title: Mission with Custom Tasks -sidebar_label: Mission with Custom Tasks -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -Before being able to run the examples similar to the one explained below, it is required that you have written your own custom tasks. See the -[Custom Tasks](../../features/custom_tasks.mdx) section for information on how to develop tasks for your application. - -## The Code - -``` python -#! /usr/bin/env python3 - -import rospy -import actionlib -from cpr_outdoornav_api_examples_lib.ros_node import RosNode -from cpr_outdoornav_api_examples_lib.waypoint import Waypoint -from cpr_outdoornav_api_examples_lib.mission import Mission -from clearpath_navigation_msgs.msg import Task, UITaskResult, UITaskAction - - -CUSTOM_ACTION_NAME = "/record_gnss" -UNSPECIFIED_HEADING = -1 - - -class MissionWithCustomTask(RosNode): - """Create and run a mission with 3 waypoints, each of which executes a custom task. - - Our goal is to set up 3 waypoints, then create a mission such that the robot drives - to each waypoint in order. In addition, at each of the waypoints, a custom task will be - called to record the timestamp, goal name, and GPS coordinates. Since this is a custom task, - it is necessary to create an actionlib server to implement the custom task. - - The main component of this example is the mission builder, which builds up the set of goals, - including information on the custom tasks, and runs the mission, to execute the custom task. - - The coordinates used in this example are based on the cpr_agriculture_gazebo - world and should be updated to match the location in which the user's - robot will be operating. - """ - - class MissionBuilder: - """Creates and runs the mission, including custom tasks.""" - - def __init__(self): - """Creates the mission with 3 waypoints and custom tasks.""" - - # First waypoint, with custom task - waypoint_a_name = "A" - custom_task_a = Task() - custom_task_a.name = "my_custom_task_a" # choose any name here - custom_task_a.action_server_name = CUSTOM_ACTION_NAME # must match server name - custom_task_a.version = "1.0" # choose any version - custom_task_a.floats = [1000] # param: unique ID - custom_task_a.strings = [waypoint_a_name] # param: goal name - - # Second waypoint, with custom task - waypoint_b_name = "B" - custom_task_b = Task() - custom_task_b.name = "my_custom_task_b" # choose any name here - custom_task_b.action_server_name = CUSTOM_ACTION_NAME # must match server name - custom_task_b.version = "1.0" # choose any version - custom_task_b.floats = [1001] # param: unique ID - custom_task_b.strings = [waypoint_b_name] # param: goal name - - # Third waypoint, with custom task - waypoint_c_name = "C" - custom_task_c = Task() - custom_task_c.name = "my_custom_task_c" # choose any name here - custom_task_c.action_server_name = CUSTOM_ACTION_NAME # must match server name - custom_task_c.version = "1.0" # choose any version - custom_task_c.floats = [1002] # param: unique ID - custom_task_c.strings = [waypoint_c_name] # param: goal name - - waypoints = [ - Waypoint(waypoint_a_name, "uuid-waypoint-01", 43.50076203007681, -80.546296281104, UNSPECIFIED_HEADING), - Waypoint(waypoint_b_name, "uuid-waypoint-02", 43.50073600330896, -80.54621215801687, UNSPECIFIED_HEADING, [custom_task_b]), - Waypoint(waypoint_c_name, "uuid-waypoint-03", 43.50067256664828, -80.5462159469465, UNSPECIFIED_HEADING, [custom_task_c]), - ] - - # Build mission from two waypoints with custom tasks - self._mission = Mission("Custom task mission", "uuid-mission-1", waypoints) - - def getMission(self): - """Gets a reference to the mission. - - Returns - ------- - A reference to the mission. - """ - return self._mission - - def __init__(self): - """Initializes ROS, the custom task server, GPS subscriber and mission.""" - - RosNode.__init__(self, 'mission_with_custom_task') - self._mission_builder = MissionWithCustomTask.MissionBuilder() - - - def run(self): - """Execute the mission. - - This function blocks until the mission is complete. - - Returns - ------- - True on successful execution of the mission; else False on any error. - """ - - if not self._mission_builder.getMission().startMission(): - return False - while not self._mission_builder.getMission().isMissionComplete(): - rospy.sleep(1.0) - return self._mission_builder.getMission().getMissionSuccess() - - -if __name__ == '__main__': - if MissionWithCustomTask().run(): - print("Mission completed successfully") - else: - print("Mission failed") - rospy.signal_shutdown('Done') -``` - -## The Code Explained - -``` python -import rospy -import actionlib -from cpr_outdoornav_api_examples_lib.ros_node import RosNode -from cpr_outdoornav_api_examples_lib.waypoint import Waypoint -from cpr_outdoornav_api_examples_lib.mission import Mission -from clearpath_navigation_msgs.msg import Task, UITaskResult, UITaskAction -``` - -Import the `RosNode`, `Waypoint` and `Mission` classes which will be used to create the mission to be executed. -We also import the `Task` and `UITask` messages which are used to generate the action servers. - -``` python - class MissionBuilder: - """Creates and runs the mission, including custom tasks.""" - - def __init__(self): - """Creates the mission with 3 waypoints and custom tasks.""" - - # First waypoint, with custom task - waypoint_a_name = "A" - custom_task_a = Task() - custom_task_a.name = "my_custom_task_a" # choose any name here - custom_task_a.action_server_name = CUSTOM_ACTION_NAME # must match server name - custom_task_a.version = "1.0" # choose any version - custom_task_a.floats = [1000] # param: unique ID - custom_task_a.strings = [waypoint_a_name] # param: goal name - - # Second waypoint, with custom task - waypoint_b_name = "B" - custom_task_b = Task() - custom_task_b.name = "my_custom_task_b" # choose any name here - custom_task_b.action_server_name = CUSTOM_ACTION_NAME # must match server name - custom_task_b.version = "1.0" # choose any version - custom_task_b.floats = [1001] # param: unique ID - custom_task_b.strings = [waypoint_b_name] # param: goal name - - # Third waypoint, with custom task - waypoint_c_name = "C" - custom_task_c = Task() - custom_task_c.name = "my_custom_task_c" # choose any name here - custom_task_c.action_server_name = CUSTOM_ACTION_NAME # must match server name - custom_task_c.version = "1.0" # choose any version - custom_task_c.floats = [1002] # param: unique ID - custom_task_c.strings = [waypoint_c_name] # param: goal name - - - waypoints = [ - Waypoint(waypoint_a_name, "uuid-waypoint-01", 50.1095255, -97.3192484, UNSPECIFIED_HEADING, [custom_task_a]), - Waypoint(waypoint_b_name, "uuid-waypoint-02", 50.1094938, -97.3191085, UNSPECIFIED_HEADING, [custom_task_b]), - Waypoint(waypoint_c_name, "uuid-waypoint-03", 50.1094600, -97.3192100, UNSPECIFIED_HEADING, [custom_task_c]), - ] - - # Build mission from two waypoints with custom tasks - self._mission = Mission("Custom task mission", "uuid-mission-1", waypoints) -``` - -We create the `MissionBuilder` subclass that will create the mission to be executed. We initialize custom task objects -where we specify the `action_server_name` field with the specific action of the custom task. These are then added to the -Waypoints as a list of tasks and the Mission object is created. - -``` python - def __init__(self): - """Initializes ROS, the custom task server, GPS subscriber and mission.""" - - RosNode.__init__(self, 'mission_with_custom_task') - self._mission_builder = MissionWithCustomTask.MissionBuilder() -``` - -We initialize the example class by starting a ROS node and initialize the mission to be executed. - -``` python - def run(self): - """Execute the mission. - - This function blocks until the mission is complete. - - Returns - ------- - True on successful execution of the mission; else False on any error. - """ - - if not self._mission_builder.getMission().startMission(): - return False - while not self._mission_builder.getMission().isMissionComplete(): - time.sleep(1.0) - return self._mission_builder.getMission().getMissionSuccess() -``` - -The `run()` function starts the mission and checks for completion. Once complete we terminate the example code. - -``` python -if __name__ == '__main__': - if MissionWithCustomTask().run(): - print("Mission completed successfully") - else: - print("Mission failed") - rospy.signal_shutdown('Done') -``` - -The main python execution block. We first initialize the example class (runs the __init__ function) and then execute the run() function which -executes the mission and outputs the status information. - - +--- +title: Mission with Custom Tasks +sidebar_label: Mission with Custom Tasks +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +Before being able to run the examples similar to the one explained below, it is required that you have written your own custom tasks. See the +[Custom Tasks](../../features/custom_tasks.mdx) section for information on how to develop tasks for your application. + +## The Code + +``` python +#! /usr/bin/env python3 + +import rospy +import actionlib +from cpr_outdoornav_api_examples_lib.ros_node import RosNode +from cpr_outdoornav_api_examples_lib.waypoint import Waypoint +from cpr_outdoornav_api_examples_lib.mission import Mission +from clearpath_navigation_msgs.msg import Task, UITaskResult, UITaskAction + + +CUSTOM_ACTION_NAME = "/record_gnss" +UNSPECIFIED_HEADING = -1 + + +class MissionWithCustomTask(RosNode): + """Create and run a mission with 3 waypoints, each of which executes a custom task. + + Our goal is to set up 3 waypoints, then create a mission such that the robot drives + to each waypoint in order. In addition, at each of the waypoints, a custom task will be + called to record the timestamp, goal name, and GPS coordinates. Since this is a custom task, + it is necessary to create an actionlib server to implement the custom task. + + The main component of this example is the mission builder, which builds up the set of goals, + including information on the custom tasks, and runs the mission, to execute the custom task. + + The coordinates used in this example are based on the cpr_agriculture_gazebo + world and should be updated to match the location in which the user's + robot will be operating. + """ + + class MissionBuilder: + """Creates and runs the mission, including custom tasks.""" + + def __init__(self): + """Creates the mission with 3 waypoints and custom tasks.""" + + # First waypoint, with custom task + waypoint_a_name = "A" + custom_task_a = Task() + custom_task_a.name = "my_custom_task_a" # choose any name here + custom_task_a.action_server_name = CUSTOM_ACTION_NAME # must match server name + custom_task_a.version = "1.0" # choose any version + custom_task_a.floats = [1000] # param: unique ID + custom_task_a.strings = [waypoint_a_name] # param: goal name + + # Second waypoint, with custom task + waypoint_b_name = "B" + custom_task_b = Task() + custom_task_b.name = "my_custom_task_b" # choose any name here + custom_task_b.action_server_name = CUSTOM_ACTION_NAME # must match server name + custom_task_b.version = "1.0" # choose any version + custom_task_b.floats = [1001] # param: unique ID + custom_task_b.strings = [waypoint_b_name] # param: goal name + + # Third waypoint, with custom task + waypoint_c_name = "C" + custom_task_c = Task() + custom_task_c.name = "my_custom_task_c" # choose any name here + custom_task_c.action_server_name = CUSTOM_ACTION_NAME # must match server name + custom_task_c.version = "1.0" # choose any version + custom_task_c.floats = [1002] # param: unique ID + custom_task_c.strings = [waypoint_c_name] # param: goal name + + waypoints = [ + Waypoint(waypoint_a_name, "uuid-waypoint-01", 43.50076203007681, -80.546296281104, UNSPECIFIED_HEADING), + Waypoint(waypoint_b_name, "uuid-waypoint-02", 43.50073600330896, -80.54621215801687, UNSPECIFIED_HEADING, [custom_task_b]), + Waypoint(waypoint_c_name, "uuid-waypoint-03", 43.50067256664828, -80.5462159469465, UNSPECIFIED_HEADING, [custom_task_c]), + ] + + # Build mission from two waypoints with custom tasks + self._mission = Mission("Custom task mission", "uuid-mission-1", waypoints) + + def getMission(self): + """Gets a reference to the mission. + + Returns + ------- + A reference to the mission. + """ + return self._mission + + def __init__(self): + """Initializes ROS, the custom task server, GPS subscriber and mission.""" + + RosNode.__init__(self, 'mission_with_custom_task') + self._mission_builder = MissionWithCustomTask.MissionBuilder() + + + def run(self): + """Execute the mission. + + This function blocks until the mission is complete. + + Returns + ------- + True on successful execution of the mission; else False on any error. + """ + + if not self._mission_builder.getMission().startMission(): + return False + while not self._mission_builder.getMission().isMissionComplete(): + rospy.sleep(1.0) + return self._mission_builder.getMission().getMissionSuccess() + + +if __name__ == '__main__': + if MissionWithCustomTask().run(): + print("Mission completed successfully") + else: + print("Mission failed") + rospy.signal_shutdown('Done') +``` + +## The Code Explained + +``` python +import rospy +import actionlib +from cpr_outdoornav_api_examples_lib.ros_node import RosNode +from cpr_outdoornav_api_examples_lib.waypoint import Waypoint +from cpr_outdoornav_api_examples_lib.mission import Mission +from clearpath_navigation_msgs.msg import Task, UITaskResult, UITaskAction +``` + +Import the `RosNode`, `Waypoint` and `Mission` classes which will be used to create the mission to be executed. +We also import the `Task` and `UITask` messages which are used to generate the action servers. + +``` python + class MissionBuilder: + """Creates and runs the mission, including custom tasks.""" + + def __init__(self): + """Creates the mission with 3 waypoints and custom tasks.""" + + # First waypoint, with custom task + waypoint_a_name = "A" + custom_task_a = Task() + custom_task_a.name = "my_custom_task_a" # choose any name here + custom_task_a.action_server_name = CUSTOM_ACTION_NAME # must match server name + custom_task_a.version = "1.0" # choose any version + custom_task_a.floats = [1000] # param: unique ID + custom_task_a.strings = [waypoint_a_name] # param: goal name + + # Second waypoint, with custom task + waypoint_b_name = "B" + custom_task_b = Task() + custom_task_b.name = "my_custom_task_b" # choose any name here + custom_task_b.action_server_name = CUSTOM_ACTION_NAME # must match server name + custom_task_b.version = "1.0" # choose any version + custom_task_b.floats = [1001] # param: unique ID + custom_task_b.strings = [waypoint_b_name] # param: goal name + + # Third waypoint, with custom task + waypoint_c_name = "C" + custom_task_c = Task() + custom_task_c.name = "my_custom_task_c" # choose any name here + custom_task_c.action_server_name = CUSTOM_ACTION_NAME # must match server name + custom_task_c.version = "1.0" # choose any version + custom_task_c.floats = [1002] # param: unique ID + custom_task_c.strings = [waypoint_c_name] # param: goal name + + + waypoints = [ + Waypoint(waypoint_a_name, "uuid-waypoint-01", 50.1095255, -97.3192484, UNSPECIFIED_HEADING, [custom_task_a]), + Waypoint(waypoint_b_name, "uuid-waypoint-02", 50.1094938, -97.3191085, UNSPECIFIED_HEADING, [custom_task_b]), + Waypoint(waypoint_c_name, "uuid-waypoint-03", 50.1094600, -97.3192100, UNSPECIFIED_HEADING, [custom_task_c]), + ] + + # Build mission from two waypoints with custom tasks + self._mission = Mission("Custom task mission", "uuid-mission-1", waypoints) +``` + +We create the `MissionBuilder` subclass that will create the mission to be executed. We initialize custom task objects +where we specify the `action_server_name` field with the specific action of the custom task. These are then added to the +Waypoints as a list of tasks and the Mission object is created. + +``` python + def __init__(self): + """Initializes ROS, the custom task server, GPS subscriber and mission.""" + + RosNode.__init__(self, 'mission_with_custom_task') + self._mission_builder = MissionWithCustomTask.MissionBuilder() +``` + +We initialize the example class by starting a ROS node and initialize the mission to be executed. + +``` python + def run(self): + """Execute the mission. + + This function blocks until the mission is complete. + + Returns + ------- + True on successful execution of the mission; else False on any error. + """ + + if not self._mission_builder.getMission().startMission(): + return False + while not self._mission_builder.getMission().isMissionComplete(): + time.sleep(1.0) + return self._mission_builder.getMission().getMissionSuccess() +``` + +The `run()` function starts the mission and checks for completion. Once complete we terminate the example code. + +``` python +if __name__ == '__main__': + if MissionWithCustomTask().run(): + print("Mission completed successfully") + else: + print("Mission failed") + rospy.signal_shutdown('Done') +``` + +The main python execution block. We first initialize the example class (runs the __init__ function) and then execute the run() function which +executes the mission and outputs the status information. + + diff --git a/outdoornav_user_manual_versioned_docs/version-0.13.0/api/api_examples/monitor_status.mdx b/outdoornav_user_manual_versioned_docs/version-0.13.0/api/api_examples/monitor_status.mdx index 077a9fcf..a6fb416c 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.13.0/api/api_examples/monitor_status.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.13.0/api/api_examples/monitor_status.mdx @@ -1,152 +1,152 @@ ---- -title: Monitor Status -sidebar_label: Monitor Status -sidebar_position: 2 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -## The Code - -``` python -#! /usr/bin/env python3 - -import rospy -from cpr_outdoornav_api_examples_lib.ros_node import RosNode -from cpr_outdoornav_api_examples_lib.waypoint import Waypoint -from cpr_outdoornav_api_examples_lib.mission import Mission -from cpr_outdoornav_api_examples_lib.platform_status import PlatformStatusMonitor -from cpr_outdoornav_api_examples_lib.control_status import ControlStatusMonitor -from cpr_outdoornav_api_examples_lib.localization_status import LocalizationStatusMonitor -from cpr_outdoornav_api_examples_lib.navigation_status import NavigationStatusMonitor - - -class MonitorStatus(RosNode): - """Run a simple mission and report status throughout. - - The coordinates used in this example are based on the cpr_agriculture_gazebo - world and should be updated to match the location in which the user's - robot will be operating. - """ - - def __init__(self): - """Initialize the mission details and server connection.""" - - RosNode.__init__(self, 'monitor_status') - waypoints = [ - Waypoint("A", "uuid-waypoint-1", 50.1094938, -97.3191085), - Waypoint("B", "uuid-waypoint-2", 50.1095100, -97.3192000), - Waypoint("C", "uuid-waypoint-3", 50.1095255, -97.3192484), - ] - self.mission = Mission("Monitor status mission", "uuid-mission-1", waypoints) - self._platform_status = PlatformStatusMonitor() - self._control_status = ControlStatusMonitor() - self._localization_status = LocalizationStatusMonitor() - self._navigation_status = NavigationStatusMonitor() - - def _reportStatus(self): - """Report the current status.""" - - rospy.loginfo("--------------------------------------------------------") - self._platform_status.report() - self._control_status.report() - self._localization_status.report() - self._navigation_status.report() - - def run(self): - """Execute the mission and report status.""" - - if not self.mission.startMission(): - rospy.logerr("Failed to start mission") - return False - while not self.mission.isMissionComplete(): - self._reportStatus() - rospy.sleep(1.0) - return self.mission.getMissionSuccess() - - -if __name__ == '__main__': - if MonitorStatus().run(): - print("Mission completed successfully") - else: - print("Mission failed") - -``` - -## The Code Explained - -``` python -import rospy -from cpr_outdoornav_api_examples_lib.ros_node import RosNode -from cpr_outdoornav_api_examples_lib.waypoint import Waypoint -from cpr_outdoornav_api_examples_lib.mission import Mission -from cpr_outdoornav_api_examples_lib.platform_status import PlatformStatusMonitor -from cpr_outdoornav_api_examples_lib.control_status import ControlStatusMonitor -from cpr_outdoornav_api_examples_lib.localization_status import LocalizationStatusMonitor -from cpr_outdoornav_api_examples_lib.navigation_status import NavigationStatusMonitor -``` - -Import the `RosNode`, `Waypoint`, `Mission` classes which will be used to create the mission to be executed. We also import the -`PlatformStatusMonitor`, `ControlStatusMonitor`, `LocalizationStatusMonitor`, `NavigationStatusMonitor` classes which are set up to monitor the topics -relavant to the platform, localization, contrle selection an navigation modules respectively. - -``` python - waypoints = [ - Waypoint("A", "uuid-waypoint-1", 50.1094938, -97.3191085), - Waypoint("B", "uuid-waypoint-2", 50.1095100, -97.3192000), - Waypoint("C", "uuid-waypoint-3", 50.1095255, -97.3192484), - ] - self.mission = Mission("Monitor status mission", "uuid-mission-1", waypoints) -``` - -After initializing the ROS node, we create a mission manually by first creating a list of Waypoint objects and then adding then using the waypoint list -to construct the Mission object. - -``` python - self._platform_status = PlatformStatusMonitor() - self._control_status = ControlStatusMonitor() - self._localization_status = LocalizationStatusMonitor() - self._navigation_status = NavigationStatusMonitor() -``` - -We then initialize the platform, control, localization and navigation monitors, which subscribes to several API topics. - -``` python - def _reportStatus(self): - """Report the current status.""" - - rospy.loginfo("--------------------------------------------------------") - self._platform_status.report() - self._control_status.report() - self._localization_status.report() - self._navigation_status.report() -``` - -The `_reportStatus()` function outputs the results of the monitors to the ROS logs. This includes both the internal ROS logs as well as terminal output. - -``` python - def run(self): - """Execute the mission and report status.""" - - if not self.mission.startMission(): - rospy.logerr("Failed to start mission") - return False - while not self.mission.isMissionComplete(): - self._reportStatus() - rospy.sleep(1.0) - return self.mission.getMissionSuccess() -``` - -The `run()` function starts the mission and checks for completion. Every seconds we run the `reportStatus()` function to output the status information. -Once complete we terminate the example code. - -``` python -if __name__ == '__main__': - if MonitorStatus().run(): - print("Mission completed successfully") - else: - print("Mission failed") -``` - -The main python execution block. We first initialize the example class (runs the __init__ function) and then execute the run() function which -executes the mission and outputs the status information. +--- +title: Monitor Status +sidebar_label: Monitor Status +sidebar_position: 2 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +## The Code + +``` python +#! /usr/bin/env python3 + +import rospy +from cpr_outdoornav_api_examples_lib.ros_node import RosNode +from cpr_outdoornav_api_examples_lib.waypoint import Waypoint +from cpr_outdoornav_api_examples_lib.mission import Mission +from cpr_outdoornav_api_examples_lib.platform_status import PlatformStatusMonitor +from cpr_outdoornav_api_examples_lib.control_status import ControlStatusMonitor +from cpr_outdoornav_api_examples_lib.localization_status import LocalizationStatusMonitor +from cpr_outdoornav_api_examples_lib.navigation_status import NavigationStatusMonitor + + +class MonitorStatus(RosNode): + """Run a simple mission and report status throughout. + + The coordinates used in this example are based on the cpr_agriculture_gazebo + world and should be updated to match the location in which the user's + robot will be operating. + """ + + def __init__(self): + """Initialize the mission details and server connection.""" + + RosNode.__init__(self, 'monitor_status') + waypoints = [ + Waypoint("A", "uuid-waypoint-1", 50.1094938, -97.3191085), + Waypoint("B", "uuid-waypoint-2", 50.1095100, -97.3192000), + Waypoint("C", "uuid-waypoint-3", 50.1095255, -97.3192484), + ] + self.mission = Mission("Monitor status mission", "uuid-mission-1", waypoints) + self._platform_status = PlatformStatusMonitor() + self._control_status = ControlStatusMonitor() + self._localization_status = LocalizationStatusMonitor() + self._navigation_status = NavigationStatusMonitor() + + def _reportStatus(self): + """Report the current status.""" + + rospy.loginfo("--------------------------------------------------------") + self._platform_status.report() + self._control_status.report() + self._localization_status.report() + self._navigation_status.report() + + def run(self): + """Execute the mission and report status.""" + + if not self.mission.startMission(): + rospy.logerr("Failed to start mission") + return False + while not self.mission.isMissionComplete(): + self._reportStatus() + rospy.sleep(1.0) + return self.mission.getMissionSuccess() + + +if __name__ == '__main__': + if MonitorStatus().run(): + print("Mission completed successfully") + else: + print("Mission failed") + +``` + +## The Code Explained + +``` python +import rospy +from cpr_outdoornav_api_examples_lib.ros_node import RosNode +from cpr_outdoornav_api_examples_lib.waypoint import Waypoint +from cpr_outdoornav_api_examples_lib.mission import Mission +from cpr_outdoornav_api_examples_lib.platform_status import PlatformStatusMonitor +from cpr_outdoornav_api_examples_lib.control_status import ControlStatusMonitor +from cpr_outdoornav_api_examples_lib.localization_status import LocalizationStatusMonitor +from cpr_outdoornav_api_examples_lib.navigation_status import NavigationStatusMonitor +``` + +Import the `RosNode`, `Waypoint`, `Mission` classes which will be used to create the mission to be executed. We also import the +`PlatformStatusMonitor`, `ControlStatusMonitor`, `LocalizationStatusMonitor`, `NavigationStatusMonitor` classes which are set up to monitor the topics +relavant to the platform, localization, contrle selection an navigation modules respectively. + +``` python + waypoints = [ + Waypoint("A", "uuid-waypoint-1", 50.1094938, -97.3191085), + Waypoint("B", "uuid-waypoint-2", 50.1095100, -97.3192000), + Waypoint("C", "uuid-waypoint-3", 50.1095255, -97.3192484), + ] + self.mission = Mission("Monitor status mission", "uuid-mission-1", waypoints) +``` + +After initializing the ROS node, we create a mission manually by first creating a list of Waypoint objects and then adding then using the waypoint list +to construct the Mission object. + +``` python + self._platform_status = PlatformStatusMonitor() + self._control_status = ControlStatusMonitor() + self._localization_status = LocalizationStatusMonitor() + self._navigation_status = NavigationStatusMonitor() +``` + +We then initialize the platform, control, localization and navigation monitors, which subscribes to several API topics. + +``` python + def _reportStatus(self): + """Report the current status.""" + + rospy.loginfo("--------------------------------------------------------") + self._platform_status.report() + self._control_status.report() + self._localization_status.report() + self._navigation_status.report() +``` + +The `_reportStatus()` function outputs the results of the monitors to the ROS logs. This includes both the internal ROS logs as well as terminal output. + +``` python + def run(self): + """Execute the mission and report status.""" + + if not self.mission.startMission(): + rospy.logerr("Failed to start mission") + return False + while not self.mission.isMissionComplete(): + self._reportStatus() + rospy.sleep(1.0) + return self.mission.getMissionSuccess() +``` + +The `run()` function starts the mission and checks for completion. Every seconds we run the `reportStatus()` function to output the status information. +Once complete we terminate the example code. + +``` python +if __name__ == '__main__': + if MonitorStatus().run(): + print("Mission completed successfully") + else: + print("Mission failed") +``` + +The main python execution block. We first initialize the example class (runs the __init__ function) and then execute the run() function which +executes the mission and outputs the status information. diff --git a/outdoornav_user_manual_versioned_docs/version-0.13.0/api/api_overview.mdx b/outdoornav_user_manual_versioned_docs/version-0.13.0/api/api_overview.mdx index d9c6d616..1bcb0ad9 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.13.0/api/api_overview.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.13.0/api/api_overview.mdx @@ -1,63 +1,63 @@ ---- -title: API Overview -sidebar_label: API Overview -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -While the Web User Interface provides a great way to get started quickly -with OutdoorNav Software, some users will want programmatic control or -may wish to develop their own graphical user interfaces \-- for those -users, the Application Programming Interface (API) provides the -flexibility to do so. This is illustrated in the figure below. - -
-
- -
Interconnection between OutdoorNav Software and UGV Controller
-
-
- -The API is, at present, a [ROS 1 Noetic](http://wiki.ros.org/noetic) API, -but will soon be extended to a ROS 2 API. The API is divided into two -sections, whose details are provided below: - -- [Platform API](api_endpoints/platform_api.mdx): The set of [ROS - Topics](http://wiki.ros.org/Topics) are used to comminucate with the - hardware platform (eg. sensor data, wireless, battery state, command - velocity). This API can be used by autonomy software packages to - interface with the hardware platform. - - [Topics Published by UGV](api_endpoints/platform_api.mdx#topics-published-by-platform): - The set of topics that are published by the hardware platform. - - [Topics Subscribed to by UGV](api_endpoints/platform_api.mdx#topics-subscribed-by-platform): - The set of topics that are subscribed to by the hardware - platform. -- [Autonomy API](api_endpoints/autonomy_api.mdx): The set of [ROS - Topics](http://wiki.ros.org/Topics) that are used for monitoring and - controlling the the hardware platform through the OutdoorNav - autonomy software. - - [Topics Published by Autonomy](api_endpoints/autonomy_api.mdx#topics-published-by-autonomy): - The set of [ROS Topics](http://wiki.ros.org/Topics) published by - OutdoorNav Software, to be subscribed to by the UGV. - - [Topics Subscribed to by Autonomy](api_endpoints/autonomy_api.mdx#topics-subscribed-to-by-autonomy): - The set of [ROS Topics](http://wiki.ros.org/Topics) - subscribed to by OutdoorNav Software, typically published by the - client for directing OutdoorNav operation. - - [Services Exported by Autonomy](api_endpoints/autonomy_api.mdx#services-exported-by-autonomy): - The set of [ROS Services](http://wiki.ros.org/Services) provided - by OutdoorNav Software, for use by the client to modify/control - the behaviour of the Autonomy. - - [Actions Exported by Autonomy](api_endpoints/autonomy_api.mdx#actions-exported-by-autonomy): - The set of [ROS Actions](http://wiki.ros.org/actionlib) provided - by OutdoorNav Software, for use by the client to modify/control - the behaviour of the Autonomy. -- [Mission Manager API](api_endpoints/mission_manager_api.mdx): The set of [ROS - Services](http://wiki.ros.org/Services) that are used for creating, deleting, and modifying OutdoorNav Missions -- [Mission Scheduler API](api_endpoints/mission_scheduler_api.mdx): The set of [ROS Services](http://wiki.ros.org/Services) - that are used for creating, deleting, and modifying OutdoorNav Mission Schedules -- [Definitions](api_endpoints/definitions.mdx): The set of custom - [ROS Message](http://wiki.ros.org/Messages), [ROS - Service](http://wiki.ros.org/Services), and [ROS - Action](http://wiki.ros.org/actionlib) definitions. -- API Examples: Example code to come. +--- +title: API Overview +sidebar_label: API Overview +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +While the Web User Interface provides a great way to get started quickly +with OutdoorNav Software, some users will want programmatic control or +may wish to develop their own graphical user interfaces \-- for those +users, the Application Programming Interface (API) provides the +flexibility to do so. This is illustrated in the figure below. + +
+
+ +
Interconnection between OutdoorNav Software and UGV Controller
+
+
+ +The API is, at present, a [ROS 1 Noetic](http://wiki.ros.org/noetic) API, +but will soon be extended to a ROS 2 API. The API is divided into two +sections, whose details are provided below: + +- [Platform API](api_endpoints/platform_api.mdx): The set of [ROS + Topics](http://wiki.ros.org/Topics) are used to comminucate with the + hardware platform (eg. sensor data, wireless, battery state, command + velocity). This API can be used by autonomy software packages to + interface with the hardware platform. + - [Topics Published by UGV](api_endpoints/platform_api.mdx#topics-published-by-platform): + The set of topics that are published by the hardware platform. + - [Topics Subscribed to by UGV](api_endpoints/platform_api.mdx#topics-subscribed-by-platform): + The set of topics that are subscribed to by the hardware + platform. +- [Autonomy API](api_endpoints/autonomy_api.mdx): The set of [ROS + Topics](http://wiki.ros.org/Topics) that are used for monitoring and + controlling the the hardware platform through the OutdoorNav + autonomy software. + - [Topics Published by Autonomy](api_endpoints/autonomy_api.mdx#topics-published-by-autonomy): + The set of [ROS Topics](http://wiki.ros.org/Topics) published by + OutdoorNav Software, to be subscribed to by the UGV. + - [Topics Subscribed to by Autonomy](api_endpoints/autonomy_api.mdx#topics-subscribed-to-by-autonomy): + The set of [ROS Topics](http://wiki.ros.org/Topics) + subscribed to by OutdoorNav Software, typically published by the + client for directing OutdoorNav operation. + - [Services Exported by Autonomy](api_endpoints/autonomy_api.mdx#services-exported-by-autonomy): + The set of [ROS Services](http://wiki.ros.org/Services) provided + by OutdoorNav Software, for use by the client to modify/control + the behaviour of the Autonomy. + - [Actions Exported by Autonomy](api_endpoints/autonomy_api.mdx#actions-exported-by-autonomy): + The set of [ROS Actions](http://wiki.ros.org/actionlib) provided + by OutdoorNav Software, for use by the client to modify/control + the behaviour of the Autonomy. +- [Mission Manager API](api_endpoints/mission_manager_api.mdx): The set of [ROS + Services](http://wiki.ros.org/Services) that are used for creating, deleting, and modifying OutdoorNav Missions +- [Mission Scheduler API](api_endpoints/mission_scheduler_api.mdx): The set of [ROS Services](http://wiki.ros.org/Services) + that are used for creating, deleting, and modifying OutdoorNav Mission Schedules +- [Definitions](api_endpoints/definitions.mdx): The set of custom + [ROS Message](http://wiki.ros.org/Messages), [ROS + Service](http://wiki.ros.org/Services), and [ROS + Action](http://wiki.ros.org/actionlib) definitions. +- API Examples: Example code to come. diff --git a/outdoornav_user_manual_versioned_docs/version-0.13.0/customized_tuning/sensor_customization.mdx b/outdoornav_user_manual_versioned_docs/version-0.13.0/customized_tuning/sensor_customization.mdx index 9d9f115a..f2cce53a 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.13.0/customized_tuning/sensor_customization.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.13.0/customized_tuning/sensor_customization.mdx @@ -1,9 +1,9 @@ ---- -title: "Sensor Customization" -sidebar_label: "Sensor Customization" -sidebar_position: 4 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -Information incoming in a future release. Please contact Clearpath customer support at \ to discuss any related issue. +--- +title: "Sensor Customization" +sidebar_label: "Sensor Customization" +sidebar_position: 4 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +Information incoming in a future release. Please contact Clearpath customer support at \ to discuss any related issue. diff --git a/outdoornav_user_manual_versioned_docs/version-0.13.0/customized_tuning/tuning_instructions/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.13.0/customized_tuning/tuning_instructions/_category_.json index d62e291a..4b3e7b59 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.13.0/customized_tuning/tuning_instructions/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.13.0/customized_tuning/tuning_instructions/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Tuning Instructions", - "position": 2 -} +{ + "label": "Tuning Instructions", + "position": 2 +} diff --git a/outdoornav_user_manual_versioned_docs/version-0.13.0/customized_tuning/tuning_instructions/ackermann_drive_dynamics.mdx b/outdoornav_user_manual_versioned_docs/version-0.13.0/customized_tuning/tuning_instructions/ackermann_drive_dynamics.mdx index 51639337..0125d8dd 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.13.0/customized_tuning/tuning_instructions/ackermann_drive_dynamics.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.13.0/customized_tuning/tuning_instructions/ackermann_drive_dynamics.mdx @@ -1,9 +1,9 @@ ---- -title: "Ackermann Drive" -sidebar_label: "Ackermann Drive" -sidebar_position: 4 -toc_min_heading_level: 2 -toc_max_heading_level: 2 ---- - -Information incoming in release 0.10.0. Please contact Clearpath customer support at support@clearpathrobotics.com to discuss any related issue. +--- +title: "Ackermann Drive" +sidebar_label: "Ackermann Drive" +sidebar_position: 4 +toc_min_heading_level: 2 +toc_max_heading_level: 2 +--- + +Information incoming in release 0.10.0. Please contact Clearpath customer support at support@clearpathrobotics.com to discuss any related issue. diff --git a/outdoornav_user_manual_versioned_docs/version-0.13.0/customized_tuning/tuning_instructions/footprint_tuning.mdx b/outdoornav_user_manual_versioned_docs/version-0.13.0/customized_tuning/tuning_instructions/footprint_tuning.mdx index 4b90f600..6b105ecb 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.13.0/customized_tuning/tuning_instructions/footprint_tuning.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.13.0/customized_tuning/tuning_instructions/footprint_tuning.mdx @@ -1,9 +1,9 @@ ---- -title: "Footprint Tuning" -sidebar_label: "Footprint Tuning" -sidebar_position: 5 -toc_min_heading_level: 2 -toc_max_heading_level: 2 ---- - -Information incoming in release 0.9.0. Please contact Clearpath customer support at \ to discuss any related issue. +--- +title: "Footprint Tuning" +sidebar_label: "Footprint Tuning" +sidebar_position: 5 +toc_min_heading_level: 2 +toc_max_heading_level: 2 +--- + +Information incoming in release 0.9.0. Please contact Clearpath customer support at \ to discuss any related issue. diff --git a/outdoornav_user_manual_versioned_docs/version-0.13.0/customized_tuning/tuning_overview.mdx b/outdoornav_user_manual_versioned_docs/version-0.13.0/customized_tuning/tuning_overview.mdx index 851df29b..77fbabeb 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.13.0/customized_tuning/tuning_overview.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.13.0/customized_tuning/tuning_overview.mdx @@ -1,25 +1,25 @@ ---- -title: "Tuning Overview" -sidebar_label: "Tuning Overview" -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -The scope of Appendix C is to provide information on how to tune the various components of -OutdoorNav. - -Instructions for tuning specific platform types can be found here: - -- [Differential Drive (Skid-Steer) Dynamics](tuning_instructions/differential_drive_dynamics.mdx) -- [Ackermann Drive Dynamics](tuning_instructions/ackermann_drive_dynamics.mdx) - - -Lists of parameters related to each component of the autonomy can be found here: - -- [Localization Parameters](tuning_parameters/localization_parameters.mdx) -- [Navigation Parameters](tuning_parameters/navigation_parameters.mdx) -- [Collision Avoidance Parameters](tuning_parameters/collision_avoidance_parameters.mdx) - -In future releases, we will describe how the user can [Customize their UI](user_interface_customization.mdx) +--- +title: "Tuning Overview" +sidebar_label: "Tuning Overview" +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +The scope of Appendix C is to provide information on how to tune the various components of +OutdoorNav. + +Instructions for tuning specific platform types can be found here: + +- [Differential Drive (Skid-Steer) Dynamics](tuning_instructions/differential_drive_dynamics.mdx) +- [Ackermann Drive Dynamics](tuning_instructions/ackermann_drive_dynamics.mdx) + + +Lists of parameters related to each component of the autonomy can be found here: + +- [Localization Parameters](tuning_parameters/localization_parameters.mdx) +- [Navigation Parameters](tuning_parameters/navigation_parameters.mdx) +- [Collision Avoidance Parameters](tuning_parameters/collision_avoidance_parameters.mdx) + +In future releases, we will describe how the user can [Customize their UI](user_interface_customization.mdx) as well as how to [Customize which Sensors](sensor_customization.mdx) are input into OutdoorNav. \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.13.0/customized_tuning/tuning_parameters/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.13.0/customized_tuning/tuning_parameters/_category_.json index fb6592a9..0e2dc60a 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.13.0/customized_tuning/tuning_parameters/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.13.0/customized_tuning/tuning_parameters/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Tuning Parameters", - "position": 3 -} +{ + "label": "Tuning Parameters", + "position": 3 +} diff --git a/outdoornav_user_manual_versioned_docs/version-0.13.0/customized_tuning/tuning_parameters/navigation_parameters.mdx b/outdoornav_user_manual_versioned_docs/version-0.13.0/customized_tuning/tuning_parameters/navigation_parameters.mdx index b88562a4..d4a2b559 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.13.0/customized_tuning/tuning_parameters/navigation_parameters.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.13.0/customized_tuning/tuning_parameters/navigation_parameters.mdx @@ -1,169 +1,169 @@ ---- -title: "Navigation Parameters" -sidebar_label: "Navigation Parameters" -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 3 ---- - -import versions from "@site/static/versions.js" - -## Controllers {#controllers} - -### Determine the file location of the parameter {#file_location} - -The parameters related to the controller, can be found here: - -``` bash -/opt/onav//app/autonomy/params//navigation/controls_general.yaml -/opt/onav//app/autonomy/params//navigation/mpc_controller.yaml -/opt/onav//app/autonomy/params//navigation/mpc_dock_controller.yaml -``` - -If they are not listed in the above file, it is because they are using the default values and are not being overwritten. - -### MPC Controller {#controller} - -#### MBF Plugins - -Currently we have implemented a Move-Base Flex controller plugin named: **OnavMbfMpcController** - -Two instances of this plugin are loaded at runtime by our navigation node (as seen in the table below). The parameters are equivalent for each instance of the plugin but the values of certain of these parameters are different. - -| Controller name | Description | -|-----------------|-------------| -| **`mpc_controller`** | The controller used during normal navigation and applies to tracking the paths generated between all the mission waypoints. | -| **`mpc_dock_controller`** | The controller used during docking and applies only to tracking the dock and undock paths. | - -#### MPC State Machine - -The MPC controller operates as a state machine that contains the following states: - -| MPC State | Description | Condition | -|-----------|-------------|-----------| -| **`DEFAULT`** | Standard tracking behavior. | Will revert to this state if none of the other state conditions are met. | -| **`GOAL`** | Tracking behavior as the UGV approaches the goal. | Will enter GOAL mode when the `goal_horizon_threshold` parameter distance to the goal has been reached.| -| **`PRECISE`** | State when more precision is required in the tracking. | At the start of the path, we begin in Precise mode to ensure that we have a good start to tracking.| -| **`RESCUE`** | State to rescue the tracker when the UGV is stuck. | Will enter RESCUE mode when UGV is appraching a condition that make it stuck.| -| **`HYSTERESIS`** | State when you the UGV requires compensation for tire flexion. | Will enter HYSTERESIS mode when the UGV detects that it will begin oscillating due to tire deformation. | -| **`CORNER`** | State when there is a curve or a corner ahead. | Will enter CORNER mode when the UGV approaches, within a `corner_lookahead` parameter distance, to a corner with at least `corner_detection_threshold` of a curvature.| - -#### Default State Parameters {#default_state_params} - -The following list defines the default parameters that the MPC controller uses. -For the most part, they apply to all states of the MPC controller. - -| Parameter | Description | Namespace | SI Units | -|-----------|-------------|-----------|:--------:| -| `vehicle_length` | The length (longitudinally) of the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | -| `mpc_horizon` | The prediction horizon of the MPC. | [/navigation/*<controller>*/path_tracker](#file_location) | **s** | -| `max_lookahead` | Maximum distance along the path we seek to follow. Affects how far we do collision checks as well as the maximum velocity of the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | -| `min_lookahead` | Minimum distance along the path we seek to follow. Affects how far we do collision checks as well as the maximum velocity of the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | -| `lookahead_smoother` | Factor between 0 and 1 that determines the smoothness of the change in lookahead distance: 0 means only maximum velocity is used to determine the horizon (can be jumpy but speeds up the UGV faster); 1 means only averaged planned velocity is used to determine the horizon (smoother but speeds up the UGV slowly). | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `lookahead_factor` | How aggressively do we want to increase the lookahead from min_lookahead to max_lookahead | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `mpc_opt_maxiteration` | The maximum number of iterations that the solver will run. Increase this value for better performance, decrease for shorter computation time. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `discretization_steps` | Number of grid points along the MPC prediction; Lower: less accuracy, but faster | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `max_fwd_velocity` | The maximum allowable linear velocity that the MPC controller can compute. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | -| `min_fwd_velocity` | The minimum allowable linear velocity, in any mode, that the MPC controller can compute. This can be used to overcome the different deadbands that different UGVs may have. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | -| `max_rev_velocity` | The maximum allowable reverse linear velocity (ie. positive value), in any mode, that the MPC controller can compute. By default this is set to the `max_fwd_velocity`, so only needed if your maximum linear reverse velocity is different than the forward linear velocity.| [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | -| `max_ang_velocity` | The maximum allowable angular velocity, in any mode, that the MPC controller can compute. This parameter bounds both positive and negative angular velocities. | [/navigation/*<controller>*/path_tracker](#file_location) | **rad/s** | -| `max_accel` | The maximum allowable linear acceleration, in normal navigation mode, that the MPC controller can compute. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s/s** | -| `max_decel` | The maximum allowable linear deceleration (ie. negative value), in any mode, that the MPC controller can compute. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s/s** | -| `max_ang_accel` | The maximum allowable angular acceleration, in any mode, that the MPC controller can compute. This parameter bounds both positive and negative angular accelerations. | [/navigation/*<controller>*/path_tracker](#file_location) | **rad/s/s** | -| `max_lateral_accel` | The maximum allowable lateral acceleration, in any mode, that the MPC controller can compute. This parameter bounds both positive and negative lateral accelerations. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s/s** | -| `stiction_compensator_fwd` | The minimum linear velocity for movement of the UGV. This should typically be the minimum linear velocity that the UGV requires for it to move. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | -| `stiction_compensator_yaw` | The minimum angular velocity for movement of the UGV. This should typically be the minimum angular velocity that the UGV requires for it to move. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | -| `x_weight` | Weight for state x in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `y_weight` | Weight for state y in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `yaw_weight` | Weight for state yaw in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `fwd_v_weight` | Weight for state ẋ (forward velocity) in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `yaw_d_weight` | Weight for state (yaw velocity) in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `fwd_a_weight` | Weight for state ẍ (forward acceleration) in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `yaw_a_weight` | Weight for state (yaw acceleration) in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `horizon_percent_change` | The percentage factor used when shortening the MPC horizon. This will affect how quickly we want to speed up after a curvature slowdown. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `error_slowdown_multiplier` | The amount by which to increase the MPC horizon based on the crosstrack and/or heading error. This should be greater than 1.0 since increasing the MPC horizon will decrease the maximum MPC velocity. ** Less than 1.0 will result in the opposite behaviour which is not the expected behaviour for this parameter. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `crosstrackerror_slowdown` | Threshold on the amount of crosstrack error, above which to a slowdown the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `headingerror_slowdown` | Threshold on the amount of heading error, above which to a slowdown the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `curvature_slowdown` | Threshold on the path curvature, above which to a slowdown the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `endpoint_multiplier` | Weight multiplier of the very last point along the local plan segment in MPC state: DEFAULT. This value ensures convergence/stability of the optimizer by mimicking the MPCs infinite horizon by applying a terminal cost. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `shrinking_horizon_min` | The minimum horizon that will be used in the computation. This value will prevent the horizon from dropping below this value during all the horizon adjustments. | [/navigation/*<controller>*/path_tracker](#file_location) | **s** | -| `crosstrack_tolerance` | The amount of lateral error that the controller will handle before stopping the UGV and replanning a new path. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | -| `reference_trajectory_factor` | A factor that will skew the path parameter. This value should be between 0 and 1. Values closer to 0.0 will skew the path param closer to the UGV, decreasing speed but increasing the accuracy of the path tracking, and vice versa as you approach 1.0. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | - -#### Goal State Parameters {#goal_state_params} - -The following parameters can be modified to tune the controller as it approaches -the goal point as well as its behavior around the goal point. - -| Parameter | Description | Namespace | SI Units | -|-----------|-------------|-----------|:--------:| -| `goal_horizon_threshold` | The distance from the goal point which the MPC state will switch into state: GOAL , and begin reducing the horizon accordingly. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | -| `goal_slowdown_multiplier` | The multiplier by which to increase the MPC horizon during the MPCs GOAL state in order to slow the UGV down from its top speed. This value should be greater than 1.0. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `max_speed_at_goal` | The maximum allowable speed at the goal point for the controller to stop and consider the goal complete. On OEM UGVs, this value should be increased. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | -| `x_weight_goal` | Weight for state x in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `y_weight_goal` | Weight for state y in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `yaw_weight_goal` | Weight for state yaw in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `fwd_v_weight_goal` | Weight for state ẋ (forward velocity) in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `yaw_d_weight_goal` | Weight for state (yaw velocity) in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `fwd_a_weight_goal` | Weight for state ẍ (forward acceleration) in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `yaw_a_weight_goal` | Weight for state (yaw acceleration) in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `endpoint_multiplier_goal` | Weight multiplier of the very last point along the local plan segment in MPC state: GOAL. This value ensures convergence/stability of the optimizer by mimicking the MPCs infinite horizon by applying a terminal cost. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `goal_tolerance_xy_rtk` | The (x, y) tolerance value (ie. radius) assigned to a goal, when RTK is enabled, in order to determine whether or not to consider the goal complete. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | -| `goal_tolerance_yaw_rtk` | The yaw tolerance value (ie. heading) assigned to a goal, when RTK is enabled, in order to determine whether or not to consider the goal complete. | [/navigation/*<controller>*/path_tracker](#file_location) | **rad** | -| `goal_tolerance_xy_nortk` | The (x, y) tolerance value (ie. radius) assigned to a goal, when RTK is disabled, in order to determine whether or not to consider the goal complete. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | -| `goal_tolerance_yaw_nortk` | The yaw tolerance value (ie. heading) assigned to a goal, when RTK is disabled, in order to determine whether or not to consider the goal complete. | [/navigation/*<controller>*/path_tracker](#file_location) | **rad** | - -#### Corner State Parameters {#corner_state_params} - -The following parameters can be modified to tune the behavior of the controller during and as it -as it approaches corners. - -| Parameter | Description | Namespace | SI Units | -|-----------|-------------|-----------|:--------:| -| `corner_segment_slowdown` | Flag to enable/disable the slowdown behaviour in MPC state: CORNER | [/navigation/*<controller>*/path_tracker](#file_location)| **bool** | -| `corner_lookahead` | The distance on the reference path from the UGVs current location, along which to determine if a corner is present. If a corner is present the MPC state will switch to CORNER state and begin reducing the horizon accordingly. | [/navigation/*<controller>*/path_tracker](#file_location)| **m** | -| `corner_detection_threshold` | Threshold on the path curvature, between the UGVs current location and the end of the corner_lookahead distance, above which to switch the MPC in state: CORNER, and begin reducing the horizon accordingly. | [/navigation/*<controller>*/path_tracker](#file_location)| **rad** | -| `corner_slowdown_multiplier` | The multiplier by which to increase the MPC horizon during the MPCs CORNER state in order to slow the UGV down from its top speed. This value should be greater than 1.0. | [/navigation/*<controller>*/path_tracker](#file_location)| **--** | -| `endpoint_multiplier_corner` | Weight multiplier of the very last point along the local plan segment in MPC state: CORNER. This value ensures convergence/stability of the optimizer by mimicking the MPCs infinite horizon by applying a terminal cost. | [/navigation/*<controller>*/path_tracker](#file_location)| **--** | - -#### OEM Specific Parameters {#oem_tuning_params} - -When tuning the controller on a third-party OEM UGV, there are several other considerations -that we will not have taken into account during the tuning of our UGVs. Below, we define -parameters that may be modified to tune the controller for your third-party OEM UGV. - -##### UGV Dynamics {#platform_dynamics_params} - -The following parameters can be used to modify the dynamics model that the contrller uses to -compute command velocities. - -| Parameter | Description | Namespace | SI Units | -|-----------|-------------|-----------|:--------:| -| `no_turn_on_spot_motion` | Flag to enable/disable turn on spot motion. By default, the MPC motion model is represented by a differential drive kinematics. This parameter will modify the MPC motion model to remove turn in place motions and bias the motion in the forward direction. | [/navigation/*<controller>*/path_tracker](#file_location) | - | -| `min_fwd_turn` | | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `pivot_point_offset_x` | The longitudinal offset that can be applied to the MPC model in order to account for a particular UGVs center of rotation | [/navigation/*<controller>*/path_tracker](#file_location) | - | -| `pivot_point_offset_y` | The lateral offset that can be applied to the MPC model in order to account for a particular UGVs center of rotation | [/navigation/*<controller>*/path_tracker](#file_location) | - | -| `min_fwd_turn` | | [/navigation/*<controller>*/path_tracker](#file_location) | **--**| - -##### Delay Compensation {#delay_compensation_params} - -The following parameters can be used to compensate for any delays that are present in the system. - -| Parameter | Description | Namespace | SI Units | -|-----------|-------------|-----------|:--------:| -| `enable_delay_compensation` | A boolean flag to enable/disable the delay compensation feature. The delay compensation feature is used to compensate for low-level dynamics delays that may be present in the UGV to be controlled. The user can apply an input controller delay and the feature will compute command velocities that compensate for such a delay. | [/navigation/*<controller>*/path_tracker](#file_location) | **bool** | -| `controller_delay` | The amount of controller delay that the delay compensation feature will attempt to compensate for, in ms. | [/navigation/*<controller>*/path_tracker](#file_location) | **ms** | - -##### Stop Distance {#stop_distance_params} - -The following parameters can be used to set a specific stop distance away from obstacles. - -| Parameter | Description | Namespace | SI Units | -|-----------|-------------|-----------|:--------:| -| `enable_stop_distance` | A flag to use enable/disable the stop distance feature. The stop distance feature forces the UGV to stop a specified distance in front of obstacles. | [/navigation/*<controller>*/path_tracker](#file_location) | **bool** | -| `obstacle_stop_distance` | The distance at which the UGV will stop in front of a detected obstacle. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | - - -## Path Planners {#path_planners} - -Information incoming in release 0.9. Please contact Clearpath customer support at \ to discuss the issue. +--- +title: "Navigation Parameters" +sidebar_label: "Navigation Parameters" +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 3 +--- + +import versions from "@site/static/versions.js" + +## Controllers {#controllers} + +### Determine the file location of the parameter {#file_location} + +The parameters related to the controller, can be found here: + +``` bash +/opt/onav//app/autonomy/params//navigation/controls_general.yaml +/opt/onav//app/autonomy/params//navigation/mpc_controller.yaml +/opt/onav//app/autonomy/params//navigation/mpc_dock_controller.yaml +``` + +If they are not listed in the above file, it is because they are using the default values and are not being overwritten. + +### MPC Controller {#controller} + +#### MBF Plugins + +Currently we have implemented a Move-Base Flex controller plugin named: **OnavMbfMpcController** + +Two instances of this plugin are loaded at runtime by our navigation node (as seen in the table below). The parameters are equivalent for each instance of the plugin but the values of certain of these parameters are different. + +| Controller name | Description | +|-----------------|-------------| +| **`mpc_controller`** | The controller used during normal navigation and applies to tracking the paths generated between all the mission waypoints. | +| **`mpc_dock_controller`** | The controller used during docking and applies only to tracking the dock and undock paths. | + +#### MPC State Machine + +The MPC controller operates as a state machine that contains the following states: + +| MPC State | Description | Condition | +|-----------|-------------|-----------| +| **`DEFAULT`** | Standard tracking behavior. | Will revert to this state if none of the other state conditions are met. | +| **`GOAL`** | Tracking behavior as the UGV approaches the goal. | Will enter GOAL mode when the `goal_horizon_threshold` parameter distance to the goal has been reached.| +| **`PRECISE`** | State when more precision is required in the tracking. | At the start of the path, we begin in Precise mode to ensure that we have a good start to tracking.| +| **`RESCUE`** | State to rescue the tracker when the UGV is stuck. | Will enter RESCUE mode when UGV is appraching a condition that make it stuck.| +| **`HYSTERESIS`** | State when you the UGV requires compensation for tire flexion. | Will enter HYSTERESIS mode when the UGV detects that it will begin oscillating due to tire deformation. | +| **`CORNER`** | State when there is a curve or a corner ahead. | Will enter CORNER mode when the UGV approaches, within a `corner_lookahead` parameter distance, to a corner with at least `corner_detection_threshold` of a curvature.| + +#### Default State Parameters {#default_state_params} + +The following list defines the default parameters that the MPC controller uses. +For the most part, they apply to all states of the MPC controller. + +| Parameter | Description | Namespace | SI Units | +|-----------|-------------|-----------|:--------:| +| `vehicle_length` | The length (longitudinally) of the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | +| `mpc_horizon` | The prediction horizon of the MPC. | [/navigation/*<controller>*/path_tracker](#file_location) | **s** | +| `max_lookahead` | Maximum distance along the path we seek to follow. Affects how far we do collision checks as well as the maximum velocity of the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | +| `min_lookahead` | Minimum distance along the path we seek to follow. Affects how far we do collision checks as well as the maximum velocity of the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | +| `lookahead_smoother` | Factor between 0 and 1 that determines the smoothness of the change in lookahead distance: 0 means only maximum velocity is used to determine the horizon (can be jumpy but speeds up the UGV faster); 1 means only averaged planned velocity is used to determine the horizon (smoother but speeds up the UGV slowly). | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `lookahead_factor` | How aggressively do we want to increase the lookahead from min_lookahead to max_lookahead | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `mpc_opt_maxiteration` | The maximum number of iterations that the solver will run. Increase this value for better performance, decrease for shorter computation time. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `discretization_steps` | Number of grid points along the MPC prediction; Lower: less accuracy, but faster | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `max_fwd_velocity` | The maximum allowable linear velocity that the MPC controller can compute. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | +| `min_fwd_velocity` | The minimum allowable linear velocity, in any mode, that the MPC controller can compute. This can be used to overcome the different deadbands that different UGVs may have. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | +| `max_rev_velocity` | The maximum allowable reverse linear velocity (ie. positive value), in any mode, that the MPC controller can compute. By default this is set to the `max_fwd_velocity`, so only needed if your maximum linear reverse velocity is different than the forward linear velocity.| [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | +| `max_ang_velocity` | The maximum allowable angular velocity, in any mode, that the MPC controller can compute. This parameter bounds both positive and negative angular velocities. | [/navigation/*<controller>*/path_tracker](#file_location) | **rad/s** | +| `max_accel` | The maximum allowable linear acceleration, in normal navigation mode, that the MPC controller can compute. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s/s** | +| `max_decel` | The maximum allowable linear deceleration (ie. negative value), in any mode, that the MPC controller can compute. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s/s** | +| `max_ang_accel` | The maximum allowable angular acceleration, in any mode, that the MPC controller can compute. This parameter bounds both positive and negative angular accelerations. | [/navigation/*<controller>*/path_tracker](#file_location) | **rad/s/s** | +| `max_lateral_accel` | The maximum allowable lateral acceleration, in any mode, that the MPC controller can compute. This parameter bounds both positive and negative lateral accelerations. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s/s** | +| `stiction_compensator_fwd` | The minimum linear velocity for movement of the UGV. This should typically be the minimum linear velocity that the UGV requires for it to move. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | +| `stiction_compensator_yaw` | The minimum angular velocity for movement of the UGV. This should typically be the minimum angular velocity that the UGV requires for it to move. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | +| `x_weight` | Weight for state x in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `y_weight` | Weight for state y in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `yaw_weight` | Weight for state yaw in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `fwd_v_weight` | Weight for state ẋ (forward velocity) in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `yaw_d_weight` | Weight for state (yaw velocity) in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `fwd_a_weight` | Weight for state ẍ (forward acceleration) in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `yaw_a_weight` | Weight for state (yaw acceleration) in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `horizon_percent_change` | The percentage factor used when shortening the MPC horizon. This will affect how quickly we want to speed up after a curvature slowdown. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `error_slowdown_multiplier` | The amount by which to increase the MPC horizon based on the crosstrack and/or heading error. This should be greater than 1.0 since increasing the MPC horizon will decrease the maximum MPC velocity. ** Less than 1.0 will result in the opposite behaviour which is not the expected behaviour for this parameter. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `crosstrackerror_slowdown` | Threshold on the amount of crosstrack error, above which to a slowdown the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `headingerror_slowdown` | Threshold on the amount of heading error, above which to a slowdown the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `curvature_slowdown` | Threshold on the path curvature, above which to a slowdown the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `endpoint_multiplier` | Weight multiplier of the very last point along the local plan segment in MPC state: DEFAULT. This value ensures convergence/stability of the optimizer by mimicking the MPCs infinite horizon by applying a terminal cost. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `shrinking_horizon_min` | The minimum horizon that will be used in the computation. This value will prevent the horizon from dropping below this value during all the horizon adjustments. | [/navigation/*<controller>*/path_tracker](#file_location) | **s** | +| `crosstrack_tolerance` | The amount of lateral error that the controller will handle before stopping the UGV and replanning a new path. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | +| `reference_trajectory_factor` | A factor that will skew the path parameter. This value should be between 0 and 1. Values closer to 0.0 will skew the path param closer to the UGV, decreasing speed but increasing the accuracy of the path tracking, and vice versa as you approach 1.0. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | + +#### Goal State Parameters {#goal_state_params} + +The following parameters can be modified to tune the controller as it approaches +the goal point as well as its behavior around the goal point. + +| Parameter | Description | Namespace | SI Units | +|-----------|-------------|-----------|:--------:| +| `goal_horizon_threshold` | The distance from the goal point which the MPC state will switch into state: GOAL , and begin reducing the horizon accordingly. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | +| `goal_slowdown_multiplier` | The multiplier by which to increase the MPC horizon during the MPCs GOAL state in order to slow the UGV down from its top speed. This value should be greater than 1.0. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `max_speed_at_goal` | The maximum allowable speed at the goal point for the controller to stop and consider the goal complete. On OEM UGVs, this value should be increased. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | +| `x_weight_goal` | Weight for state x in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `y_weight_goal` | Weight for state y in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `yaw_weight_goal` | Weight for state yaw in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `fwd_v_weight_goal` | Weight for state ẋ (forward velocity) in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `yaw_d_weight_goal` | Weight for state (yaw velocity) in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `fwd_a_weight_goal` | Weight for state ẍ (forward acceleration) in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `yaw_a_weight_goal` | Weight for state (yaw acceleration) in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `endpoint_multiplier_goal` | Weight multiplier of the very last point along the local plan segment in MPC state: GOAL. This value ensures convergence/stability of the optimizer by mimicking the MPCs infinite horizon by applying a terminal cost. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `goal_tolerance_xy_rtk` | The (x, y) tolerance value (ie. radius) assigned to a goal, when RTK is enabled, in order to determine whether or not to consider the goal complete. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | +| `goal_tolerance_yaw_rtk` | The yaw tolerance value (ie. heading) assigned to a goal, when RTK is enabled, in order to determine whether or not to consider the goal complete. | [/navigation/*<controller>*/path_tracker](#file_location) | **rad** | +| `goal_tolerance_xy_nortk` | The (x, y) tolerance value (ie. radius) assigned to a goal, when RTK is disabled, in order to determine whether or not to consider the goal complete. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | +| `goal_tolerance_yaw_nortk` | The yaw tolerance value (ie. heading) assigned to a goal, when RTK is disabled, in order to determine whether or not to consider the goal complete. | [/navigation/*<controller>*/path_tracker](#file_location) | **rad** | + +#### Corner State Parameters {#corner_state_params} + +The following parameters can be modified to tune the behavior of the controller during and as it +as it approaches corners. + +| Parameter | Description | Namespace | SI Units | +|-----------|-------------|-----------|:--------:| +| `corner_segment_slowdown` | Flag to enable/disable the slowdown behaviour in MPC state: CORNER | [/navigation/*<controller>*/path_tracker](#file_location)| **bool** | +| `corner_lookahead` | The distance on the reference path from the UGVs current location, along which to determine if a corner is present. If a corner is present the MPC state will switch to CORNER state and begin reducing the horizon accordingly. | [/navigation/*<controller>*/path_tracker](#file_location)| **m** | +| `corner_detection_threshold` | Threshold on the path curvature, between the UGVs current location and the end of the corner_lookahead distance, above which to switch the MPC in state: CORNER, and begin reducing the horizon accordingly. | [/navigation/*<controller>*/path_tracker](#file_location)| **rad** | +| `corner_slowdown_multiplier` | The multiplier by which to increase the MPC horizon during the MPCs CORNER state in order to slow the UGV down from its top speed. This value should be greater than 1.0. | [/navigation/*<controller>*/path_tracker](#file_location)| **--** | +| `endpoint_multiplier_corner` | Weight multiplier of the very last point along the local plan segment in MPC state: CORNER. This value ensures convergence/stability of the optimizer by mimicking the MPCs infinite horizon by applying a terminal cost. | [/navigation/*<controller>*/path_tracker](#file_location)| **--** | + +#### OEM Specific Parameters {#oem_tuning_params} + +When tuning the controller on a third-party OEM UGV, there are several other considerations +that we will not have taken into account during the tuning of our UGVs. Below, we define +parameters that may be modified to tune the controller for your third-party OEM UGV. + +##### UGV Dynamics {#platform_dynamics_params} + +The following parameters can be used to modify the dynamics model that the contrller uses to +compute command velocities. + +| Parameter | Description | Namespace | SI Units | +|-----------|-------------|-----------|:--------:| +| `no_turn_on_spot_motion` | Flag to enable/disable turn on spot motion. By default, the MPC motion model is represented by a differential drive kinematics. This parameter will modify the MPC motion model to remove turn in place motions and bias the motion in the forward direction. | [/navigation/*<controller>*/path_tracker](#file_location) | - | +| `min_fwd_turn` | | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `pivot_point_offset_x` | The longitudinal offset that can be applied to the MPC model in order to account for a particular UGVs center of rotation | [/navigation/*<controller>*/path_tracker](#file_location) | - | +| `pivot_point_offset_y` | The lateral offset that can be applied to the MPC model in order to account for a particular UGVs center of rotation | [/navigation/*<controller>*/path_tracker](#file_location) | - | +| `min_fwd_turn` | | [/navigation/*<controller>*/path_tracker](#file_location) | **--**| + +##### Delay Compensation {#delay_compensation_params} + +The following parameters can be used to compensate for any delays that are present in the system. + +| Parameter | Description | Namespace | SI Units | +|-----------|-------------|-----------|:--------:| +| `enable_delay_compensation` | A boolean flag to enable/disable the delay compensation feature. The delay compensation feature is used to compensate for low-level dynamics delays that may be present in the UGV to be controlled. The user can apply an input controller delay and the feature will compute command velocities that compensate for such a delay. | [/navigation/*<controller>*/path_tracker](#file_location) | **bool** | +| `controller_delay` | The amount of controller delay that the delay compensation feature will attempt to compensate for, in ms. | [/navigation/*<controller>*/path_tracker](#file_location) | **ms** | + +##### Stop Distance {#stop_distance_params} + +The following parameters can be used to set a specific stop distance away from obstacles. + +| Parameter | Description | Namespace | SI Units | +|-----------|-------------|-----------|:--------:| +| `enable_stop_distance` | A flag to use enable/disable the stop distance feature. The stop distance feature forces the UGV to stop a specified distance in front of obstacles. | [/navigation/*<controller>*/path_tracker](#file_location) | **bool** | +| `obstacle_stop_distance` | The distance at which the UGV will stop in front of a detected obstacle. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | + + +## Path Planners {#path_planners} + +Information incoming in release 0.9. Please contact Clearpath customer support at \ to discuss the issue. diff --git a/outdoornav_user_manual_versioned_docs/version-0.13.0/customized_tuning/user_interface_customization.mdx b/outdoornav_user_manual_versioned_docs/version-0.13.0/customized_tuning/user_interface_customization.mdx index c67bca22..1e7d39c9 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.13.0/customized_tuning/user_interface_customization.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.13.0/customized_tuning/user_interface_customization.mdx @@ -1,9 +1,9 @@ ---- -title: "UI Customization" -sidebar_label: "UI Customization" -sidebar_position: 4 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -Information incoming in a future release. Please contact Clearpath customer support at \ to discuss any related issue. +--- +title: "UI Customization" +sidebar_label: "UI Customization" +sidebar_position: 4 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +Information incoming in a future release. Please contact Clearpath customer support at \ to discuss any related issue. diff --git a/outdoornav_user_manual_versioned_docs/version-0.13.0/features/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.13.0/features/_category_.json index 732c6cb7..3bf04f17 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.13.0/features/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.13.0/features/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "OutdoorNav Features", - "position": 8 -} +{ + "label": "OutdoorNav Features", + "position": 8 +} diff --git a/outdoornav_user_manual_versioned_docs/version-0.13.0/features/custom_tasks.mdx b/outdoornav_user_manual_versioned_docs/version-0.13.0/features/custom_tasks.mdx index 5b117699..056e3ff5 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.13.0/features/custom_tasks.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.13.0/features/custom_tasks.mdx @@ -1,206 +1,206 @@ ---- -title: Custom Tasks -sidebar_label: Custom Tasks -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -Users can create their custom tasks for their application following a specific template. -When creating these tasks, the user should begin by creating a python file in the -**/opt/onav/\/app/custom_tasks/** directory, where *onav_version* -is the currently running version of OutdoorNav. The file should be written following -the instructions provided below: - -1. Import the `custom_task_base` package. - -```python -#!/usr/bin/python3 - -from onav_tasks.custom_task_base import * -``` - -2. The user should then create a class name to replace `CustomTask` and initialize it with the -`CustomTaskBase`'s __init__ function and the action server name for the task. - -```python -class CustomTask(CustomTaskBase): - def __init__(self): - # The derived class must always call the super() and provide the action server name. - # This name will need to be unique among custom tasks and must match what is in the - # UI. - super().__init__("custom_task_name") -``` - -:::note - -The `CustomTaskBase` exposes a `SimpleActionServer` (see here -for further details) object as `_as`, a `UITaskFeedback` object as `_feedback` and a `UITaskResults` object as `_result` to be used as part of -the tasks functionality. - -::: - -3. The last requirement is that the `CustomTask` needs to have the `run_task(self, goal)` function be defined, -which takes in the UITaskGoal. - -```python - def run_task(self, goal): -``` - -:::note - -When running the task users may handle errors through the action servers `set_aborted()` function. When this function is called the entire mission -will be aborted. - -::: - -4. Restarting the UGV will trigger the system to load the custom task that was created, making it available for mission use. -If a custom task is not configured properly the custom task manager will ignore the task and proceed loading in the next task while logging an error with ROS. - - -## Sample Custom Tasks - -### Input Looper - -Below is a sample template file named "input_looper.py" which iterates throught the two data variables and publishes them to the feedback -topic. If neither of the variables have any data in them the task is aborted. - -```python -#!/usr/bin/python3 - -from onav_tasks.custom_task_base import * - -class InputLooperTask(CustomTaskBase): - def __init__(self): - # The derived class must always call the super() and provide the action server name. - # This name will need to be unique among custom tasks and must match what is in the - # UI. - super().__init__("input_looper") - - def run_task(self, goal): - if len(goal.strings) == 0 and len(goal.floats) == 0: - # Task and running mission will be aborted in this case - self._as.set_aborted() - return False - - # Loop through the strings and float values and publish them each to the /input_looper/feedback topic - for string in goal.strings: - self._feedback.state = string - self._as.publish_feedback(self._feedback) - - for num in goal.floats: - self._feedback.state = str(num) - self._as.publish_feedback(self._feedback) - - # Returning True or False will not currently impact the mission but will write the current state to the - # /task/result topic accordingly. - return True -``` - -### Record GNSS Data - -Below is a sample custom task file named "record_gnss.py" which outputs the current GNSS data to the console. - -```python -#!/usr/bin/python3 - -from onav_tasks.custom_task_base import * -from sensor_msgs.msg import NavSatFix -from threading import Lock -import rospy - -class RecorGNSSTask(CustomTaskBase): - def __init__(self): - super().__init__("record_gnss") - self._sub = rospy.Subscriber("/sensors/gps_0/fix", NavSatFix, self.gpsSubscriberCallback) - self.gps_lat = 0.0 - self.gps_lon = 0.0 - self._gps_coordinates_lock = Lock() - - def run_task(self, goal): - feedback = UITaskFeedback() - feedback.state = 'Recording GNSS lat/lon' - self._as.publish_feedback(feedback) - msg = "" - with self._gps_coordinates_lock: - msg = "ID: %f Name: %s Latitude: %f Longitude: %f" % ( - goal.floats[0], goal.strings[0], self.gps_lat, self.gps_lon) - rospy.loginfo(msg) - return True - - def gpsSubscriberCallback(self, msg): - with self._gps_coordinates_lock: - self.gps_lat = msg.latitude - self.gps_lon = msg.longitude -``` - - -### Move PTZ camera to a Lat/Lon - -Below is a more advanced custom task. The file is "move_ptz_lat_lon.py" which pans a PTZ camera to point to a specific lat/lon coordinate. - -```python -from onav_tasks.custom_task_base import * -import actionlib -from clearpath_localization_msgs.srv import * -from clearpath_navigation_msgs.msg import * -from nav_msgs.msg import Odometry -from ptz_action_server_msgs.msg import PtzAction -import ptz_action_server_msgs.msg -import math -from math import remainder, tau -import rospy -from sensor_msgs import * -from tf.transformations import euler_from_quaternion, quaternion_from_euler - - - -class MovePtzLatLon(CustomTaskBase): - def __init__(self): - super().__init__("move_ptz_lat_lon") - self.localization_subscriber_ = rospy.Subscriber("/localization/odom", Odometry, self.localizationCallback) - self.move_ptz_client_ = actionlib.SimpleActionClient('/sensors/camera_0/move_ptz', PtzAction) - self.service_ = rospy.ServiceProxy('/localization/lat_lon_to_xy', ConvertLatLonToCartesian) - self.current_pose = Odometry() - - def localizationCallback(self, odom_msg): - self.current_pose = odom_msg - - def run_task(self, goal): - if len(goal.strings) == 0 and len(goal.floats) == 0: - rospy.logwarn('Warning') - self._as.set_aborted() - return False - goal_latitude = goal.floats[0] - goal_longitude = goal.floats[1] - goal_zoom = goal.floats[2] - str2 = 'Received goal latitude: ' + str(goal_latitude) + ', goal longitude: ' + str(goal_longitude) + ', zoom: ' + str(goal_zoom) - feedback = UITaskFeedback() - feedback.state = 'Aiming camera at lat-lon (' + str(goal_latitude) + ', ' + str(goal_longitude)+')' - self._as.publish_feedback(feedback) - orientation_q = self.current_pose.pose.pose.orientation - orientation_list = [orientation_q.x, orientation_q.y, orientation_q.z, orientation_q.w] - (roll, pitch, yaw) = euler_from_quaternion (orientation_list) - - gps_msg = sensor_msgs.msg.NavSatFix() - gps_msg.latitude = goal_latitude - gps_msg.longitude = goal_longitude - goal_utm = self.service_(gps_msg) - - goal_x = goal_utm.pose.pose.position.x - goal_y = goal_utm.pose.pose.position.y - - goal_angle = math.atan2(goal_y - self.current_pose.pose.pose.position.y, goal_x - self.current_pose.pose.pose.position.x) - pan_angle = math.remainder(goal_angle - yaw, math.tau) - print(pan_angle) - - self.move_ptz_client_.wait_for_server() - goal = ptz_action_server_msgs.msg.PtzGoal() - goal.pan=pan_angle - goal.tilt=0 - goal.zoom=goal_zoom - self.move_ptz_client_.send_goal(goal) - self.move_ptz_client_.wait_for_result() - print(self.move_ptz_client_.get_result()) - return True -``` +--- +title: Custom Tasks +sidebar_label: Custom Tasks +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +Users can create their custom tasks for their application following a specific template. +When creating these tasks, the user should begin by creating a python file in the +**/opt/onav/\/app/custom_tasks/** directory, where *onav_version* +is the currently running version of OutdoorNav. The file should be written following +the instructions provided below: + +1. Import the `custom_task_base` package. + +```python +#!/usr/bin/python3 + +from onav_tasks.custom_task_base import * +``` + +2. The user should then create a class name to replace `CustomTask` and initialize it with the +`CustomTaskBase`'s __init__ function and the action server name for the task. + +```python +class CustomTask(CustomTaskBase): + def __init__(self): + # The derived class must always call the super() and provide the action server name. + # This name will need to be unique among custom tasks and must match what is in the + # UI. + super().__init__("custom_task_name") +``` + +:::note + +The `CustomTaskBase` exposes a `SimpleActionServer` (see here +for further details) object as `_as`, a `UITaskFeedback` object as `_feedback` and a `UITaskResults` object as `_result` to be used as part of +the tasks functionality. + +::: + +3. The last requirement is that the `CustomTask` needs to have the `run_task(self, goal)` function be defined, +which takes in the UITaskGoal. + +```python + def run_task(self, goal): +``` + +:::note + +When running the task users may handle errors through the action servers `set_aborted()` function. When this function is called the entire mission +will be aborted. + +::: + +4. Restarting the UGV will trigger the system to load the custom task that was created, making it available for mission use. +If a custom task is not configured properly the custom task manager will ignore the task and proceed loading in the next task while logging an error with ROS. + + +## Sample Custom Tasks + +### Input Looper + +Below is a sample template file named "input_looper.py" which iterates throught the two data variables and publishes them to the feedback +topic. If neither of the variables have any data in them the task is aborted. + +```python +#!/usr/bin/python3 + +from onav_tasks.custom_task_base import * + +class InputLooperTask(CustomTaskBase): + def __init__(self): + # The derived class must always call the super() and provide the action server name. + # This name will need to be unique among custom tasks and must match what is in the + # UI. + super().__init__("input_looper") + + def run_task(self, goal): + if len(goal.strings) == 0 and len(goal.floats) == 0: + # Task and running mission will be aborted in this case + self._as.set_aborted() + return False + + # Loop through the strings and float values and publish them each to the /input_looper/feedback topic + for string in goal.strings: + self._feedback.state = string + self._as.publish_feedback(self._feedback) + + for num in goal.floats: + self._feedback.state = str(num) + self._as.publish_feedback(self._feedback) + + # Returning True or False will not currently impact the mission but will write the current state to the + # /task/result topic accordingly. + return True +``` + +### Record GNSS Data + +Below is a sample custom task file named "record_gnss.py" which outputs the current GNSS data to the console. + +```python +#!/usr/bin/python3 + +from onav_tasks.custom_task_base import * +from sensor_msgs.msg import NavSatFix +from threading import Lock +import rospy + +class RecorGNSSTask(CustomTaskBase): + def __init__(self): + super().__init__("record_gnss") + self._sub = rospy.Subscriber("/sensors/gps_0/fix", NavSatFix, self.gpsSubscriberCallback) + self.gps_lat = 0.0 + self.gps_lon = 0.0 + self._gps_coordinates_lock = Lock() + + def run_task(self, goal): + feedback = UITaskFeedback() + feedback.state = 'Recording GNSS lat/lon' + self._as.publish_feedback(feedback) + msg = "" + with self._gps_coordinates_lock: + msg = "ID: %f Name: %s Latitude: %f Longitude: %f" % ( + goal.floats[0], goal.strings[0], self.gps_lat, self.gps_lon) + rospy.loginfo(msg) + return True + + def gpsSubscriberCallback(self, msg): + with self._gps_coordinates_lock: + self.gps_lat = msg.latitude + self.gps_lon = msg.longitude +``` + + +### Move PTZ camera to a Lat/Lon + +Below is a more advanced custom task. The file is "move_ptz_lat_lon.py" which pans a PTZ camera to point to a specific lat/lon coordinate. + +```python +from onav_tasks.custom_task_base import * +import actionlib +from clearpath_localization_msgs.srv import * +from clearpath_navigation_msgs.msg import * +from nav_msgs.msg import Odometry +from ptz_action_server_msgs.msg import PtzAction +import ptz_action_server_msgs.msg +import math +from math import remainder, tau +import rospy +from sensor_msgs import * +from tf.transformations import euler_from_quaternion, quaternion_from_euler + + + +class MovePtzLatLon(CustomTaskBase): + def __init__(self): + super().__init__("move_ptz_lat_lon") + self.localization_subscriber_ = rospy.Subscriber("/localization/odom", Odometry, self.localizationCallback) + self.move_ptz_client_ = actionlib.SimpleActionClient('/sensors/camera_0/move_ptz', PtzAction) + self.service_ = rospy.ServiceProxy('/localization/lat_lon_to_xy', ConvertLatLonToCartesian) + self.current_pose = Odometry() + + def localizationCallback(self, odom_msg): + self.current_pose = odom_msg + + def run_task(self, goal): + if len(goal.strings) == 0 and len(goal.floats) == 0: + rospy.logwarn('Warning') + self._as.set_aborted() + return False + goal_latitude = goal.floats[0] + goal_longitude = goal.floats[1] + goal_zoom = goal.floats[2] + str2 = 'Received goal latitude: ' + str(goal_latitude) + ', goal longitude: ' + str(goal_longitude) + ', zoom: ' + str(goal_zoom) + feedback = UITaskFeedback() + feedback.state = 'Aiming camera at lat-lon (' + str(goal_latitude) + ', ' + str(goal_longitude)+')' + self._as.publish_feedback(feedback) + orientation_q = self.current_pose.pose.pose.orientation + orientation_list = [orientation_q.x, orientation_q.y, orientation_q.z, orientation_q.w] + (roll, pitch, yaw) = euler_from_quaternion (orientation_list) + + gps_msg = sensor_msgs.msg.NavSatFix() + gps_msg.latitude = goal_latitude + gps_msg.longitude = goal_longitude + goal_utm = self.service_(gps_msg) + + goal_x = goal_utm.pose.pose.position.x + goal_y = goal_utm.pose.pose.position.y + + goal_angle = math.atan2(goal_y - self.current_pose.pose.pose.position.y, goal_x - self.current_pose.pose.pose.position.x) + pan_angle = math.remainder(goal_angle - yaw, math.tau) + print(pan_angle) + + self.move_ptz_client_.wait_for_server() + goal = ptz_action_server_msgs.msg.PtzGoal() + goal.pan=pan_angle + goal.tilt=0 + goal.zoom=goal_zoom + self.move_ptz_client_.send_goal(goal) + self.move_ptz_client_.wait_for_result() + print(self.move_ptz_client_.get_result()) + return True +``` diff --git a/outdoornav_user_manual_versioned_docs/version-0.13.0/features/navigation.mdx b/outdoornav_user_manual_versioned_docs/version-0.13.0/features/navigation.mdx index d2e0284d..5b4dfa2d 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.13.0/features/navigation.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.13.0/features/navigation.mdx @@ -1,38 +1,38 @@ ---- -title: Navigation Features -sidebar_label: Navigation Features -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -:::danger SAFETY WARNING - -Making changes to any of the following variables may decrease system safety. It is recommended that users -only modify these parameters in consultation with Clearpath Robotics Support. - -::: - -:::note - -Changes to any of the following variables will only take effect after power cycling the UGV. - -::: - -The OutdoorNav Software contains a set of features that can be enabled -or disabled according to your required application requirements. These -features can be enabled or disabled through the use of environment -variables, which should be added to the -`/opt/onav//config/autonomy.env` file, where *onav_version* -is the currently running version of OutdoorNav. The following table describes -the available features, their default state and any additional parameters -that we expose that may also be included to tune the feature. - -| Feature | Description | -|-----------------------------|----------------------------------------| -| **Collision Avoidance** | Collision avoidance is the UGV's ability to detect obstacles and stop/maneuver around the obstacle without any collisions. If `true`, the UGV will detect obstacles and if `false` no obstacles will be detected. Setting to `false` is not recommended and may cause harm to property or to individuals.

Environment Variable: `ENABLE_COLLISION_AVOIDANCE` (Default: `true`). | -| **Constrained Planning** | The constrained replanning feature, which is always enabled, restricts the area in which the UGV can plan paths. For example, if the default `PATH_CONSTRAINT` of 3.0 m is used, the UGV will not be allowed to 1) produce paths that drive it more than 3.0 meters from the initial path, and 2) fail to compute paths if the UGV is further than 3.0 meters from the any of the Waypoints. This allowable planning/navigation area can be shown on the map over the connecting lines between Waypoints. See [Constrained Replanning](../web_user_interface/ui_waypoint_mode.mdx#constrained_path) for further details.

Use the `PATH_CONSTRAINT` environment variable to modify the path constraint (in meters). | -| **Path Smoothing** | Generate paths according to a specified turning radius.

Environment Variable: `ENABLE_DUBINS_PATH_SMOOTHER` (Default: `false`).

Use the `TURN_RADIUS` environment variable to modify the radius of the planned paths (in meters). | -| **Stop Distance** | The stop distance feature allows the UGV to stop a predefined distance away from obstacles. This is useful if a UGV cannot drive in reverse and needs the required room in front of it to replan around an obstacle.

Environment Variable: `ENABLE_STOP_DISTANCE` (Default: `false`)

Use the `STOP_DISTANCE` environment variable to modify the stop distance (in meters). Note that if the stop distance is larger than 4.5 meters for the Clearpath Robotics Jackal and Husky UGVs, or 10.0 meters for the Clearpath Robotics Warthog UGV, the computational load will increase and may cause a decrease in performance in the navigation. | -| **Delay Compensation** | The delay compensation feature is able to compensate for mechanical delay on UGVs where either the accelerator introduces delay into the linear velocity or the steering introduces delay in the angular velocity. This feature is not required for Clearpath Robotics UGVs as negligible delay is present in our system.

Environment Variable: `ENABLE_DELAY_COMPENSATION` (Default: `false`)

Use the `CONTROLLER_DELAY` environment variable to modify the amount of delay to be compensated (in milliseconds). | -| **Docking** | If purchased, autonomous docking will allow the user to autonomously dock/undock their UGV. If not purchased, enabling this environment variable will do nothing.

Environment Variable: `OUTDORRNAV_ENABLE_DOCKING` (Default: `false`).| +--- +title: Navigation Features +sidebar_label: Navigation Features +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +:::danger SAFETY WARNING + +Making changes to any of the following variables may decrease system safety. It is recommended that users +only modify these parameters in consultation with Clearpath Robotics Support. + +::: + +:::note + +Changes to any of the following variables will only take effect after power cycling the UGV. + +::: + +The OutdoorNav Software contains a set of features that can be enabled +or disabled according to your required application requirements. These +features can be enabled or disabled through the use of environment +variables, which should be added to the +`/opt/onav//config/autonomy.env` file, where *onav_version* +is the currently running version of OutdoorNav. The following table describes +the available features, their default state and any additional parameters +that we expose that may also be included to tune the feature. + +| Feature | Description | +|-----------------------------|----------------------------------------| +| **Collision Avoidance** | Collision avoidance is the UGV's ability to detect obstacles and stop/maneuver around the obstacle without any collisions. If `true`, the UGV will detect obstacles and if `false` no obstacles will be detected. Setting to `false` is not recommended and may cause harm to property or to individuals.

Environment Variable: `ENABLE_COLLISION_AVOIDANCE` (Default: `true`). | +| **Constrained Planning** | The constrained replanning feature, which is always enabled, restricts the area in which the UGV can plan paths. For example, if the default `PATH_CONSTRAINT` of 3.0 m is used, the UGV will not be allowed to 1) produce paths that drive it more than 3.0 meters from the initial path, and 2) fail to compute paths if the UGV is further than 3.0 meters from the any of the Waypoints. This allowable planning/navigation area can be shown on the map over the connecting lines between Waypoints. See [Constrained Replanning](../web_user_interface/ui_waypoint_mode.mdx#constrained_path) for further details.

Use the `PATH_CONSTRAINT` environment variable to modify the path constraint (in meters). | +| **Path Smoothing** | Generate paths according to a specified turning radius.

Environment Variable: `ENABLE_DUBINS_PATH_SMOOTHER` (Default: `false`).

Use the `TURN_RADIUS` environment variable to modify the radius of the planned paths (in meters). | +| **Stop Distance** | The stop distance feature allows the UGV to stop a predefined distance away from obstacles. This is useful if a UGV cannot drive in reverse and needs the required room in front of it to replan around an obstacle.

Environment Variable: `ENABLE_STOP_DISTANCE` (Default: `false`)

Use the `STOP_DISTANCE` environment variable to modify the stop distance (in meters). Note that if the stop distance is larger than 4.5 meters for the Clearpath Robotics Jackal and Husky UGVs, or 10.0 meters for the Clearpath Robotics Warthog UGV, the computational load will increase and may cause a decrease in performance in the navigation. | +| **Delay Compensation** | The delay compensation feature is able to compensate for mechanical delay on UGVs where either the accelerator introduces delay into the linear velocity or the steering introduces delay in the angular velocity. This feature is not required for Clearpath Robotics UGVs as negligible delay is present in our system.

Environment Variable: `ENABLE_DELAY_COMPENSATION` (Default: `false`)

Use the `CONTROLLER_DELAY` environment variable to modify the amount of delay to be compensated (in milliseconds). | +| **Docking** | If purchased, autonomous docking will allow the user to autonomously dock/undock their UGV. If not purchased, enabling this environment variable will do nothing.

Environment Variable: `OUTDORRNAV_ENABLE_DOCKING` (Default: `false`).| diff --git a/outdoornav_user_manual_versioned_docs/version-0.13.0/getting_started/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.13.0/getting_started/_category_.json index 8b4a486d..9a9747ef 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.13.0/getting_started/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.13.0/getting_started/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Getting Started", - "position": 5 -} +{ + "label": "Getting Started", + "position": 5 +} diff --git a/outdoornav_user_manual_versioned_docs/version-0.13.0/getting_started/first_time_checklist.mdx b/outdoornav_user_manual_versioned_docs/version-0.13.0/getting_started/first_time_checklist.mdx index e7298e8a..9044c8da 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.13.0/getting_started/first_time_checklist.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.13.0/getting_started/first_time_checklist.mdx @@ -1,114 +1,114 @@ ---- -title: First Time Use Checklist -sidebar_label: First Time Use Checklist -sidebar_position: 2 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -## Hardware Setup - -### ☐ Has the Base Station been set up? - -Ensure that the Base Station has been set up approximately 5 meters -away from any buildings and is currently powered on. See -[System Startup](system_setup.mdx) for further -instructions related to setting up the Base Station. - -### ☐ Is the UGV connected to the Base Station? - -Check to see that the UGV can be pinged from the Base Station network. -See [Connecting to Web UI](system_setup.mdx#connecting_to_web_ui) for further -details. - -## Software Setup - -### ☐ Is ROS running on the UGV? - -SSH into the UGV and run `rostopic list` to generate a list of the -rostopics that are currently available. The list is generally fairly -long so if you are looking for any specific topic please refer to -[API Endpoints](../api/api_endpoints/api_endpoints.mdx). You can also check the -ROS status through the OutdoorNAV UI by referring to the diagnostics section -on the Status page. - -### ☐ Is the OutdoorNAV software running? - -Check to see if the relevant dockers are running (ssh into the UGV and -run `docker ps` which should show at least 5 separate docker containers -running). - -### ☐ Is the computer using the UI connected to the Base Station network? - -This can be confirmed by following the steps found in -[Connecting to Web UI](system_setup.mdx#connecting_to_web_ui). - -### ☐ Have you surveyed the Base Station? - -See [RTK Survey Positioning](../cpr_hardware.mdx#base-station-survey) for -information on how and when to survey the Base station. - -### ☐ Do you have a strong GPS signal? - -After surveying the Base Station check the upper right hand corner of -the UI to confirm that you have a strong GPS signal (the POS and DIR -icons should be green). If either of these icons are not green refer -to [Checking GPS RTK Fix](../cpr_hardware.mdx#base-station-survey) for further -troubleshooting information. - -### ☐ Is the map loading correctly? - -Currently the map requires internet access to load. Refer to -[Loading Map Tiles](system_setup.mdx#loading_map_tiles) for more details -related to setting up the map. - -### ☐ Has the Datum been set? - -See [Set Datum](system_setup.mdx#set-datum) for information on how -to set the Datum variables. - -### ☐ If docking is enabled has the location been set? - -If the Clearpath Robotics autonomous docking package was purchased the -docking location will need to be set. See -[Set Dock Location](system_setup.mdx#set-dock-location) for information on -how to set the docking location. - -### ☐ Is the Navbar status icon functioning? - -To check if the Navbar icon is functioning, trigger the UGV's motion stop -and check to see if it has turned to a red icon. Clicking the icon -will bring up the status information as well as any recent messages -(see below). - -![](/img/outdoornav_images/ugvStatusMessages.png) - -## Using the UI - -The following items are general checks to ensure that the UI is working -properly. - -### ☐ Can the virtual joystick drive the UGV? - -See [Web UI Manual Mode](../web_user_interface/ui_manual_mode.mdx) for further details -related to this. - -### ☐ Can you create a new mission? - -Select the mission list and then click on `Add Mission` to create a -new mission. To add new waypoints for the mission refer to -[Mission Creation](../web_user_interface/ui_waypoint_mode.mdx#mission-creation). - -### ☐ After creating a new mission, can you execute the mission? - -To execute a mission refer to [Mission Execution](../web_user_interface/ui_waypoint_mode.mdx#mission-execution). - -### ☐ Are the cameras (if present) active in the view bar section when running the mission? - -For more information related to camera views see -[Camera Views](../web_user_interface/ui_overview.mdx#camera-views). - -### ☐ Can you select a camera and save an image after it loads on the main screen? - -See [Pan-Tilt-Zoom (PTZ) View ](../web_user_interface/ui_overview.mdx#ptz-view) for more details related +--- +title: First Time Use Checklist +sidebar_label: First Time Use Checklist +sidebar_position: 2 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +## Hardware Setup + +### ☐ Has the Base Station been set up? + +Ensure that the Base Station has been set up approximately 5 meters +away from any buildings and is currently powered on. See +[System Startup](system_setup.mdx) for further +instructions related to setting up the Base Station. + +### ☐ Is the UGV connected to the Base Station? + +Check to see that the UGV can be pinged from the Base Station network. +See [Connecting to Web UI](system_setup.mdx#connecting_to_web_ui) for further +details. + +## Software Setup + +### ☐ Is ROS running on the UGV? + +SSH into the UGV and run `rostopic list` to generate a list of the +rostopics that are currently available. The list is generally fairly +long so if you are looking for any specific topic please refer to +[API Endpoints](../api/api_endpoints/api_endpoints.mdx). You can also check the +ROS status through the OutdoorNAV UI by referring to the diagnostics section +on the Status page. + +### ☐ Is the OutdoorNAV software running? + +Check to see if the relevant dockers are running (ssh into the UGV and +run `docker ps` which should show at least 5 separate docker containers +running). + +### ☐ Is the computer using the UI connected to the Base Station network? + +This can be confirmed by following the steps found in +[Connecting to Web UI](system_setup.mdx#connecting_to_web_ui). + +### ☐ Have you surveyed the Base Station? + +See [RTK Survey Positioning](../cpr_hardware.mdx#base-station-survey) for +information on how and when to survey the Base station. + +### ☐ Do you have a strong GPS signal? + +After surveying the Base Station check the upper right hand corner of +the UI to confirm that you have a strong GPS signal (the POS and DIR +icons should be green). If either of these icons are not green refer +to [Checking GPS RTK Fix](../cpr_hardware.mdx#base-station-survey) for further +troubleshooting information. + +### ☐ Is the map loading correctly? + +Currently the map requires internet access to load. Refer to +[Loading Map Tiles](system_setup.mdx#loading_map_tiles) for more details +related to setting up the map. + +### ☐ Has the Datum been set? + +See [Set Datum](system_setup.mdx#set-datum) for information on how +to set the Datum variables. + +### ☐ If docking is enabled has the location been set? + +If the Clearpath Robotics autonomous docking package was purchased the +docking location will need to be set. See +[Set Dock Location](system_setup.mdx#set-dock-location) for information on +how to set the docking location. + +### ☐ Is the Navbar status icon functioning? + +To check if the Navbar icon is functioning, trigger the UGV's motion stop +and check to see if it has turned to a red icon. Clicking the icon +will bring up the status information as well as any recent messages +(see below). + +![](/img/outdoornav_images/ugvStatusMessages.png) + +## Using the UI + +The following items are general checks to ensure that the UI is working +properly. + +### ☐ Can the virtual joystick drive the UGV? + +See [Web UI Manual Mode](../web_user_interface/ui_manual_mode.mdx) for further details +related to this. + +### ☐ Can you create a new mission? + +Select the mission list and then click on `Add Mission` to create a +new mission. To add new waypoints for the mission refer to +[Mission Creation](../web_user_interface/ui_waypoint_mode.mdx#mission-creation). + +### ☐ After creating a new mission, can you execute the mission? + +To execute a mission refer to [Mission Execution](../web_user_interface/ui_waypoint_mode.mdx#mission-execution). + +### ☐ Are the cameras (if present) active in the view bar section when running the mission? + +For more information related to camera views see +[Camera Views](../web_user_interface/ui_overview.mdx#camera-views). + +### ☐ Can you select a camera and save an image after it loads on the main screen? + +See [Pan-Tilt-Zoom (PTZ) View ](../web_user_interface/ui_overview.mdx#ptz-view) for more details related to saving images. \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.13.0/getting_started/terminal_interface.mdx b/outdoornav_user_manual_versioned_docs/version-0.13.0/getting_started/terminal_interface.mdx index aeedd85f..662608d6 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.13.0/getting_started/terminal_interface.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.13.0/getting_started/terminal_interface.mdx @@ -1,244 +1,244 @@ ---- -title: Command Line Interface -sidebar_label: Command Line Interface -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -By default, the OutdoorNav Software begins automatically when the system -is powered on. This section outlines the OutdoorNav Command Line Interface (CLI), -the set of commands that can be used by developers who are debugging -the system or who want more precise control for managing the OutdoorNav -software. - -## Connecting to the OutdoorNav Computer {#connecting-to-outdoornav-computer} - -To connect to your UGV, consult its corresponding user manual. - -If you are using a Clearpath Robotics UGV with a separate OutdoorNav Computer, -first `ssh` to the UGV using the details provided in the UGV user -manual. Then, if a separate OutdoorNav Computer exists, you can -connect to it by running: - -``` bash -ssh administrator@192.168.131.5 -``` - -## OutdoorNav CLI Installation - -The OutdoorNav CLI is pre-installed on Clearpath robots. If it has not -been installed on your system, it can be installed by running the following -on the OutdoorNav Computer: - -```bash -sudo apt-get install python3-onav-cli -``` - -:::note - -The command above requires that the Clearpath Package Server has been -configured on your OutdoorNav Computer. This is pre-configured on -Clearpath robots. Refer to details on the -[Clearpath Package Server](http://packages.clearpathrobotics.com/) if -this is not configured on your computer. - -::: - -## Listing the OutdoorNav CLI Commands and Getting Help - -To list all of the CLI commands, run the following on the OutdoorNav Computer: - -```bash -onav help -``` - -The CLI commands are: - -- `install`: Download and configure OutdoorNav -- `key`: Get, set, or delete your OutdoorNav license key -- `download`: Download OutdoorNav, but do not configure it -- `configure`: (Re)configure OutdoorNav -- `upgrade`: Upgrade OutdoorNav to the latest vesion -- `uninstall`: Uninstall OutdoorNav -- `depends`: Verify and install dependencies -- `start`: Start OutdoorNav -- `stop`: Stop OutdoorNav -- `status`: Check the status of OutdoorNav -- `logs`: View OutdoorNav logs -- `versions`: Print versions available to install -- `help`: Show available commands - -To get help on an individual command, use the `-h` option. For example, to -get help on the `install` command, run `onav install -h`: - -``` -usage: onav install [-h] [-k KEY] [-b] [-c] [-H] VERSION - -positional arguments: - VERSION The OutdoorNav version to install (e.g. 0.11.0) - -optional arguments: - -h, --help show this help message and exit - -k KEY, --key KEY Your OutdoorNav installation key - -b, --backpack Configure in backpack/bridged mode - -c, --clean Clean any configurations from a prior installation -``` - -## Starting and Stopping the OutdoorNav Software {#starting-outdoornav} - -On UGV startup, all the sensors, the user interface, as well as the -autonomy software are set to start automatically. When debugging or when -greater control is desired, the CLI can be used to start and stop -the OutdoorNav software, in whole or in part. - -To see the current status of OutdoorNav software, run: - -```bash -onav status -``` - -To start the OutdoorNav software if it is not running, use the following command, -which starts the latest version of the software by default: - -```bash -onav start -``` - -To stop the OutdoorNav software, run: - -```bash -onav stop -``` - -## Stopping and Restarting the Autonomy Software Only - -To use the UGV without the autonomy software, use the following -command to stop the nodes and prevent them from automatic startup: - -``` bash -onav stop -s autonomy -``` - -The autonomy software can be restarted by running: - -``` bash -onav start -s autonomy -``` - -## Stopping/Restarting the Sensors - -To use the UGV without the sensors, use these commands to disable the -nodes and prevent them from automatic startup: - -``` bash -onav stop -s sensors -``` - -:::note - -This command will only disable the drivers for the sensors that are started -by the OutdoorNav software. This includes the GNSS units, the Microstrain IMU, -and any LiDAR/Stereo detection sources (not limited to Velodyne LiDARs, Realsense -cameras, 2D Lidars). - -::: - -The sensors software can be restarted by running: - -``` -onav start -s sensors -``` - -## Accessing the OutdoorNav Software Logs - -To check the logs of the OutdoorNav software, use the `onav logs` command -with the appropriate service. For example, to view the logs for the sensors -service, run: - -```bash -onav logs sensors -``` - -## Installing the OutdoorNav Software - -OutdoorNav is typically pre-installed on Clearpath robots, so most users should -not need to do a first-time installation of the software, though the process -is outlined below as a reference. - -As a first step, confirm that the robot has internet access. For example, confirm -that the following command is successful: - -``` -ping 8.8.8.8 -``` - -Second, the required dependencies need to be installed by running: - -```bash -onav depends -``` - -Third, a key needs to be added onto the robot to enable the installation -process. Contact [Clearpath Support](../support) if you did not receive your key. -To add your key, run the following, replacing `` with the actual value: - -```bash -onav key -``` - -Fourth, list the versions available for installation by running: - -```bash -onav versions -``` - -Fifth, install the OutdoorNav software for the desired version (typically the -newest version), by running the following, replacing `` with -the version to be installed: - -```bash -onav install -``` - -When prompted, trigger the reboot. - -Finally, following the reboot, run the following command to start the OutdoorNav -software. This will only be required the first time after installation. - -```bash -onav start -``` - -## Upgrading the OutdoorNav Software - -After receiving a notice that a new version of the OutdoorNav Software is -available, use the `onav upgrade` command with the appropriate version. -For example, to upgrade to the newest avialbel version that you are eligible -to receive, run the following command: - -``` -onav upgrade -``` - -:::note - -The upgrade requires internet access to download the new software. -Confirm that the OutdoorNav Computer has internet access by running a command -such as: - -``` -ping 8.8.8.8 -``` - -::: - -## Uninstalling Old Versions of OutdoorNav Software - -If old versions of OutdoorNav software are no longer being used, they can -be removed with the `onav uninstall` command. For example, to uninstall 0.11.0 -run: - -``` -onav uninstall 0.11.0 +--- +title: Command Line Interface +sidebar_label: Command Line Interface +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +By default, the OutdoorNav Software begins automatically when the system +is powered on. This section outlines the OutdoorNav Command Line Interface (CLI), +the set of commands that can be used by developers who are debugging +the system or who want more precise control for managing the OutdoorNav +software. + +## Connecting to the OutdoorNav Computer {#connecting-to-outdoornav-computer} + +To connect to your UGV, consult its corresponding user manual. + +If you are using a Clearpath Robotics UGV with a separate OutdoorNav Computer, +first `ssh` to the UGV using the details provided in the UGV user +manual. Then, if a separate OutdoorNav Computer exists, you can +connect to it by running: + +``` bash +ssh administrator@192.168.131.5 +``` + +## OutdoorNav CLI Installation + +The OutdoorNav CLI is pre-installed on Clearpath robots. If it has not +been installed on your system, it can be installed by running the following +on the OutdoorNav Computer: + +```bash +sudo apt-get install python3-onav-cli +``` + +:::note + +The command above requires that the Clearpath Package Server has been +configured on your OutdoorNav Computer. This is pre-configured on +Clearpath robots. Refer to details on the +[Clearpath Package Server](http://packages.clearpathrobotics.com/) if +this is not configured on your computer. + +::: + +## Listing the OutdoorNav CLI Commands and Getting Help + +To list all of the CLI commands, run the following on the OutdoorNav Computer: + +```bash +onav help +``` + +The CLI commands are: + +- `install`: Download and configure OutdoorNav +- `key`: Get, set, or delete your OutdoorNav license key +- `download`: Download OutdoorNav, but do not configure it +- `configure`: (Re)configure OutdoorNav +- `upgrade`: Upgrade OutdoorNav to the latest vesion +- `uninstall`: Uninstall OutdoorNav +- `depends`: Verify and install dependencies +- `start`: Start OutdoorNav +- `stop`: Stop OutdoorNav +- `status`: Check the status of OutdoorNav +- `logs`: View OutdoorNav logs +- `versions`: Print versions available to install +- `help`: Show available commands + +To get help on an individual command, use the `-h` option. For example, to +get help on the `install` command, run `onav install -h`: + +``` +usage: onav install [-h] [-k KEY] [-b] [-c] [-H] VERSION + +positional arguments: + VERSION The OutdoorNav version to install (e.g. 0.11.0) + +optional arguments: + -h, --help show this help message and exit + -k KEY, --key KEY Your OutdoorNav installation key + -b, --backpack Configure in backpack/bridged mode + -c, --clean Clean any configurations from a prior installation +``` + +## Starting and Stopping the OutdoorNav Software {#starting-outdoornav} + +On UGV startup, all the sensors, the user interface, as well as the +autonomy software are set to start automatically. When debugging or when +greater control is desired, the CLI can be used to start and stop +the OutdoorNav software, in whole or in part. + +To see the current status of OutdoorNav software, run: + +```bash +onav status +``` + +To start the OutdoorNav software if it is not running, use the following command, +which starts the latest version of the software by default: + +```bash +onav start +``` + +To stop the OutdoorNav software, run: + +```bash +onav stop +``` + +## Stopping and Restarting the Autonomy Software Only + +To use the UGV without the autonomy software, use the following +command to stop the nodes and prevent them from automatic startup: + +``` bash +onav stop -s autonomy +``` + +The autonomy software can be restarted by running: + +``` bash +onav start -s autonomy +``` + +## Stopping/Restarting the Sensors + +To use the UGV without the sensors, use these commands to disable the +nodes and prevent them from automatic startup: + +``` bash +onav stop -s sensors +``` + +:::note + +This command will only disable the drivers for the sensors that are started +by the OutdoorNav software. This includes the GNSS units, the Microstrain IMU, +and any LiDAR/Stereo detection sources (not limited to Velodyne LiDARs, Realsense +cameras, 2D Lidars). + +::: + +The sensors software can be restarted by running: + +``` +onav start -s sensors +``` + +## Accessing the OutdoorNav Software Logs + +To check the logs of the OutdoorNav software, use the `onav logs` command +with the appropriate service. For example, to view the logs for the sensors +service, run: + +```bash +onav logs sensors +``` + +## Installing the OutdoorNav Software + +OutdoorNav is typically pre-installed on Clearpath robots, so most users should +not need to do a first-time installation of the software, though the process +is outlined below as a reference. + +As a first step, confirm that the robot has internet access. For example, confirm +that the following command is successful: + +``` +ping 8.8.8.8 +``` + +Second, the required dependencies need to be installed by running: + +```bash +onav depends +``` + +Third, a key needs to be added onto the robot to enable the installation +process. Contact [Clearpath Support](../support) if you did not receive your key. +To add your key, run the following, replacing `` with the actual value: + +```bash +onav key +``` + +Fourth, list the versions available for installation by running: + +```bash +onav versions +``` + +Fifth, install the OutdoorNav software for the desired version (typically the +newest version), by running the following, replacing `` with +the version to be installed: + +```bash +onav install +``` + +When prompted, trigger the reboot. + +Finally, following the reboot, run the following command to start the OutdoorNav +software. This will only be required the first time after installation. + +```bash +onav start +``` + +## Upgrading the OutdoorNav Software + +After receiving a notice that a new version of the OutdoorNav Software is +available, use the `onav upgrade` command with the appropriate version. +For example, to upgrade to the newest avialbel version that you are eligible +to receive, run the following command: + +``` +onav upgrade +``` + +:::note + +The upgrade requires internet access to download the new software. +Confirm that the OutdoorNav Computer has internet access by running a command +such as: + +``` +ping 8.8.8.8 +``` + +::: + +## Uninstalling Old Versions of OutdoorNav Software + +If old versions of OutdoorNav software are no longer being used, they can +be removed with the `onav uninstall` command. For example, to uninstall 0.11.0 +run: + +``` +onav uninstall 0.11.0 ``` \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.13.0/getting_started/tf_validation.mdx b/outdoornav_user_manual_versioned_docs/version-0.13.0/getting_started/tf_validation.mdx index 72327dbc..ab05b15f 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.13.0/getting_started/tf_validation.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.13.0/getting_started/tf_validation.mdx @@ -1,80 +1,80 @@ ---- -title: TF Validation -sidebar_label: TF Validation -sidebar_position: 4 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -:::note - -Sensor transform (TF) validation should only be required if the performance -is noticeably poor, such as when the UGV drifts off of the planned path or -oscillations occur around the path). - -::: - -The coordinate transformation of the two GPS antennas, the IMU, the 2D -and 3D Lidars to the base_link of the UGV should have already been set -prior to receiving the UGV. However, ensure that they are set correctly. - -The ROS coordinate frame base_link, shown in the figure below, is -located at the center of the bottom plate of the UGV. The environment -variables below should be taken with respect to this coordinate frame. -The X axis is in red (and pointing towards the front of the UGV), Y in -green (pointing towards the left of the UGV) and Z in blue (pointing -towards the sky). - -You can check the current value of the environment variables by running -the following on the robot (host) computer (and setting \ -to the names listed in the table below). - -``` bash -printenv | grep -``` - -The environment variables for the position and orientation of each -sensor are provided in the table below. - -_OutdoorNav sensor position and orientation environment variables_ - -| Environment Variable | Function | -|----------------------|---------------------------------------| -| POSITION_GPS_XYZ | [X,Y,Z] position, in meters, of the position GNSS antenna with respect to the base_link coordinate frame. | -| POSITION_GPS_RPY | [Roll,Pitch,Yaw], in radians, of the position GNSS antenna with respect to the base_link coordinate frame. | -| HEADING_GPS_XYZ | [X,Y,Z] position, in meters, of the heading GNSS antenna with respect to the base_link coordinate frame. | -| HEADING_GPS_RPY | [Roll,Pitch,Yaw], in radians, of the heading GNSS antenna with respect to the base_link coordinate frame. | -| MICROSTRAIN_XYZ | [X,Y,Z] position, in meters, of the IMU with respect to the base_link coordinate frame. | -| MICROSTRAIN_RPY | [Roll,Pitch,Yaw], in radians, of the IMU with respect to the base_link coordinate frame. | -| VLP_XYZ | [X,Y,Z] position, in meters, of the 3D Lidar with respect to the base_link coordinate frame. | -| VLP_RPY | [Roll,Pitch,Yaw], in radians, of the 3D Lidar with respect to the base_link coordinate frame. | -| LMS1XX_XYZ | [X,Y,Z] position, in meters, of the 2D Lidar with respect to the base_link coordinate frame. | -| LMS1XX_RPY | [Roll,Pitch,Yaw], in radians, of the 2D Lidar with respect to the base_link coordinate frame. | -| HOKUYO_XYZ | [X,Y,Z] position, in meters, of the 2D Lidar with respect to the base_link coordinate frame. | -| HOKUYO_RPY | [Roll,Pitch,Yaw], in radians, of the 2D Lidar with respect to the base_link coordinate frame. | -| D435_XYZ | [X,Y,Z] position, in meters, of the 2D Lidar with respect to the base_link coordinate frame. | -| D435_RPY | [Roll,Pitch,Yaw], in radians, of the 2D Lidar with respect to the base_link coordinate frame. | - -There may also be 2 of each of these detection sensors. The corresponding environment -variable is prefixed with `REAR_`. - -:::note - -When the printed Y axis on the IMU is pointing towards the front of the -robot (i.e., aligned to X axis of base_link), MICROSTRAIN_RPY = [0, 0, 0]. - -::: - -:::warning - -If you decide to move any of these sensors, you must modify these -variables accordingly in the `/opt/onav/outdoornav_host_setup.sh` file (on the host). - -
-
- -
base_link coordinate frame
-
-
- -::: +--- +title: TF Validation +sidebar_label: TF Validation +sidebar_position: 4 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +:::note + +Sensor transform (TF) validation should only be required if the performance +is noticeably poor, such as when the UGV drifts off of the planned path or +oscillations occur around the path). + +::: + +The coordinate transformation of the two GPS antennas, the IMU, the 2D +and 3D Lidars to the base_link of the UGV should have already been set +prior to receiving the UGV. However, ensure that they are set correctly. + +The ROS coordinate frame base_link, shown in the figure below, is +located at the center of the bottom plate of the UGV. The environment +variables below should be taken with respect to this coordinate frame. +The X axis is in red (and pointing towards the front of the UGV), Y in +green (pointing towards the left of the UGV) and Z in blue (pointing +towards the sky). + +You can check the current value of the environment variables by running +the following on the robot (host) computer (and setting \ +to the names listed in the table below). + +``` bash +printenv | grep +``` + +The environment variables for the position and orientation of each +sensor are provided in the table below. + +_OutdoorNav sensor position and orientation environment variables_ + +| Environment Variable | Function | +|----------------------|---------------------------------------| +| POSITION_GPS_XYZ | [X,Y,Z] position, in meters, of the position GNSS antenna with respect to the base_link coordinate frame. | +| POSITION_GPS_RPY | [Roll,Pitch,Yaw], in radians, of the position GNSS antenna with respect to the base_link coordinate frame. | +| HEADING_GPS_XYZ | [X,Y,Z] position, in meters, of the heading GNSS antenna with respect to the base_link coordinate frame. | +| HEADING_GPS_RPY | [Roll,Pitch,Yaw], in radians, of the heading GNSS antenna with respect to the base_link coordinate frame. | +| MICROSTRAIN_XYZ | [X,Y,Z] position, in meters, of the IMU with respect to the base_link coordinate frame. | +| MICROSTRAIN_RPY | [Roll,Pitch,Yaw], in radians, of the IMU with respect to the base_link coordinate frame. | +| VLP_XYZ | [X,Y,Z] position, in meters, of the 3D Lidar with respect to the base_link coordinate frame. | +| VLP_RPY | [Roll,Pitch,Yaw], in radians, of the 3D Lidar with respect to the base_link coordinate frame. | +| LMS1XX_XYZ | [X,Y,Z] position, in meters, of the 2D Lidar with respect to the base_link coordinate frame. | +| LMS1XX_RPY | [Roll,Pitch,Yaw], in radians, of the 2D Lidar with respect to the base_link coordinate frame. | +| HOKUYO_XYZ | [X,Y,Z] position, in meters, of the 2D Lidar with respect to the base_link coordinate frame. | +| HOKUYO_RPY | [Roll,Pitch,Yaw], in radians, of the 2D Lidar with respect to the base_link coordinate frame. | +| D435_XYZ | [X,Y,Z] position, in meters, of the 2D Lidar with respect to the base_link coordinate frame. | +| D435_RPY | [Roll,Pitch,Yaw], in radians, of the 2D Lidar with respect to the base_link coordinate frame. | + +There may also be 2 of each of these detection sensors. The corresponding environment +variable is prefixed with `REAR_`. + +:::note + +When the printed Y axis on the IMU is pointing towards the front of the +robot (i.e., aligned to X axis of base_link), MICROSTRAIN_RPY = [0, 0, 0]. + +::: + +:::warning + +If you decide to move any of these sensors, you must modify these +variables accordingly in the `/opt/onav/outdoornav_host_setup.sh` file (on the host). + +
+
+ +
base_link coordinate frame
+
+
+ +::: diff --git a/outdoornav_user_manual_versioned_docs/version-0.13.0/index.mdx b/outdoornav_user_manual_versioned_docs/version-0.13.0/index.mdx index 09a63a7f..3d1655b9 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.13.0/index.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.13.0/index.mdx @@ -1,18 +1,18 @@ ---- -title: OutdoorNav User Manual -sidebar_label: OutdoorNav User Manual -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -
-
- -
-
- -OutdoorNav is an outdoor autonomy software platform designed for vehicle developers, -OEMs and robotics researchers. Compatible with Clearpath outdoor mobile platforms -and third-party vehicles, OutdoorNav provides reliable, industry-leading GPS-based +--- +title: OutdoorNav User Manual +sidebar_label: OutdoorNav User Manual +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +
+
+ +
+
+ +OutdoorNav is an outdoor autonomy software platform designed for vehicle developers, +OEMs and robotics researchers. Compatible with Clearpath outdoor mobile platforms +and third-party vehicles, OutdoorNav provides reliable, industry-leading GPS-based navigation for faster, more efficient autonomous vehicle development. \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.13.0/integration_requirements/integration_overview.mdx b/outdoornav_user_manual_versioned_docs/version-0.13.0/integration_requirements/integration_overview.mdx index 00cf8a07..72d78ae3 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.13.0/integration_requirements/integration_overview.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.13.0/integration_requirements/integration_overview.mdx @@ -1,34 +1,34 @@ ---- -title: "Integration Overview" -sidebar_label: "Integration Overview" -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -The scope of work to transform a non-autonomous UGV into an autonomous -one will vary depending on the exact hardware capabilities and software -interfaces of the UGV. Development work will be required by Clearpath -Robotics, the end user, or a third party developer to bring the UGV into -compliance with the requirements listed in the table below. This may -involve implementing encoders and controllers to provide velocity -control of the UGV and implementing a CAN bus to ROS interface with -kinematic control. The table below provides a general outline of the -requirements; the detailed requirements are covered in the following -sections. - -_Navigation hardware and software general integration scope of work_ - -| \# | Task | Note | -|-----|----------------------------------|---------------------------------| -| 1 | **Convert UGV to drive by wire** | If required; can be a significant electromechanical integration | -| 1.1 | Implement actuated steering and throttle control if necessary | | -| 1.2 | Implement the encoder and controller hardware to provide wheel velocity control and odometry feedback | May require electronic power steering position feedback and controller | -| 2 | **Create a ROS interface** | | -| 2.1 | Commission an OutdoorNav computer running Ubuntu 20.04 and ROS Noetic | | -| 2.2 | Create a ROS interface to the UGV Often interfacing via CAN bus motor controllers and UGV controller | | -| 2.3 | Create a ROS driver including UGV kinematics with ROS-control | Accepts velocity input, commands motor controllers, provides other status feedback | -| 3 | **Install and configure OutdoorNav Hardware and Software** | | -| 3.1 | Install OutdoorNav computer and sensors on the UGV | Provide mechanical mounting, power and ethernet communication to UGV computer | -| 3.2 | Install, update and configure OutdoorNav Software on computer | Configure for sensor mounting locations, UGV kinematics and data topics. Can be done remotely with assistance from Clearpath Robotics Engineering. Approximately 1-2 days. | -| 3.3 | Tune the path planning and following controllers for new UGV | Can be done at a Clearpath Robotics facility. Can often be done at end user facility via remote login from Clearpath Robotics Engineering. Approximately 2-5 days. | +--- +title: "Integration Overview" +sidebar_label: "Integration Overview" +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +The scope of work to transform a non-autonomous UGV into an autonomous +one will vary depending on the exact hardware capabilities and software +interfaces of the UGV. Development work will be required by Clearpath +Robotics, the end user, or a third party developer to bring the UGV into +compliance with the requirements listed in the table below. This may +involve implementing encoders and controllers to provide velocity +control of the UGV and implementing a CAN bus to ROS interface with +kinematic control. The table below provides a general outline of the +requirements; the detailed requirements are covered in the following +sections. + +_Navigation hardware and software general integration scope of work_ + +| \# | Task | Note | +|-----|----------------------------------|---------------------------------| +| 1 | **Convert UGV to drive by wire** | If required; can be a significant electromechanical integration | +| 1.1 | Implement actuated steering and throttle control if necessary | | +| 1.2 | Implement the encoder and controller hardware to provide wheel velocity control and odometry feedback | May require electronic power steering position feedback and controller | +| 2 | **Create a ROS interface** | | +| 2.1 | Commission an OutdoorNav computer running Ubuntu 20.04 and ROS Noetic | | +| 2.2 | Create a ROS interface to the UGV Often interfacing via CAN bus motor controllers and UGV controller | | +| 2.3 | Create a ROS driver including UGV kinematics with ROS-control | Accepts velocity input, commands motor controllers, provides other status feedback | +| 3 | **Install and configure OutdoorNav Hardware and Software** | | +| 3.1 | Install OutdoorNav computer and sensors on the UGV | Provide mechanical mounting, power and ethernet communication to UGV computer | +| 3.2 | Install, update and configure OutdoorNav Software on computer | Configure for sensor mounting locations, UGV kinematics and data topics. Can be done remotely with assistance from Clearpath Robotics Engineering. Approximately 1-2 days. | +| 3.3 | Tune the path planning and following controllers for new UGV | Can be done at a Clearpath Robotics facility. Can often be done at end user facility via remote login from Clearpath Robotics Engineering. Approximately 2-5 days. | diff --git a/outdoornav_user_manual_versioned_docs/version-0.13.0/integration_requirements/interface_control_requirements.mdx b/outdoornav_user_manual_versioned_docs/version-0.13.0/integration_requirements/interface_control_requirements.mdx index a603485b..d9906ed6 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.13.0/integration_requirements/interface_control_requirements.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.13.0/integration_requirements/interface_control_requirements.mdx @@ -1,119 +1,119 @@ ---- -title: "ROS Interface Control Requirements" -sidebar_label: "ROS Interface Control Requirements" -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -## ROS Interface Control Checklist - -Prior to the installation and tuning of Clearpath Robotics (CPR) -OutdoorNav software on your platform (robot computer), CPR requires that the platform's -ROS interface satisfies the conditions listed below. Ensure that all of the requirements -are satisfied for a smooth installation and tuning process. - -![](/img/outdoornav_images/onav_interface_control.png) - -| | Requirement | -|------|------------------------------------------------------------------| -| | The platform computer is on the 192.168.131.xxx subnet (ideally in the range 1-4). | -| | The platform computer has an installation of [ROS 1 Noetic](http://wiki.ros.org/noetic/Installation). | -| | A URDF is supplied to CPR by the customer, in which the `base_link` coordinate frame is defined according to the [REP-105 base-link](https://www.ros.org/reps/rep-0105.html#base-link) ROS standard. | -| | The platform outputs [tf2_msgs/TFMessage](http://docs.ros.org/en/jade/api/tf2_msgs/html/msg/TFMessage.html) messages on the ROS standard `/tf` topic, at a minimum rate of **30 Hz**. | -| | The platform outputs a latched [tf2_msgs/TFMessage](http://docs.ros.org/en/jade/api/tf2_msgs/html/msg/TFMessage.html) message on the ROS standard `/tf_static` topic. This should include any fixed frames of ROS enabled devices/sensors that are available on your platform. | -| | The platform computer has a velocity controller that accepts, as input, [geometry_msgs/Twist](http://docs.ros.org/en/melodic/api/geometry_msgs/html/msg/Twist.html) messages on the ROS standard `/cmd_vel` topic, at a minimum rate of **10 Hz**. | -| | The platform computer has a velocity controller that tracks the input velocity and outputs the resulting platform velocity on the `/platform/cmd_vel` topic. | -| | The platform outputs [nav_msgs/Odometry](http://docs.ros.org/en/noetic/api/nav_msgs/html/msg/Odometry.html) messages on the `/platform/odom` topic, at a minimum rate of **10 Hz**. | -| | The `/platform/odom` topic publishes its data with the header.frame_id = `odom` and the child_frame_id = `base_link`, as per the [REP-105 odom](https://www.ros.org/reps/rep-0105.html#odom) ROS standard. **IMPORTANT**: The platform should however not broadcast the `odom` --> `base_link` transformation since the OutdoorNav software will do so. | -| | If available, the platform odometry output has less than ±5% linear position error. | -| | If available, the platform odometry output has less than ±5% orientation error. | -| | The platform outputs [std_msgs/Bool](http://docs.ros.org/en/noetic/api/std_msgs/html/msg/Bool.html) messages on the `/platform/emergency_stop` topic, at a minimum rate of **5 Hz**, indicating whether or not the platform is in a stopped state. | -| | Perform the validation tests described in [Interface Control Validation Test](#interface-control-validation) section and [record a rosbag](http://wiki.ros.org/rosbag/Commandline#rosbag_record) of all of your topics. The linear and angular velocities of the three trial runs recorded should be noted here:

Trial #1: Linear x: , Angular z:
Trial #2: Linear x: , Angular z:
Trial #3: Linear x: , Angular z:
| - -:::note - -Consult the [Platform API](../api/api_endpoints/platform_api.mdx#topics-published-by-platform) for -detailed information on the published/subscribed platform topics. - -::: - -If the platform is an Ackermann (or double Ackermann) drive vehicle: - -| | Requirement | -|------|------------------------------------------------------------------| -| | A conversion from [geometry_msgs/Twist](http://docs.ros.org/en/melodic/api/geometry_msgs/html/msg/Twist.html) messages to Ackermann inputs is provided. | - -:::note - -Ackermann drive platforms require both steering and throttle inputs to -drive the platform. It is required that our OutdoorNav output `/cmd_vel` -be converted into a message suitable to your platform. An example of an -Ackermann message type can be found -[here](http://wiki.ros.org/teb_local_planner/Tutorials/Planning%20for%20car-like%20robots). -This may satisfy your particular platform, and is only a starting point -on how to do this conversion. - -::: - -If the platform computer is running a version of ROS 2: - -| | Requirement | -|------|------------------------------------------------------------------| -| | The platform computer has a [ROS 2 to ROS 1 bridge](https://github.com/ros2/ros1_bridge) is installed to enable the exchange of messages between the two ROS versions. | - -Signature: Date: - -## Interface Control Validation Test {#interface-control-validation} - -The following test is designed to validate the platforms velocity -controller. It will be required that you command the robot to drive in -three circles, of varying radii, by applying the following command to -the platform. - -``` bash -rostopic pub -r 10 /cmd_vel geometry_msgs/Twist "linear: -x: ___ -y: 0.0 -z: 0.0 -angular: -x: 0.0 -y: 0.0 -z: ___" -``` - -The three trials that we request will vary between platforms depending -on the its maximum linear $(v_\{max\})$ and angular velocities -$(\omega_\{max\})$, minimum linear $(v_\{min\})$ and angular velocities -$(\omega_\{min\})$, as well as limitations due to the minimum allowable -turning radius $(r_\{min\})$. Of these three trials, we would like to see -data within three linear velocity bands, as seen in the table below, -resulting in three different turning radii. For the purpose of these -tests, the following formula can be used when determining the required -linear and angular velocities to apply: $r = v/\omega$. - -| Trial \# | Linear X Bands \[m/s\] | Example Linear X Band \[m/s\] | -| ---------|--------------------------------------------|-------------------------------------| -| 1 | $v_\{min\} \cdot [1.0, 1.5]$ | $[0.5, 0.75]$ | -| 2 | $((v_\{max\} - v_\{min\})/2) \cdot [0.9, 1.1]$ | $[2.025, 2.475]$ | -| 3 | $v_\{max\} \cdot [0.9, 1.0]$ | $[4.5, 5.0]$ | - -As an example, a platform with specs $v \in [0.5, 5.0]$, $r_\{min\} = 3$ -would have linear x velocity bands as listed in the table above. The -trials could then be as outlined in the table below. - -| Trial \# | Linear X \[m/s\] | Angular Z \[rad/s\] |Turn Radius \[m\] | -|-----------|--------------------|---------------------|------------------| -| 1 | 0.75 | 0.25 | 3 | -| 2 | 2.25 | 0.5 | 4.5 | -| 3 | 4.5 | 0.75 | 6 | - -Finally, the test data in the collected ROSbag should include the -following: - -1. `/tf` and `/tf_static` -2. `/platform/cmd_vel` -3. `/platform/odom` -4. `/cmd_vel` -5. `/platform/emergency_stop` (if available) -6. raw NavSatFix data from a GPS unit (if possible). +--- +title: "ROS Interface Control Requirements" +sidebar_label: "ROS Interface Control Requirements" +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +## ROS Interface Control Checklist + +Prior to the installation and tuning of Clearpath Robotics (CPR) +OutdoorNav software on your platform (robot computer), CPR requires that the platform's +ROS interface satisfies the conditions listed below. Ensure that all of the requirements +are satisfied for a smooth installation and tuning process. + +![](/img/outdoornav_images/onav_interface_control.png) + +| | Requirement | +|------|------------------------------------------------------------------| +| | The platform computer is on the 192.168.131.xxx subnet (ideally in the range 1-4). | +| | The platform computer has an installation of [ROS 1 Noetic](http://wiki.ros.org/noetic/Installation). | +| | A URDF is supplied to CPR by the customer, in which the `base_link` coordinate frame is defined according to the [REP-105 base-link](https://www.ros.org/reps/rep-0105.html#base-link) ROS standard. | +| | The platform outputs [tf2_msgs/TFMessage](http://docs.ros.org/en/jade/api/tf2_msgs/html/msg/TFMessage.html) messages on the ROS standard `/tf` topic, at a minimum rate of **30 Hz**. | +| | The platform outputs a latched [tf2_msgs/TFMessage](http://docs.ros.org/en/jade/api/tf2_msgs/html/msg/TFMessage.html) message on the ROS standard `/tf_static` topic. This should include any fixed frames of ROS enabled devices/sensors that are available on your platform. | +| | The platform computer has a velocity controller that accepts, as input, [geometry_msgs/Twist](http://docs.ros.org/en/melodic/api/geometry_msgs/html/msg/Twist.html) messages on the ROS standard `/cmd_vel` topic, at a minimum rate of **10 Hz**. | +| | The platform computer has a velocity controller that tracks the input velocity and outputs the resulting platform velocity on the `/platform/cmd_vel` topic. | +| | The platform outputs [nav_msgs/Odometry](http://docs.ros.org/en/noetic/api/nav_msgs/html/msg/Odometry.html) messages on the `/platform/odom` topic, at a minimum rate of **10 Hz**. | +| | The `/platform/odom` topic publishes its data with the header.frame_id = `odom` and the child_frame_id = `base_link`, as per the [REP-105 odom](https://www.ros.org/reps/rep-0105.html#odom) ROS standard. **IMPORTANT**: The platform should however not broadcast the `odom` --> `base_link` transformation since the OutdoorNav software will do so. | +| | If available, the platform odometry output has less than ±5% linear position error. | +| | If available, the platform odometry output has less than ±5% orientation error. | +| | The platform outputs [std_msgs/Bool](http://docs.ros.org/en/noetic/api/std_msgs/html/msg/Bool.html) messages on the `/platform/emergency_stop` topic, at a minimum rate of **5 Hz**, indicating whether or not the platform is in a stopped state. | +| | Perform the validation tests described in [Interface Control Validation Test](#interface-control-validation) section and [record a rosbag](http://wiki.ros.org/rosbag/Commandline#rosbag_record) of all of your topics. The linear and angular velocities of the three trial runs recorded should be noted here:

Trial #1: Linear x: , Angular z:
Trial #2: Linear x: , Angular z:
Trial #3: Linear x: , Angular z:
| + +:::note + +Consult the [Platform API](../api/api_endpoints/platform_api.mdx#topics-published-by-platform) for +detailed information on the published/subscribed platform topics. + +::: + +If the platform is an Ackermann (or double Ackermann) drive vehicle: + +| | Requirement | +|------|------------------------------------------------------------------| +| | A conversion from [geometry_msgs/Twist](http://docs.ros.org/en/melodic/api/geometry_msgs/html/msg/Twist.html) messages to Ackermann inputs is provided. | + +:::note + +Ackermann drive platforms require both steering and throttle inputs to +drive the platform. It is required that our OutdoorNav output `/cmd_vel` +be converted into a message suitable to your platform. An example of an +Ackermann message type can be found +[here](http://wiki.ros.org/teb_local_planner/Tutorials/Planning%20for%20car-like%20robots). +This may satisfy your particular platform, and is only a starting point +on how to do this conversion. + +::: + +If the platform computer is running a version of ROS 2: + +| | Requirement | +|------|------------------------------------------------------------------| +| | The platform computer has a [ROS 2 to ROS 1 bridge](https://github.com/ros2/ros1_bridge) is installed to enable the exchange of messages between the two ROS versions. | + +Signature: Date: + +## Interface Control Validation Test {#interface-control-validation} + +The following test is designed to validate the platforms velocity +controller. It will be required that you command the robot to drive in +three circles, of varying radii, by applying the following command to +the platform. + +``` bash +rostopic pub -r 10 /cmd_vel geometry_msgs/Twist "linear: +x: ___ +y: 0.0 +z: 0.0 +angular: +x: 0.0 +y: 0.0 +z: ___" +``` + +The three trials that we request will vary between platforms depending +on the its maximum linear $(v_\{max\})$ and angular velocities +$(\omega_\{max\})$, minimum linear $(v_\{min\})$ and angular velocities +$(\omega_\{min\})$, as well as limitations due to the minimum allowable +turning radius $(r_\{min\})$. Of these three trials, we would like to see +data within three linear velocity bands, as seen in the table below, +resulting in three different turning radii. For the purpose of these +tests, the following formula can be used when determining the required +linear and angular velocities to apply: $r = v/\omega$. + +| Trial \# | Linear X Bands \[m/s\] | Example Linear X Band \[m/s\] | +| ---------|--------------------------------------------|-------------------------------------| +| 1 | $v_\{min\} \cdot [1.0, 1.5]$ | $[0.5, 0.75]$ | +| 2 | $((v_\{max\} - v_\{min\})/2) \cdot [0.9, 1.1]$ | $[2.025, 2.475]$ | +| 3 | $v_\{max\} \cdot [0.9, 1.0]$ | $[4.5, 5.0]$ | + +As an example, a platform with specs $v \in [0.5, 5.0]$, $r_\{min\} = 3$ +would have linear x velocity bands as listed in the table above. The +trials could then be as outlined in the table below. + +| Trial \# | Linear X \[m/s\] | Angular Z \[rad/s\] |Turn Radius \[m\] | +|-----------|--------------------|---------------------|------------------| +| 1 | 0.75 | 0.25 | 3 | +| 2 | 2.25 | 0.5 | 4.5 | +| 3 | 4.5 | 0.75 | 6 | + +Finally, the test data in the collected ROSbag should include the +following: + +1. `/tf` and `/tf_static` +2. `/platform/cmd_vel` +3. `/platform/odom` +4. `/cmd_vel` +5. `/platform/emergency_stop` (if available) +6. raw NavSatFix data from a GPS unit (if possible). diff --git a/outdoornav_user_manual_versioned_docs/version-0.13.0/overview/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.13.0/overview/_category_.json index 663e4088..8414dc7f 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.13.0/overview/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.13.0/overview/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Overview", - "position": 4 -} +{ + "label": "Overview", + "position": 4 +} diff --git a/outdoornav_user_manual_versioned_docs/version-0.13.0/overview/overview_hardware_requirements.mdx b/outdoornav_user_manual_versioned_docs/version-0.13.0/overview/overview_hardware_requirements.mdx index b6abe65e..0883eba8 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.13.0/overview/overview_hardware_requirements.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.13.0/overview/overview_hardware_requirements.mdx @@ -1,44 +1,44 @@ ---- -title: Hardware Requirements -sidebar_label: Hardware Requirements -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -OutdoorNav Software works with compatible UGVs, either from Clearpath -Robotics or third parties. High level requirements for compatible UGVs -are outlined below. Detailed qualification requirements are outlined in -[UGV Integration Requirements](../integration_requirements/integration_overview.mdx). - -## Requirements - -OutdoorNav software does not communicate directly with the UGV motors. -Rather, it publishes target linear and angular velocities packaged in -the [ROS Twist message](http://docs.ros.org/en/noetic/api/geometry_msgs/html/msg/Twist.html) -format and relies on the low level velocity controller of the vehicle to -translate these velocities into correct motor control commands. -Therefore, OutdoorNav Software requires that the UGV must accept the -control commands sent in the [ROS Twist message](http://docs.ros.org/en/noetic/api/geometry_msgs/html/msg/Twist.html) -format. More detailed requirements are outlined in the following table. - -| # | Requirement | Notes | -| - | --------------------------------- | ----------------------------------- | -| 1 | The UGV must be a differential drive or Ackermann drive configuration | Ackerman drive is currently available as a custom implementation; standard in 2023 | -| 2 | The UGV must have velocity control of the wheels and provide kinematic control of the platform | | -| 3 | The UGV shall provide odometry feedback of the wheel direction and velocities and/or steering position | Recommended encoder resolution of 500 ticks per revolution or greater | -| 4 | The UGV should have an emergency stop system with status feedback | | -| 5 | The UGV must accept ROS 1 Twist Commands on the `/cmd_vel` topic | See [API Endpoints](../api/api_endpoints/api_endpoints.mdx); ROS 2 interface available in future release | -| 6 | The UGV must provide odometry and status feedback through ROS topics | See [API Endpoints](../api/api_endpoints/api_endpoints.mdx) | - -## Typical Hardware - -While a variety of different sensors and equipment can be used with -OutdoorNav Software, the following are used most commonly: - -- Clearpath Robotics UGV: Jackal, Husky or Warthog -- GPS System: Dual DURO RTK system or NovAtel Terrastar -- IMU: Microstrain 3DM-GX5-25 -- 3D Laser Sensor: Velodyne VLP-16 -- Tablet Computer: Getac F110 -- Clearpath Long Range Network Station with RTK corrections ("Base Station") +--- +title: Hardware Requirements +sidebar_label: Hardware Requirements +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +OutdoorNav Software works with compatible UGVs, either from Clearpath +Robotics or third parties. High level requirements for compatible UGVs +are outlined below. Detailed qualification requirements are outlined in +[UGV Integration Requirements](../integration_requirements/integration_overview.mdx). + +## Requirements + +OutdoorNav software does not communicate directly with the UGV motors. +Rather, it publishes target linear and angular velocities packaged in +the [ROS Twist message](http://docs.ros.org/en/noetic/api/geometry_msgs/html/msg/Twist.html) +format and relies on the low level velocity controller of the vehicle to +translate these velocities into correct motor control commands. +Therefore, OutdoorNav Software requires that the UGV must accept the +control commands sent in the [ROS Twist message](http://docs.ros.org/en/noetic/api/geometry_msgs/html/msg/Twist.html) +format. More detailed requirements are outlined in the following table. + +| # | Requirement | Notes | +| - | --------------------------------- | ----------------------------------- | +| 1 | The UGV must be a differential drive or Ackermann drive configuration | Ackerman drive is currently available as a custom implementation; standard in 2023 | +| 2 | The UGV must have velocity control of the wheels and provide kinematic control of the platform | | +| 3 | The UGV shall provide odometry feedback of the wheel direction and velocities and/or steering position | Recommended encoder resolution of 500 ticks per revolution or greater | +| 4 | The UGV should have an emergency stop system with status feedback | | +| 5 | The UGV must accept ROS 1 Twist Commands on the `/cmd_vel` topic | See [API Endpoints](../api/api_endpoints/api_endpoints.mdx); ROS 2 interface available in future release | +| 6 | The UGV must provide odometry and status feedback through ROS topics | See [API Endpoints](../api/api_endpoints/api_endpoints.mdx) | + +## Typical Hardware + +While a variety of different sensors and equipment can be used with +OutdoorNav Software, the following are used most commonly: + +- Clearpath Robotics UGV: Jackal, Husky or Warthog +- GPS System: Dual DURO RTK system or NovAtel Terrastar +- IMU: Microstrain 3DM-GX5-25 +- 3D Laser Sensor: Velodyne VLP-16 +- Tablet Computer: Getac F110 +- Clearpath Long Range Network Station with RTK corrections ("Base Station") diff --git a/outdoornav_user_manual_versioned_docs/version-0.13.0/overview/overview_introduction.mdx b/outdoornav_user_manual_versioned_docs/version-0.13.0/overview/overview_introduction.mdx index 83bfa1d6..4f3f1bf7 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.13.0/overview/overview_introduction.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.13.0/overview/overview_introduction.mdx @@ -1,93 +1,93 @@ ---- -title: Introduction -sidebar_label: Introduction -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -## Summary - -OutdoorNav Software is a software package developed by Clearpath -Robotics for autonomous and manual navigation of Unmanned Ground -Vehicles (UGVs) in outdoor environments. - -
-
- -
Web UI Mission Planning View
-
-
- -
-
- -
Web UI Front Camera View
-
-
- -## Compatible Platforms - -While it has been optimized for use with OutdoorNav Hardware from -Clearpath Robotics -([Husky](https://clearpathrobotics.com/husky-unmanned-ground-vehicle-robot/), -[Jackal](https://clearpathrobotics.com/jackal-small-unmanned-ground-vehicle/), -and -[Warthog](https://clearpathrobotics.com/warthog-unmanned-ground-vehicle-robot/)), -it has been designed so that it can be added easily to third-party UGVs. - -
-
- -
Clearpath Robotics Warthog UGV with navigation equipment and operator control unit
-
-
- -## Key Features - -Key features of OutdoorNav Software include: - -- Mission Planning and Autonomous Navigation - - - Robust GPS-based localization with sensor fusion of IMU, LiDAR - and platform odometry - - Autonomous path following via waypoints - - Obstacle Detection and Avoidance: Stop and wait or - autonomously plan a collision-free path around obstacles - without the need to stop - -- Teleoperation - - - Operate the robot remotely using an on-screen or physical - joystick - - Visualize what the robot sees by displaying its network - cameras and LiDAR data - -- Web User Interface (Web UI) - - - Build missions containing sets of paths, with optional task - execution on each path; tasks can be standard tasks (eg. save - camera image) or user provided functions - - View the robot's live position and attitude on the map - - Display robot data such as velocity, signal strength, status - of the motion stop, status of navigation system, and battery charge - - Save and export Missions - -- Application Programming Interface (API) - - - Build your own application and UI by accessing the navigation - API to control the UGV through software or implement fleet - management by accessing the mission API - -- Simulation - - - Begin development of your application prior to purchasing - licenses or commissioning hardware with OutdoorNav software and - the ROS Gazebo simulator - -- Third Party Integration - - - The Web UI and API can be accessed through a network connection; - cloud-based services are available from third parties to - facilitate remote connections and networking to robot hardware - such as Formant.io and Freedom Robotics +--- +title: Introduction +sidebar_label: Introduction +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +## Summary + +OutdoorNav Software is a software package developed by Clearpath +Robotics for autonomous and manual navigation of Unmanned Ground +Vehicles (UGVs) in outdoor environments. + +
+
+ +
Web UI Mission Planning View
+
+
+ +
+
+ +
Web UI Front Camera View
+
+
+ +## Compatible Platforms + +While it has been optimized for use with OutdoorNav Hardware from +Clearpath Robotics +([Husky](https://clearpathrobotics.com/husky-unmanned-ground-vehicle-robot/), +[Jackal](https://clearpathrobotics.com/jackal-small-unmanned-ground-vehicle/), +and +[Warthog](https://clearpathrobotics.com/warthog-unmanned-ground-vehicle-robot/)), +it has been designed so that it can be added easily to third-party UGVs. + +
+
+ +
Clearpath Robotics Warthog UGV with navigation equipment and operator control unit
+
+
+ +## Key Features + +Key features of OutdoorNav Software include: + +- Mission Planning and Autonomous Navigation + + - Robust GPS-based localization with sensor fusion of IMU, LiDAR + and platform odometry + - Autonomous path following via waypoints + - Obstacle Detection and Avoidance: Stop and wait or + autonomously plan a collision-free path around obstacles + without the need to stop + +- Teleoperation + + - Operate the robot remotely using an on-screen or physical + joystick + - Visualize what the robot sees by displaying its network + cameras and LiDAR data + +- Web User Interface (Web UI) + + - Build missions containing sets of paths, with optional task + execution on each path; tasks can be standard tasks (eg. save + camera image) or user provided functions + - View the robot's live position and attitude on the map + - Display robot data such as velocity, signal strength, status + of the motion stop, status of navigation system, and battery charge + - Save and export Missions + +- Application Programming Interface (API) + + - Build your own application and UI by accessing the navigation + API to control the UGV through software or implement fleet + management by accessing the mission API + +- Simulation + + - Begin development of your application prior to purchasing + licenses or commissioning hardware with OutdoorNav software and + the ROS Gazebo simulator + +- Third Party Integration + + - The Web UI and API can be accessed through a network connection; + cloud-based services are available from third parties to + facilitate remote connections and networking to robot hardware + such as Formant.io and Freedom Robotics diff --git a/outdoornav_user_manual_versioned_docs/version-0.13.0/overview/overview_operating_conditions.mdx b/outdoornav_user_manual_versioned_docs/version-0.13.0/overview/overview_operating_conditions.mdx index c02228aa..6e0b17a5 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.13.0/overview/overview_operating_conditions.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.13.0/overview/overview_operating_conditions.mdx @@ -1,177 +1,177 @@ ---- -title: Operating Conditions -sidebar_label: Operating Conditions -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -OutdoorNav Software is designed and tested for use in rugged outdoor -environments. - -## Operating Conditions - -### Terrain - -OutdoorNav Software is compatible with terrains in which the UGV can be -driven manually without excessive slipping. The performance limits will -be a function of the base UGV traction. - -Using Clearpath Robotics Husky, Jackal, and Warthog as a the base UGV, -OutdoorNav Software is suitable for use in the following terrains: - -- asphalt -- concrete -- grass -- snow - -:::note - -Grass should not exceed 30 cm in height if collision avoidance is -enabled. - -::: - -:::note - -Winter/studded tires may be required for proper traction on snow. - -::: - -OutdoorNav Software is currently **not** suitable in the following -terrains: - -- ice -- loose gravel - -:::note - -Support for loose gravel environments is currently being tested and is -expected to be available in late 2023. - -::: - -The terrain capabilities of third-party UGVs will be dependent on a -variety of factors including the vehicle mass, the tire treading, and -motor power. - -### Environment - -OutdoorNav Software is suitable for use in the following environmental -conditions: - -- light rainfall (drizzle) -- light snowfall (powdery snow) - -:::note - -If erratic behavior, such as frequent replanning, is perceived in these -light precipitation conditions, disabling the "continuous planning" -feature may help. - -::: - -OutdoorNav Software is **not** suitable for use in the following -environmental conditions: - -- heavy rainfall -- heavy snowfall - -:::note - -If navigation is required in heavy rain or snow, disabling the collision -avoidance feature will allow the UGV to navigate properly. This should -be done with caution. - -![](/img/outdoornav_images/gps_danger.png) - -::: - -## Performance - -The performance of the system is highly dependent on both the base UGV, -the sensors, the system integration details, and the environment. The -following table provides typical performance metrics for Clearpath -Robotics Jackal and Husky UGVs. - -_System Performance for Husky/Jackal with Typical Sensors_ - -| | Starter Sensor Kit | Standard Sensor Kit (No RTK) | Standard Sensor Kit (RTK) | -|----------------------------------------|-----------------------------------|----------------------------------|----------------------------------| -| GPS sensors | UBlox F9P | 2x SwiftNav Duro | 2x SwiftNav Duro | -| Location accuracy (position & heading) | Less than 60 cm
Less than 10° | Less than 30 cm
Less than 5° | Less than 5 cm
Less than 2° | -| Path tracking accuracy (approximate) | 20 cm | 15 cm | 10 cm | - -## Limitations - -While OutdoorNav Software operates effectively in a range of rugged -outdoor environments, the operator should be aware of the following -limitations and plan accordingly. - -_OutdoorNav System Limitations_ - -| Limitation | Details | -|--------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| RTK accuracy | Localization accuracy for the Standard (RTK) configuration assumes the base station location has been accurately surveyed. | -| Localization accuracy | Localization accuracy is influenced by the quality of GNSS data that is available. Navigating in GNSS denied areas (e.g., under bridges, near tall buildings, etc.) will cause degradation in localization performance. | -| Negative obstacle detection not present | Outdoor Navigation Software does not have negative obstacle detection capability. Your UGV will not detect stairs, cliffs, potholes, depressions or edges and may drive into these obstacles causing harm to people or property. | -| Limited obstacle detection in vertical dimension | The small vertical field of view of 3D LiDARs limits the vertical obstacle detection capability of the OutdoorNav Software. See [Obstacle Detection Limitations](#obstacle-detection-limitations) for details. | -| Low traction may cause UGV to get stuck | Your UGV may navigate itself into a situation where wheels slip or do not make contact with the ground. | -| Rain and snow may affect obstacle detection | Adverse weather conditions may obscure obstacle detection and avoidance data from the VLP-16 LiDAR. Obstacle detection and avoidance may not function in all weather conditions and must be disabled to navigate in heavy snow or rain. | -| Maximum distance between two Viapoints | Distance between any two consecutive Viapoints of a Mission should be less than 20 meters. This will ensure that the global planner can find a valid path to the next Viapoint for the UGV in case there is an obstacle on the path of the UGV. | -| WiFi range limits | The current configurations of the OutdoorNav Software will continue navigation if the WiFi disconnects or goes out of range. The Web UI will reconnect once the WiFi has reconnected but certain functions of the UI may be limited such as the ability to issue a pause/stop commands or sending new missions to the UGV. | -| Wireless motion stop range limits | The UGV will motion stop if the UGV is driven out of range of the wireless motion stop device. | -| RTK GPS limited by WiFi range | If WiFi goes out of range, your UGV will not receive RTK corrections from the Base Station. This can potentially decrease the accuracy of the GPS signal which can subsequently degrade path following performance of your system. | -| Obstacle detection may cause UGV to become stuck | The UGV may stop and become stuck if obstacles are detected and not cleared from its path. If obstacle avoidance is enabled, it may not be able to calculate an acceptable path to the next Viapoint or Goal Point under all circumstances. This will result in the UGV becoming stuck and failing its Mission. | -| Failure to set Datum causes undefined behavior | If the Datum is not set or is not synchronized with the navigation module, the UGV's driven path is undefined and will move unpredictably if Missions are sent in this state. | -| Zones are not currently supported | It is not possible to define “keep-out” or “unsafe” zones that the UGV needs to avoid. Rather, careful use of Waypoint placement by the operator can be used to keep the UGV at a safe distance from unsafe zones. | -| No collision avoidance during teleoperation mode | When operating in Manual Mode (Teleoperation), no collision avoidance is enabled. The operator is responsible for avoiding collisions. | - -### Obstacle Detection Limitations {#obstacle-detection-limitations} - -The maximum collision avoidance range for the OutdoorNav Software is -UGV-dependent and is related to the maximum speed of the UGV. These -ranges for Clearpath Robotics UGVs are: - -- Jackal UGV: 4.5 meters -- Husky UGV: 4.5 meters -- Warthog UGV: 15.0 meters - -While the sensors are able to detect objects at further distances, the -OutdoorNav Software only considers obstacles detected within these -distances for collision avoidance. That is, the UGV will only begin to -decelerate as it detects obstacles within this range. - -The detection itself is also related to the horizontal size -(width/diameter) of the obstacle. The limitations in detecting objects -with small horizontal size are described in the table below. - -_Maximum Reliable Obstacle Detection Distance from UGV, according to Obstacle Horizontal Size_ - -| Object Size (Horizontal) | Starter Sensor Kit | Standard Sensor Kit | -|--------------------------|----------------------------------------------------------------|----------------------------------------------------------------| -| Less than 0.6 cm | No reliable detection | No reliable detection | -| 0.6 to 1.0 cm | 0.8 m | No reliable detection | -| 1.0 to 3.0 cm | 2.0 m | 1.75 m | -| Greater than 3.0 cm | Maximum collision avoidance distance (UGV-specific; see above) | Maximum collision avoidance distance (UGV-specific; see above) | - -Finally, the OutdoorNav Software bounds the obstacle detection to -prevent ground hits and to remove detections above the UGV body. The -following bounds are relative to the ground, assuming a flat surface. -Obstacles that are entirely below the lower bound or entirely above the -upper bound are not considered obstacles and will not be avoided. - -_Obstacle Detection Vertical Bounds_ - -| Vertical Bound | Jackal UGV | Husky UGV | Warthog UGV | -|-----------------------|------------|-----------|-------------| -| Lower Detection Bound | 0.3 m | 0.3 m | 0.3 m | -| Upper Detection Bound | 0.8 m | 1.3 m | 1.8 m | - -:::note - -The vertical detection bounds above are for the Standard Sensor Kit or a -custom sensor configuration that includes a Velodyne. The vertical -detection bounds for the Starter Sensor Kit have yet to be determined. - +--- +title: Operating Conditions +sidebar_label: Operating Conditions +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +OutdoorNav Software is designed and tested for use in rugged outdoor +environments. + +## Operating Conditions + +### Terrain + +OutdoorNav Software is compatible with terrains in which the UGV can be +driven manually without excessive slipping. The performance limits will +be a function of the base UGV traction. + +Using Clearpath Robotics Husky, Jackal, and Warthog as a the base UGV, +OutdoorNav Software is suitable for use in the following terrains: + +- asphalt +- concrete +- grass +- snow + +:::note + +Grass should not exceed 30 cm in height if collision avoidance is +enabled. + +::: + +:::note + +Winter/studded tires may be required for proper traction on snow. + +::: + +OutdoorNav Software is currently **not** suitable in the following +terrains: + +- ice +- loose gravel + +:::note + +Support for loose gravel environments is currently being tested and is +expected to be available in late 2023. + +::: + +The terrain capabilities of third-party UGVs will be dependent on a +variety of factors including the vehicle mass, the tire treading, and +motor power. + +### Environment + +OutdoorNav Software is suitable for use in the following environmental +conditions: + +- light rainfall (drizzle) +- light snowfall (powdery snow) + +:::note + +If erratic behavior, such as frequent replanning, is perceived in these +light precipitation conditions, disabling the "continuous planning" +feature may help. + +::: + +OutdoorNav Software is **not** suitable for use in the following +environmental conditions: + +- heavy rainfall +- heavy snowfall + +:::note + +If navigation is required in heavy rain or snow, disabling the collision +avoidance feature will allow the UGV to navigate properly. This should +be done with caution. + +![](/img/outdoornav_images/gps_danger.png) + +::: + +## Performance + +The performance of the system is highly dependent on both the base UGV, +the sensors, the system integration details, and the environment. The +following table provides typical performance metrics for Clearpath +Robotics Jackal and Husky UGVs. + +_System Performance for Husky/Jackal with Typical Sensors_ + +| | Starter Sensor Kit | Standard Sensor Kit (No RTK) | Standard Sensor Kit (RTK) | +|----------------------------------------|-----------------------------------|----------------------------------|----------------------------------| +| GPS sensors | UBlox F9P | 2x SwiftNav Duro | 2x SwiftNav Duro | +| Location accuracy (position & heading) | Less than 60 cm
Less than 10° | Less than 30 cm
Less than 5° | Less than 5 cm
Less than 2° | +| Path tracking accuracy (approximate) | 20 cm | 15 cm | 10 cm | + +## Limitations + +While OutdoorNav Software operates effectively in a range of rugged +outdoor environments, the operator should be aware of the following +limitations and plan accordingly. + +_OutdoorNav System Limitations_ + +| Limitation | Details | +|--------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| RTK accuracy | Localization accuracy for the Standard (RTK) configuration assumes the base station location has been accurately surveyed. | +| Localization accuracy | Localization accuracy is influenced by the quality of GNSS data that is available. Navigating in GNSS denied areas (e.g., under bridges, near tall buildings, etc.) will cause degradation in localization performance. | +| Negative obstacle detection not present | Outdoor Navigation Software does not have negative obstacle detection capability. Your UGV will not detect stairs, cliffs, potholes, depressions or edges and may drive into these obstacles causing harm to people or property. | +| Limited obstacle detection in vertical dimension | The small vertical field of view of 3D LiDARs limits the vertical obstacle detection capability of the OutdoorNav Software. See [Obstacle Detection Limitations](#obstacle-detection-limitations) for details. | +| Low traction may cause UGV to get stuck | Your UGV may navigate itself into a situation where wheels slip or do not make contact with the ground. | +| Rain and snow may affect obstacle detection | Adverse weather conditions may obscure obstacle detection and avoidance data from the VLP-16 LiDAR. Obstacle detection and avoidance may not function in all weather conditions and must be disabled to navigate in heavy snow or rain. | +| Maximum distance between two Viapoints | Distance between any two consecutive Viapoints of a Mission should be less than 20 meters. This will ensure that the global planner can find a valid path to the next Viapoint for the UGV in case there is an obstacle on the path of the UGV. | +| WiFi range limits | The current configurations of the OutdoorNav Software will continue navigation if the WiFi disconnects or goes out of range. The Web UI will reconnect once the WiFi has reconnected but certain functions of the UI may be limited such as the ability to issue a pause/stop commands or sending new missions to the UGV. | +| Wireless motion stop range limits | The UGV will motion stop if the UGV is driven out of range of the wireless motion stop device. | +| RTK GPS limited by WiFi range | If WiFi goes out of range, your UGV will not receive RTK corrections from the Base Station. This can potentially decrease the accuracy of the GPS signal which can subsequently degrade path following performance of your system. | +| Obstacle detection may cause UGV to become stuck | The UGV may stop and become stuck if obstacles are detected and not cleared from its path. If obstacle avoidance is enabled, it may not be able to calculate an acceptable path to the next Viapoint or Goal Point under all circumstances. This will result in the UGV becoming stuck and failing its Mission. | +| Failure to set Datum causes undefined behavior | If the Datum is not set or is not synchronized with the navigation module, the UGV's driven path is undefined and will move unpredictably if Missions are sent in this state. | +| Zones are not currently supported | It is not possible to define “keep-out” or “unsafe” zones that the UGV needs to avoid. Rather, careful use of Waypoint placement by the operator can be used to keep the UGV at a safe distance from unsafe zones. | +| No collision avoidance during teleoperation mode | When operating in Manual Mode (Teleoperation), no collision avoidance is enabled. The operator is responsible for avoiding collisions. | + +### Obstacle Detection Limitations {#obstacle-detection-limitations} + +The maximum collision avoidance range for the OutdoorNav Software is +UGV-dependent and is related to the maximum speed of the UGV. These +ranges for Clearpath Robotics UGVs are: + +- Jackal UGV: 4.5 meters +- Husky UGV: 4.5 meters +- Warthog UGV: 15.0 meters + +While the sensors are able to detect objects at further distances, the +OutdoorNav Software only considers obstacles detected within these +distances for collision avoidance. That is, the UGV will only begin to +decelerate as it detects obstacles within this range. + +The detection itself is also related to the horizontal size +(width/diameter) of the obstacle. The limitations in detecting objects +with small horizontal size are described in the table below. + +_Maximum Reliable Obstacle Detection Distance from UGV, according to Obstacle Horizontal Size_ + +| Object Size (Horizontal) | Starter Sensor Kit | Standard Sensor Kit | +|--------------------------|----------------------------------------------------------------|----------------------------------------------------------------| +| Less than 0.6 cm | No reliable detection | No reliable detection | +| 0.6 to 1.0 cm | 0.8 m | No reliable detection | +| 1.0 to 3.0 cm | 2.0 m | 1.75 m | +| Greater than 3.0 cm | Maximum collision avoidance distance (UGV-specific; see above) | Maximum collision avoidance distance (UGV-specific; see above) | + +Finally, the OutdoorNav Software bounds the obstacle detection to +prevent ground hits and to remove detections above the UGV body. The +following bounds are relative to the ground, assuming a flat surface. +Obstacles that are entirely below the lower bound or entirely above the +upper bound are not considered obstacles and will not be avoided. + +_Obstacle Detection Vertical Bounds_ + +| Vertical Bound | Jackal UGV | Husky UGV | Warthog UGV | +|-----------------------|------------|-----------|-------------| +| Lower Detection Bound | 0.3 m | 0.3 m | 0.3 m | +| Upper Detection Bound | 0.8 m | 1.3 m | 1.8 m | + +:::note + +The vertical detection bounds above are for the Standard Sensor Kit or a +custom sensor configuration that includes a Velodyne. The vertical +detection bounds for the Starter Sensor Kit have yet to be determined. + ::: \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.13.0/overview/overview_scope.mdx b/outdoornav_user_manual_versioned_docs/version-0.13.0/overview/overview_scope.mdx index ba0092f1..f1a32607 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.13.0/overview/overview_scope.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.13.0/overview/overview_scope.mdx @@ -1,15 +1,15 @@ ---- -title: Scope -sidebar_label: Scope -sidebar_position: 2 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -This documentation focuses on the OutdoorNav Software itself, including -hardware dependencies and integration, but not the specifics of UGV -hardware. For details on compatible Clearpath Robotics UGVs and custom -hardware integrations, contact \ or check -out our [YouTube channel](https://www.youtube.com/channel/UCNPP3C-ZK3mwpG2x89VE-2Q). - - +--- +title: Scope +sidebar_label: Scope +sidebar_position: 2 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +This documentation focuses on the OutdoorNav Software itself, including +hardware dependencies and integration, but not the specifics of UGV +hardware. For details on compatible Clearpath Robotics UGVs and custom +hardware integrations, contact \ or check +out our [YouTube channel](https://www.youtube.com/channel/UCNPP3C-ZK3mwpG2x89VE-2Q). + + diff --git a/outdoornav_user_manual_versioned_docs/version-0.13.0/safety.mdx b/outdoornav_user_manual_versioned_docs/version-0.13.0/safety.mdx index ea70a51b..ba0e8ddf 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.13.0/safety.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.13.0/safety.mdx @@ -1,144 +1,144 @@ ---- -title: Safety -sidebar_label: Safety -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -## Important Safety Information - -The use of Unmanned Ground Vehicles (UGVs) can result in unexpected and -dangerous behavior. Although Clearpath Robotics endeavors to create safe -and reliable software and systems, autonomous outdoor UGVs should not be -considered safe for unsupervised use around humans or other obstacles. -No level of safety and reliability of software and non-safety rated -hardware components is guaranteed. - -Clearpath strongly recommends that users carry out a risk assessment -related to their application and deployment of autonomous UGVs. The -ISO-12100 standard [Risk assessment and risk reduction](https://www.iso.org/standard/51528.html) provides guidance on -performing risk assessments. - -Functional safety in robotics is often achieved through the use of -safety related parts and control systems to minimize risks such as -safety LiDARs for obstacle detection. These hardware components must be -designed into the UGV hardware and can be tightly integrated with -navigation software. Clearpath Robotics recommends that this process be -undertaken after the product or process has been fully defined. It can -be a significant design effort. - -## Safety Notice Levels - -For Clearpath Robotics hardware and software, the risk level is captured -using the following types of labels. - -![](/img/outdoornav_images/safety_information.png) - -## General Hazard Labels - -Review the following to learn more about the labels that may be used on -Clearpath Robotics products. Hazards can also apply to attachments and -accessories used in conjunction with a Clearpath Robotics product. UGVs -from other providers may present additional hazards and risks. - -_General Hazards_ - -| Label | Label Title | Label Description | -|--------------------------------------------------------------------------------------|----------------------|------------------------------------------| -|
| Automatic Motion Hazard | Clearpath Robotics UGVs may begin moving suddenly, either autonomously or when being driven manually. Always be aware of Clearpath Robotics products and their potential for movement. | -|
| Crushing Risk | Objects or personnel can be crushed between the Clearpath Robotics UGV and another object. Keep hands and other objects clear of crush points at all times. Keep clear of all docking Clearpath Robotics UGVs. | -|
| Electrical Shock Risk | Clearpath Robotics UGVs contain circuitry and batteries that may cause electrical shock if not properly insulated. | -|
| Entanglement Risk | Clearpath Robotics UGVs as well as their cameras can lead to entanglement of hair or dangling materials during their rotation. Keep hair and dangling materials away from Clearpath Robotics UGVs during motion. | -|
| Environmental Hazard | Clearpath Robotics UGVs contain batteries and materials that may require special disposal methods. Consult local regulations. | -|
| Falling Object Risk | Beware of objects that may have shifted in any Clearpath Robotics UGV crate as they pose a risk of falling when opened. | -|
| High Surface Temperature Risk | UGV computer heat sinks and UGV motors can become extremely hot during operation. | -|
| Impact Risk | Clearpath Robotics UGVs travelling through a facility can potentially impact objects and personnel. Keep clear of all docking Clearpath Robotics UGVs. | -|
| Laser Radiation Risk | Clearpath Robotics UGVs may use Class 1 laser products. These provide no hazard during normal use, however it is not recommended to stare directly into the beam(s). | -|
| Material Hazard - Lithium | Lithium UGV batteries contain harmful material. Always use proper handling procedures when handling UGV batteries. | -|
| Manual Load Lifting Risk | Always use ergonomic techniques when manually lifting loads. | -|
| Pinching Risk | Keep hands and other objects clear of pinch points at all times. Keep clear of all docking Clearpath Robotics UGVs. | -|
| Radio Frequency Risk | Clearpath Robotics UGVs and/or accessories may use radio frequency (RF) radiating antennas. These provide no hazard during normal use, however prolonged exposure around the antenna is not recommended. | -|
| Tripping Hazard | Clearpath Robotics products may pose a tripping hazard. | - -## Safety Awareness - -Personnel present during the operation of an Unmanned Ground Vehicle -(UGV) need to be made aware or be accompanied by personnel who are -familiar with the specific risks and hazards associated with autonomous -mobile robots (AMR). The following checklist identifies basic topics -that should be addressed by site-specific worker and visitor safety -orientation training. - -
- -
- -- Proper PPE must be worn, including safety footwear (ie. steel toe). -- Crossing into the path of a moving UGV should be avoided, as well as - placing or throwing obstacles into the path of a moving UGV. - -
- -
- -- Be aware that a UGV can be anywhere in the operating area of the - facility at any time, and may pose a tripping hazard even when not - in motion. -- Personnel need to be aware of the UGV docking and charging areas, - where detection fields are reduced. -- Personnel should be aware that Clearpath Robotics UGVs LiDAR safety - scanners use a class 1 laser and high intensity LED. -- Personnel should keep all loose clothing and body parts away from - UGVs, accessories, attachments, and payloads, while they are in - autonomous operation. Using an Emergency Stop button is the only - acceptable manner of interacting with a Clearpath Robotics UGV or - attachment while it is being operated autonomously. - -In addition to the preceding basic items for all workers and visitors, -the following should be considered for facility personnel, including -drivers of other UGVs: - -- When required to move a product manually, personnel must ensure it - is in an Emergency Stop state or shut down completely and should not - push manually for prolonged periods. -- Alert personnel that while operating a Clearpath Robotics UGV - outside of the Autonomy State, they are solely responsible for - obstacle and collision avoidance. -- Maintenance of a Clearpath UGV not outlined in either this document - or the operations and maintenance manual can only be performed by a - Clearpath Robotics Authorized Personnel. - -To reduce the risk of harming people or damaging properties, a trained -operator must monitor the behavior of the UGV under autonomous -navigation mode at all times. The operator should use the wireless -emergency stop device to immediately avert any possible damaging or -dangerous behavior from the UGV. Failure in proper use of the software -might result in collision of the UGV into objects. - -- The minimum height for detecting obstacles under ideal operation - conditions (flat ground, no snow/rain/fog, normal operation of the - LiDAR, etc) when using the standard Clearpath Robotics OutdoorNav - Hardware package on a Husky is typically 0.2 meters high at 2.3 - meters distance away from the UGV. Your UGV may differ. Ensure that - low-height obstacles are removed from the potential path of the UGV - prior to operation. -- OutdoorNav Software does not have negative obstacle detection - capability. This means that your UGV will not detect stairs, cliffs - or edges and may drive off these obstacles causing harm to people or - properties as well as potentially damage the UGV. -- Adverse weather conditions may obscure obstacle detection and - avoidance data from the VLP-16 LiDAR. Obstacle detection and - avoidance may not function properly in snow, rain or fog. -- The current configurations of the OutdoorNav Software will continue - navigation if the WiFi disconnects or goes out of range. The Web UI - will reconnect once the WiFi has reconnected but certain functions - of the Web UI may be limited such as the ability to issue a stop - command or send new missions to the UGV. -- If connection of the UGV to the base station is lost (e.g., WiFi - goes out of range, low battery level, etc), UGV will not receive RTK - corrections from the base station. This can potentially decrease the - accuracy of the GPS signal which can subsequently degrade path - following performance of your system. -- Obstacle detection and avoidance is disabled during the docking and - undocking operations. Keep this area clear of people and objects. +--- +title: Safety +sidebar_label: Safety +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +## Important Safety Information + +The use of Unmanned Ground Vehicles (UGVs) can result in unexpected and +dangerous behavior. Although Clearpath Robotics endeavors to create safe +and reliable software and systems, autonomous outdoor UGVs should not be +considered safe for unsupervised use around humans or other obstacles. +No level of safety and reliability of software and non-safety rated +hardware components is guaranteed. + +Clearpath strongly recommends that users carry out a risk assessment +related to their application and deployment of autonomous UGVs. The +ISO-12100 standard [Risk assessment and risk reduction](https://www.iso.org/standard/51528.html) provides guidance on +performing risk assessments. + +Functional safety in robotics is often achieved through the use of +safety related parts and control systems to minimize risks such as +safety LiDARs for obstacle detection. These hardware components must be +designed into the UGV hardware and can be tightly integrated with +navigation software. Clearpath Robotics recommends that this process be +undertaken after the product or process has been fully defined. It can +be a significant design effort. + +## Safety Notice Levels + +For Clearpath Robotics hardware and software, the risk level is captured +using the following types of labels. + +![](/img/outdoornav_images/safety_information.png) + +## General Hazard Labels + +Review the following to learn more about the labels that may be used on +Clearpath Robotics products. Hazards can also apply to attachments and +accessories used in conjunction with a Clearpath Robotics product. UGVs +from other providers may present additional hazards and risks. + +_General Hazards_ + +| Label | Label Title | Label Description | +|--------------------------------------------------------------------------------------|----------------------|------------------------------------------| +|
| Automatic Motion Hazard | Clearpath Robotics UGVs may begin moving suddenly, either autonomously or when being driven manually. Always be aware of Clearpath Robotics products and their potential for movement. | +|
| Crushing Risk | Objects or personnel can be crushed between the Clearpath Robotics UGV and another object. Keep hands and other objects clear of crush points at all times. Keep clear of all docking Clearpath Robotics UGVs. | +|
| Electrical Shock Risk | Clearpath Robotics UGVs contain circuitry and batteries that may cause electrical shock if not properly insulated. | +|
| Entanglement Risk | Clearpath Robotics UGVs as well as their cameras can lead to entanglement of hair or dangling materials during their rotation. Keep hair and dangling materials away from Clearpath Robotics UGVs during motion. | +|
| Environmental Hazard | Clearpath Robotics UGVs contain batteries and materials that may require special disposal methods. Consult local regulations. | +|
| Falling Object Risk | Beware of objects that may have shifted in any Clearpath Robotics UGV crate as they pose a risk of falling when opened. | +|
| High Surface Temperature Risk | UGV computer heat sinks and UGV motors can become extremely hot during operation. | +|
| Impact Risk | Clearpath Robotics UGVs travelling through a facility can potentially impact objects and personnel. Keep clear of all docking Clearpath Robotics UGVs. | +|
| Laser Radiation Risk | Clearpath Robotics UGVs may use Class 1 laser products. These provide no hazard during normal use, however it is not recommended to stare directly into the beam(s). | +|
| Material Hazard - Lithium | Lithium UGV batteries contain harmful material. Always use proper handling procedures when handling UGV batteries. | +|
| Manual Load Lifting Risk | Always use ergonomic techniques when manually lifting loads. | +|
| Pinching Risk | Keep hands and other objects clear of pinch points at all times. Keep clear of all docking Clearpath Robotics UGVs. | +|
| Radio Frequency Risk | Clearpath Robotics UGVs and/or accessories may use radio frequency (RF) radiating antennas. These provide no hazard during normal use, however prolonged exposure around the antenna is not recommended. | +|
| Tripping Hazard | Clearpath Robotics products may pose a tripping hazard. | + +## Safety Awareness + +Personnel present during the operation of an Unmanned Ground Vehicle +(UGV) need to be made aware or be accompanied by personnel who are +familiar with the specific risks and hazards associated with autonomous +mobile robots (AMR). The following checklist identifies basic topics +that should be addressed by site-specific worker and visitor safety +orientation training. + +
+ +
+ +- Proper PPE must be worn, including safety footwear (ie. steel toe). +- Crossing into the path of a moving UGV should be avoided, as well as + placing or throwing obstacles into the path of a moving UGV. + +
+ +
+ +- Be aware that a UGV can be anywhere in the operating area of the + facility at any time, and may pose a tripping hazard even when not + in motion. +- Personnel need to be aware of the UGV docking and charging areas, + where detection fields are reduced. +- Personnel should be aware that Clearpath Robotics UGVs LiDAR safety + scanners use a class 1 laser and high intensity LED. +- Personnel should keep all loose clothing and body parts away from + UGVs, accessories, attachments, and payloads, while they are in + autonomous operation. Using an Emergency Stop button is the only + acceptable manner of interacting with a Clearpath Robotics UGV or + attachment while it is being operated autonomously. + +In addition to the preceding basic items for all workers and visitors, +the following should be considered for facility personnel, including +drivers of other UGVs: + +- When required to move a product manually, personnel must ensure it + is in an Emergency Stop state or shut down completely and should not + push manually for prolonged periods. +- Alert personnel that while operating a Clearpath Robotics UGV + outside of the Autonomy State, they are solely responsible for + obstacle and collision avoidance. +- Maintenance of a Clearpath UGV not outlined in either this document + or the operations and maintenance manual can only be performed by a + Clearpath Robotics Authorized Personnel. + +To reduce the risk of harming people or damaging properties, a trained +operator must monitor the behavior of the UGV under autonomous +navigation mode at all times. The operator should use the wireless +emergency stop device to immediately avert any possible damaging or +dangerous behavior from the UGV. Failure in proper use of the software +might result in collision of the UGV into objects. + +- The minimum height for detecting obstacles under ideal operation + conditions (flat ground, no snow/rain/fog, normal operation of the + LiDAR, etc) when using the standard Clearpath Robotics OutdoorNav + Hardware package on a Husky is typically 0.2 meters high at 2.3 + meters distance away from the UGV. Your UGV may differ. Ensure that + low-height obstacles are removed from the potential path of the UGV + prior to operation. +- OutdoorNav Software does not have negative obstacle detection + capability. This means that your UGV will not detect stairs, cliffs + or edges and may drive off these obstacles causing harm to people or + properties as well as potentially damage the UGV. +- Adverse weather conditions may obscure obstacle detection and + avoidance data from the VLP-16 LiDAR. Obstacle detection and + avoidance may not function properly in snow, rain or fog. +- The current configurations of the OutdoorNav Software will continue + navigation if the WiFi disconnects or goes out of range. The Web UI + will reconnect once the WiFi has reconnected but certain functions + of the Web UI may be limited such as the ability to issue a stop + command or send new missions to the UGV. +- If connection of the UGV to the base station is lost (e.g., WiFi + goes out of range, low battery level, etc), UGV will not receive RTK + corrections from the base station. This can potentially decrease the + accuracy of the GPS signal which can subsequently degrade path + following performance of your system. +- Obstacle detection and avoidance is disabled during the docking and + undocking operations. Keep this area clear of people and objects. diff --git a/outdoornav_user_manual_versioned_docs/version-0.14.0/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.14.0/_category_.json index c123e1bc..f5966a95 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.14.0/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.14.0/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "OutdoorNav User Manual", - "position": 1 -} +{ + "label": "OutdoorNav User Manual", + "position": 1 +} diff --git a/outdoornav_user_manual_versioned_docs/version-0.14.0/api/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.14.0/api/_category_.json index a6e53920..79c71658 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.14.0/api/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.14.0/api/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Application Programming Interface", - "position": 7 -} +{ + "label": "Application Programming Interface", + "position": 7 +} diff --git a/outdoornav_user_manual_versioned_docs/version-0.14.0/api/api_endpoints/api_endpoints.mdx b/outdoornav_user_manual_versioned_docs/version-0.14.0/api/api_endpoints/api_endpoints.mdx index c65c4150..e1169e6e 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.14.0/api/api_endpoints/api_endpoints.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.14.0/api/api_endpoints/api_endpoints.mdx @@ -1,16 +1,16 @@ ---- -title: API Endpoints -sidebar_label: API Endpoints -sidebar_position: 2 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -The ROS 1 Noetic API can be used to monitor and manage OutdoorNav Software. Details -are available through the child pages. - -- [Platform API](platform_api.mdx) -- [Autonomy API](autonomy_api.mdx) -- [Mission Manager API](mission_manager_api.mdx) -- [Definitions](definitions.mdx) - +--- +title: API Endpoints +sidebar_label: API Endpoints +sidebar_position: 2 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +The ROS 1 Noetic API can be used to monitor and manage OutdoorNav Software. Details +are available through the child pages. + +- [Platform API](platform_api.mdx) +- [Autonomy API](autonomy_api.mdx) +- [Mission Manager API](mission_manager_api.mdx) +- [Definitions](definitions.mdx) + diff --git a/outdoornav_user_manual_versioned_docs/version-0.14.0/api/api_examples/api_examples.mdx b/outdoornav_user_manual_versioned_docs/version-0.14.0/api/api_examples/api_examples.mdx index 333bd135..eb556d30 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.14.0/api/api_examples/api_examples.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.14.0/api/api_examples/api_examples.mdx @@ -1,21 +1,21 @@ ---- -title: API Examples -sidebar_label: API Examples -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -The OutdoorNav API examples are now available and accesible to everyone. A -[Python API library](https://github.com/cpr-application/clearpath_onav_examples) along -with some example scripts are available to build and use for our application. - -A few examples scripts follow with detailed explanations: - -- [Execute Mission from File](./mission_from_file.mdx) -- [Execute Mission with Custom Task](./mission_with_custom_tasks.mdx) -- [Status Monitoring](./monitor_status.mdx) -- [Network of Paths](./network_of_paths.mdx) - -The documentation for the Python API library can be built following the -instructions in the above linked GitHub repository. +--- +title: API Examples +sidebar_label: API Examples +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +The OutdoorNav API examples are now available and accesible to everyone. A +[Python API library](https://github.com/cpr-application/clearpath_onav_examples) along +with some example scripts are available to build and use for our application. + +A few examples scripts follow with detailed explanations: + +- [Execute Mission from File](./mission_from_file.mdx) +- [Execute Mission with Custom Task](./mission_with_custom_tasks.mdx) +- [Status Monitoring](./monitor_status.mdx) +- [Network of Paths](./network_of_paths.mdx) + +The documentation for the Python API library can be built following the +instructions in the above linked GitHub repository. diff --git a/outdoornav_user_manual_versioned_docs/version-0.14.0/api/api_examples/mission_from_file.mdx b/outdoornav_user_manual_versioned_docs/version-0.14.0/api/api_examples/mission_from_file.mdx index eff0f768..0abb4ea9 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.14.0/api/api_examples/mission_from_file.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.14.0/api/api_examples/mission_from_file.mdx @@ -1,210 +1,210 @@ ---- -title: Mission from YAML File -sidebar_label: Mission from YAML File -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -## The Code - -``` python -#! /usr/bin/env python3 - -from cpr_outdoornav_api_examples_lib.ros_node import RosNode -from cpr_outdoornav_api_examples_lib.yaml_config import YamlConfig -import time -import os - -# The file containing the mission configuration (adjust as needed) -MISSION_YAML_FILE = os.environ.get("HOME", "administrator") + "/example_ws/src/" + \ - "CPR-OutdoorNav/src/cpr_outdoornav_api_examples/config/sample_mission.yaml" - -class MissionFromYamlFile(RosNode): - """ - Create and run a mission loaded from a YAML configuration file. - Be sure that your robot is within 3 meters of your first Waypoint prior to starting the mission. - """ - - def __init__(self): - """Initialize the mission details and server connection.""" - - RosNode.__init__(self, 'mission_from_yaml_file') - self.mission = YamlConfig.yamlFileToMission(MISSION_YAML_FILE) - - # NOTE: to save the configuration to file, uncomment the following lines: - # YamlConfig.missionToYamlFile('/tmp/test1.yaml', self.mission) - - def run(self): - """Execute the mission.""" - - if not self.mission.startMission(): - return False - while not self.mission.isMissionComplete(): - time.sleep(1.0) - return self.mission.getMissionSuccess() - - -if __name__ == '__main__': - if MissionFromYamlFile().run(): - print("Mission completed successfully") - else: - print("Mission failed") - -``` - -## The Code Explained - -Let's break down the code. - -``` python -#! /usr/bin/env python3 -``` - -Every Python ROS Node will have this declaration at the top. The first line makes sure your script is executed as a Python3 script. - - -``` python -from cpr_outdoornav_api_examples_lib.ros_node import RosNode -from cpr_outdoornav_api_examples_lib.yaml_config import YamlConfig -``` - -We provide a library of classes that can be used within your file for ease of use. In the above example, we import the RosNode and YamlConfig classes. -The RosNode class is used by all of our examples to initialize a ROS node that will execute the example mission. The YamlConfig class is used to import -a YAML file and convert it to a Mission object. - -``` python -MISSION_YAML_FILE = os.environ.get("HOME", "administrator") + "/example_ws/src/" + \ - "CPR-OutdoorNav/src/cpr_outdoornav_api_examples/config/sample_mission.yaml" -``` - -This defines the file path of the YAML file that contains the mission to be executed. See the [YAML file](#yaml-file) below for the example YAML file -that will be executed. - -``` python -class MissionFromYamlFile(RosNode): -``` - -Creates a class for your example, which inherits a RosNode object. All python mission files are requried to inherit the RosNode class. - -``` python - RosNode.__init__(self, 'mission_from_yaml_file') - self.mission = YamlConfig.yamlFileToMission(MISSION_YAML_FILE)``` -``` - -Initialize the ROS node with name `mission_from_yaml_file` and import the the mission from the yaml config file. The `YamlConfig.yamlFileToMission()` function -reads teh configuration you have created in the YAML file and converts it into a Mission object. - -``` python - if not self.mission.startMission(): - return False -``` - -Upon execution of the script, the `self.mission.startMission()` function creates the mission client if not yet created, connects to the mission action server -and sends the goal to the action server to begin the execution of the mission. - -``` python - while not self.mission.isMissionComplete(): - time.sleep(1.0) - return self.mission.getMissionSuccess() -``` - -`self.mission.isMissionComplete()` monitors the mission status and only proceeds to terminating the mission has completed or been cancelled. - - -## YAML File {#yaml-file} - -The following YAML file is used in the above example mission. - -``` python -mission: - header: - seq: 0 - stamp: - secs: 0 - nsecs: 0 - frame_id: '' - name: "Sample Mission" - uuid: "8f57fd20-8a8c-4748-85ef-be1495b3ee06" - waypoints: - - - name: "Waypoint: 60" - uuid: "3edcedd7-ae0d-47cf-bd23-f7988d2779b7" - latitude: 50.10950820165676 - longitude: -97.31898507913323 - heading: -1.0 - tasks: [] - position_tolerance: -1.0 - yaw_tolerance: -1.0 - - - name: "Waypoint: 61" - uuid: "ad23202e-7067-4f1c-8677-2dc07af1e729" - latitude: 50.1095698924641 - longitude: -97.31929487427445 - heading: -1.0 - tasks: [] - position_tolerance: -1.0 - yaw_tolerance: -1.0 - - - name: "Waypoint: 62" - uuid: "fe452e77-4a26-41b0-b4ab-ee1859612a60" - latitude: 50.109437123117864 - longitude: -97.31946787675591 - heading: -1.0 - tasks: - - - name: "Wait" - uuid: "ec1121a8-7481-420f-b532-c47ea86afcd7" - service_call: "/wait" - version: "0.0.0" - floats: [3.0] - strings: [] - position_tolerance: -1.0 - yaw_tolerance: -1.0 - - - name: "Waypoint: 63" - uuid: "5ed54c1f-1599-497a-9c16-93c7ca6c355e" - latitude: 50.109384820042074 - longitude: -97.3194477601883 - heading: -1.0 - tasks: [] - position_tolerance: -1.0 - yaw_tolerance: -1.0 - - - name: "Waypoint: 64" - uuid: "2e021345-636b-4bd3-81ba-4f6901fdc016" - latitude: 50.10934056359333 - longitude: -97.31936192949982 - heading: -1.0 - tasks: [] - position_tolerance: -1.0 - yaw_tolerance: -1.0 - - - name: "Waypoint: 65" - uuid: "00c041ee-2ca4-40ba-8e38-65ac900d5a1d" - latitude: 50.10946930962604 - longitude: -97.31921709021302 - heading: -1.0 - tasks: [] - position_tolerance: -1.0 - yaw_tolerance: -1.0 - - - name: "Waypoint: 66" - uuid: "a5826fc5-b696-4b63-82aa-cc2e7a426640" - latitude: 50.10949344950718 - longitude: -97.31911382516594 - heading: -1.0 - tasks: [] - position_tolerance: -1.0 - yaw_tolerance: -1.0 - - - name: "Waypoint: 67" - uuid: "7ff204b2-79a3-46da-a8c0-2c734b4c5314" - latitude: 50.10949613171619 - longitude: -97.31898910244675 - heading: -1.0 - tasks: [] - position_tolerance: -1.0 - yaw_tolerance: -1.0 - onav_config: "To be determined" -``` +--- +title: Mission from YAML File +sidebar_label: Mission from YAML File +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +## The Code + +``` python +#! /usr/bin/env python3 + +from cpr_outdoornav_api_examples_lib.ros_node import RosNode +from cpr_outdoornav_api_examples_lib.yaml_config import YamlConfig +import time +import os + +# The file containing the mission configuration (adjust as needed) +MISSION_YAML_FILE = os.environ.get("HOME", "administrator") + "/example_ws/src/" + \ + "CPR-OutdoorNav/src/cpr_outdoornav_api_examples/config/sample_mission.yaml" + +class MissionFromYamlFile(RosNode): + """ + Create and run a mission loaded from a YAML configuration file. + Be sure that your robot is within 3 meters of your first Waypoint prior to starting the mission. + """ + + def __init__(self): + """Initialize the mission details and server connection.""" + + RosNode.__init__(self, 'mission_from_yaml_file') + self.mission = YamlConfig.yamlFileToMission(MISSION_YAML_FILE) + + # NOTE: to save the configuration to file, uncomment the following lines: + # YamlConfig.missionToYamlFile('/tmp/test1.yaml', self.mission) + + def run(self): + """Execute the mission.""" + + if not self.mission.startMission(): + return False + while not self.mission.isMissionComplete(): + time.sleep(1.0) + return self.mission.getMissionSuccess() + + +if __name__ == '__main__': + if MissionFromYamlFile().run(): + print("Mission completed successfully") + else: + print("Mission failed") + +``` + +## The Code Explained + +Let's break down the code. + +``` python +#! /usr/bin/env python3 +``` + +Every Python ROS Node will have this declaration at the top. The first line makes sure your script is executed as a Python3 script. + + +``` python +from cpr_outdoornav_api_examples_lib.ros_node import RosNode +from cpr_outdoornav_api_examples_lib.yaml_config import YamlConfig +``` + +We provide a library of classes that can be used within your file for ease of use. In the above example, we import the RosNode and YamlConfig classes. +The RosNode class is used by all of our examples to initialize a ROS node that will execute the example mission. The YamlConfig class is used to import +a YAML file and convert it to a Mission object. + +``` python +MISSION_YAML_FILE = os.environ.get("HOME", "administrator") + "/example_ws/src/" + \ + "CPR-OutdoorNav/src/cpr_outdoornav_api_examples/config/sample_mission.yaml" +``` + +This defines the file path of the YAML file that contains the mission to be executed. See the [YAML file](#yaml-file) below for the example YAML file +that will be executed. + +``` python +class MissionFromYamlFile(RosNode): +``` + +Creates a class for your example, which inherits a RosNode object. All python mission files are requried to inherit the RosNode class. + +``` python + RosNode.__init__(self, 'mission_from_yaml_file') + self.mission = YamlConfig.yamlFileToMission(MISSION_YAML_FILE)``` +``` + +Initialize the ROS node with name `mission_from_yaml_file` and import the the mission from the yaml config file. The `YamlConfig.yamlFileToMission()` function +reads teh configuration you have created in the YAML file and converts it into a Mission object. + +``` python + if not self.mission.startMission(): + return False +``` + +Upon execution of the script, the `self.mission.startMission()` function creates the mission client if not yet created, connects to the mission action server +and sends the goal to the action server to begin the execution of the mission. + +``` python + while not self.mission.isMissionComplete(): + time.sleep(1.0) + return self.mission.getMissionSuccess() +``` + +`self.mission.isMissionComplete()` monitors the mission status and only proceeds to terminating the mission has completed or been cancelled. + + +## YAML File {#yaml-file} + +The following YAML file is used in the above example mission. + +``` python +mission: + header: + seq: 0 + stamp: + secs: 0 + nsecs: 0 + frame_id: '' + name: "Sample Mission" + uuid: "8f57fd20-8a8c-4748-85ef-be1495b3ee06" + waypoints: + - + name: "Waypoint: 60" + uuid: "3edcedd7-ae0d-47cf-bd23-f7988d2779b7" + latitude: 50.10950820165676 + longitude: -97.31898507913323 + heading: -1.0 + tasks: [] + position_tolerance: -1.0 + yaw_tolerance: -1.0 + - + name: "Waypoint: 61" + uuid: "ad23202e-7067-4f1c-8677-2dc07af1e729" + latitude: 50.1095698924641 + longitude: -97.31929487427445 + heading: -1.0 + tasks: [] + position_tolerance: -1.0 + yaw_tolerance: -1.0 + - + name: "Waypoint: 62" + uuid: "fe452e77-4a26-41b0-b4ab-ee1859612a60" + latitude: 50.109437123117864 + longitude: -97.31946787675591 + heading: -1.0 + tasks: + - + name: "Wait" + uuid: "ec1121a8-7481-420f-b532-c47ea86afcd7" + service_call: "/wait" + version: "0.0.0" + floats: [3.0] + strings: [] + position_tolerance: -1.0 + yaw_tolerance: -1.0 + - + name: "Waypoint: 63" + uuid: "5ed54c1f-1599-497a-9c16-93c7ca6c355e" + latitude: 50.109384820042074 + longitude: -97.3194477601883 + heading: -1.0 + tasks: [] + position_tolerance: -1.0 + yaw_tolerance: -1.0 + - + name: "Waypoint: 64" + uuid: "2e021345-636b-4bd3-81ba-4f6901fdc016" + latitude: 50.10934056359333 + longitude: -97.31936192949982 + heading: -1.0 + tasks: [] + position_tolerance: -1.0 + yaw_tolerance: -1.0 + - + name: "Waypoint: 65" + uuid: "00c041ee-2ca4-40ba-8e38-65ac900d5a1d" + latitude: 50.10946930962604 + longitude: -97.31921709021302 + heading: -1.0 + tasks: [] + position_tolerance: -1.0 + yaw_tolerance: -1.0 + - + name: "Waypoint: 66" + uuid: "a5826fc5-b696-4b63-82aa-cc2e7a426640" + latitude: 50.10949344950718 + longitude: -97.31911382516594 + heading: -1.0 + tasks: [] + position_tolerance: -1.0 + yaw_tolerance: -1.0 + - + name: "Waypoint: 67" + uuid: "7ff204b2-79a3-46da-a8c0-2c734b4c5314" + latitude: 50.10949613171619 + longitude: -97.31898910244675 + heading: -1.0 + tasks: [] + position_tolerance: -1.0 + yaw_tolerance: -1.0 + onav_config: "To be determined" +``` diff --git a/outdoornav_user_manual_versioned_docs/version-0.14.0/api/api_examples/mission_with_custom_tasks.mdx b/outdoornav_user_manual_versioned_docs/version-0.14.0/api/api_examples/mission_with_custom_tasks.mdx index 30ec477e..af8335aa 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.14.0/api/api_examples/mission_with_custom_tasks.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.14.0/api/api_examples/mission_with_custom_tasks.mdx @@ -1,233 +1,233 @@ ---- -title: Mission with Custom Tasks -sidebar_label: Mission with Custom Tasks -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -Before being able to run the examples similar to the one explained below, it is required that you have written your own custom tasks. See the -[Custom Tasks](../../features/custom_tasks.mdx) section for information on how to develop tasks for your application. - -## The Code - -``` python -#! /usr/bin/env python3 - -import rospy -import actionlib -from cpr_outdoornav_api_examples_lib.ros_node import RosNode -from cpr_outdoornav_api_examples_lib.waypoint import Waypoint -from cpr_outdoornav_api_examples_lib.mission import Mission -from clearpath_navigation_msgs.msg import Task, UITaskResult, UITaskAction - - -CUSTOM_ACTION_NAME = "/record_gnss" -UNSPECIFIED_HEADING = -1 - - -class MissionWithCustomTask(RosNode): - """Create and run a mission with 3 waypoints, each of which executes a custom task. - - Our goal is to set up 3 waypoints, then create a mission such that the robot drives - to each waypoint in order. In addition, at each of the waypoints, a custom task will be - called to record the timestamp, goal name, and GPS coordinates. Since this is a custom task, - it is necessary to create an actionlib server to implement the custom task. - - The main component of this example is the mission builder, which builds up the set of goals, - including information on the custom tasks, and runs the mission, to execute the custom task. - - The coordinates used in this example are based on the cpr_agriculture_gazebo - world and should be updated to match the location in which the user's - robot will be operating. - """ - - class MissionBuilder: - """Creates and runs the mission, including custom tasks.""" - - def __init__(self): - """Creates the mission with 3 waypoints and custom tasks.""" - - # First waypoint, with custom task - waypoint_a_name = "A" - custom_task_a = Task() - custom_task_a.name = "my_custom_task_a" # choose any name here - custom_task_a.action_server_name = CUSTOM_ACTION_NAME # must match server name - custom_task_a.version = "1.0" # choose any version - custom_task_a.floats = [1000] # param: unique ID - custom_task_a.strings = [waypoint_a_name] # param: goal name - - # Second waypoint, with custom task - waypoint_b_name = "B" - custom_task_b = Task() - custom_task_b.name = "my_custom_task_b" # choose any name here - custom_task_b.action_server_name = CUSTOM_ACTION_NAME # must match server name - custom_task_b.version = "1.0" # choose any version - custom_task_b.floats = [1001] # param: unique ID - custom_task_b.strings = [waypoint_b_name] # param: goal name - - # Third waypoint, with custom task - waypoint_c_name = "C" - custom_task_c = Task() - custom_task_c.name = "my_custom_task_c" # choose any name here - custom_task_c.action_server_name = CUSTOM_ACTION_NAME # must match server name - custom_task_c.version = "1.0" # choose any version - custom_task_c.floats = [1002] # param: unique ID - custom_task_c.strings = [waypoint_c_name] # param: goal name - - waypoints = [ - Waypoint(waypoint_a_name, "uuid-waypoint-01", 43.50076203007681, -80.546296281104, UNSPECIFIED_HEADING), - Waypoint(waypoint_b_name, "uuid-waypoint-02", 43.50073600330896, -80.54621215801687, UNSPECIFIED_HEADING, [custom_task_b]), - Waypoint(waypoint_c_name, "uuid-waypoint-03", 43.50067256664828, -80.5462159469465, UNSPECIFIED_HEADING, [custom_task_c]), - ] - - # Build mission from two waypoints with custom tasks - self._mission = Mission("Custom task mission", "uuid-mission-1", waypoints) - - def getMission(self): - """Gets a reference to the mission. - - Returns - ------- - A reference to the mission. - """ - return self._mission - - def __init__(self): - """Initializes ROS, the custom task server, GPS subscriber and mission.""" - - RosNode.__init__(self, 'mission_with_custom_task') - self._mission_builder = MissionWithCustomTask.MissionBuilder() - - - def run(self): - """Execute the mission. - - This function blocks until the mission is complete. - - Returns - ------- - True on successful execution of the mission; else False on any error. - """ - - if not self._mission_builder.getMission().startMission(): - return False - while not self._mission_builder.getMission().isMissionComplete(): - rospy.sleep(1.0) - return self._mission_builder.getMission().getMissionSuccess() - - -if __name__ == '__main__': - if MissionWithCustomTask().run(): - print("Mission completed successfully") - else: - print("Mission failed") - rospy.signal_shutdown('Done') -``` - -## The Code Explained - -``` python -import rospy -import actionlib -from cpr_outdoornav_api_examples_lib.ros_node import RosNode -from cpr_outdoornav_api_examples_lib.waypoint import Waypoint -from cpr_outdoornav_api_examples_lib.mission import Mission -from clearpath_navigation_msgs.msg import Task, UITaskResult, UITaskAction -``` - -Import the `RosNode`, `Waypoint` and `Mission` classes which will be used to create the mission to be executed. -We also import the `Task` and `UITask` messages which are used to generate the action servers. - -``` python - class MissionBuilder: - """Creates and runs the mission, including custom tasks.""" - - def __init__(self): - """Creates the mission with 3 waypoints and custom tasks.""" - - # First waypoint, with custom task - waypoint_a_name = "A" - custom_task_a = Task() - custom_task_a.name = "my_custom_task_a" # choose any name here - custom_task_a.action_server_name = CUSTOM_ACTION_NAME # must match server name - custom_task_a.version = "1.0" # choose any version - custom_task_a.floats = [1000] # param: unique ID - custom_task_a.strings = [waypoint_a_name] # param: goal name - - # Second waypoint, with custom task - waypoint_b_name = "B" - custom_task_b = Task() - custom_task_b.name = "my_custom_task_b" # choose any name here - custom_task_b.action_server_name = CUSTOM_ACTION_NAME # must match server name - custom_task_b.version = "1.0" # choose any version - custom_task_b.floats = [1001] # param: unique ID - custom_task_b.strings = [waypoint_b_name] # param: goal name - - # Third waypoint, with custom task - waypoint_c_name = "C" - custom_task_c = Task() - custom_task_c.name = "my_custom_task_c" # choose any name here - custom_task_c.action_server_name = CUSTOM_ACTION_NAME # must match server name - custom_task_c.version = "1.0" # choose any version - custom_task_c.floats = [1002] # param: unique ID - custom_task_c.strings = [waypoint_c_name] # param: goal name - - - waypoints = [ - Waypoint(waypoint_a_name, "uuid-waypoint-01", 50.1095255, -97.3192484, UNSPECIFIED_HEADING, [custom_task_a]), - Waypoint(waypoint_b_name, "uuid-waypoint-02", 50.1094938, -97.3191085, UNSPECIFIED_HEADING, [custom_task_b]), - Waypoint(waypoint_c_name, "uuid-waypoint-03", 50.1094600, -97.3192100, UNSPECIFIED_HEADING, [custom_task_c]), - ] - - # Build mission from two waypoints with custom tasks - self._mission = Mission("Custom task mission", "uuid-mission-1", waypoints) -``` - -We create the `MissionBuilder` subclass that will create the mission to be executed. We initialize custom task objects -where we specify the `action_server_name` field with the specific action of the custom task. These are then added to the -Waypoints as a list of tasks and the Mission object is created. - -``` python - def __init__(self): - """Initializes ROS, the custom task server, GPS subscriber and mission.""" - - RosNode.__init__(self, 'mission_with_custom_task') - self._mission_builder = MissionWithCustomTask.MissionBuilder() -``` - -We initialize the example class by starting a ROS node and initialize the mission to be executed. - -``` python - def run(self): - """Execute the mission. - - This function blocks until the mission is complete. - - Returns - ------- - True on successful execution of the mission; else False on any error. - """ - - if not self._mission_builder.getMission().startMission(): - return False - while not self._mission_builder.getMission().isMissionComplete(): - time.sleep(1.0) - return self._mission_builder.getMission().getMissionSuccess() -``` - -The `run()` function starts the mission and checks for completion. Once complete we terminate the example code. - -``` python -if __name__ == '__main__': - if MissionWithCustomTask().run(): - print("Mission completed successfully") - else: - print("Mission failed") - rospy.signal_shutdown('Done') -``` - -The main python execution block. We first initialize the example class (runs the __init__ function) and then execute the run() function which -executes the mission and outputs the status information. - - +--- +title: Mission with Custom Tasks +sidebar_label: Mission with Custom Tasks +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +Before being able to run the examples similar to the one explained below, it is required that you have written your own custom tasks. See the +[Custom Tasks](../../features/custom_tasks.mdx) section for information on how to develop tasks for your application. + +## The Code + +``` python +#! /usr/bin/env python3 + +import rospy +import actionlib +from cpr_outdoornav_api_examples_lib.ros_node import RosNode +from cpr_outdoornav_api_examples_lib.waypoint import Waypoint +from cpr_outdoornav_api_examples_lib.mission import Mission +from clearpath_navigation_msgs.msg import Task, UITaskResult, UITaskAction + + +CUSTOM_ACTION_NAME = "/record_gnss" +UNSPECIFIED_HEADING = -1 + + +class MissionWithCustomTask(RosNode): + """Create and run a mission with 3 waypoints, each of which executes a custom task. + + Our goal is to set up 3 waypoints, then create a mission such that the robot drives + to each waypoint in order. In addition, at each of the waypoints, a custom task will be + called to record the timestamp, goal name, and GPS coordinates. Since this is a custom task, + it is necessary to create an actionlib server to implement the custom task. + + The main component of this example is the mission builder, which builds up the set of goals, + including information on the custom tasks, and runs the mission, to execute the custom task. + + The coordinates used in this example are based on the cpr_agriculture_gazebo + world and should be updated to match the location in which the user's + robot will be operating. + """ + + class MissionBuilder: + """Creates and runs the mission, including custom tasks.""" + + def __init__(self): + """Creates the mission with 3 waypoints and custom tasks.""" + + # First waypoint, with custom task + waypoint_a_name = "A" + custom_task_a = Task() + custom_task_a.name = "my_custom_task_a" # choose any name here + custom_task_a.action_server_name = CUSTOM_ACTION_NAME # must match server name + custom_task_a.version = "1.0" # choose any version + custom_task_a.floats = [1000] # param: unique ID + custom_task_a.strings = [waypoint_a_name] # param: goal name + + # Second waypoint, with custom task + waypoint_b_name = "B" + custom_task_b = Task() + custom_task_b.name = "my_custom_task_b" # choose any name here + custom_task_b.action_server_name = CUSTOM_ACTION_NAME # must match server name + custom_task_b.version = "1.0" # choose any version + custom_task_b.floats = [1001] # param: unique ID + custom_task_b.strings = [waypoint_b_name] # param: goal name + + # Third waypoint, with custom task + waypoint_c_name = "C" + custom_task_c = Task() + custom_task_c.name = "my_custom_task_c" # choose any name here + custom_task_c.action_server_name = CUSTOM_ACTION_NAME # must match server name + custom_task_c.version = "1.0" # choose any version + custom_task_c.floats = [1002] # param: unique ID + custom_task_c.strings = [waypoint_c_name] # param: goal name + + waypoints = [ + Waypoint(waypoint_a_name, "uuid-waypoint-01", 43.50076203007681, -80.546296281104, UNSPECIFIED_HEADING), + Waypoint(waypoint_b_name, "uuid-waypoint-02", 43.50073600330896, -80.54621215801687, UNSPECIFIED_HEADING, [custom_task_b]), + Waypoint(waypoint_c_name, "uuid-waypoint-03", 43.50067256664828, -80.5462159469465, UNSPECIFIED_HEADING, [custom_task_c]), + ] + + # Build mission from two waypoints with custom tasks + self._mission = Mission("Custom task mission", "uuid-mission-1", waypoints) + + def getMission(self): + """Gets a reference to the mission. + + Returns + ------- + A reference to the mission. + """ + return self._mission + + def __init__(self): + """Initializes ROS, the custom task server, GPS subscriber and mission.""" + + RosNode.__init__(self, 'mission_with_custom_task') + self._mission_builder = MissionWithCustomTask.MissionBuilder() + + + def run(self): + """Execute the mission. + + This function blocks until the mission is complete. + + Returns + ------- + True on successful execution of the mission; else False on any error. + """ + + if not self._mission_builder.getMission().startMission(): + return False + while not self._mission_builder.getMission().isMissionComplete(): + rospy.sleep(1.0) + return self._mission_builder.getMission().getMissionSuccess() + + +if __name__ == '__main__': + if MissionWithCustomTask().run(): + print("Mission completed successfully") + else: + print("Mission failed") + rospy.signal_shutdown('Done') +``` + +## The Code Explained + +``` python +import rospy +import actionlib +from cpr_outdoornav_api_examples_lib.ros_node import RosNode +from cpr_outdoornav_api_examples_lib.waypoint import Waypoint +from cpr_outdoornav_api_examples_lib.mission import Mission +from clearpath_navigation_msgs.msg import Task, UITaskResult, UITaskAction +``` + +Import the `RosNode`, `Waypoint` and `Mission` classes which will be used to create the mission to be executed. +We also import the `Task` and `UITask` messages which are used to generate the action servers. + +``` python + class MissionBuilder: + """Creates and runs the mission, including custom tasks.""" + + def __init__(self): + """Creates the mission with 3 waypoints and custom tasks.""" + + # First waypoint, with custom task + waypoint_a_name = "A" + custom_task_a = Task() + custom_task_a.name = "my_custom_task_a" # choose any name here + custom_task_a.action_server_name = CUSTOM_ACTION_NAME # must match server name + custom_task_a.version = "1.0" # choose any version + custom_task_a.floats = [1000] # param: unique ID + custom_task_a.strings = [waypoint_a_name] # param: goal name + + # Second waypoint, with custom task + waypoint_b_name = "B" + custom_task_b = Task() + custom_task_b.name = "my_custom_task_b" # choose any name here + custom_task_b.action_server_name = CUSTOM_ACTION_NAME # must match server name + custom_task_b.version = "1.0" # choose any version + custom_task_b.floats = [1001] # param: unique ID + custom_task_b.strings = [waypoint_b_name] # param: goal name + + # Third waypoint, with custom task + waypoint_c_name = "C" + custom_task_c = Task() + custom_task_c.name = "my_custom_task_c" # choose any name here + custom_task_c.action_server_name = CUSTOM_ACTION_NAME # must match server name + custom_task_c.version = "1.0" # choose any version + custom_task_c.floats = [1002] # param: unique ID + custom_task_c.strings = [waypoint_c_name] # param: goal name + + + waypoints = [ + Waypoint(waypoint_a_name, "uuid-waypoint-01", 50.1095255, -97.3192484, UNSPECIFIED_HEADING, [custom_task_a]), + Waypoint(waypoint_b_name, "uuid-waypoint-02", 50.1094938, -97.3191085, UNSPECIFIED_HEADING, [custom_task_b]), + Waypoint(waypoint_c_name, "uuid-waypoint-03", 50.1094600, -97.3192100, UNSPECIFIED_HEADING, [custom_task_c]), + ] + + # Build mission from two waypoints with custom tasks + self._mission = Mission("Custom task mission", "uuid-mission-1", waypoints) +``` + +We create the `MissionBuilder` subclass that will create the mission to be executed. We initialize custom task objects +where we specify the `action_server_name` field with the specific action of the custom task. These are then added to the +Waypoints as a list of tasks and the Mission object is created. + +``` python + def __init__(self): + """Initializes ROS, the custom task server, GPS subscriber and mission.""" + + RosNode.__init__(self, 'mission_with_custom_task') + self._mission_builder = MissionWithCustomTask.MissionBuilder() +``` + +We initialize the example class by starting a ROS node and initialize the mission to be executed. + +``` python + def run(self): + """Execute the mission. + + This function blocks until the mission is complete. + + Returns + ------- + True on successful execution of the mission; else False on any error. + """ + + if not self._mission_builder.getMission().startMission(): + return False + while not self._mission_builder.getMission().isMissionComplete(): + time.sleep(1.0) + return self._mission_builder.getMission().getMissionSuccess() +``` + +The `run()` function starts the mission and checks for completion. Once complete we terminate the example code. + +``` python +if __name__ == '__main__': + if MissionWithCustomTask().run(): + print("Mission completed successfully") + else: + print("Mission failed") + rospy.signal_shutdown('Done') +``` + +The main python execution block. We first initialize the example class (runs the __init__ function) and then execute the run() function which +executes the mission and outputs the status information. + + diff --git a/outdoornav_user_manual_versioned_docs/version-0.14.0/api/api_examples/monitor_status.mdx b/outdoornav_user_manual_versioned_docs/version-0.14.0/api/api_examples/monitor_status.mdx index 077a9fcf..a6fb416c 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.14.0/api/api_examples/monitor_status.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.14.0/api/api_examples/monitor_status.mdx @@ -1,152 +1,152 @@ ---- -title: Monitor Status -sidebar_label: Monitor Status -sidebar_position: 2 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -## The Code - -``` python -#! /usr/bin/env python3 - -import rospy -from cpr_outdoornav_api_examples_lib.ros_node import RosNode -from cpr_outdoornav_api_examples_lib.waypoint import Waypoint -from cpr_outdoornav_api_examples_lib.mission import Mission -from cpr_outdoornav_api_examples_lib.platform_status import PlatformStatusMonitor -from cpr_outdoornav_api_examples_lib.control_status import ControlStatusMonitor -from cpr_outdoornav_api_examples_lib.localization_status import LocalizationStatusMonitor -from cpr_outdoornav_api_examples_lib.navigation_status import NavigationStatusMonitor - - -class MonitorStatus(RosNode): - """Run a simple mission and report status throughout. - - The coordinates used in this example are based on the cpr_agriculture_gazebo - world and should be updated to match the location in which the user's - robot will be operating. - """ - - def __init__(self): - """Initialize the mission details and server connection.""" - - RosNode.__init__(self, 'monitor_status') - waypoints = [ - Waypoint("A", "uuid-waypoint-1", 50.1094938, -97.3191085), - Waypoint("B", "uuid-waypoint-2", 50.1095100, -97.3192000), - Waypoint("C", "uuid-waypoint-3", 50.1095255, -97.3192484), - ] - self.mission = Mission("Monitor status mission", "uuid-mission-1", waypoints) - self._platform_status = PlatformStatusMonitor() - self._control_status = ControlStatusMonitor() - self._localization_status = LocalizationStatusMonitor() - self._navigation_status = NavigationStatusMonitor() - - def _reportStatus(self): - """Report the current status.""" - - rospy.loginfo("--------------------------------------------------------") - self._platform_status.report() - self._control_status.report() - self._localization_status.report() - self._navigation_status.report() - - def run(self): - """Execute the mission and report status.""" - - if not self.mission.startMission(): - rospy.logerr("Failed to start mission") - return False - while not self.mission.isMissionComplete(): - self._reportStatus() - rospy.sleep(1.0) - return self.mission.getMissionSuccess() - - -if __name__ == '__main__': - if MonitorStatus().run(): - print("Mission completed successfully") - else: - print("Mission failed") - -``` - -## The Code Explained - -``` python -import rospy -from cpr_outdoornav_api_examples_lib.ros_node import RosNode -from cpr_outdoornav_api_examples_lib.waypoint import Waypoint -from cpr_outdoornav_api_examples_lib.mission import Mission -from cpr_outdoornav_api_examples_lib.platform_status import PlatformStatusMonitor -from cpr_outdoornav_api_examples_lib.control_status import ControlStatusMonitor -from cpr_outdoornav_api_examples_lib.localization_status import LocalizationStatusMonitor -from cpr_outdoornav_api_examples_lib.navigation_status import NavigationStatusMonitor -``` - -Import the `RosNode`, `Waypoint`, `Mission` classes which will be used to create the mission to be executed. We also import the -`PlatformStatusMonitor`, `ControlStatusMonitor`, `LocalizationStatusMonitor`, `NavigationStatusMonitor` classes which are set up to monitor the topics -relavant to the platform, localization, contrle selection an navigation modules respectively. - -``` python - waypoints = [ - Waypoint("A", "uuid-waypoint-1", 50.1094938, -97.3191085), - Waypoint("B", "uuid-waypoint-2", 50.1095100, -97.3192000), - Waypoint("C", "uuid-waypoint-3", 50.1095255, -97.3192484), - ] - self.mission = Mission("Monitor status mission", "uuid-mission-1", waypoints) -``` - -After initializing the ROS node, we create a mission manually by first creating a list of Waypoint objects and then adding then using the waypoint list -to construct the Mission object. - -``` python - self._platform_status = PlatformStatusMonitor() - self._control_status = ControlStatusMonitor() - self._localization_status = LocalizationStatusMonitor() - self._navigation_status = NavigationStatusMonitor() -``` - -We then initialize the platform, control, localization and navigation monitors, which subscribes to several API topics. - -``` python - def _reportStatus(self): - """Report the current status.""" - - rospy.loginfo("--------------------------------------------------------") - self._platform_status.report() - self._control_status.report() - self._localization_status.report() - self._navigation_status.report() -``` - -The `_reportStatus()` function outputs the results of the monitors to the ROS logs. This includes both the internal ROS logs as well as terminal output. - -``` python - def run(self): - """Execute the mission and report status.""" - - if not self.mission.startMission(): - rospy.logerr("Failed to start mission") - return False - while not self.mission.isMissionComplete(): - self._reportStatus() - rospy.sleep(1.0) - return self.mission.getMissionSuccess() -``` - -The `run()` function starts the mission and checks for completion. Every seconds we run the `reportStatus()` function to output the status information. -Once complete we terminate the example code. - -``` python -if __name__ == '__main__': - if MonitorStatus().run(): - print("Mission completed successfully") - else: - print("Mission failed") -``` - -The main python execution block. We first initialize the example class (runs the __init__ function) and then execute the run() function which -executes the mission and outputs the status information. +--- +title: Monitor Status +sidebar_label: Monitor Status +sidebar_position: 2 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +## The Code + +``` python +#! /usr/bin/env python3 + +import rospy +from cpr_outdoornav_api_examples_lib.ros_node import RosNode +from cpr_outdoornav_api_examples_lib.waypoint import Waypoint +from cpr_outdoornav_api_examples_lib.mission import Mission +from cpr_outdoornav_api_examples_lib.platform_status import PlatformStatusMonitor +from cpr_outdoornav_api_examples_lib.control_status import ControlStatusMonitor +from cpr_outdoornav_api_examples_lib.localization_status import LocalizationStatusMonitor +from cpr_outdoornav_api_examples_lib.navigation_status import NavigationStatusMonitor + + +class MonitorStatus(RosNode): + """Run a simple mission and report status throughout. + + The coordinates used in this example are based on the cpr_agriculture_gazebo + world and should be updated to match the location in which the user's + robot will be operating. + """ + + def __init__(self): + """Initialize the mission details and server connection.""" + + RosNode.__init__(self, 'monitor_status') + waypoints = [ + Waypoint("A", "uuid-waypoint-1", 50.1094938, -97.3191085), + Waypoint("B", "uuid-waypoint-2", 50.1095100, -97.3192000), + Waypoint("C", "uuid-waypoint-3", 50.1095255, -97.3192484), + ] + self.mission = Mission("Monitor status mission", "uuid-mission-1", waypoints) + self._platform_status = PlatformStatusMonitor() + self._control_status = ControlStatusMonitor() + self._localization_status = LocalizationStatusMonitor() + self._navigation_status = NavigationStatusMonitor() + + def _reportStatus(self): + """Report the current status.""" + + rospy.loginfo("--------------------------------------------------------") + self._platform_status.report() + self._control_status.report() + self._localization_status.report() + self._navigation_status.report() + + def run(self): + """Execute the mission and report status.""" + + if not self.mission.startMission(): + rospy.logerr("Failed to start mission") + return False + while not self.mission.isMissionComplete(): + self._reportStatus() + rospy.sleep(1.0) + return self.mission.getMissionSuccess() + + +if __name__ == '__main__': + if MonitorStatus().run(): + print("Mission completed successfully") + else: + print("Mission failed") + +``` + +## The Code Explained + +``` python +import rospy +from cpr_outdoornav_api_examples_lib.ros_node import RosNode +from cpr_outdoornav_api_examples_lib.waypoint import Waypoint +from cpr_outdoornav_api_examples_lib.mission import Mission +from cpr_outdoornav_api_examples_lib.platform_status import PlatformStatusMonitor +from cpr_outdoornav_api_examples_lib.control_status import ControlStatusMonitor +from cpr_outdoornav_api_examples_lib.localization_status import LocalizationStatusMonitor +from cpr_outdoornav_api_examples_lib.navigation_status import NavigationStatusMonitor +``` + +Import the `RosNode`, `Waypoint`, `Mission` classes which will be used to create the mission to be executed. We also import the +`PlatformStatusMonitor`, `ControlStatusMonitor`, `LocalizationStatusMonitor`, `NavigationStatusMonitor` classes which are set up to monitor the topics +relavant to the platform, localization, contrle selection an navigation modules respectively. + +``` python + waypoints = [ + Waypoint("A", "uuid-waypoint-1", 50.1094938, -97.3191085), + Waypoint("B", "uuid-waypoint-2", 50.1095100, -97.3192000), + Waypoint("C", "uuid-waypoint-3", 50.1095255, -97.3192484), + ] + self.mission = Mission("Monitor status mission", "uuid-mission-1", waypoints) +``` + +After initializing the ROS node, we create a mission manually by first creating a list of Waypoint objects and then adding then using the waypoint list +to construct the Mission object. + +``` python + self._platform_status = PlatformStatusMonitor() + self._control_status = ControlStatusMonitor() + self._localization_status = LocalizationStatusMonitor() + self._navigation_status = NavigationStatusMonitor() +``` + +We then initialize the platform, control, localization and navigation monitors, which subscribes to several API topics. + +``` python + def _reportStatus(self): + """Report the current status.""" + + rospy.loginfo("--------------------------------------------------------") + self._platform_status.report() + self._control_status.report() + self._localization_status.report() + self._navigation_status.report() +``` + +The `_reportStatus()` function outputs the results of the monitors to the ROS logs. This includes both the internal ROS logs as well as terminal output. + +``` python + def run(self): + """Execute the mission and report status.""" + + if not self.mission.startMission(): + rospy.logerr("Failed to start mission") + return False + while not self.mission.isMissionComplete(): + self._reportStatus() + rospy.sleep(1.0) + return self.mission.getMissionSuccess() +``` + +The `run()` function starts the mission and checks for completion. Every seconds we run the `reportStatus()` function to output the status information. +Once complete we terminate the example code. + +``` python +if __name__ == '__main__': + if MonitorStatus().run(): + print("Mission completed successfully") + else: + print("Mission failed") +``` + +The main python execution block. We first initialize the example class (runs the __init__ function) and then execute the run() function which +executes the mission and outputs the status information. diff --git a/outdoornav_user_manual_versioned_docs/version-0.14.0/api/api_overview.mdx b/outdoornav_user_manual_versioned_docs/version-0.14.0/api/api_overview.mdx index d9c6d616..1bcb0ad9 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.14.0/api/api_overview.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.14.0/api/api_overview.mdx @@ -1,63 +1,63 @@ ---- -title: API Overview -sidebar_label: API Overview -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -While the Web User Interface provides a great way to get started quickly -with OutdoorNav Software, some users will want programmatic control or -may wish to develop their own graphical user interfaces \-- for those -users, the Application Programming Interface (API) provides the -flexibility to do so. This is illustrated in the figure below. - -
-
- -
Interconnection between OutdoorNav Software and UGV Controller
-
-
- -The API is, at present, a [ROS 1 Noetic](http://wiki.ros.org/noetic) API, -but will soon be extended to a ROS 2 API. The API is divided into two -sections, whose details are provided below: - -- [Platform API](api_endpoints/platform_api.mdx): The set of [ROS - Topics](http://wiki.ros.org/Topics) are used to comminucate with the - hardware platform (eg. sensor data, wireless, battery state, command - velocity). This API can be used by autonomy software packages to - interface with the hardware platform. - - [Topics Published by UGV](api_endpoints/platform_api.mdx#topics-published-by-platform): - The set of topics that are published by the hardware platform. - - [Topics Subscribed to by UGV](api_endpoints/platform_api.mdx#topics-subscribed-by-platform): - The set of topics that are subscribed to by the hardware - platform. -- [Autonomy API](api_endpoints/autonomy_api.mdx): The set of [ROS - Topics](http://wiki.ros.org/Topics) that are used for monitoring and - controlling the the hardware platform through the OutdoorNav - autonomy software. - - [Topics Published by Autonomy](api_endpoints/autonomy_api.mdx#topics-published-by-autonomy): - The set of [ROS Topics](http://wiki.ros.org/Topics) published by - OutdoorNav Software, to be subscribed to by the UGV. - - [Topics Subscribed to by Autonomy](api_endpoints/autonomy_api.mdx#topics-subscribed-to-by-autonomy): - The set of [ROS Topics](http://wiki.ros.org/Topics) - subscribed to by OutdoorNav Software, typically published by the - client for directing OutdoorNav operation. - - [Services Exported by Autonomy](api_endpoints/autonomy_api.mdx#services-exported-by-autonomy): - The set of [ROS Services](http://wiki.ros.org/Services) provided - by OutdoorNav Software, for use by the client to modify/control - the behaviour of the Autonomy. - - [Actions Exported by Autonomy](api_endpoints/autonomy_api.mdx#actions-exported-by-autonomy): - The set of [ROS Actions](http://wiki.ros.org/actionlib) provided - by OutdoorNav Software, for use by the client to modify/control - the behaviour of the Autonomy. -- [Mission Manager API](api_endpoints/mission_manager_api.mdx): The set of [ROS - Services](http://wiki.ros.org/Services) that are used for creating, deleting, and modifying OutdoorNav Missions -- [Mission Scheduler API](api_endpoints/mission_scheduler_api.mdx): The set of [ROS Services](http://wiki.ros.org/Services) - that are used for creating, deleting, and modifying OutdoorNav Mission Schedules -- [Definitions](api_endpoints/definitions.mdx): The set of custom - [ROS Message](http://wiki.ros.org/Messages), [ROS - Service](http://wiki.ros.org/Services), and [ROS - Action](http://wiki.ros.org/actionlib) definitions. -- API Examples: Example code to come. +--- +title: API Overview +sidebar_label: API Overview +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +While the Web User Interface provides a great way to get started quickly +with OutdoorNav Software, some users will want programmatic control or +may wish to develop their own graphical user interfaces \-- for those +users, the Application Programming Interface (API) provides the +flexibility to do so. This is illustrated in the figure below. + +
+
+ +
Interconnection between OutdoorNav Software and UGV Controller
+
+
+ +The API is, at present, a [ROS 1 Noetic](http://wiki.ros.org/noetic) API, +but will soon be extended to a ROS 2 API. The API is divided into two +sections, whose details are provided below: + +- [Platform API](api_endpoints/platform_api.mdx): The set of [ROS + Topics](http://wiki.ros.org/Topics) are used to comminucate with the + hardware platform (eg. sensor data, wireless, battery state, command + velocity). This API can be used by autonomy software packages to + interface with the hardware platform. + - [Topics Published by UGV](api_endpoints/platform_api.mdx#topics-published-by-platform): + The set of topics that are published by the hardware platform. + - [Topics Subscribed to by UGV](api_endpoints/platform_api.mdx#topics-subscribed-by-platform): + The set of topics that are subscribed to by the hardware + platform. +- [Autonomy API](api_endpoints/autonomy_api.mdx): The set of [ROS + Topics](http://wiki.ros.org/Topics) that are used for monitoring and + controlling the the hardware platform through the OutdoorNav + autonomy software. + - [Topics Published by Autonomy](api_endpoints/autonomy_api.mdx#topics-published-by-autonomy): + The set of [ROS Topics](http://wiki.ros.org/Topics) published by + OutdoorNav Software, to be subscribed to by the UGV. + - [Topics Subscribed to by Autonomy](api_endpoints/autonomy_api.mdx#topics-subscribed-to-by-autonomy): + The set of [ROS Topics](http://wiki.ros.org/Topics) + subscribed to by OutdoorNav Software, typically published by the + client for directing OutdoorNav operation. + - [Services Exported by Autonomy](api_endpoints/autonomy_api.mdx#services-exported-by-autonomy): + The set of [ROS Services](http://wiki.ros.org/Services) provided + by OutdoorNav Software, for use by the client to modify/control + the behaviour of the Autonomy. + - [Actions Exported by Autonomy](api_endpoints/autonomy_api.mdx#actions-exported-by-autonomy): + The set of [ROS Actions](http://wiki.ros.org/actionlib) provided + by OutdoorNav Software, for use by the client to modify/control + the behaviour of the Autonomy. +- [Mission Manager API](api_endpoints/mission_manager_api.mdx): The set of [ROS + Services](http://wiki.ros.org/Services) that are used for creating, deleting, and modifying OutdoorNav Missions +- [Mission Scheduler API](api_endpoints/mission_scheduler_api.mdx): The set of [ROS Services](http://wiki.ros.org/Services) + that are used for creating, deleting, and modifying OutdoorNav Mission Schedules +- [Definitions](api_endpoints/definitions.mdx): The set of custom + [ROS Message](http://wiki.ros.org/Messages), [ROS + Service](http://wiki.ros.org/Services), and [ROS + Action](http://wiki.ros.org/actionlib) definitions. +- API Examples: Example code to come. diff --git a/outdoornav_user_manual_versioned_docs/version-0.14.0/customized_tuning/sensor_customization.mdx b/outdoornav_user_manual_versioned_docs/version-0.14.0/customized_tuning/sensor_customization.mdx index c8b3305f..75e2cc33 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.14.0/customized_tuning/sensor_customization.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.14.0/customized_tuning/sensor_customization.mdx @@ -1,9 +1,9 @@ ---- -title: "Sensor Customization" -sidebar_label: "Sensor Customization" -sidebar_position: 4 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -Information incoming in a future release. Please contact Clearpath customer support at support@clearpathrobotics.com to discuss any related issue. +--- +title: "Sensor Customization" +sidebar_label: "Sensor Customization" +sidebar_position: 4 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +Information incoming in a future release. Please contact Clearpath customer support at support@clearpathrobotics.com to discuss any related issue. diff --git a/outdoornav_user_manual_versioned_docs/version-0.14.0/customized_tuning/tuning_instructions/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.14.0/customized_tuning/tuning_instructions/_category_.json index d62e291a..4b3e7b59 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.14.0/customized_tuning/tuning_instructions/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.14.0/customized_tuning/tuning_instructions/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Tuning Instructions", - "position": 2 -} +{ + "label": "Tuning Instructions", + "position": 2 +} diff --git a/outdoornav_user_manual_versioned_docs/version-0.14.0/customized_tuning/tuning_instructions/ackermann_drive_dynamics.mdx b/outdoornav_user_manual_versioned_docs/version-0.14.0/customized_tuning/tuning_instructions/ackermann_drive_dynamics.mdx index 51639337..0125d8dd 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.14.0/customized_tuning/tuning_instructions/ackermann_drive_dynamics.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.14.0/customized_tuning/tuning_instructions/ackermann_drive_dynamics.mdx @@ -1,9 +1,9 @@ ---- -title: "Ackermann Drive" -sidebar_label: "Ackermann Drive" -sidebar_position: 4 -toc_min_heading_level: 2 -toc_max_heading_level: 2 ---- - -Information incoming in release 0.10.0. Please contact Clearpath customer support at support@clearpathrobotics.com to discuss any related issue. +--- +title: "Ackermann Drive" +sidebar_label: "Ackermann Drive" +sidebar_position: 4 +toc_min_heading_level: 2 +toc_max_heading_level: 2 +--- + +Information incoming in release 0.10.0. Please contact Clearpath customer support at support@clearpathrobotics.com to discuss any related issue. diff --git a/outdoornav_user_manual_versioned_docs/version-0.14.0/customized_tuning/tuning_instructions/footprint_tuning.mdx b/outdoornav_user_manual_versioned_docs/version-0.14.0/customized_tuning/tuning_instructions/footprint_tuning.mdx index 5a608b28..8f8ead90 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.14.0/customized_tuning/tuning_instructions/footprint_tuning.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.14.0/customized_tuning/tuning_instructions/footprint_tuning.mdx @@ -1,9 +1,9 @@ ---- -title: "Footprint Tuning" -sidebar_label: "Footprint Tuning" -sidebar_position: 5 -toc_min_heading_level: 2 -toc_max_heading_level: 2 ---- - -Information incoming in release 0.9.0. Please contact Clearpath customer support at support@clearpathrobotics.com to discuss any related issue. +--- +title: "Footprint Tuning" +sidebar_label: "Footprint Tuning" +sidebar_position: 5 +toc_min_heading_level: 2 +toc_max_heading_level: 2 +--- + +Information incoming in release 0.9.0. Please contact Clearpath customer support at support@clearpathrobotics.com to discuss any related issue. diff --git a/outdoornav_user_manual_versioned_docs/version-0.14.0/customized_tuning/tuning_overview.mdx b/outdoornav_user_manual_versioned_docs/version-0.14.0/customized_tuning/tuning_overview.mdx index 851df29b..77fbabeb 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.14.0/customized_tuning/tuning_overview.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.14.0/customized_tuning/tuning_overview.mdx @@ -1,25 +1,25 @@ ---- -title: "Tuning Overview" -sidebar_label: "Tuning Overview" -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -The scope of Appendix C is to provide information on how to tune the various components of -OutdoorNav. - -Instructions for tuning specific platform types can be found here: - -- [Differential Drive (Skid-Steer) Dynamics](tuning_instructions/differential_drive_dynamics.mdx) -- [Ackermann Drive Dynamics](tuning_instructions/ackermann_drive_dynamics.mdx) - - -Lists of parameters related to each component of the autonomy can be found here: - -- [Localization Parameters](tuning_parameters/localization_parameters.mdx) -- [Navigation Parameters](tuning_parameters/navigation_parameters.mdx) -- [Collision Avoidance Parameters](tuning_parameters/collision_avoidance_parameters.mdx) - -In future releases, we will describe how the user can [Customize their UI](user_interface_customization.mdx) +--- +title: "Tuning Overview" +sidebar_label: "Tuning Overview" +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +The scope of Appendix C is to provide information on how to tune the various components of +OutdoorNav. + +Instructions for tuning specific platform types can be found here: + +- [Differential Drive (Skid-Steer) Dynamics](tuning_instructions/differential_drive_dynamics.mdx) +- [Ackermann Drive Dynamics](tuning_instructions/ackermann_drive_dynamics.mdx) + + +Lists of parameters related to each component of the autonomy can be found here: + +- [Localization Parameters](tuning_parameters/localization_parameters.mdx) +- [Navigation Parameters](tuning_parameters/navigation_parameters.mdx) +- [Collision Avoidance Parameters](tuning_parameters/collision_avoidance_parameters.mdx) + +In future releases, we will describe how the user can [Customize their UI](user_interface_customization.mdx) as well as how to [Customize which Sensors](sensor_customization.mdx) are input into OutdoorNav. \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.14.0/customized_tuning/tuning_parameters/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.14.0/customized_tuning/tuning_parameters/_category_.json index fb6592a9..0e2dc60a 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.14.0/customized_tuning/tuning_parameters/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.14.0/customized_tuning/tuning_parameters/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Tuning Parameters", - "position": 3 -} +{ + "label": "Tuning Parameters", + "position": 3 +} diff --git a/outdoornav_user_manual_versioned_docs/version-0.14.0/customized_tuning/tuning_parameters/navigation_parameters.mdx b/outdoornav_user_manual_versioned_docs/version-0.14.0/customized_tuning/tuning_parameters/navigation_parameters.mdx index 17cadc67..e80c00c6 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.14.0/customized_tuning/tuning_parameters/navigation_parameters.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.14.0/customized_tuning/tuning_parameters/navigation_parameters.mdx @@ -1,169 +1,169 @@ ---- -title: "Navigation Parameters" -sidebar_label: "Navigation Parameters" -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 3 ---- - -import versions from "@site/static/versions.js" - -## Controllers {#controllers} - -### Determine the file location of the parameter {#file_location} - -The parameters related to the controller, can be found here: - -``` bash -/opt/onav//app/autonomy/params//navigation/controls_general.yaml -/opt/onav//app/autonomy/params//navigation/mpc_controller.yaml -/opt/onav//app/autonomy/params//navigation/mpc_dock_controller.yaml -``` - -If they are not listed in the above file, it is because they are using the default values and are not being overwritten. - -### MPC Controller {#controller} - -#### MBF Plugins - -Currently we have implemented a Move-Base Flex controller plugin named: **OnavMbfMpcController** - -Two instances of this plugin are loaded at runtime by our navigation node (as seen in the table below). The parameters are equivalent for each instance of the plugin but the values of certain of these parameters are different. - -| Controller name | Description | -|-----------------|-------------| -| **`mpc_controller`** | The controller used during normal navigation and applies to tracking the paths generated between all the mission waypoints. | -| **`mpc_dock_controller`** | The controller used during docking and applies only to tracking the dock and undock paths. | - -#### MPC State Machine - -The MPC controller operates as a state machine that contains the following states: - -| MPC State | Description | Condition | -|-----------|-------------|-----------| -| **`DEFAULT`** | Standard tracking behavior. | Will revert to this state if none of the other state conditions are met. | -| **`GOAL`** | Tracking behavior as the UGV approaches the goal. | Will enter GOAL mode when the `goal_horizon_threshold` parameter distance to the goal has been reached.| -| **`PRECISE`** | State when more precision is required in the tracking. | At the start of the path, we begin in Precise mode to ensure that we have a good start to tracking.| -| **`RESCUE`** | State to rescue the tracker when the UGV is stuck. | Will enter RESCUE mode when UGV is appraching a condition that make it stuck.| -| **`HYSTERESIS`** | State when you the UGV requires compensation for tire flexion. | Will enter HYSTERESIS mode when the UGV detects that it will begin oscillating due to tire deformation. | -| **`CORNER`** | State when there is a curve or a corner ahead. | Will enter CORNER mode when the UGV approaches, within a `corner_lookahead` parameter distance, to a corner with at least `corner_detection_threshold` of a curvature.| - -#### Default State Parameters {#default_state_params} - -The following list defines the default parameters that the MPC controller uses. -For the most part, they apply to all states of the MPC controller. - -| Parameter | Description | Namespace | SI Units | -|-----------|-------------|-----------|:--------:| -| `vehicle_length` | The length (longitudinally) of the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | -| `mpc_horizon` | The prediction horizon of the MPC. | [/navigation/*<controller>*/path_tracker](#file_location) | **s** | -| `max_lookahead` | Maximum distance along the path we seek to follow. Affects how far we do collision checks as well as the maximum velocity of the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | -| `min_lookahead` | Minimum distance along the path we seek to follow. Affects how far we do collision checks as well as the maximum velocity of the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | -| `lookahead_smoother` | Factor between 0 and 1 that determines the smoothness of the change in lookahead distance: 0 means only maximum velocity is used to determine the horizon (can be jumpy but speeds up the UGV faster); 1 means only averaged planned velocity is used to determine the horizon (smoother but speeds up the UGV slowly). | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `lookahead_factor` | How aggressively do we want to increase the lookahead from min_lookahead to max_lookahead | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `mpc_opt_maxiteration` | The maximum number of iterations that the solver will run. Increase this value for better performance, decrease for shorter computation time. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `discretization_steps` | Number of grid points along the MPC prediction; Lower: less accuracy, but faster | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `max_fwd_velocity` | The maximum allowable linear velocity that the MPC controller can compute. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | -| `min_fwd_velocity` | The minimum allowable linear velocity, in any mode, that the MPC controller can compute. This can be used to overcome the different deadbands that different UGVs may have. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | -| `max_rev_velocity` | The maximum allowable reverse linear velocity (ie. positive value), in any mode, that the MPC controller can compute. By default this is set to the `max_fwd_velocity`, so only needed if your maximum linear reverse velocity is different than the forward linear velocity.| [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | -| `max_ang_velocity` | The maximum allowable angular velocity, in any mode, that the MPC controller can compute. This parameter bounds both positive and negative angular velocities. | [/navigation/*<controller>*/path_tracker](#file_location) | **rad/s** | -| `max_accel` | The maximum allowable linear acceleration, in normal navigation mode, that the MPC controller can compute. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s/s** | -| `max_decel` | The maximum allowable linear deceleration (ie. negative value), in any mode, that the MPC controller can compute. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s/s** | -| `max_ang_accel` | The maximum allowable angular acceleration, in any mode, that the MPC controller can compute. This parameter bounds both positive and negative angular accelerations. | [/navigation/*<controller>*/path_tracker](#file_location) | **rad/s/s** | -| `max_lateral_accel` | The maximum allowable lateral acceleration, in any mode, that the MPC controller can compute. This parameter bounds both positive and negative lateral accelerations. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s/s** | -| `stiction_compensator_fwd` | The minimum linear velocity for movement of the UGV. This should typically be the minimum linear velocity that the UGV requires for it to move. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | -| `stiction_compensator_yaw` | The minimum angular velocity for movement of the UGV. This should typically be the minimum angular velocity that the UGV requires for it to move. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | -| `x_weight` | Weight for state x in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `y_weight` | Weight for state y in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `yaw_weight` | Weight for state yaw in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `fwd_v_weight` | Weight for state ẋ (forward velocity) in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `yaw_d_weight` | Weight for state (yaw velocity) in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `fwd_a_weight` | Weight for state ẍ (forward acceleration) in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `yaw_a_weight` | Weight for state (yaw acceleration) in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `horizon_percent_change` | The percentage factor used when shortening the MPC horizon. This will affect how quickly we want to speed up after a curvature slowdown. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `error_slowdown_multiplier` | The amount by which to increase the MPC horizon based on the crosstrack and/or heading error. This should be greater than 1.0 since increasing the MPC horizon will decrease the maximum MPC velocity. ** Less than 1.0 will result in the opposite behaviour which is not the expected behaviour for this parameter. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `crosstrackerror_slowdown` | Threshold on the amount of crosstrack error, above which to a slowdown the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `headingerror_slowdown` | Threshold on the amount of heading error, above which to a slowdown the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `curvature_slowdown` | Threshold on the path curvature, above which to a slowdown the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `endpoint_multiplier` | Weight multiplier of the very last point along the local plan segment in MPC state: DEFAULT. This value ensures convergence/stability of the optimizer by mimicking the MPCs infinite horizon by applying a terminal cost. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `shrinking_horizon_min` | The minimum horizon that will be used in the computation. This value will prevent the horizon from dropping below this value during all the horizon adjustments. | [/navigation/*<controller>*/path_tracker](#file_location) | **s** | -| `crosstrack_tolerance` | The amount of lateral error that the controller will handle before stopping the UGV and replanning a new path. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | -| `reference_trajectory_factor` | A factor that will skew the path parameter. This value should be between 0 and 1. Values closer to 0.0 will skew the path param closer to the UGV, decreasing speed but increasing the accuracy of the path tracking, and vice versa as you approach 1.0. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | - -#### Goal State Parameters {#goal_state_params} - -The following parameters can be modified to tune the controller as it approaches -the goal point as well as its behavior around the goal point. - -| Parameter | Description | Namespace | SI Units | -|-----------|-------------|-----------|:--------:| -| `goal_horizon_threshold` | The distance from the goal point which the MPC state will switch into state: GOAL , and begin reducing the horizon accordingly. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | -| `goal_slowdown_multiplier` | The multiplier by which to increase the MPC horizon during the MPCs GOAL state in order to slow the UGV down from its top speed. This value should be greater than 1.0. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `max_speed_at_goal` | The maximum allowable speed at the goal point for the controller to stop and consider the goal complete. On OEM UGVs, this value should be increased. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | -| `x_weight_goal` | Weight for state x in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `y_weight_goal` | Weight for state y in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `yaw_weight_goal` | Weight for state yaw in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `fwd_v_weight_goal` | Weight for state ẋ (forward velocity) in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `yaw_d_weight_goal` | Weight for state (yaw velocity) in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `fwd_a_weight_goal` | Weight for state ẍ (forward acceleration) in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `yaw_a_weight_goal` | Weight for state (yaw acceleration) in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `endpoint_multiplier_goal` | Weight multiplier of the very last point along the local plan segment in MPC state: GOAL. This value ensures convergence/stability of the optimizer by mimicking the MPCs infinite horizon by applying a terminal cost. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `goal_tolerance_xy_rtk` | The (x, y) tolerance value (ie. radius) assigned to a goal, when RTK is enabled, in order to determine whether or not to consider the goal complete. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | -| `goal_tolerance_yaw_rtk` | The yaw tolerance value (ie. heading) assigned to a goal, when RTK is enabled, in order to determine whether or not to consider the goal complete. | [/navigation/*<controller>*/path_tracker](#file_location) | **rad** | -| `goal_tolerance_xy_nortk` | The (x, y) tolerance value (ie. radius) assigned to a goal, when RTK is disabled, in order to determine whether or not to consider the goal complete. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | -| `goal_tolerance_yaw_nortk` | The yaw tolerance value (ie. heading) assigned to a goal, when RTK is disabled, in order to determine whether or not to consider the goal complete. | [/navigation/*<controller>*/path_tracker](#file_location) | **rad** | - -#### Corner State Parameters {#corner_state_params} - -The following parameters can be modified to tune the behavior of the controller during and as it -as it approaches corners. - -| Parameter | Description | Namespace | SI Units | -|-----------|-------------|-----------|:--------:| -| `corner_segment_slowdown` | Flag to enable/disable the slowdown behaviour in MPC state: CORNER | [/navigation/*<controller>*/path_tracker](#file_location)| **bool** | -| `corner_lookahead` | The distance on the reference path from the UGVs current location, along which to determine if a corner is present. If a corner is present the MPC state will switch to CORNER state and begin reducing the horizon accordingly. | [/navigation/*<controller>*/path_tracker](#file_location)| **m** | -| `corner_detection_threshold` | Threshold on the path curvature, between the UGVs current location and the end of the corner_lookahead distance, above which to switch the MPC in state: CORNER, and begin reducing the horizon accordingly. | [/navigation/*<controller>*/path_tracker](#file_location)| **rad** | -| `corner_slowdown_multiplier` | The multiplier by which to increase the MPC horizon during the MPCs CORNER state in order to slow the UGV down from its top speed. This value should be greater than 1.0. | [/navigation/*<controller>*/path_tracker](#file_location)| **--** | -| `endpoint_multiplier_corner` | Weight multiplier of the very last point along the local plan segment in MPC state: CORNER. This value ensures convergence/stability of the optimizer by mimicking the MPCs infinite horizon by applying a terminal cost. | [/navigation/*<controller>*/path_tracker](#file_location)| **--** | - -#### OEM Specific Parameters {#oem_tuning_params} - -When tuning the controller on a third-party OEM UGV, there are several other considerations -that we will not have taken into account during the tuning of our UGVs. Below, we define -parameters that may be modified to tune the controller for your third-party OEM UGV. - -##### UGV Dynamics {#platform_dynamics_params} - -The following parameters can be used to modify the dynamics model that the contrller uses to -compute command velocities. - -| Parameter | Description | Namespace | SI Units | -|-----------|-------------|-----------|:--------:| -| `no_turn_on_spot_motion` | Flag to enable/disable turn on spot motion. By default, the MPC motion model is represented by a differential drive kinematics. This parameter will modify the MPC motion model to remove turn in place motions and bias the motion in the forward direction. | [/navigation/*<controller>*/path_tracker](#file_location) | - | -| `min_fwd_turn` | | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `pivot_point_offset_x` | The longitudinal offset that can be applied to the MPC model in order to account for a particular UGVs center of rotation | [/navigation/*<controller>*/path_tracker](#file_location) | - | -| `pivot_point_offset_y` | The lateral offset that can be applied to the MPC model in order to account for a particular UGVs center of rotation | [/navigation/*<controller>*/path_tracker](#file_location) | - | -| `min_fwd_turn` | | [/navigation/*<controller>*/path_tracker](#file_location) | **--**| - -##### Delay Compensation {#delay_compensation_params} - -The following parameters can be used to compensate for any delays that are present in the system. - -| Parameter | Description | Namespace | SI Units | -|-----------|-------------|-----------|:--------:| -| `enable_delay_compensation` | A boolean flag to enable/disable the delay compensation feature. The delay compensation feature is used to compensate for low-level dynamics delays that may be present in the UGV to be controlled. The user can apply an input controller delay and the feature will compute command velocities that compensate for such a delay. | [/navigation/*<controller>*/path_tracker](#file_location) | **bool** | -| `controller_delay` | The amount of controller delay that the delay compensation feature will attempt to compensate for, in ms. | [/navigation/*<controller>*/path_tracker](#file_location) | **ms** | - -##### Stop Distance {#stop_distance_params} - -The following parameters can be used to set a specific stop distance away from obstacles. - -| Parameter | Description | Namespace | SI Units | -|-----------|-------------|-----------|:--------:| -| `enable_stop_distance` | A flag to use enable/disable the stop distance feature. The stop distance feature forces the UGV to stop a specified distance in front of obstacles. | [/navigation/*<controller>*/path_tracker](#file_location) | **bool** | -| `obstacle_stop_distance` | The distance at which the UGV will stop in front of a detected obstacle. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | - - -## Path Planners {#path_planners} - -Information incoming in release 0.9. Please contact Clearpath customer support at support@clearpathrobotics.com to discuss the issue. +--- +title: "Navigation Parameters" +sidebar_label: "Navigation Parameters" +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 3 +--- + +import versions from "@site/static/versions.js" + +## Controllers {#controllers} + +### Determine the file location of the parameter {#file_location} + +The parameters related to the controller, can be found here: + +``` bash +/opt/onav//app/autonomy/params//navigation/controls_general.yaml +/opt/onav//app/autonomy/params//navigation/mpc_controller.yaml +/opt/onav//app/autonomy/params//navigation/mpc_dock_controller.yaml +``` + +If they are not listed in the above file, it is because they are using the default values and are not being overwritten. + +### MPC Controller {#controller} + +#### MBF Plugins + +Currently we have implemented a Move-Base Flex controller plugin named: **OnavMbfMpcController** + +Two instances of this plugin are loaded at runtime by our navigation node (as seen in the table below). The parameters are equivalent for each instance of the plugin but the values of certain of these parameters are different. + +| Controller name | Description | +|-----------------|-------------| +| **`mpc_controller`** | The controller used during normal navigation and applies to tracking the paths generated between all the mission waypoints. | +| **`mpc_dock_controller`** | The controller used during docking and applies only to tracking the dock and undock paths. | + +#### MPC State Machine + +The MPC controller operates as a state machine that contains the following states: + +| MPC State | Description | Condition | +|-----------|-------------|-----------| +| **`DEFAULT`** | Standard tracking behavior. | Will revert to this state if none of the other state conditions are met. | +| **`GOAL`** | Tracking behavior as the UGV approaches the goal. | Will enter GOAL mode when the `goal_horizon_threshold` parameter distance to the goal has been reached.| +| **`PRECISE`** | State when more precision is required in the tracking. | At the start of the path, we begin in Precise mode to ensure that we have a good start to tracking.| +| **`RESCUE`** | State to rescue the tracker when the UGV is stuck. | Will enter RESCUE mode when UGV is appraching a condition that make it stuck.| +| **`HYSTERESIS`** | State when you the UGV requires compensation for tire flexion. | Will enter HYSTERESIS mode when the UGV detects that it will begin oscillating due to tire deformation. | +| **`CORNER`** | State when there is a curve or a corner ahead. | Will enter CORNER mode when the UGV approaches, within a `corner_lookahead` parameter distance, to a corner with at least `corner_detection_threshold` of a curvature.| + +#### Default State Parameters {#default_state_params} + +The following list defines the default parameters that the MPC controller uses. +For the most part, they apply to all states of the MPC controller. + +| Parameter | Description | Namespace | SI Units | +|-----------|-------------|-----------|:--------:| +| `vehicle_length` | The length (longitudinally) of the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | +| `mpc_horizon` | The prediction horizon of the MPC. | [/navigation/*<controller>*/path_tracker](#file_location) | **s** | +| `max_lookahead` | Maximum distance along the path we seek to follow. Affects how far we do collision checks as well as the maximum velocity of the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | +| `min_lookahead` | Minimum distance along the path we seek to follow. Affects how far we do collision checks as well as the maximum velocity of the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | +| `lookahead_smoother` | Factor between 0 and 1 that determines the smoothness of the change in lookahead distance: 0 means only maximum velocity is used to determine the horizon (can be jumpy but speeds up the UGV faster); 1 means only averaged planned velocity is used to determine the horizon (smoother but speeds up the UGV slowly). | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `lookahead_factor` | How aggressively do we want to increase the lookahead from min_lookahead to max_lookahead | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `mpc_opt_maxiteration` | The maximum number of iterations that the solver will run. Increase this value for better performance, decrease for shorter computation time. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `discretization_steps` | Number of grid points along the MPC prediction; Lower: less accuracy, but faster | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `max_fwd_velocity` | The maximum allowable linear velocity that the MPC controller can compute. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | +| `min_fwd_velocity` | The minimum allowable linear velocity, in any mode, that the MPC controller can compute. This can be used to overcome the different deadbands that different UGVs may have. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | +| `max_rev_velocity` | The maximum allowable reverse linear velocity (ie. positive value), in any mode, that the MPC controller can compute. By default this is set to the `max_fwd_velocity`, so only needed if your maximum linear reverse velocity is different than the forward linear velocity.| [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | +| `max_ang_velocity` | The maximum allowable angular velocity, in any mode, that the MPC controller can compute. This parameter bounds both positive and negative angular velocities. | [/navigation/*<controller>*/path_tracker](#file_location) | **rad/s** | +| `max_accel` | The maximum allowable linear acceleration, in normal navigation mode, that the MPC controller can compute. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s/s** | +| `max_decel` | The maximum allowable linear deceleration (ie. negative value), in any mode, that the MPC controller can compute. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s/s** | +| `max_ang_accel` | The maximum allowable angular acceleration, in any mode, that the MPC controller can compute. This parameter bounds both positive and negative angular accelerations. | [/navigation/*<controller>*/path_tracker](#file_location) | **rad/s/s** | +| `max_lateral_accel` | The maximum allowable lateral acceleration, in any mode, that the MPC controller can compute. This parameter bounds both positive and negative lateral accelerations. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s/s** | +| `stiction_compensator_fwd` | The minimum linear velocity for movement of the UGV. This should typically be the minimum linear velocity that the UGV requires for it to move. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | +| `stiction_compensator_yaw` | The minimum angular velocity for movement of the UGV. This should typically be the minimum angular velocity that the UGV requires for it to move. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | +| `x_weight` | Weight for state x in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `y_weight` | Weight for state y in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `yaw_weight` | Weight for state yaw in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `fwd_v_weight` | Weight for state ẋ (forward velocity) in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `yaw_d_weight` | Weight for state (yaw velocity) in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `fwd_a_weight` | Weight for state ẍ (forward acceleration) in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `yaw_a_weight` | Weight for state (yaw acceleration) in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `horizon_percent_change` | The percentage factor used when shortening the MPC horizon. This will affect how quickly we want to speed up after a curvature slowdown. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `error_slowdown_multiplier` | The amount by which to increase the MPC horizon based on the crosstrack and/or heading error. This should be greater than 1.0 since increasing the MPC horizon will decrease the maximum MPC velocity. ** Less than 1.0 will result in the opposite behaviour which is not the expected behaviour for this parameter. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `crosstrackerror_slowdown` | Threshold on the amount of crosstrack error, above which to a slowdown the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `headingerror_slowdown` | Threshold on the amount of heading error, above which to a slowdown the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `curvature_slowdown` | Threshold on the path curvature, above which to a slowdown the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `endpoint_multiplier` | Weight multiplier of the very last point along the local plan segment in MPC state: DEFAULT. This value ensures convergence/stability of the optimizer by mimicking the MPCs infinite horizon by applying a terminal cost. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `shrinking_horizon_min` | The minimum horizon that will be used in the computation. This value will prevent the horizon from dropping below this value during all the horizon adjustments. | [/navigation/*<controller>*/path_tracker](#file_location) | **s** | +| `crosstrack_tolerance` | The amount of lateral error that the controller will handle before stopping the UGV and replanning a new path. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | +| `reference_trajectory_factor` | A factor that will skew the path parameter. This value should be between 0 and 1. Values closer to 0.0 will skew the path param closer to the UGV, decreasing speed but increasing the accuracy of the path tracking, and vice versa as you approach 1.0. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | + +#### Goal State Parameters {#goal_state_params} + +The following parameters can be modified to tune the controller as it approaches +the goal point as well as its behavior around the goal point. + +| Parameter | Description | Namespace | SI Units | +|-----------|-------------|-----------|:--------:| +| `goal_horizon_threshold` | The distance from the goal point which the MPC state will switch into state: GOAL , and begin reducing the horizon accordingly. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | +| `goal_slowdown_multiplier` | The multiplier by which to increase the MPC horizon during the MPCs GOAL state in order to slow the UGV down from its top speed. This value should be greater than 1.0. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `max_speed_at_goal` | The maximum allowable speed at the goal point for the controller to stop and consider the goal complete. On OEM UGVs, this value should be increased. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | +| `x_weight_goal` | Weight for state x in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `y_weight_goal` | Weight for state y in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `yaw_weight_goal` | Weight for state yaw in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `fwd_v_weight_goal` | Weight for state ẋ (forward velocity) in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `yaw_d_weight_goal` | Weight for state (yaw velocity) in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `fwd_a_weight_goal` | Weight for state ẍ (forward acceleration) in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `yaw_a_weight_goal` | Weight for state (yaw acceleration) in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `endpoint_multiplier_goal` | Weight multiplier of the very last point along the local plan segment in MPC state: GOAL. This value ensures convergence/stability of the optimizer by mimicking the MPCs infinite horizon by applying a terminal cost. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `goal_tolerance_xy_rtk` | The (x, y) tolerance value (ie. radius) assigned to a goal, when RTK is enabled, in order to determine whether or not to consider the goal complete. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | +| `goal_tolerance_yaw_rtk` | The yaw tolerance value (ie. heading) assigned to a goal, when RTK is enabled, in order to determine whether or not to consider the goal complete. | [/navigation/*<controller>*/path_tracker](#file_location) | **rad** | +| `goal_tolerance_xy_nortk` | The (x, y) tolerance value (ie. radius) assigned to a goal, when RTK is disabled, in order to determine whether or not to consider the goal complete. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | +| `goal_tolerance_yaw_nortk` | The yaw tolerance value (ie. heading) assigned to a goal, when RTK is disabled, in order to determine whether or not to consider the goal complete. | [/navigation/*<controller>*/path_tracker](#file_location) | **rad** | + +#### Corner State Parameters {#corner_state_params} + +The following parameters can be modified to tune the behavior of the controller during and as it +as it approaches corners. + +| Parameter | Description | Namespace | SI Units | +|-----------|-------------|-----------|:--------:| +| `corner_segment_slowdown` | Flag to enable/disable the slowdown behaviour in MPC state: CORNER | [/navigation/*<controller>*/path_tracker](#file_location)| **bool** | +| `corner_lookahead` | The distance on the reference path from the UGVs current location, along which to determine if a corner is present. If a corner is present the MPC state will switch to CORNER state and begin reducing the horizon accordingly. | [/navigation/*<controller>*/path_tracker](#file_location)| **m** | +| `corner_detection_threshold` | Threshold on the path curvature, between the UGVs current location and the end of the corner_lookahead distance, above which to switch the MPC in state: CORNER, and begin reducing the horizon accordingly. | [/navigation/*<controller>*/path_tracker](#file_location)| **rad** | +| `corner_slowdown_multiplier` | The multiplier by which to increase the MPC horizon during the MPCs CORNER state in order to slow the UGV down from its top speed. This value should be greater than 1.0. | [/navigation/*<controller>*/path_tracker](#file_location)| **--** | +| `endpoint_multiplier_corner` | Weight multiplier of the very last point along the local plan segment in MPC state: CORNER. This value ensures convergence/stability of the optimizer by mimicking the MPCs infinite horizon by applying a terminal cost. | [/navigation/*<controller>*/path_tracker](#file_location)| **--** | + +#### OEM Specific Parameters {#oem_tuning_params} + +When tuning the controller on a third-party OEM UGV, there are several other considerations +that we will not have taken into account during the tuning of our UGVs. Below, we define +parameters that may be modified to tune the controller for your third-party OEM UGV. + +##### UGV Dynamics {#platform_dynamics_params} + +The following parameters can be used to modify the dynamics model that the contrller uses to +compute command velocities. + +| Parameter | Description | Namespace | SI Units | +|-----------|-------------|-----------|:--------:| +| `no_turn_on_spot_motion` | Flag to enable/disable turn on spot motion. By default, the MPC motion model is represented by a differential drive kinematics. This parameter will modify the MPC motion model to remove turn in place motions and bias the motion in the forward direction. | [/navigation/*<controller>*/path_tracker](#file_location) | - | +| `min_fwd_turn` | | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `pivot_point_offset_x` | The longitudinal offset that can be applied to the MPC model in order to account for a particular UGVs center of rotation | [/navigation/*<controller>*/path_tracker](#file_location) | - | +| `pivot_point_offset_y` | The lateral offset that can be applied to the MPC model in order to account for a particular UGVs center of rotation | [/navigation/*<controller>*/path_tracker](#file_location) | - | +| `min_fwd_turn` | | [/navigation/*<controller>*/path_tracker](#file_location) | **--**| + +##### Delay Compensation {#delay_compensation_params} + +The following parameters can be used to compensate for any delays that are present in the system. + +| Parameter | Description | Namespace | SI Units | +|-----------|-------------|-----------|:--------:| +| `enable_delay_compensation` | A boolean flag to enable/disable the delay compensation feature. The delay compensation feature is used to compensate for low-level dynamics delays that may be present in the UGV to be controlled. The user can apply an input controller delay and the feature will compute command velocities that compensate for such a delay. | [/navigation/*<controller>*/path_tracker](#file_location) | **bool** | +| `controller_delay` | The amount of controller delay that the delay compensation feature will attempt to compensate for, in ms. | [/navigation/*<controller>*/path_tracker](#file_location) | **ms** | + +##### Stop Distance {#stop_distance_params} + +The following parameters can be used to set a specific stop distance away from obstacles. + +| Parameter | Description | Namespace | SI Units | +|-----------|-------------|-----------|:--------:| +| `enable_stop_distance` | A flag to use enable/disable the stop distance feature. The stop distance feature forces the UGV to stop a specified distance in front of obstacles. | [/navigation/*<controller>*/path_tracker](#file_location) | **bool** | +| `obstacle_stop_distance` | The distance at which the UGV will stop in front of a detected obstacle. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | + + +## Path Planners {#path_planners} + +Information incoming in release 0.9. Please contact Clearpath customer support at support@clearpathrobotics.com to discuss the issue. diff --git a/outdoornav_user_manual_versioned_docs/version-0.14.0/customized_tuning/user_interface_customization.mdx b/outdoornav_user_manual_versioned_docs/version-0.14.0/customized_tuning/user_interface_customization.mdx index 91636f13..69b11cea 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.14.0/customized_tuning/user_interface_customization.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.14.0/customized_tuning/user_interface_customization.mdx @@ -1,9 +1,9 @@ ---- -title: "UI Customization" -sidebar_label: "UI Customization" -sidebar_position: 4 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -Information incoming in a future release. Please contact Clearpath customer support at support@clearpathrobotics.com to discuss any related issue. +--- +title: "UI Customization" +sidebar_label: "UI Customization" +sidebar_position: 4 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +Information incoming in a future release. Please contact Clearpath customer support at support@clearpathrobotics.com to discuss any related issue. diff --git a/outdoornav_user_manual_versioned_docs/version-0.14.0/features/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.14.0/features/_category_.json index 732c6cb7..3bf04f17 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.14.0/features/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.14.0/features/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "OutdoorNav Features", - "position": 8 -} +{ + "label": "OutdoorNav Features", + "position": 8 +} diff --git a/outdoornav_user_manual_versioned_docs/version-0.14.0/features/custom_tasks.mdx b/outdoornav_user_manual_versioned_docs/version-0.14.0/features/custom_tasks.mdx index 5b117699..056e3ff5 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.14.0/features/custom_tasks.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.14.0/features/custom_tasks.mdx @@ -1,206 +1,206 @@ ---- -title: Custom Tasks -sidebar_label: Custom Tasks -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -Users can create their custom tasks for their application following a specific template. -When creating these tasks, the user should begin by creating a python file in the -**/opt/onav/\/app/custom_tasks/** directory, where *onav_version* -is the currently running version of OutdoorNav. The file should be written following -the instructions provided below: - -1. Import the `custom_task_base` package. - -```python -#!/usr/bin/python3 - -from onav_tasks.custom_task_base import * -``` - -2. The user should then create a class name to replace `CustomTask` and initialize it with the -`CustomTaskBase`'s __init__ function and the action server name for the task. - -```python -class CustomTask(CustomTaskBase): - def __init__(self): - # The derived class must always call the super() and provide the action server name. - # This name will need to be unique among custom tasks and must match what is in the - # UI. - super().__init__("custom_task_name") -``` - -:::note - -The `CustomTaskBase` exposes a `SimpleActionServer` (see here -for further details) object as `_as`, a `UITaskFeedback` object as `_feedback` and a `UITaskResults` object as `_result` to be used as part of -the tasks functionality. - -::: - -3. The last requirement is that the `CustomTask` needs to have the `run_task(self, goal)` function be defined, -which takes in the UITaskGoal. - -```python - def run_task(self, goal): -``` - -:::note - -When running the task users may handle errors through the action servers `set_aborted()` function. When this function is called the entire mission -will be aborted. - -::: - -4. Restarting the UGV will trigger the system to load the custom task that was created, making it available for mission use. -If a custom task is not configured properly the custom task manager will ignore the task and proceed loading in the next task while logging an error with ROS. - - -## Sample Custom Tasks - -### Input Looper - -Below is a sample template file named "input_looper.py" which iterates throught the two data variables and publishes them to the feedback -topic. If neither of the variables have any data in them the task is aborted. - -```python -#!/usr/bin/python3 - -from onav_tasks.custom_task_base import * - -class InputLooperTask(CustomTaskBase): - def __init__(self): - # The derived class must always call the super() and provide the action server name. - # This name will need to be unique among custom tasks and must match what is in the - # UI. - super().__init__("input_looper") - - def run_task(self, goal): - if len(goal.strings) == 0 and len(goal.floats) == 0: - # Task and running mission will be aborted in this case - self._as.set_aborted() - return False - - # Loop through the strings and float values and publish them each to the /input_looper/feedback topic - for string in goal.strings: - self._feedback.state = string - self._as.publish_feedback(self._feedback) - - for num in goal.floats: - self._feedback.state = str(num) - self._as.publish_feedback(self._feedback) - - # Returning True or False will not currently impact the mission but will write the current state to the - # /task/result topic accordingly. - return True -``` - -### Record GNSS Data - -Below is a sample custom task file named "record_gnss.py" which outputs the current GNSS data to the console. - -```python -#!/usr/bin/python3 - -from onav_tasks.custom_task_base import * -from sensor_msgs.msg import NavSatFix -from threading import Lock -import rospy - -class RecorGNSSTask(CustomTaskBase): - def __init__(self): - super().__init__("record_gnss") - self._sub = rospy.Subscriber("/sensors/gps_0/fix", NavSatFix, self.gpsSubscriberCallback) - self.gps_lat = 0.0 - self.gps_lon = 0.0 - self._gps_coordinates_lock = Lock() - - def run_task(self, goal): - feedback = UITaskFeedback() - feedback.state = 'Recording GNSS lat/lon' - self._as.publish_feedback(feedback) - msg = "" - with self._gps_coordinates_lock: - msg = "ID: %f Name: %s Latitude: %f Longitude: %f" % ( - goal.floats[0], goal.strings[0], self.gps_lat, self.gps_lon) - rospy.loginfo(msg) - return True - - def gpsSubscriberCallback(self, msg): - with self._gps_coordinates_lock: - self.gps_lat = msg.latitude - self.gps_lon = msg.longitude -``` - - -### Move PTZ camera to a Lat/Lon - -Below is a more advanced custom task. The file is "move_ptz_lat_lon.py" which pans a PTZ camera to point to a specific lat/lon coordinate. - -```python -from onav_tasks.custom_task_base import * -import actionlib -from clearpath_localization_msgs.srv import * -from clearpath_navigation_msgs.msg import * -from nav_msgs.msg import Odometry -from ptz_action_server_msgs.msg import PtzAction -import ptz_action_server_msgs.msg -import math -from math import remainder, tau -import rospy -from sensor_msgs import * -from tf.transformations import euler_from_quaternion, quaternion_from_euler - - - -class MovePtzLatLon(CustomTaskBase): - def __init__(self): - super().__init__("move_ptz_lat_lon") - self.localization_subscriber_ = rospy.Subscriber("/localization/odom", Odometry, self.localizationCallback) - self.move_ptz_client_ = actionlib.SimpleActionClient('/sensors/camera_0/move_ptz', PtzAction) - self.service_ = rospy.ServiceProxy('/localization/lat_lon_to_xy', ConvertLatLonToCartesian) - self.current_pose = Odometry() - - def localizationCallback(self, odom_msg): - self.current_pose = odom_msg - - def run_task(self, goal): - if len(goal.strings) == 0 and len(goal.floats) == 0: - rospy.logwarn('Warning') - self._as.set_aborted() - return False - goal_latitude = goal.floats[0] - goal_longitude = goal.floats[1] - goal_zoom = goal.floats[2] - str2 = 'Received goal latitude: ' + str(goal_latitude) + ', goal longitude: ' + str(goal_longitude) + ', zoom: ' + str(goal_zoom) - feedback = UITaskFeedback() - feedback.state = 'Aiming camera at lat-lon (' + str(goal_latitude) + ', ' + str(goal_longitude)+')' - self._as.publish_feedback(feedback) - orientation_q = self.current_pose.pose.pose.orientation - orientation_list = [orientation_q.x, orientation_q.y, orientation_q.z, orientation_q.w] - (roll, pitch, yaw) = euler_from_quaternion (orientation_list) - - gps_msg = sensor_msgs.msg.NavSatFix() - gps_msg.latitude = goal_latitude - gps_msg.longitude = goal_longitude - goal_utm = self.service_(gps_msg) - - goal_x = goal_utm.pose.pose.position.x - goal_y = goal_utm.pose.pose.position.y - - goal_angle = math.atan2(goal_y - self.current_pose.pose.pose.position.y, goal_x - self.current_pose.pose.pose.position.x) - pan_angle = math.remainder(goal_angle - yaw, math.tau) - print(pan_angle) - - self.move_ptz_client_.wait_for_server() - goal = ptz_action_server_msgs.msg.PtzGoal() - goal.pan=pan_angle - goal.tilt=0 - goal.zoom=goal_zoom - self.move_ptz_client_.send_goal(goal) - self.move_ptz_client_.wait_for_result() - print(self.move_ptz_client_.get_result()) - return True -``` +--- +title: Custom Tasks +sidebar_label: Custom Tasks +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +Users can create their custom tasks for their application following a specific template. +When creating these tasks, the user should begin by creating a python file in the +**/opt/onav/\/app/custom_tasks/** directory, where *onav_version* +is the currently running version of OutdoorNav. The file should be written following +the instructions provided below: + +1. Import the `custom_task_base` package. + +```python +#!/usr/bin/python3 + +from onav_tasks.custom_task_base import * +``` + +2. The user should then create a class name to replace `CustomTask` and initialize it with the +`CustomTaskBase`'s __init__ function and the action server name for the task. + +```python +class CustomTask(CustomTaskBase): + def __init__(self): + # The derived class must always call the super() and provide the action server name. + # This name will need to be unique among custom tasks and must match what is in the + # UI. + super().__init__("custom_task_name") +``` + +:::note + +The `CustomTaskBase` exposes a `SimpleActionServer` (see here +for further details) object as `_as`, a `UITaskFeedback` object as `_feedback` and a `UITaskResults` object as `_result` to be used as part of +the tasks functionality. + +::: + +3. The last requirement is that the `CustomTask` needs to have the `run_task(self, goal)` function be defined, +which takes in the UITaskGoal. + +```python + def run_task(self, goal): +``` + +:::note + +When running the task users may handle errors through the action servers `set_aborted()` function. When this function is called the entire mission +will be aborted. + +::: + +4. Restarting the UGV will trigger the system to load the custom task that was created, making it available for mission use. +If a custom task is not configured properly the custom task manager will ignore the task and proceed loading in the next task while logging an error with ROS. + + +## Sample Custom Tasks + +### Input Looper + +Below is a sample template file named "input_looper.py" which iterates throught the two data variables and publishes them to the feedback +topic. If neither of the variables have any data in them the task is aborted. + +```python +#!/usr/bin/python3 + +from onav_tasks.custom_task_base import * + +class InputLooperTask(CustomTaskBase): + def __init__(self): + # The derived class must always call the super() and provide the action server name. + # This name will need to be unique among custom tasks and must match what is in the + # UI. + super().__init__("input_looper") + + def run_task(self, goal): + if len(goal.strings) == 0 and len(goal.floats) == 0: + # Task and running mission will be aborted in this case + self._as.set_aborted() + return False + + # Loop through the strings and float values and publish them each to the /input_looper/feedback topic + for string in goal.strings: + self._feedback.state = string + self._as.publish_feedback(self._feedback) + + for num in goal.floats: + self._feedback.state = str(num) + self._as.publish_feedback(self._feedback) + + # Returning True or False will not currently impact the mission but will write the current state to the + # /task/result topic accordingly. + return True +``` + +### Record GNSS Data + +Below is a sample custom task file named "record_gnss.py" which outputs the current GNSS data to the console. + +```python +#!/usr/bin/python3 + +from onav_tasks.custom_task_base import * +from sensor_msgs.msg import NavSatFix +from threading import Lock +import rospy + +class RecorGNSSTask(CustomTaskBase): + def __init__(self): + super().__init__("record_gnss") + self._sub = rospy.Subscriber("/sensors/gps_0/fix", NavSatFix, self.gpsSubscriberCallback) + self.gps_lat = 0.0 + self.gps_lon = 0.0 + self._gps_coordinates_lock = Lock() + + def run_task(self, goal): + feedback = UITaskFeedback() + feedback.state = 'Recording GNSS lat/lon' + self._as.publish_feedback(feedback) + msg = "" + with self._gps_coordinates_lock: + msg = "ID: %f Name: %s Latitude: %f Longitude: %f" % ( + goal.floats[0], goal.strings[0], self.gps_lat, self.gps_lon) + rospy.loginfo(msg) + return True + + def gpsSubscriberCallback(self, msg): + with self._gps_coordinates_lock: + self.gps_lat = msg.latitude + self.gps_lon = msg.longitude +``` + + +### Move PTZ camera to a Lat/Lon + +Below is a more advanced custom task. The file is "move_ptz_lat_lon.py" which pans a PTZ camera to point to a specific lat/lon coordinate. + +```python +from onav_tasks.custom_task_base import * +import actionlib +from clearpath_localization_msgs.srv import * +from clearpath_navigation_msgs.msg import * +from nav_msgs.msg import Odometry +from ptz_action_server_msgs.msg import PtzAction +import ptz_action_server_msgs.msg +import math +from math import remainder, tau +import rospy +from sensor_msgs import * +from tf.transformations import euler_from_quaternion, quaternion_from_euler + + + +class MovePtzLatLon(CustomTaskBase): + def __init__(self): + super().__init__("move_ptz_lat_lon") + self.localization_subscriber_ = rospy.Subscriber("/localization/odom", Odometry, self.localizationCallback) + self.move_ptz_client_ = actionlib.SimpleActionClient('/sensors/camera_0/move_ptz', PtzAction) + self.service_ = rospy.ServiceProxy('/localization/lat_lon_to_xy', ConvertLatLonToCartesian) + self.current_pose = Odometry() + + def localizationCallback(self, odom_msg): + self.current_pose = odom_msg + + def run_task(self, goal): + if len(goal.strings) == 0 and len(goal.floats) == 0: + rospy.logwarn('Warning') + self._as.set_aborted() + return False + goal_latitude = goal.floats[0] + goal_longitude = goal.floats[1] + goal_zoom = goal.floats[2] + str2 = 'Received goal latitude: ' + str(goal_latitude) + ', goal longitude: ' + str(goal_longitude) + ', zoom: ' + str(goal_zoom) + feedback = UITaskFeedback() + feedback.state = 'Aiming camera at lat-lon (' + str(goal_latitude) + ', ' + str(goal_longitude)+')' + self._as.publish_feedback(feedback) + orientation_q = self.current_pose.pose.pose.orientation + orientation_list = [orientation_q.x, orientation_q.y, orientation_q.z, orientation_q.w] + (roll, pitch, yaw) = euler_from_quaternion (orientation_list) + + gps_msg = sensor_msgs.msg.NavSatFix() + gps_msg.latitude = goal_latitude + gps_msg.longitude = goal_longitude + goal_utm = self.service_(gps_msg) + + goal_x = goal_utm.pose.pose.position.x + goal_y = goal_utm.pose.pose.position.y + + goal_angle = math.atan2(goal_y - self.current_pose.pose.pose.position.y, goal_x - self.current_pose.pose.pose.position.x) + pan_angle = math.remainder(goal_angle - yaw, math.tau) + print(pan_angle) + + self.move_ptz_client_.wait_for_server() + goal = ptz_action_server_msgs.msg.PtzGoal() + goal.pan=pan_angle + goal.tilt=0 + goal.zoom=goal_zoom + self.move_ptz_client_.send_goal(goal) + self.move_ptz_client_.wait_for_result() + print(self.move_ptz_client_.get_result()) + return True +``` diff --git a/outdoornav_user_manual_versioned_docs/version-0.14.0/features/navigation.mdx b/outdoornav_user_manual_versioned_docs/version-0.14.0/features/navigation.mdx index d2e0284d..5b4dfa2d 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.14.0/features/navigation.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.14.0/features/navigation.mdx @@ -1,38 +1,38 @@ ---- -title: Navigation Features -sidebar_label: Navigation Features -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -:::danger SAFETY WARNING - -Making changes to any of the following variables may decrease system safety. It is recommended that users -only modify these parameters in consultation with Clearpath Robotics Support. - -::: - -:::note - -Changes to any of the following variables will only take effect after power cycling the UGV. - -::: - -The OutdoorNav Software contains a set of features that can be enabled -or disabled according to your required application requirements. These -features can be enabled or disabled through the use of environment -variables, which should be added to the -`/opt/onav//config/autonomy.env` file, where *onav_version* -is the currently running version of OutdoorNav. The following table describes -the available features, their default state and any additional parameters -that we expose that may also be included to tune the feature. - -| Feature | Description | -|-----------------------------|----------------------------------------| -| **Collision Avoidance** | Collision avoidance is the UGV's ability to detect obstacles and stop/maneuver around the obstacle without any collisions. If `true`, the UGV will detect obstacles and if `false` no obstacles will be detected. Setting to `false` is not recommended and may cause harm to property or to individuals.

Environment Variable: `ENABLE_COLLISION_AVOIDANCE` (Default: `true`). | -| **Constrained Planning** | The constrained replanning feature, which is always enabled, restricts the area in which the UGV can plan paths. For example, if the default `PATH_CONSTRAINT` of 3.0 m is used, the UGV will not be allowed to 1) produce paths that drive it more than 3.0 meters from the initial path, and 2) fail to compute paths if the UGV is further than 3.0 meters from the any of the Waypoints. This allowable planning/navigation area can be shown on the map over the connecting lines between Waypoints. See [Constrained Replanning](../web_user_interface/ui_waypoint_mode.mdx#constrained_path) for further details.

Use the `PATH_CONSTRAINT` environment variable to modify the path constraint (in meters). | -| **Path Smoothing** | Generate paths according to a specified turning radius.

Environment Variable: `ENABLE_DUBINS_PATH_SMOOTHER` (Default: `false`).

Use the `TURN_RADIUS` environment variable to modify the radius of the planned paths (in meters). | -| **Stop Distance** | The stop distance feature allows the UGV to stop a predefined distance away from obstacles. This is useful if a UGV cannot drive in reverse and needs the required room in front of it to replan around an obstacle.

Environment Variable: `ENABLE_STOP_DISTANCE` (Default: `false`)

Use the `STOP_DISTANCE` environment variable to modify the stop distance (in meters). Note that if the stop distance is larger than 4.5 meters for the Clearpath Robotics Jackal and Husky UGVs, or 10.0 meters for the Clearpath Robotics Warthog UGV, the computational load will increase and may cause a decrease in performance in the navigation. | -| **Delay Compensation** | The delay compensation feature is able to compensate for mechanical delay on UGVs where either the accelerator introduces delay into the linear velocity or the steering introduces delay in the angular velocity. This feature is not required for Clearpath Robotics UGVs as negligible delay is present in our system.

Environment Variable: `ENABLE_DELAY_COMPENSATION` (Default: `false`)

Use the `CONTROLLER_DELAY` environment variable to modify the amount of delay to be compensated (in milliseconds). | -| **Docking** | If purchased, autonomous docking will allow the user to autonomously dock/undock their UGV. If not purchased, enabling this environment variable will do nothing.

Environment Variable: `OUTDORRNAV_ENABLE_DOCKING` (Default: `false`).| +--- +title: Navigation Features +sidebar_label: Navigation Features +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +:::danger SAFETY WARNING + +Making changes to any of the following variables may decrease system safety. It is recommended that users +only modify these parameters in consultation with Clearpath Robotics Support. + +::: + +:::note + +Changes to any of the following variables will only take effect after power cycling the UGV. + +::: + +The OutdoorNav Software contains a set of features that can be enabled +or disabled according to your required application requirements. These +features can be enabled or disabled through the use of environment +variables, which should be added to the +`/opt/onav//config/autonomy.env` file, where *onav_version* +is the currently running version of OutdoorNav. The following table describes +the available features, their default state and any additional parameters +that we expose that may also be included to tune the feature. + +| Feature | Description | +|-----------------------------|----------------------------------------| +| **Collision Avoidance** | Collision avoidance is the UGV's ability to detect obstacles and stop/maneuver around the obstacle without any collisions. If `true`, the UGV will detect obstacles and if `false` no obstacles will be detected. Setting to `false` is not recommended and may cause harm to property or to individuals.

Environment Variable: `ENABLE_COLLISION_AVOIDANCE` (Default: `true`). | +| **Constrained Planning** | The constrained replanning feature, which is always enabled, restricts the area in which the UGV can plan paths. For example, if the default `PATH_CONSTRAINT` of 3.0 m is used, the UGV will not be allowed to 1) produce paths that drive it more than 3.0 meters from the initial path, and 2) fail to compute paths if the UGV is further than 3.0 meters from the any of the Waypoints. This allowable planning/navigation area can be shown on the map over the connecting lines between Waypoints. See [Constrained Replanning](../web_user_interface/ui_waypoint_mode.mdx#constrained_path) for further details.

Use the `PATH_CONSTRAINT` environment variable to modify the path constraint (in meters). | +| **Path Smoothing** | Generate paths according to a specified turning radius.

Environment Variable: `ENABLE_DUBINS_PATH_SMOOTHER` (Default: `false`).

Use the `TURN_RADIUS` environment variable to modify the radius of the planned paths (in meters). | +| **Stop Distance** | The stop distance feature allows the UGV to stop a predefined distance away from obstacles. This is useful if a UGV cannot drive in reverse and needs the required room in front of it to replan around an obstacle.

Environment Variable: `ENABLE_STOP_DISTANCE` (Default: `false`)

Use the `STOP_DISTANCE` environment variable to modify the stop distance (in meters). Note that if the stop distance is larger than 4.5 meters for the Clearpath Robotics Jackal and Husky UGVs, or 10.0 meters for the Clearpath Robotics Warthog UGV, the computational load will increase and may cause a decrease in performance in the navigation. | +| **Delay Compensation** | The delay compensation feature is able to compensate for mechanical delay on UGVs where either the accelerator introduces delay into the linear velocity or the steering introduces delay in the angular velocity. This feature is not required for Clearpath Robotics UGVs as negligible delay is present in our system.

Environment Variable: `ENABLE_DELAY_COMPENSATION` (Default: `false`)

Use the `CONTROLLER_DELAY` environment variable to modify the amount of delay to be compensated (in milliseconds). | +| **Docking** | If purchased, autonomous docking will allow the user to autonomously dock/undock their UGV. If not purchased, enabling this environment variable will do nothing.

Environment Variable: `OUTDORRNAV_ENABLE_DOCKING` (Default: `false`).| diff --git a/outdoornav_user_manual_versioned_docs/version-0.14.0/getting_started/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.14.0/getting_started/_category_.json index 8b4a486d..9a9747ef 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.14.0/getting_started/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.14.0/getting_started/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Getting Started", - "position": 5 -} +{ + "label": "Getting Started", + "position": 5 +} diff --git a/outdoornav_user_manual_versioned_docs/version-0.14.0/getting_started/first_time_checklist.mdx b/outdoornav_user_manual_versioned_docs/version-0.14.0/getting_started/first_time_checklist.mdx index e7298e8a..9044c8da 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.14.0/getting_started/first_time_checklist.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.14.0/getting_started/first_time_checklist.mdx @@ -1,114 +1,114 @@ ---- -title: First Time Use Checklist -sidebar_label: First Time Use Checklist -sidebar_position: 2 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -## Hardware Setup - -### ☐ Has the Base Station been set up? - -Ensure that the Base Station has been set up approximately 5 meters -away from any buildings and is currently powered on. See -[System Startup](system_setup.mdx) for further -instructions related to setting up the Base Station. - -### ☐ Is the UGV connected to the Base Station? - -Check to see that the UGV can be pinged from the Base Station network. -See [Connecting to Web UI](system_setup.mdx#connecting_to_web_ui) for further -details. - -## Software Setup - -### ☐ Is ROS running on the UGV? - -SSH into the UGV and run `rostopic list` to generate a list of the -rostopics that are currently available. The list is generally fairly -long so if you are looking for any specific topic please refer to -[API Endpoints](../api/api_endpoints/api_endpoints.mdx). You can also check the -ROS status through the OutdoorNAV UI by referring to the diagnostics section -on the Status page. - -### ☐ Is the OutdoorNAV software running? - -Check to see if the relevant dockers are running (ssh into the UGV and -run `docker ps` which should show at least 5 separate docker containers -running). - -### ☐ Is the computer using the UI connected to the Base Station network? - -This can be confirmed by following the steps found in -[Connecting to Web UI](system_setup.mdx#connecting_to_web_ui). - -### ☐ Have you surveyed the Base Station? - -See [RTK Survey Positioning](../cpr_hardware.mdx#base-station-survey) for -information on how and when to survey the Base station. - -### ☐ Do you have a strong GPS signal? - -After surveying the Base Station check the upper right hand corner of -the UI to confirm that you have a strong GPS signal (the POS and DIR -icons should be green). If either of these icons are not green refer -to [Checking GPS RTK Fix](../cpr_hardware.mdx#base-station-survey) for further -troubleshooting information. - -### ☐ Is the map loading correctly? - -Currently the map requires internet access to load. Refer to -[Loading Map Tiles](system_setup.mdx#loading_map_tiles) for more details -related to setting up the map. - -### ☐ Has the Datum been set? - -See [Set Datum](system_setup.mdx#set-datum) for information on how -to set the Datum variables. - -### ☐ If docking is enabled has the location been set? - -If the Clearpath Robotics autonomous docking package was purchased the -docking location will need to be set. See -[Set Dock Location](system_setup.mdx#set-dock-location) for information on -how to set the docking location. - -### ☐ Is the Navbar status icon functioning? - -To check if the Navbar icon is functioning, trigger the UGV's motion stop -and check to see if it has turned to a red icon. Clicking the icon -will bring up the status information as well as any recent messages -(see below). - -![](/img/outdoornav_images/ugvStatusMessages.png) - -## Using the UI - -The following items are general checks to ensure that the UI is working -properly. - -### ☐ Can the virtual joystick drive the UGV? - -See [Web UI Manual Mode](../web_user_interface/ui_manual_mode.mdx) for further details -related to this. - -### ☐ Can you create a new mission? - -Select the mission list and then click on `Add Mission` to create a -new mission. To add new waypoints for the mission refer to -[Mission Creation](../web_user_interface/ui_waypoint_mode.mdx#mission-creation). - -### ☐ After creating a new mission, can you execute the mission? - -To execute a mission refer to [Mission Execution](../web_user_interface/ui_waypoint_mode.mdx#mission-execution). - -### ☐ Are the cameras (if present) active in the view bar section when running the mission? - -For more information related to camera views see -[Camera Views](../web_user_interface/ui_overview.mdx#camera-views). - -### ☐ Can you select a camera and save an image after it loads on the main screen? - -See [Pan-Tilt-Zoom (PTZ) View ](../web_user_interface/ui_overview.mdx#ptz-view) for more details related +--- +title: First Time Use Checklist +sidebar_label: First Time Use Checklist +sidebar_position: 2 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +## Hardware Setup + +### ☐ Has the Base Station been set up? + +Ensure that the Base Station has been set up approximately 5 meters +away from any buildings and is currently powered on. See +[System Startup](system_setup.mdx) for further +instructions related to setting up the Base Station. + +### ☐ Is the UGV connected to the Base Station? + +Check to see that the UGV can be pinged from the Base Station network. +See [Connecting to Web UI](system_setup.mdx#connecting_to_web_ui) for further +details. + +## Software Setup + +### ☐ Is ROS running on the UGV? + +SSH into the UGV and run `rostopic list` to generate a list of the +rostopics that are currently available. The list is generally fairly +long so if you are looking for any specific topic please refer to +[API Endpoints](../api/api_endpoints/api_endpoints.mdx). You can also check the +ROS status through the OutdoorNAV UI by referring to the diagnostics section +on the Status page. + +### ☐ Is the OutdoorNAV software running? + +Check to see if the relevant dockers are running (ssh into the UGV and +run `docker ps` which should show at least 5 separate docker containers +running). + +### ☐ Is the computer using the UI connected to the Base Station network? + +This can be confirmed by following the steps found in +[Connecting to Web UI](system_setup.mdx#connecting_to_web_ui). + +### ☐ Have you surveyed the Base Station? + +See [RTK Survey Positioning](../cpr_hardware.mdx#base-station-survey) for +information on how and when to survey the Base station. + +### ☐ Do you have a strong GPS signal? + +After surveying the Base Station check the upper right hand corner of +the UI to confirm that you have a strong GPS signal (the POS and DIR +icons should be green). If either of these icons are not green refer +to [Checking GPS RTK Fix](../cpr_hardware.mdx#base-station-survey) for further +troubleshooting information. + +### ☐ Is the map loading correctly? + +Currently the map requires internet access to load. Refer to +[Loading Map Tiles](system_setup.mdx#loading_map_tiles) for more details +related to setting up the map. + +### ☐ Has the Datum been set? + +See [Set Datum](system_setup.mdx#set-datum) for information on how +to set the Datum variables. + +### ☐ If docking is enabled has the location been set? + +If the Clearpath Robotics autonomous docking package was purchased the +docking location will need to be set. See +[Set Dock Location](system_setup.mdx#set-dock-location) for information on +how to set the docking location. + +### ☐ Is the Navbar status icon functioning? + +To check if the Navbar icon is functioning, trigger the UGV's motion stop +and check to see if it has turned to a red icon. Clicking the icon +will bring up the status information as well as any recent messages +(see below). + +![](/img/outdoornav_images/ugvStatusMessages.png) + +## Using the UI + +The following items are general checks to ensure that the UI is working +properly. + +### ☐ Can the virtual joystick drive the UGV? + +See [Web UI Manual Mode](../web_user_interface/ui_manual_mode.mdx) for further details +related to this. + +### ☐ Can you create a new mission? + +Select the mission list and then click on `Add Mission` to create a +new mission. To add new waypoints for the mission refer to +[Mission Creation](../web_user_interface/ui_waypoint_mode.mdx#mission-creation). + +### ☐ After creating a new mission, can you execute the mission? + +To execute a mission refer to [Mission Execution](../web_user_interface/ui_waypoint_mode.mdx#mission-execution). + +### ☐ Are the cameras (if present) active in the view bar section when running the mission? + +For more information related to camera views see +[Camera Views](../web_user_interface/ui_overview.mdx#camera-views). + +### ☐ Can you select a camera and save an image after it loads on the main screen? + +See [Pan-Tilt-Zoom (PTZ) View ](../web_user_interface/ui_overview.mdx#ptz-view) for more details related to saving images. \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.14.0/getting_started/terminal_interface.mdx b/outdoornav_user_manual_versioned_docs/version-0.14.0/getting_started/terminal_interface.mdx index aeedd85f..662608d6 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.14.0/getting_started/terminal_interface.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.14.0/getting_started/terminal_interface.mdx @@ -1,244 +1,244 @@ ---- -title: Command Line Interface -sidebar_label: Command Line Interface -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -By default, the OutdoorNav Software begins automatically when the system -is powered on. This section outlines the OutdoorNav Command Line Interface (CLI), -the set of commands that can be used by developers who are debugging -the system or who want more precise control for managing the OutdoorNav -software. - -## Connecting to the OutdoorNav Computer {#connecting-to-outdoornav-computer} - -To connect to your UGV, consult its corresponding user manual. - -If you are using a Clearpath Robotics UGV with a separate OutdoorNav Computer, -first `ssh` to the UGV using the details provided in the UGV user -manual. Then, if a separate OutdoorNav Computer exists, you can -connect to it by running: - -``` bash -ssh administrator@192.168.131.5 -``` - -## OutdoorNav CLI Installation - -The OutdoorNav CLI is pre-installed on Clearpath robots. If it has not -been installed on your system, it can be installed by running the following -on the OutdoorNav Computer: - -```bash -sudo apt-get install python3-onav-cli -``` - -:::note - -The command above requires that the Clearpath Package Server has been -configured on your OutdoorNav Computer. This is pre-configured on -Clearpath robots. Refer to details on the -[Clearpath Package Server](http://packages.clearpathrobotics.com/) if -this is not configured on your computer. - -::: - -## Listing the OutdoorNav CLI Commands and Getting Help - -To list all of the CLI commands, run the following on the OutdoorNav Computer: - -```bash -onav help -``` - -The CLI commands are: - -- `install`: Download and configure OutdoorNav -- `key`: Get, set, or delete your OutdoorNav license key -- `download`: Download OutdoorNav, but do not configure it -- `configure`: (Re)configure OutdoorNav -- `upgrade`: Upgrade OutdoorNav to the latest vesion -- `uninstall`: Uninstall OutdoorNav -- `depends`: Verify and install dependencies -- `start`: Start OutdoorNav -- `stop`: Stop OutdoorNav -- `status`: Check the status of OutdoorNav -- `logs`: View OutdoorNav logs -- `versions`: Print versions available to install -- `help`: Show available commands - -To get help on an individual command, use the `-h` option. For example, to -get help on the `install` command, run `onav install -h`: - -``` -usage: onav install [-h] [-k KEY] [-b] [-c] [-H] VERSION - -positional arguments: - VERSION The OutdoorNav version to install (e.g. 0.11.0) - -optional arguments: - -h, --help show this help message and exit - -k KEY, --key KEY Your OutdoorNav installation key - -b, --backpack Configure in backpack/bridged mode - -c, --clean Clean any configurations from a prior installation -``` - -## Starting and Stopping the OutdoorNav Software {#starting-outdoornav} - -On UGV startup, all the sensors, the user interface, as well as the -autonomy software are set to start automatically. When debugging or when -greater control is desired, the CLI can be used to start and stop -the OutdoorNav software, in whole or in part. - -To see the current status of OutdoorNav software, run: - -```bash -onav status -``` - -To start the OutdoorNav software if it is not running, use the following command, -which starts the latest version of the software by default: - -```bash -onav start -``` - -To stop the OutdoorNav software, run: - -```bash -onav stop -``` - -## Stopping and Restarting the Autonomy Software Only - -To use the UGV without the autonomy software, use the following -command to stop the nodes and prevent them from automatic startup: - -``` bash -onav stop -s autonomy -``` - -The autonomy software can be restarted by running: - -``` bash -onav start -s autonomy -``` - -## Stopping/Restarting the Sensors - -To use the UGV without the sensors, use these commands to disable the -nodes and prevent them from automatic startup: - -``` bash -onav stop -s sensors -``` - -:::note - -This command will only disable the drivers for the sensors that are started -by the OutdoorNav software. This includes the GNSS units, the Microstrain IMU, -and any LiDAR/Stereo detection sources (not limited to Velodyne LiDARs, Realsense -cameras, 2D Lidars). - -::: - -The sensors software can be restarted by running: - -``` -onav start -s sensors -``` - -## Accessing the OutdoorNav Software Logs - -To check the logs of the OutdoorNav software, use the `onav logs` command -with the appropriate service. For example, to view the logs for the sensors -service, run: - -```bash -onav logs sensors -``` - -## Installing the OutdoorNav Software - -OutdoorNav is typically pre-installed on Clearpath robots, so most users should -not need to do a first-time installation of the software, though the process -is outlined below as a reference. - -As a first step, confirm that the robot has internet access. For example, confirm -that the following command is successful: - -``` -ping 8.8.8.8 -``` - -Second, the required dependencies need to be installed by running: - -```bash -onav depends -``` - -Third, a key needs to be added onto the robot to enable the installation -process. Contact [Clearpath Support](../support) if you did not receive your key. -To add your key, run the following, replacing `` with the actual value: - -```bash -onav key -``` - -Fourth, list the versions available for installation by running: - -```bash -onav versions -``` - -Fifth, install the OutdoorNav software for the desired version (typically the -newest version), by running the following, replacing `` with -the version to be installed: - -```bash -onav install -``` - -When prompted, trigger the reboot. - -Finally, following the reboot, run the following command to start the OutdoorNav -software. This will only be required the first time after installation. - -```bash -onav start -``` - -## Upgrading the OutdoorNav Software - -After receiving a notice that a new version of the OutdoorNav Software is -available, use the `onav upgrade` command with the appropriate version. -For example, to upgrade to the newest avialbel version that you are eligible -to receive, run the following command: - -``` -onav upgrade -``` - -:::note - -The upgrade requires internet access to download the new software. -Confirm that the OutdoorNav Computer has internet access by running a command -such as: - -``` -ping 8.8.8.8 -``` - -::: - -## Uninstalling Old Versions of OutdoorNav Software - -If old versions of OutdoorNav software are no longer being used, they can -be removed with the `onav uninstall` command. For example, to uninstall 0.11.0 -run: - -``` -onav uninstall 0.11.0 +--- +title: Command Line Interface +sidebar_label: Command Line Interface +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +By default, the OutdoorNav Software begins automatically when the system +is powered on. This section outlines the OutdoorNav Command Line Interface (CLI), +the set of commands that can be used by developers who are debugging +the system or who want more precise control for managing the OutdoorNav +software. + +## Connecting to the OutdoorNav Computer {#connecting-to-outdoornav-computer} + +To connect to your UGV, consult its corresponding user manual. + +If you are using a Clearpath Robotics UGV with a separate OutdoorNav Computer, +first `ssh` to the UGV using the details provided in the UGV user +manual. Then, if a separate OutdoorNav Computer exists, you can +connect to it by running: + +``` bash +ssh administrator@192.168.131.5 +``` + +## OutdoorNav CLI Installation + +The OutdoorNav CLI is pre-installed on Clearpath robots. If it has not +been installed on your system, it can be installed by running the following +on the OutdoorNav Computer: + +```bash +sudo apt-get install python3-onav-cli +``` + +:::note + +The command above requires that the Clearpath Package Server has been +configured on your OutdoorNav Computer. This is pre-configured on +Clearpath robots. Refer to details on the +[Clearpath Package Server](http://packages.clearpathrobotics.com/) if +this is not configured on your computer. + +::: + +## Listing the OutdoorNav CLI Commands and Getting Help + +To list all of the CLI commands, run the following on the OutdoorNav Computer: + +```bash +onav help +``` + +The CLI commands are: + +- `install`: Download and configure OutdoorNav +- `key`: Get, set, or delete your OutdoorNav license key +- `download`: Download OutdoorNav, but do not configure it +- `configure`: (Re)configure OutdoorNav +- `upgrade`: Upgrade OutdoorNav to the latest vesion +- `uninstall`: Uninstall OutdoorNav +- `depends`: Verify and install dependencies +- `start`: Start OutdoorNav +- `stop`: Stop OutdoorNav +- `status`: Check the status of OutdoorNav +- `logs`: View OutdoorNav logs +- `versions`: Print versions available to install +- `help`: Show available commands + +To get help on an individual command, use the `-h` option. For example, to +get help on the `install` command, run `onav install -h`: + +``` +usage: onav install [-h] [-k KEY] [-b] [-c] [-H] VERSION + +positional arguments: + VERSION The OutdoorNav version to install (e.g. 0.11.0) + +optional arguments: + -h, --help show this help message and exit + -k KEY, --key KEY Your OutdoorNav installation key + -b, --backpack Configure in backpack/bridged mode + -c, --clean Clean any configurations from a prior installation +``` + +## Starting and Stopping the OutdoorNav Software {#starting-outdoornav} + +On UGV startup, all the sensors, the user interface, as well as the +autonomy software are set to start automatically. When debugging or when +greater control is desired, the CLI can be used to start and stop +the OutdoorNav software, in whole or in part. + +To see the current status of OutdoorNav software, run: + +```bash +onav status +``` + +To start the OutdoorNav software if it is not running, use the following command, +which starts the latest version of the software by default: + +```bash +onav start +``` + +To stop the OutdoorNav software, run: + +```bash +onav stop +``` + +## Stopping and Restarting the Autonomy Software Only + +To use the UGV without the autonomy software, use the following +command to stop the nodes and prevent them from automatic startup: + +``` bash +onav stop -s autonomy +``` + +The autonomy software can be restarted by running: + +``` bash +onav start -s autonomy +``` + +## Stopping/Restarting the Sensors + +To use the UGV without the sensors, use these commands to disable the +nodes and prevent them from automatic startup: + +``` bash +onav stop -s sensors +``` + +:::note + +This command will only disable the drivers for the sensors that are started +by the OutdoorNav software. This includes the GNSS units, the Microstrain IMU, +and any LiDAR/Stereo detection sources (not limited to Velodyne LiDARs, Realsense +cameras, 2D Lidars). + +::: + +The sensors software can be restarted by running: + +``` +onav start -s sensors +``` + +## Accessing the OutdoorNav Software Logs + +To check the logs of the OutdoorNav software, use the `onav logs` command +with the appropriate service. For example, to view the logs for the sensors +service, run: + +```bash +onav logs sensors +``` + +## Installing the OutdoorNav Software + +OutdoorNav is typically pre-installed on Clearpath robots, so most users should +not need to do a first-time installation of the software, though the process +is outlined below as a reference. + +As a first step, confirm that the robot has internet access. For example, confirm +that the following command is successful: + +``` +ping 8.8.8.8 +``` + +Second, the required dependencies need to be installed by running: + +```bash +onav depends +``` + +Third, a key needs to be added onto the robot to enable the installation +process. Contact [Clearpath Support](../support) if you did not receive your key. +To add your key, run the following, replacing `` with the actual value: + +```bash +onav key +``` + +Fourth, list the versions available for installation by running: + +```bash +onav versions +``` + +Fifth, install the OutdoorNav software for the desired version (typically the +newest version), by running the following, replacing `` with +the version to be installed: + +```bash +onav install +``` + +When prompted, trigger the reboot. + +Finally, following the reboot, run the following command to start the OutdoorNav +software. This will only be required the first time after installation. + +```bash +onav start +``` + +## Upgrading the OutdoorNav Software + +After receiving a notice that a new version of the OutdoorNav Software is +available, use the `onav upgrade` command with the appropriate version. +For example, to upgrade to the newest avialbel version that you are eligible +to receive, run the following command: + +``` +onav upgrade +``` + +:::note + +The upgrade requires internet access to download the new software. +Confirm that the OutdoorNav Computer has internet access by running a command +such as: + +``` +ping 8.8.8.8 +``` + +::: + +## Uninstalling Old Versions of OutdoorNav Software + +If old versions of OutdoorNav software are no longer being used, they can +be removed with the `onav uninstall` command. For example, to uninstall 0.11.0 +run: + +``` +onav uninstall 0.11.0 ``` \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.14.0/getting_started/tf_validation.mdx b/outdoornav_user_manual_versioned_docs/version-0.14.0/getting_started/tf_validation.mdx index 72327dbc..ab05b15f 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.14.0/getting_started/tf_validation.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.14.0/getting_started/tf_validation.mdx @@ -1,80 +1,80 @@ ---- -title: TF Validation -sidebar_label: TF Validation -sidebar_position: 4 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -:::note - -Sensor transform (TF) validation should only be required if the performance -is noticeably poor, such as when the UGV drifts off of the planned path or -oscillations occur around the path). - -::: - -The coordinate transformation of the two GPS antennas, the IMU, the 2D -and 3D Lidars to the base_link of the UGV should have already been set -prior to receiving the UGV. However, ensure that they are set correctly. - -The ROS coordinate frame base_link, shown in the figure below, is -located at the center of the bottom plate of the UGV. The environment -variables below should be taken with respect to this coordinate frame. -The X axis is in red (and pointing towards the front of the UGV), Y in -green (pointing towards the left of the UGV) and Z in blue (pointing -towards the sky). - -You can check the current value of the environment variables by running -the following on the robot (host) computer (and setting \ -to the names listed in the table below). - -``` bash -printenv | grep -``` - -The environment variables for the position and orientation of each -sensor are provided in the table below. - -_OutdoorNav sensor position and orientation environment variables_ - -| Environment Variable | Function | -|----------------------|---------------------------------------| -| POSITION_GPS_XYZ | [X,Y,Z] position, in meters, of the position GNSS antenna with respect to the base_link coordinate frame. | -| POSITION_GPS_RPY | [Roll,Pitch,Yaw], in radians, of the position GNSS antenna with respect to the base_link coordinate frame. | -| HEADING_GPS_XYZ | [X,Y,Z] position, in meters, of the heading GNSS antenna with respect to the base_link coordinate frame. | -| HEADING_GPS_RPY | [Roll,Pitch,Yaw], in radians, of the heading GNSS antenna with respect to the base_link coordinate frame. | -| MICROSTRAIN_XYZ | [X,Y,Z] position, in meters, of the IMU with respect to the base_link coordinate frame. | -| MICROSTRAIN_RPY | [Roll,Pitch,Yaw], in radians, of the IMU with respect to the base_link coordinate frame. | -| VLP_XYZ | [X,Y,Z] position, in meters, of the 3D Lidar with respect to the base_link coordinate frame. | -| VLP_RPY | [Roll,Pitch,Yaw], in radians, of the 3D Lidar with respect to the base_link coordinate frame. | -| LMS1XX_XYZ | [X,Y,Z] position, in meters, of the 2D Lidar with respect to the base_link coordinate frame. | -| LMS1XX_RPY | [Roll,Pitch,Yaw], in radians, of the 2D Lidar with respect to the base_link coordinate frame. | -| HOKUYO_XYZ | [X,Y,Z] position, in meters, of the 2D Lidar with respect to the base_link coordinate frame. | -| HOKUYO_RPY | [Roll,Pitch,Yaw], in radians, of the 2D Lidar with respect to the base_link coordinate frame. | -| D435_XYZ | [X,Y,Z] position, in meters, of the 2D Lidar with respect to the base_link coordinate frame. | -| D435_RPY | [Roll,Pitch,Yaw], in radians, of the 2D Lidar with respect to the base_link coordinate frame. | - -There may also be 2 of each of these detection sensors. The corresponding environment -variable is prefixed with `REAR_`. - -:::note - -When the printed Y axis on the IMU is pointing towards the front of the -robot (i.e., aligned to X axis of base_link), MICROSTRAIN_RPY = [0, 0, 0]. - -::: - -:::warning - -If you decide to move any of these sensors, you must modify these -variables accordingly in the `/opt/onav/outdoornav_host_setup.sh` file (on the host). - -
-
- -
base_link coordinate frame
-
-
- -::: +--- +title: TF Validation +sidebar_label: TF Validation +sidebar_position: 4 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +:::note + +Sensor transform (TF) validation should only be required if the performance +is noticeably poor, such as when the UGV drifts off of the planned path or +oscillations occur around the path). + +::: + +The coordinate transformation of the two GPS antennas, the IMU, the 2D +and 3D Lidars to the base_link of the UGV should have already been set +prior to receiving the UGV. However, ensure that they are set correctly. + +The ROS coordinate frame base_link, shown in the figure below, is +located at the center of the bottom plate of the UGV. The environment +variables below should be taken with respect to this coordinate frame. +The X axis is in red (and pointing towards the front of the UGV), Y in +green (pointing towards the left of the UGV) and Z in blue (pointing +towards the sky). + +You can check the current value of the environment variables by running +the following on the robot (host) computer (and setting \ +to the names listed in the table below). + +``` bash +printenv | grep +``` + +The environment variables for the position and orientation of each +sensor are provided in the table below. + +_OutdoorNav sensor position and orientation environment variables_ + +| Environment Variable | Function | +|----------------------|---------------------------------------| +| POSITION_GPS_XYZ | [X,Y,Z] position, in meters, of the position GNSS antenna with respect to the base_link coordinate frame. | +| POSITION_GPS_RPY | [Roll,Pitch,Yaw], in radians, of the position GNSS antenna with respect to the base_link coordinate frame. | +| HEADING_GPS_XYZ | [X,Y,Z] position, in meters, of the heading GNSS antenna with respect to the base_link coordinate frame. | +| HEADING_GPS_RPY | [Roll,Pitch,Yaw], in radians, of the heading GNSS antenna with respect to the base_link coordinate frame. | +| MICROSTRAIN_XYZ | [X,Y,Z] position, in meters, of the IMU with respect to the base_link coordinate frame. | +| MICROSTRAIN_RPY | [Roll,Pitch,Yaw], in radians, of the IMU with respect to the base_link coordinate frame. | +| VLP_XYZ | [X,Y,Z] position, in meters, of the 3D Lidar with respect to the base_link coordinate frame. | +| VLP_RPY | [Roll,Pitch,Yaw], in radians, of the 3D Lidar with respect to the base_link coordinate frame. | +| LMS1XX_XYZ | [X,Y,Z] position, in meters, of the 2D Lidar with respect to the base_link coordinate frame. | +| LMS1XX_RPY | [Roll,Pitch,Yaw], in radians, of the 2D Lidar with respect to the base_link coordinate frame. | +| HOKUYO_XYZ | [X,Y,Z] position, in meters, of the 2D Lidar with respect to the base_link coordinate frame. | +| HOKUYO_RPY | [Roll,Pitch,Yaw], in radians, of the 2D Lidar with respect to the base_link coordinate frame. | +| D435_XYZ | [X,Y,Z] position, in meters, of the 2D Lidar with respect to the base_link coordinate frame. | +| D435_RPY | [Roll,Pitch,Yaw], in radians, of the 2D Lidar with respect to the base_link coordinate frame. | + +There may also be 2 of each of these detection sensors. The corresponding environment +variable is prefixed with `REAR_`. + +:::note + +When the printed Y axis on the IMU is pointing towards the front of the +robot (i.e., aligned to X axis of base_link), MICROSTRAIN_RPY = [0, 0, 0]. + +::: + +:::warning + +If you decide to move any of these sensors, you must modify these +variables accordingly in the `/opt/onav/outdoornav_host_setup.sh` file (on the host). + +
+
+ +
base_link coordinate frame
+
+
+ +::: diff --git a/outdoornav_user_manual_versioned_docs/version-0.14.0/index.mdx b/outdoornav_user_manual_versioned_docs/version-0.14.0/index.mdx index 09a63a7f..3d1655b9 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.14.0/index.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.14.0/index.mdx @@ -1,18 +1,18 @@ ---- -title: OutdoorNav User Manual -sidebar_label: OutdoorNav User Manual -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -
-
- -
-
- -OutdoorNav is an outdoor autonomy software platform designed for vehicle developers, -OEMs and robotics researchers. Compatible with Clearpath outdoor mobile platforms -and third-party vehicles, OutdoorNav provides reliable, industry-leading GPS-based +--- +title: OutdoorNav User Manual +sidebar_label: OutdoorNav User Manual +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +
+
+ +
+
+ +OutdoorNav is an outdoor autonomy software platform designed for vehicle developers, +OEMs and robotics researchers. Compatible with Clearpath outdoor mobile platforms +and third-party vehicles, OutdoorNav provides reliable, industry-leading GPS-based navigation for faster, more efficient autonomous vehicle development. \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.14.0/integration_requirements/integration_overview.mdx b/outdoornav_user_manual_versioned_docs/version-0.14.0/integration_requirements/integration_overview.mdx index 00cf8a07..72d78ae3 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.14.0/integration_requirements/integration_overview.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.14.0/integration_requirements/integration_overview.mdx @@ -1,34 +1,34 @@ ---- -title: "Integration Overview" -sidebar_label: "Integration Overview" -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -The scope of work to transform a non-autonomous UGV into an autonomous -one will vary depending on the exact hardware capabilities and software -interfaces of the UGV. Development work will be required by Clearpath -Robotics, the end user, or a third party developer to bring the UGV into -compliance with the requirements listed in the table below. This may -involve implementing encoders and controllers to provide velocity -control of the UGV and implementing a CAN bus to ROS interface with -kinematic control. The table below provides a general outline of the -requirements; the detailed requirements are covered in the following -sections. - -_Navigation hardware and software general integration scope of work_ - -| \# | Task | Note | -|-----|----------------------------------|---------------------------------| -| 1 | **Convert UGV to drive by wire** | If required; can be a significant electromechanical integration | -| 1.1 | Implement actuated steering and throttle control if necessary | | -| 1.2 | Implement the encoder and controller hardware to provide wheel velocity control and odometry feedback | May require electronic power steering position feedback and controller | -| 2 | **Create a ROS interface** | | -| 2.1 | Commission an OutdoorNav computer running Ubuntu 20.04 and ROS Noetic | | -| 2.2 | Create a ROS interface to the UGV Often interfacing via CAN bus motor controllers and UGV controller | | -| 2.3 | Create a ROS driver including UGV kinematics with ROS-control | Accepts velocity input, commands motor controllers, provides other status feedback | -| 3 | **Install and configure OutdoorNav Hardware and Software** | | -| 3.1 | Install OutdoorNav computer and sensors on the UGV | Provide mechanical mounting, power and ethernet communication to UGV computer | -| 3.2 | Install, update and configure OutdoorNav Software on computer | Configure for sensor mounting locations, UGV kinematics and data topics. Can be done remotely with assistance from Clearpath Robotics Engineering. Approximately 1-2 days. | -| 3.3 | Tune the path planning and following controllers for new UGV | Can be done at a Clearpath Robotics facility. Can often be done at end user facility via remote login from Clearpath Robotics Engineering. Approximately 2-5 days. | +--- +title: "Integration Overview" +sidebar_label: "Integration Overview" +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +The scope of work to transform a non-autonomous UGV into an autonomous +one will vary depending on the exact hardware capabilities and software +interfaces of the UGV. Development work will be required by Clearpath +Robotics, the end user, or a third party developer to bring the UGV into +compliance with the requirements listed in the table below. This may +involve implementing encoders and controllers to provide velocity +control of the UGV and implementing a CAN bus to ROS interface with +kinematic control. The table below provides a general outline of the +requirements; the detailed requirements are covered in the following +sections. + +_Navigation hardware and software general integration scope of work_ + +| \# | Task | Note | +|-----|----------------------------------|---------------------------------| +| 1 | **Convert UGV to drive by wire** | If required; can be a significant electromechanical integration | +| 1.1 | Implement actuated steering and throttle control if necessary | | +| 1.2 | Implement the encoder and controller hardware to provide wheel velocity control and odometry feedback | May require electronic power steering position feedback and controller | +| 2 | **Create a ROS interface** | | +| 2.1 | Commission an OutdoorNav computer running Ubuntu 20.04 and ROS Noetic | | +| 2.2 | Create a ROS interface to the UGV Often interfacing via CAN bus motor controllers and UGV controller | | +| 2.3 | Create a ROS driver including UGV kinematics with ROS-control | Accepts velocity input, commands motor controllers, provides other status feedback | +| 3 | **Install and configure OutdoorNav Hardware and Software** | | +| 3.1 | Install OutdoorNav computer and sensors on the UGV | Provide mechanical mounting, power and ethernet communication to UGV computer | +| 3.2 | Install, update and configure OutdoorNav Software on computer | Configure for sensor mounting locations, UGV kinematics and data topics. Can be done remotely with assistance from Clearpath Robotics Engineering. Approximately 1-2 days. | +| 3.3 | Tune the path planning and following controllers for new UGV | Can be done at a Clearpath Robotics facility. Can often be done at end user facility via remote login from Clearpath Robotics Engineering. Approximately 2-5 days. | diff --git a/outdoornav_user_manual_versioned_docs/version-0.14.0/integration_requirements/interface_control_requirements.mdx b/outdoornav_user_manual_versioned_docs/version-0.14.0/integration_requirements/interface_control_requirements.mdx index 45cdfb2c..aa2134d6 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.14.0/integration_requirements/interface_control_requirements.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.14.0/integration_requirements/interface_control_requirements.mdx @@ -1,119 +1,119 @@ ---- -title: "ROS Interface Control Requirements" -sidebar_label: "ROS Interface Control Requirements" -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -## ROS Interface Control Checklist - -Prior to the installation and tuning of Clearpath Robotics (CPR) -OutdoorNav software on your platform (robot computer), CPR requires that the platform's -ROS interface satisfies the conditions listed below. Ensure that all of the requirements -are satisfied for a smooth installation and tuning process. - -![](/img/outdoornav_images/onav_interface_control.png) - -| | Requirement | -|------|------------------------------------------------------------------| -| | The platform computer is on the 192.168.131.xxx subnet (ideally in the range 1-4). | -| | The platform computer has an installation of [ROS 1 Noetic](http://wiki.ros.org/noetic/Installation). | -| | A URDF is supplied to CPR by the customer, in which the `base_link` coordinate frame is defined according to the [REP-105 base-link](https://www.ros.org/reps/rep-0105.html#base-link) ROS standard. | -| | The platform outputs [tf2_msgs/TFMessage](http://docs.ros.org/en/jade/api/tf2_msgs/html/msg/TFMessage.html) messages on the ROS standard `/tf` topic, at a minimum rate of **30 Hz**. | -| | The platform outputs a latched [tf2_msgs/TFMessage](http://docs.ros.org/en/jade/api/tf2_msgs/html/msg/TFMessage.html) message on the ROS standard `/tf_static` topic. This should include any fixed frames of ROS enabled devices/sensors that are available on your platform. | -| | The platform computer has a velocity controller that accepts, as input, [geometry_msgs/Twist](http://docs.ros.org/en/melodic/api/geometry_msgs/html/msg/Twist.html) messages on the ROS standard `/cmd_vel` topic, at a minimum rate of **10 Hz**. | -| | The platform computer has a velocity controller that tracks the input velocity and outputs the resulting platform velocity on the `/platform/cmd_vel` topic. | -| | The platform outputs [nav_msgs/Odometry](http://docs.ros.org/en/noetic/api/nav_msgs/html/msg/Odometry.html) messages on the `/platform/odom` topic, at a minimum rate of **10 Hz**. | -| | The `/platform/odom` topic publishes its data with the header.frame_id = `odom` and the child_frame_id = `base_link`, as per the [REP-105 odom](https://www.ros.org/reps/rep-0105.html#odom) ROS standard. **IMPORTANT**: The platform should however not broadcast the `odom` --> `base_link` transformation since the OutdoorNav software will do so. | -| | If available, the platform odometry output has less than ±5% linear position error. | -| | If available, the platform odometry output has less than ±5% orientation error. | -| | The platform outputs [std_msgs/Bool](http://docs.ros.org/en/noetic/api/std_msgs/html/msg/Bool.html) messages on the `/platform/emergency_stop` topic, at a minimum rate of **5 Hz**, indicating whether or not the platform is in a stopped state. | -| | Perform the validation tests described in [Interface Control Validation Test](#interface-control-validation) section and [record a rosbag](http://wiki.ros.org/rosbag/Commandline#rosbag_record) of all of your topics. The linear and angular velocities of the three trial runs recorded should be noted here:

Trial #1: Linear x: , Angular z:
Trial #2: Linear x: , Angular z:
Trial #3: Linear x: , Angular z:
| - -:::note - -Consult the [Platform API](../api/api_endpoints/platform_api.mdx#topics-published-by-platform) for -detailed information on the published/subscribed platform topics. - -::: - -If the platform is an Ackermann (or double Ackermann) drive vehicle: - -| | Requirement | -|------|------------------------------------------------------------------| -| | A conversion from [geometry_msgs/Twist](http://docs.ros.org/en/melodic/api/geometry_msgs/html/msg/Twist.html) messages to Ackermann inputs is provided. | - -:::note - -Ackermann drive platforms require both steering and throttle inputs to -drive the platform. It is required that our OutdoorNav output `/cmd_vel` -be converted into a message suitable to your platform. An example of an -Ackermann message type can be found -[here](http://wiki.ros.org/teb_local_planner/Tutorials/Planning%20for%20car-like%20robots). -This may satisfy your particular platform, and is only a starting point -on how to do this conversion. - -::: - -If the platform computer is running a version of ROS 2: - -| | Requirement | -|------|------------------------------------------------------------------| -| | The platform computer has a [ROS 2 to ROS 1 bridge](https://github.com/ros2/ros1_bridge) is installed to enable the exchange of messages between the two ROS versions. | - -Signature: Date: - -## Interface Control Validation Test {#interface-control-validation} - -The following test is designed to validate the platforms velocity -controller. It will be required that you command the robot to drive in -three circles, of varying radii, by applying the following command to -the platform. - -``` bash -rostopic pub -r 10 /cmd_vel geometry_msgs/Twist "linear: -x: ___ -y: 0.0 -z: 0.0 -angular: -x: 0.0 -y: 0.0 -z: ___" -``` - -The three trials that we request will vary between platforms depending -on the its maximum linear $(v_{max})$ and angular velocities -$(\omega_{max})$, minimum linear $(v_{min})$ and angular velocities -$(\omega_{min})$, as well as limitations due to the minimum allowable -turning radius $(r_{min})$. Of these three trials, we would like to see -data within three linear velocity bands, as seen in the table below, -resulting in three different turning radii. For the purpose of these -tests, the following formula can be used when determining the required -linear and angular velocities to apply: $r = v/\omega$. - -| Trial \# | Linear X Bands \[m/s\] | Example Linear X Band \[m/s\] | -| ---------|--------------------------------------------|-------------------------------------| -| 1 | $v_{min} \cdot [1.0, 1.5]$ | $[0.5, 0.75]$ | -| 2 | $((v_{max} - v_{min})/2) \cdot [0.9, 1.1]$ | $[2.025, 2.475]$ | -| 3 | $v_{max} \cdot [0.9, 1.0]$ | $[4.5, 5.0]$ | - -As an example, a platform with specs $v \in [0.5, 5.0]$, $r_{min} = 3$ -would have linear x velocity bands as listed in the table above. The -trials could then be as outlined in the table below. - -| Trial \# | Linear X \[m/s\] | Angular Z \[rad/s\] |Turn Radius \[m\] | -|-----------|--------------------|---------------------|------------------| -| 1 | 0.75 | 0.25 | 3 | -| 2 | 2.25 | 0.5 | 4.5 | -| 3 | 4.5 | 0.75 | 6 | - -Finally, the test data in the collected ROSbag should include the -following: - -1. `/tf` and `/tf_static` -2. `/platform/cmd_vel` -3. `/platform/odom` -4. `/cmd_vel` -5. `/platform/emergency_stop` (if available) -6. raw NavSatFix data from a GPS unit (if possible). +--- +title: "ROS Interface Control Requirements" +sidebar_label: "ROS Interface Control Requirements" +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +## ROS Interface Control Checklist + +Prior to the installation and tuning of Clearpath Robotics (CPR) +OutdoorNav software on your platform (robot computer), CPR requires that the platform's +ROS interface satisfies the conditions listed below. Ensure that all of the requirements +are satisfied for a smooth installation and tuning process. + +![](/img/outdoornav_images/onav_interface_control.png) + +| | Requirement | +|------|------------------------------------------------------------------| +| | The platform computer is on the 192.168.131.xxx subnet (ideally in the range 1-4). | +| | The platform computer has an installation of [ROS 1 Noetic](http://wiki.ros.org/noetic/Installation). | +| | A URDF is supplied to CPR by the customer, in which the `base_link` coordinate frame is defined according to the [REP-105 base-link](https://www.ros.org/reps/rep-0105.html#base-link) ROS standard. | +| | The platform outputs [tf2_msgs/TFMessage](http://docs.ros.org/en/jade/api/tf2_msgs/html/msg/TFMessage.html) messages on the ROS standard `/tf` topic, at a minimum rate of **30 Hz**. | +| | The platform outputs a latched [tf2_msgs/TFMessage](http://docs.ros.org/en/jade/api/tf2_msgs/html/msg/TFMessage.html) message on the ROS standard `/tf_static` topic. This should include any fixed frames of ROS enabled devices/sensors that are available on your platform. | +| | The platform computer has a velocity controller that accepts, as input, [geometry_msgs/Twist](http://docs.ros.org/en/melodic/api/geometry_msgs/html/msg/Twist.html) messages on the ROS standard `/cmd_vel` topic, at a minimum rate of **10 Hz**. | +| | The platform computer has a velocity controller that tracks the input velocity and outputs the resulting platform velocity on the `/platform/cmd_vel` topic. | +| | The platform outputs [nav_msgs/Odometry](http://docs.ros.org/en/noetic/api/nav_msgs/html/msg/Odometry.html) messages on the `/platform/odom` topic, at a minimum rate of **10 Hz**. | +| | The `/platform/odom` topic publishes its data with the header.frame_id = `odom` and the child_frame_id = `base_link`, as per the [REP-105 odom](https://www.ros.org/reps/rep-0105.html#odom) ROS standard. **IMPORTANT**: The platform should however not broadcast the `odom` --> `base_link` transformation since the OutdoorNav software will do so. | +| | If available, the platform odometry output has less than ±5% linear position error. | +| | If available, the platform odometry output has less than ±5% orientation error. | +| | The platform outputs [std_msgs/Bool](http://docs.ros.org/en/noetic/api/std_msgs/html/msg/Bool.html) messages on the `/platform/emergency_stop` topic, at a minimum rate of **5 Hz**, indicating whether or not the platform is in a stopped state. | +| | Perform the validation tests described in [Interface Control Validation Test](#interface-control-validation) section and [record a rosbag](http://wiki.ros.org/rosbag/Commandline#rosbag_record) of all of your topics. The linear and angular velocities of the three trial runs recorded should be noted here:

Trial #1: Linear x: , Angular z:
Trial #2: Linear x: , Angular z:
Trial #3: Linear x: , Angular z:
| + +:::note + +Consult the [Platform API](../api/api_endpoints/platform_api.mdx#topics-published-by-platform) for +detailed information on the published/subscribed platform topics. + +::: + +If the platform is an Ackermann (or double Ackermann) drive vehicle: + +| | Requirement | +|------|------------------------------------------------------------------| +| | A conversion from [geometry_msgs/Twist](http://docs.ros.org/en/melodic/api/geometry_msgs/html/msg/Twist.html) messages to Ackermann inputs is provided. | + +:::note + +Ackermann drive platforms require both steering and throttle inputs to +drive the platform. It is required that our OutdoorNav output `/cmd_vel` +be converted into a message suitable to your platform. An example of an +Ackermann message type can be found +[here](http://wiki.ros.org/teb_local_planner/Tutorials/Planning%20for%20car-like%20robots). +This may satisfy your particular platform, and is only a starting point +on how to do this conversion. + +::: + +If the platform computer is running a version of ROS 2: + +| | Requirement | +|------|------------------------------------------------------------------| +| | The platform computer has a [ROS 2 to ROS 1 bridge](https://github.com/ros2/ros1_bridge) is installed to enable the exchange of messages between the two ROS versions. | + +Signature: Date: + +## Interface Control Validation Test {#interface-control-validation} + +The following test is designed to validate the platforms velocity +controller. It will be required that you command the robot to drive in +three circles, of varying radii, by applying the following command to +the platform. + +``` bash +rostopic pub -r 10 /cmd_vel geometry_msgs/Twist "linear: +x: ___ +y: 0.0 +z: 0.0 +angular: +x: 0.0 +y: 0.0 +z: ___" +``` + +The three trials that we request will vary between platforms depending +on the its maximum linear $(v_{max})$ and angular velocities +$(\omega_{max})$, minimum linear $(v_{min})$ and angular velocities +$(\omega_{min})$, as well as limitations due to the minimum allowable +turning radius $(r_{min})$. Of these three trials, we would like to see +data within three linear velocity bands, as seen in the table below, +resulting in three different turning radii. For the purpose of these +tests, the following formula can be used when determining the required +linear and angular velocities to apply: $r = v/\omega$. + +| Trial \# | Linear X Bands \[m/s\] | Example Linear X Band \[m/s\] | +| ---------|--------------------------------------------|-------------------------------------| +| 1 | $v_{min} \cdot [1.0, 1.5]$ | $[0.5, 0.75]$ | +| 2 | $((v_{max} - v_{min})/2) \cdot [0.9, 1.1]$ | $[2.025, 2.475]$ | +| 3 | $v_{max} \cdot [0.9, 1.0]$ | $[4.5, 5.0]$ | + +As an example, a platform with specs $v \in [0.5, 5.0]$, $r_{min} = 3$ +would have linear x velocity bands as listed in the table above. The +trials could then be as outlined in the table below. + +| Trial \# | Linear X \[m/s\] | Angular Z \[rad/s\] |Turn Radius \[m\] | +|-----------|--------------------|---------------------|------------------| +| 1 | 0.75 | 0.25 | 3 | +| 2 | 2.25 | 0.5 | 4.5 | +| 3 | 4.5 | 0.75 | 6 | + +Finally, the test data in the collected ROSbag should include the +following: + +1. `/tf` and `/tf_static` +2. `/platform/cmd_vel` +3. `/platform/odom` +4. `/cmd_vel` +5. `/platform/emergency_stop` (if available) +6. raw NavSatFix data from a GPS unit (if possible). diff --git a/outdoornav_user_manual_versioned_docs/version-0.14.0/overview/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.14.0/overview/_category_.json index 663e4088..8414dc7f 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.14.0/overview/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.14.0/overview/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Overview", - "position": 4 -} +{ + "label": "Overview", + "position": 4 +} diff --git a/outdoornav_user_manual_versioned_docs/version-0.14.0/overview/overview_hardware_requirements.mdx b/outdoornav_user_manual_versioned_docs/version-0.14.0/overview/overview_hardware_requirements.mdx index b6abe65e..0883eba8 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.14.0/overview/overview_hardware_requirements.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.14.0/overview/overview_hardware_requirements.mdx @@ -1,44 +1,44 @@ ---- -title: Hardware Requirements -sidebar_label: Hardware Requirements -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -OutdoorNav Software works with compatible UGVs, either from Clearpath -Robotics or third parties. High level requirements for compatible UGVs -are outlined below. Detailed qualification requirements are outlined in -[UGV Integration Requirements](../integration_requirements/integration_overview.mdx). - -## Requirements - -OutdoorNav software does not communicate directly with the UGV motors. -Rather, it publishes target linear and angular velocities packaged in -the [ROS Twist message](http://docs.ros.org/en/noetic/api/geometry_msgs/html/msg/Twist.html) -format and relies on the low level velocity controller of the vehicle to -translate these velocities into correct motor control commands. -Therefore, OutdoorNav Software requires that the UGV must accept the -control commands sent in the [ROS Twist message](http://docs.ros.org/en/noetic/api/geometry_msgs/html/msg/Twist.html) -format. More detailed requirements are outlined in the following table. - -| # | Requirement | Notes | -| - | --------------------------------- | ----------------------------------- | -| 1 | The UGV must be a differential drive or Ackermann drive configuration | Ackerman drive is currently available as a custom implementation; standard in 2023 | -| 2 | The UGV must have velocity control of the wheels and provide kinematic control of the platform | | -| 3 | The UGV shall provide odometry feedback of the wheel direction and velocities and/or steering position | Recommended encoder resolution of 500 ticks per revolution or greater | -| 4 | The UGV should have an emergency stop system with status feedback | | -| 5 | The UGV must accept ROS 1 Twist Commands on the `/cmd_vel` topic | See [API Endpoints](../api/api_endpoints/api_endpoints.mdx); ROS 2 interface available in future release | -| 6 | The UGV must provide odometry and status feedback through ROS topics | See [API Endpoints](../api/api_endpoints/api_endpoints.mdx) | - -## Typical Hardware - -While a variety of different sensors and equipment can be used with -OutdoorNav Software, the following are used most commonly: - -- Clearpath Robotics UGV: Jackal, Husky or Warthog -- GPS System: Dual DURO RTK system or NovAtel Terrastar -- IMU: Microstrain 3DM-GX5-25 -- 3D Laser Sensor: Velodyne VLP-16 -- Tablet Computer: Getac F110 -- Clearpath Long Range Network Station with RTK corrections ("Base Station") +--- +title: Hardware Requirements +sidebar_label: Hardware Requirements +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +OutdoorNav Software works with compatible UGVs, either from Clearpath +Robotics or third parties. High level requirements for compatible UGVs +are outlined below. Detailed qualification requirements are outlined in +[UGV Integration Requirements](../integration_requirements/integration_overview.mdx). + +## Requirements + +OutdoorNav software does not communicate directly with the UGV motors. +Rather, it publishes target linear and angular velocities packaged in +the [ROS Twist message](http://docs.ros.org/en/noetic/api/geometry_msgs/html/msg/Twist.html) +format and relies on the low level velocity controller of the vehicle to +translate these velocities into correct motor control commands. +Therefore, OutdoorNav Software requires that the UGV must accept the +control commands sent in the [ROS Twist message](http://docs.ros.org/en/noetic/api/geometry_msgs/html/msg/Twist.html) +format. More detailed requirements are outlined in the following table. + +| # | Requirement | Notes | +| - | --------------------------------- | ----------------------------------- | +| 1 | The UGV must be a differential drive or Ackermann drive configuration | Ackerman drive is currently available as a custom implementation; standard in 2023 | +| 2 | The UGV must have velocity control of the wheels and provide kinematic control of the platform | | +| 3 | The UGV shall provide odometry feedback of the wheel direction and velocities and/or steering position | Recommended encoder resolution of 500 ticks per revolution or greater | +| 4 | The UGV should have an emergency stop system with status feedback | | +| 5 | The UGV must accept ROS 1 Twist Commands on the `/cmd_vel` topic | See [API Endpoints](../api/api_endpoints/api_endpoints.mdx); ROS 2 interface available in future release | +| 6 | The UGV must provide odometry and status feedback through ROS topics | See [API Endpoints](../api/api_endpoints/api_endpoints.mdx) | + +## Typical Hardware + +While a variety of different sensors and equipment can be used with +OutdoorNav Software, the following are used most commonly: + +- Clearpath Robotics UGV: Jackal, Husky or Warthog +- GPS System: Dual DURO RTK system or NovAtel Terrastar +- IMU: Microstrain 3DM-GX5-25 +- 3D Laser Sensor: Velodyne VLP-16 +- Tablet Computer: Getac F110 +- Clearpath Long Range Network Station with RTK corrections ("Base Station") diff --git a/outdoornav_user_manual_versioned_docs/version-0.14.0/overview/overview_introduction.mdx b/outdoornav_user_manual_versioned_docs/version-0.14.0/overview/overview_introduction.mdx index 83bfa1d6..4f3f1bf7 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.14.0/overview/overview_introduction.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.14.0/overview/overview_introduction.mdx @@ -1,93 +1,93 @@ ---- -title: Introduction -sidebar_label: Introduction -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -## Summary - -OutdoorNav Software is a software package developed by Clearpath -Robotics for autonomous and manual navigation of Unmanned Ground -Vehicles (UGVs) in outdoor environments. - -
-
- -
Web UI Mission Planning View
-
-
- -
-
- -
Web UI Front Camera View
-
-
- -## Compatible Platforms - -While it has been optimized for use with OutdoorNav Hardware from -Clearpath Robotics -([Husky](https://clearpathrobotics.com/husky-unmanned-ground-vehicle-robot/), -[Jackal](https://clearpathrobotics.com/jackal-small-unmanned-ground-vehicle/), -and -[Warthog](https://clearpathrobotics.com/warthog-unmanned-ground-vehicle-robot/)), -it has been designed so that it can be added easily to third-party UGVs. - -
-
- -
Clearpath Robotics Warthog UGV with navigation equipment and operator control unit
-
-
- -## Key Features - -Key features of OutdoorNav Software include: - -- Mission Planning and Autonomous Navigation - - - Robust GPS-based localization with sensor fusion of IMU, LiDAR - and platform odometry - - Autonomous path following via waypoints - - Obstacle Detection and Avoidance: Stop and wait or - autonomously plan a collision-free path around obstacles - without the need to stop - -- Teleoperation - - - Operate the robot remotely using an on-screen or physical - joystick - - Visualize what the robot sees by displaying its network - cameras and LiDAR data - -- Web User Interface (Web UI) - - - Build missions containing sets of paths, with optional task - execution on each path; tasks can be standard tasks (eg. save - camera image) or user provided functions - - View the robot's live position and attitude on the map - - Display robot data such as velocity, signal strength, status - of the motion stop, status of navigation system, and battery charge - - Save and export Missions - -- Application Programming Interface (API) - - - Build your own application and UI by accessing the navigation - API to control the UGV through software or implement fleet - management by accessing the mission API - -- Simulation - - - Begin development of your application prior to purchasing - licenses or commissioning hardware with OutdoorNav software and - the ROS Gazebo simulator - -- Third Party Integration - - - The Web UI and API can be accessed through a network connection; - cloud-based services are available from third parties to - facilitate remote connections and networking to robot hardware - such as Formant.io and Freedom Robotics +--- +title: Introduction +sidebar_label: Introduction +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +## Summary + +OutdoorNav Software is a software package developed by Clearpath +Robotics for autonomous and manual navigation of Unmanned Ground +Vehicles (UGVs) in outdoor environments. + +
+
+ +
Web UI Mission Planning View
+
+
+ +
+
+ +
Web UI Front Camera View
+
+
+ +## Compatible Platforms + +While it has been optimized for use with OutdoorNav Hardware from +Clearpath Robotics +([Husky](https://clearpathrobotics.com/husky-unmanned-ground-vehicle-robot/), +[Jackal](https://clearpathrobotics.com/jackal-small-unmanned-ground-vehicle/), +and +[Warthog](https://clearpathrobotics.com/warthog-unmanned-ground-vehicle-robot/)), +it has been designed so that it can be added easily to third-party UGVs. + +
+
+ +
Clearpath Robotics Warthog UGV with navigation equipment and operator control unit
+
+
+ +## Key Features + +Key features of OutdoorNav Software include: + +- Mission Planning and Autonomous Navigation + + - Robust GPS-based localization with sensor fusion of IMU, LiDAR + and platform odometry + - Autonomous path following via waypoints + - Obstacle Detection and Avoidance: Stop and wait or + autonomously plan a collision-free path around obstacles + without the need to stop + +- Teleoperation + + - Operate the robot remotely using an on-screen or physical + joystick + - Visualize what the robot sees by displaying its network + cameras and LiDAR data + +- Web User Interface (Web UI) + + - Build missions containing sets of paths, with optional task + execution on each path; tasks can be standard tasks (eg. save + camera image) or user provided functions + - View the robot's live position and attitude on the map + - Display robot data such as velocity, signal strength, status + of the motion stop, status of navigation system, and battery charge + - Save and export Missions + +- Application Programming Interface (API) + + - Build your own application and UI by accessing the navigation + API to control the UGV through software or implement fleet + management by accessing the mission API + +- Simulation + + - Begin development of your application prior to purchasing + licenses or commissioning hardware with OutdoorNav software and + the ROS Gazebo simulator + +- Third Party Integration + + - The Web UI and API can be accessed through a network connection; + cloud-based services are available from third parties to + facilitate remote connections and networking to robot hardware + such as Formant.io and Freedom Robotics diff --git a/outdoornav_user_manual_versioned_docs/version-0.14.0/overview/overview_operating_conditions.mdx b/outdoornav_user_manual_versioned_docs/version-0.14.0/overview/overview_operating_conditions.mdx index c02228aa..6e0b17a5 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.14.0/overview/overview_operating_conditions.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.14.0/overview/overview_operating_conditions.mdx @@ -1,177 +1,177 @@ ---- -title: Operating Conditions -sidebar_label: Operating Conditions -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -OutdoorNav Software is designed and tested for use in rugged outdoor -environments. - -## Operating Conditions - -### Terrain - -OutdoorNav Software is compatible with terrains in which the UGV can be -driven manually without excessive slipping. The performance limits will -be a function of the base UGV traction. - -Using Clearpath Robotics Husky, Jackal, and Warthog as a the base UGV, -OutdoorNav Software is suitable for use in the following terrains: - -- asphalt -- concrete -- grass -- snow - -:::note - -Grass should not exceed 30 cm in height if collision avoidance is -enabled. - -::: - -:::note - -Winter/studded tires may be required for proper traction on snow. - -::: - -OutdoorNav Software is currently **not** suitable in the following -terrains: - -- ice -- loose gravel - -:::note - -Support for loose gravel environments is currently being tested and is -expected to be available in late 2023. - -::: - -The terrain capabilities of third-party UGVs will be dependent on a -variety of factors including the vehicle mass, the tire treading, and -motor power. - -### Environment - -OutdoorNav Software is suitable for use in the following environmental -conditions: - -- light rainfall (drizzle) -- light snowfall (powdery snow) - -:::note - -If erratic behavior, such as frequent replanning, is perceived in these -light precipitation conditions, disabling the "continuous planning" -feature may help. - -::: - -OutdoorNav Software is **not** suitable for use in the following -environmental conditions: - -- heavy rainfall -- heavy snowfall - -:::note - -If navigation is required in heavy rain or snow, disabling the collision -avoidance feature will allow the UGV to navigate properly. This should -be done with caution. - -![](/img/outdoornav_images/gps_danger.png) - -::: - -## Performance - -The performance of the system is highly dependent on both the base UGV, -the sensors, the system integration details, and the environment. The -following table provides typical performance metrics for Clearpath -Robotics Jackal and Husky UGVs. - -_System Performance for Husky/Jackal with Typical Sensors_ - -| | Starter Sensor Kit | Standard Sensor Kit (No RTK) | Standard Sensor Kit (RTK) | -|----------------------------------------|-----------------------------------|----------------------------------|----------------------------------| -| GPS sensors | UBlox F9P | 2x SwiftNav Duro | 2x SwiftNav Duro | -| Location accuracy (position & heading) | Less than 60 cm
Less than 10° | Less than 30 cm
Less than 5° | Less than 5 cm
Less than 2° | -| Path tracking accuracy (approximate) | 20 cm | 15 cm | 10 cm | - -## Limitations - -While OutdoorNav Software operates effectively in a range of rugged -outdoor environments, the operator should be aware of the following -limitations and plan accordingly. - -_OutdoorNav System Limitations_ - -| Limitation | Details | -|--------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| RTK accuracy | Localization accuracy for the Standard (RTK) configuration assumes the base station location has been accurately surveyed. | -| Localization accuracy | Localization accuracy is influenced by the quality of GNSS data that is available. Navigating in GNSS denied areas (e.g., under bridges, near tall buildings, etc.) will cause degradation in localization performance. | -| Negative obstacle detection not present | Outdoor Navigation Software does not have negative obstacle detection capability. Your UGV will not detect stairs, cliffs, potholes, depressions or edges and may drive into these obstacles causing harm to people or property. | -| Limited obstacle detection in vertical dimension | The small vertical field of view of 3D LiDARs limits the vertical obstacle detection capability of the OutdoorNav Software. See [Obstacle Detection Limitations](#obstacle-detection-limitations) for details. | -| Low traction may cause UGV to get stuck | Your UGV may navigate itself into a situation where wheels slip or do not make contact with the ground. | -| Rain and snow may affect obstacle detection | Adverse weather conditions may obscure obstacle detection and avoidance data from the VLP-16 LiDAR. Obstacle detection and avoidance may not function in all weather conditions and must be disabled to navigate in heavy snow or rain. | -| Maximum distance between two Viapoints | Distance between any two consecutive Viapoints of a Mission should be less than 20 meters. This will ensure that the global planner can find a valid path to the next Viapoint for the UGV in case there is an obstacle on the path of the UGV. | -| WiFi range limits | The current configurations of the OutdoorNav Software will continue navigation if the WiFi disconnects or goes out of range. The Web UI will reconnect once the WiFi has reconnected but certain functions of the UI may be limited such as the ability to issue a pause/stop commands or sending new missions to the UGV. | -| Wireless motion stop range limits | The UGV will motion stop if the UGV is driven out of range of the wireless motion stop device. | -| RTK GPS limited by WiFi range | If WiFi goes out of range, your UGV will not receive RTK corrections from the Base Station. This can potentially decrease the accuracy of the GPS signal which can subsequently degrade path following performance of your system. | -| Obstacle detection may cause UGV to become stuck | The UGV may stop and become stuck if obstacles are detected and not cleared from its path. If obstacle avoidance is enabled, it may not be able to calculate an acceptable path to the next Viapoint or Goal Point under all circumstances. This will result in the UGV becoming stuck and failing its Mission. | -| Failure to set Datum causes undefined behavior | If the Datum is not set or is not synchronized with the navigation module, the UGV's driven path is undefined and will move unpredictably if Missions are sent in this state. | -| Zones are not currently supported | It is not possible to define “keep-out” or “unsafe” zones that the UGV needs to avoid. Rather, careful use of Waypoint placement by the operator can be used to keep the UGV at a safe distance from unsafe zones. | -| No collision avoidance during teleoperation mode | When operating in Manual Mode (Teleoperation), no collision avoidance is enabled. The operator is responsible for avoiding collisions. | - -### Obstacle Detection Limitations {#obstacle-detection-limitations} - -The maximum collision avoidance range for the OutdoorNav Software is -UGV-dependent and is related to the maximum speed of the UGV. These -ranges for Clearpath Robotics UGVs are: - -- Jackal UGV: 4.5 meters -- Husky UGV: 4.5 meters -- Warthog UGV: 15.0 meters - -While the sensors are able to detect objects at further distances, the -OutdoorNav Software only considers obstacles detected within these -distances for collision avoidance. That is, the UGV will only begin to -decelerate as it detects obstacles within this range. - -The detection itself is also related to the horizontal size -(width/diameter) of the obstacle. The limitations in detecting objects -with small horizontal size are described in the table below. - -_Maximum Reliable Obstacle Detection Distance from UGV, according to Obstacle Horizontal Size_ - -| Object Size (Horizontal) | Starter Sensor Kit | Standard Sensor Kit | -|--------------------------|----------------------------------------------------------------|----------------------------------------------------------------| -| Less than 0.6 cm | No reliable detection | No reliable detection | -| 0.6 to 1.0 cm | 0.8 m | No reliable detection | -| 1.0 to 3.0 cm | 2.0 m | 1.75 m | -| Greater than 3.0 cm | Maximum collision avoidance distance (UGV-specific; see above) | Maximum collision avoidance distance (UGV-specific; see above) | - -Finally, the OutdoorNav Software bounds the obstacle detection to -prevent ground hits and to remove detections above the UGV body. The -following bounds are relative to the ground, assuming a flat surface. -Obstacles that are entirely below the lower bound or entirely above the -upper bound are not considered obstacles and will not be avoided. - -_Obstacle Detection Vertical Bounds_ - -| Vertical Bound | Jackal UGV | Husky UGV | Warthog UGV | -|-----------------------|------------|-----------|-------------| -| Lower Detection Bound | 0.3 m | 0.3 m | 0.3 m | -| Upper Detection Bound | 0.8 m | 1.3 m | 1.8 m | - -:::note - -The vertical detection bounds above are for the Standard Sensor Kit or a -custom sensor configuration that includes a Velodyne. The vertical -detection bounds for the Starter Sensor Kit have yet to be determined. - +--- +title: Operating Conditions +sidebar_label: Operating Conditions +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +OutdoorNav Software is designed and tested for use in rugged outdoor +environments. + +## Operating Conditions + +### Terrain + +OutdoorNav Software is compatible with terrains in which the UGV can be +driven manually without excessive slipping. The performance limits will +be a function of the base UGV traction. + +Using Clearpath Robotics Husky, Jackal, and Warthog as a the base UGV, +OutdoorNav Software is suitable for use in the following terrains: + +- asphalt +- concrete +- grass +- snow + +:::note + +Grass should not exceed 30 cm in height if collision avoidance is +enabled. + +::: + +:::note + +Winter/studded tires may be required for proper traction on snow. + +::: + +OutdoorNav Software is currently **not** suitable in the following +terrains: + +- ice +- loose gravel + +:::note + +Support for loose gravel environments is currently being tested and is +expected to be available in late 2023. + +::: + +The terrain capabilities of third-party UGVs will be dependent on a +variety of factors including the vehicle mass, the tire treading, and +motor power. + +### Environment + +OutdoorNav Software is suitable for use in the following environmental +conditions: + +- light rainfall (drizzle) +- light snowfall (powdery snow) + +:::note + +If erratic behavior, such as frequent replanning, is perceived in these +light precipitation conditions, disabling the "continuous planning" +feature may help. + +::: + +OutdoorNav Software is **not** suitable for use in the following +environmental conditions: + +- heavy rainfall +- heavy snowfall + +:::note + +If navigation is required in heavy rain or snow, disabling the collision +avoidance feature will allow the UGV to navigate properly. This should +be done with caution. + +![](/img/outdoornav_images/gps_danger.png) + +::: + +## Performance + +The performance of the system is highly dependent on both the base UGV, +the sensors, the system integration details, and the environment. The +following table provides typical performance metrics for Clearpath +Robotics Jackal and Husky UGVs. + +_System Performance for Husky/Jackal with Typical Sensors_ + +| | Starter Sensor Kit | Standard Sensor Kit (No RTK) | Standard Sensor Kit (RTK) | +|----------------------------------------|-----------------------------------|----------------------------------|----------------------------------| +| GPS sensors | UBlox F9P | 2x SwiftNav Duro | 2x SwiftNav Duro | +| Location accuracy (position & heading) | Less than 60 cm
Less than 10° | Less than 30 cm
Less than 5° | Less than 5 cm
Less than 2° | +| Path tracking accuracy (approximate) | 20 cm | 15 cm | 10 cm | + +## Limitations + +While OutdoorNav Software operates effectively in a range of rugged +outdoor environments, the operator should be aware of the following +limitations and plan accordingly. + +_OutdoorNav System Limitations_ + +| Limitation | Details | +|--------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| RTK accuracy | Localization accuracy for the Standard (RTK) configuration assumes the base station location has been accurately surveyed. | +| Localization accuracy | Localization accuracy is influenced by the quality of GNSS data that is available. Navigating in GNSS denied areas (e.g., under bridges, near tall buildings, etc.) will cause degradation in localization performance. | +| Negative obstacle detection not present | Outdoor Navigation Software does not have negative obstacle detection capability. Your UGV will not detect stairs, cliffs, potholes, depressions or edges and may drive into these obstacles causing harm to people or property. | +| Limited obstacle detection in vertical dimension | The small vertical field of view of 3D LiDARs limits the vertical obstacle detection capability of the OutdoorNav Software. See [Obstacle Detection Limitations](#obstacle-detection-limitations) for details. | +| Low traction may cause UGV to get stuck | Your UGV may navigate itself into a situation where wheels slip or do not make contact with the ground. | +| Rain and snow may affect obstacle detection | Adverse weather conditions may obscure obstacle detection and avoidance data from the VLP-16 LiDAR. Obstacle detection and avoidance may not function in all weather conditions and must be disabled to navigate in heavy snow or rain. | +| Maximum distance between two Viapoints | Distance between any two consecutive Viapoints of a Mission should be less than 20 meters. This will ensure that the global planner can find a valid path to the next Viapoint for the UGV in case there is an obstacle on the path of the UGV. | +| WiFi range limits | The current configurations of the OutdoorNav Software will continue navigation if the WiFi disconnects or goes out of range. The Web UI will reconnect once the WiFi has reconnected but certain functions of the UI may be limited such as the ability to issue a pause/stop commands or sending new missions to the UGV. | +| Wireless motion stop range limits | The UGV will motion stop if the UGV is driven out of range of the wireless motion stop device. | +| RTK GPS limited by WiFi range | If WiFi goes out of range, your UGV will not receive RTK corrections from the Base Station. This can potentially decrease the accuracy of the GPS signal which can subsequently degrade path following performance of your system. | +| Obstacle detection may cause UGV to become stuck | The UGV may stop and become stuck if obstacles are detected and not cleared from its path. If obstacle avoidance is enabled, it may not be able to calculate an acceptable path to the next Viapoint or Goal Point under all circumstances. This will result in the UGV becoming stuck and failing its Mission. | +| Failure to set Datum causes undefined behavior | If the Datum is not set or is not synchronized with the navigation module, the UGV's driven path is undefined and will move unpredictably if Missions are sent in this state. | +| Zones are not currently supported | It is not possible to define “keep-out” or “unsafe” zones that the UGV needs to avoid. Rather, careful use of Waypoint placement by the operator can be used to keep the UGV at a safe distance from unsafe zones. | +| No collision avoidance during teleoperation mode | When operating in Manual Mode (Teleoperation), no collision avoidance is enabled. The operator is responsible for avoiding collisions. | + +### Obstacle Detection Limitations {#obstacle-detection-limitations} + +The maximum collision avoidance range for the OutdoorNav Software is +UGV-dependent and is related to the maximum speed of the UGV. These +ranges for Clearpath Robotics UGVs are: + +- Jackal UGV: 4.5 meters +- Husky UGV: 4.5 meters +- Warthog UGV: 15.0 meters + +While the sensors are able to detect objects at further distances, the +OutdoorNav Software only considers obstacles detected within these +distances for collision avoidance. That is, the UGV will only begin to +decelerate as it detects obstacles within this range. + +The detection itself is also related to the horizontal size +(width/diameter) of the obstacle. The limitations in detecting objects +with small horizontal size are described in the table below. + +_Maximum Reliable Obstacle Detection Distance from UGV, according to Obstacle Horizontal Size_ + +| Object Size (Horizontal) | Starter Sensor Kit | Standard Sensor Kit | +|--------------------------|----------------------------------------------------------------|----------------------------------------------------------------| +| Less than 0.6 cm | No reliable detection | No reliable detection | +| 0.6 to 1.0 cm | 0.8 m | No reliable detection | +| 1.0 to 3.0 cm | 2.0 m | 1.75 m | +| Greater than 3.0 cm | Maximum collision avoidance distance (UGV-specific; see above) | Maximum collision avoidance distance (UGV-specific; see above) | + +Finally, the OutdoorNav Software bounds the obstacle detection to +prevent ground hits and to remove detections above the UGV body. The +following bounds are relative to the ground, assuming a flat surface. +Obstacles that are entirely below the lower bound or entirely above the +upper bound are not considered obstacles and will not be avoided. + +_Obstacle Detection Vertical Bounds_ + +| Vertical Bound | Jackal UGV | Husky UGV | Warthog UGV | +|-----------------------|------------|-----------|-------------| +| Lower Detection Bound | 0.3 m | 0.3 m | 0.3 m | +| Upper Detection Bound | 0.8 m | 1.3 m | 1.8 m | + +:::note + +The vertical detection bounds above are for the Standard Sensor Kit or a +custom sensor configuration that includes a Velodyne. The vertical +detection bounds for the Starter Sensor Kit have yet to be determined. + ::: \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.14.0/overview/overview_scope.mdx b/outdoornav_user_manual_versioned_docs/version-0.14.0/overview/overview_scope.mdx index ff5dc87c..0791b53f 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.14.0/overview/overview_scope.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.14.0/overview/overview_scope.mdx @@ -1,15 +1,15 @@ ---- -title: Scope -sidebar_label: Scope -sidebar_position: 2 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -This documentation focuses on the OutdoorNav Software itself, including -hardware dependencies and integration, but not the specifics of UGV -hardware. For details on compatible Clearpath Robotics UGVs and custom -hardware integrations, contact research-sales@clearpathrobotics.com or check -out our [YouTube channel](https://www.youtube.com/channel/UCNPP3C-ZK3mwpG2x89VE-2Q). - - +--- +title: Scope +sidebar_label: Scope +sidebar_position: 2 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +This documentation focuses on the OutdoorNav Software itself, including +hardware dependencies and integration, but not the specifics of UGV +hardware. For details on compatible Clearpath Robotics UGVs and custom +hardware integrations, contact research-sales@clearpathrobotics.com or check +out our [YouTube channel](https://www.youtube.com/channel/UCNPP3C-ZK3mwpG2x89VE-2Q). + + diff --git a/outdoornav_user_manual_versioned_docs/version-0.14.0/safety.mdx b/outdoornav_user_manual_versioned_docs/version-0.14.0/safety.mdx index ea70a51b..ba0e8ddf 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.14.0/safety.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.14.0/safety.mdx @@ -1,144 +1,144 @@ ---- -title: Safety -sidebar_label: Safety -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -## Important Safety Information - -The use of Unmanned Ground Vehicles (UGVs) can result in unexpected and -dangerous behavior. Although Clearpath Robotics endeavors to create safe -and reliable software and systems, autonomous outdoor UGVs should not be -considered safe for unsupervised use around humans or other obstacles. -No level of safety and reliability of software and non-safety rated -hardware components is guaranteed. - -Clearpath strongly recommends that users carry out a risk assessment -related to their application and deployment of autonomous UGVs. The -ISO-12100 standard [Risk assessment and risk reduction](https://www.iso.org/standard/51528.html) provides guidance on -performing risk assessments. - -Functional safety in robotics is often achieved through the use of -safety related parts and control systems to minimize risks such as -safety LiDARs for obstacle detection. These hardware components must be -designed into the UGV hardware and can be tightly integrated with -navigation software. Clearpath Robotics recommends that this process be -undertaken after the product or process has been fully defined. It can -be a significant design effort. - -## Safety Notice Levels - -For Clearpath Robotics hardware and software, the risk level is captured -using the following types of labels. - -![](/img/outdoornav_images/safety_information.png) - -## General Hazard Labels - -Review the following to learn more about the labels that may be used on -Clearpath Robotics products. Hazards can also apply to attachments and -accessories used in conjunction with a Clearpath Robotics product. UGVs -from other providers may present additional hazards and risks. - -_General Hazards_ - -| Label | Label Title | Label Description | -|--------------------------------------------------------------------------------------|----------------------|------------------------------------------| -|
| Automatic Motion Hazard | Clearpath Robotics UGVs may begin moving suddenly, either autonomously or when being driven manually. Always be aware of Clearpath Robotics products and their potential for movement. | -|
| Crushing Risk | Objects or personnel can be crushed between the Clearpath Robotics UGV and another object. Keep hands and other objects clear of crush points at all times. Keep clear of all docking Clearpath Robotics UGVs. | -|
| Electrical Shock Risk | Clearpath Robotics UGVs contain circuitry and batteries that may cause electrical shock if not properly insulated. | -|
| Entanglement Risk | Clearpath Robotics UGVs as well as their cameras can lead to entanglement of hair or dangling materials during their rotation. Keep hair and dangling materials away from Clearpath Robotics UGVs during motion. | -|
| Environmental Hazard | Clearpath Robotics UGVs contain batteries and materials that may require special disposal methods. Consult local regulations. | -|
| Falling Object Risk | Beware of objects that may have shifted in any Clearpath Robotics UGV crate as they pose a risk of falling when opened. | -|
| High Surface Temperature Risk | UGV computer heat sinks and UGV motors can become extremely hot during operation. | -|
| Impact Risk | Clearpath Robotics UGVs travelling through a facility can potentially impact objects and personnel. Keep clear of all docking Clearpath Robotics UGVs. | -|
| Laser Radiation Risk | Clearpath Robotics UGVs may use Class 1 laser products. These provide no hazard during normal use, however it is not recommended to stare directly into the beam(s). | -|
| Material Hazard - Lithium | Lithium UGV batteries contain harmful material. Always use proper handling procedures when handling UGV batteries. | -|
| Manual Load Lifting Risk | Always use ergonomic techniques when manually lifting loads. | -|
| Pinching Risk | Keep hands and other objects clear of pinch points at all times. Keep clear of all docking Clearpath Robotics UGVs. | -|
| Radio Frequency Risk | Clearpath Robotics UGVs and/or accessories may use radio frequency (RF) radiating antennas. These provide no hazard during normal use, however prolonged exposure around the antenna is not recommended. | -|
| Tripping Hazard | Clearpath Robotics products may pose a tripping hazard. | - -## Safety Awareness - -Personnel present during the operation of an Unmanned Ground Vehicle -(UGV) need to be made aware or be accompanied by personnel who are -familiar with the specific risks and hazards associated with autonomous -mobile robots (AMR). The following checklist identifies basic topics -that should be addressed by site-specific worker and visitor safety -orientation training. - -
- -
- -- Proper PPE must be worn, including safety footwear (ie. steel toe). -- Crossing into the path of a moving UGV should be avoided, as well as - placing or throwing obstacles into the path of a moving UGV. - -
- -
- -- Be aware that a UGV can be anywhere in the operating area of the - facility at any time, and may pose a tripping hazard even when not - in motion. -- Personnel need to be aware of the UGV docking and charging areas, - where detection fields are reduced. -- Personnel should be aware that Clearpath Robotics UGVs LiDAR safety - scanners use a class 1 laser and high intensity LED. -- Personnel should keep all loose clothing and body parts away from - UGVs, accessories, attachments, and payloads, while they are in - autonomous operation. Using an Emergency Stop button is the only - acceptable manner of interacting with a Clearpath Robotics UGV or - attachment while it is being operated autonomously. - -In addition to the preceding basic items for all workers and visitors, -the following should be considered for facility personnel, including -drivers of other UGVs: - -- When required to move a product manually, personnel must ensure it - is in an Emergency Stop state or shut down completely and should not - push manually for prolonged periods. -- Alert personnel that while operating a Clearpath Robotics UGV - outside of the Autonomy State, they are solely responsible for - obstacle and collision avoidance. -- Maintenance of a Clearpath UGV not outlined in either this document - or the operations and maintenance manual can only be performed by a - Clearpath Robotics Authorized Personnel. - -To reduce the risk of harming people or damaging properties, a trained -operator must monitor the behavior of the UGV under autonomous -navigation mode at all times. The operator should use the wireless -emergency stop device to immediately avert any possible damaging or -dangerous behavior from the UGV. Failure in proper use of the software -might result in collision of the UGV into objects. - -- The minimum height for detecting obstacles under ideal operation - conditions (flat ground, no snow/rain/fog, normal operation of the - LiDAR, etc) when using the standard Clearpath Robotics OutdoorNav - Hardware package on a Husky is typically 0.2 meters high at 2.3 - meters distance away from the UGV. Your UGV may differ. Ensure that - low-height obstacles are removed from the potential path of the UGV - prior to operation. -- OutdoorNav Software does not have negative obstacle detection - capability. This means that your UGV will not detect stairs, cliffs - or edges and may drive off these obstacles causing harm to people or - properties as well as potentially damage the UGV. -- Adverse weather conditions may obscure obstacle detection and - avoidance data from the VLP-16 LiDAR. Obstacle detection and - avoidance may not function properly in snow, rain or fog. -- The current configurations of the OutdoorNav Software will continue - navigation if the WiFi disconnects or goes out of range. The Web UI - will reconnect once the WiFi has reconnected but certain functions - of the Web UI may be limited such as the ability to issue a stop - command or send new missions to the UGV. -- If connection of the UGV to the base station is lost (e.g., WiFi - goes out of range, low battery level, etc), UGV will not receive RTK - corrections from the base station. This can potentially decrease the - accuracy of the GPS signal which can subsequently degrade path - following performance of your system. -- Obstacle detection and avoidance is disabled during the docking and - undocking operations. Keep this area clear of people and objects. +--- +title: Safety +sidebar_label: Safety +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +## Important Safety Information + +The use of Unmanned Ground Vehicles (UGVs) can result in unexpected and +dangerous behavior. Although Clearpath Robotics endeavors to create safe +and reliable software and systems, autonomous outdoor UGVs should not be +considered safe for unsupervised use around humans or other obstacles. +No level of safety and reliability of software and non-safety rated +hardware components is guaranteed. + +Clearpath strongly recommends that users carry out a risk assessment +related to their application and deployment of autonomous UGVs. The +ISO-12100 standard [Risk assessment and risk reduction](https://www.iso.org/standard/51528.html) provides guidance on +performing risk assessments. + +Functional safety in robotics is often achieved through the use of +safety related parts and control systems to minimize risks such as +safety LiDARs for obstacle detection. These hardware components must be +designed into the UGV hardware and can be tightly integrated with +navigation software. Clearpath Robotics recommends that this process be +undertaken after the product or process has been fully defined. It can +be a significant design effort. + +## Safety Notice Levels + +For Clearpath Robotics hardware and software, the risk level is captured +using the following types of labels. + +![](/img/outdoornav_images/safety_information.png) + +## General Hazard Labels + +Review the following to learn more about the labels that may be used on +Clearpath Robotics products. Hazards can also apply to attachments and +accessories used in conjunction with a Clearpath Robotics product. UGVs +from other providers may present additional hazards and risks. + +_General Hazards_ + +| Label | Label Title | Label Description | +|--------------------------------------------------------------------------------------|----------------------|------------------------------------------| +|
| Automatic Motion Hazard | Clearpath Robotics UGVs may begin moving suddenly, either autonomously or when being driven manually. Always be aware of Clearpath Robotics products and their potential for movement. | +|
| Crushing Risk | Objects or personnel can be crushed between the Clearpath Robotics UGV and another object. Keep hands and other objects clear of crush points at all times. Keep clear of all docking Clearpath Robotics UGVs. | +|
| Electrical Shock Risk | Clearpath Robotics UGVs contain circuitry and batteries that may cause electrical shock if not properly insulated. | +|
| Entanglement Risk | Clearpath Robotics UGVs as well as their cameras can lead to entanglement of hair or dangling materials during their rotation. Keep hair and dangling materials away from Clearpath Robotics UGVs during motion. | +|
| Environmental Hazard | Clearpath Robotics UGVs contain batteries and materials that may require special disposal methods. Consult local regulations. | +|
| Falling Object Risk | Beware of objects that may have shifted in any Clearpath Robotics UGV crate as they pose a risk of falling when opened. | +|
| High Surface Temperature Risk | UGV computer heat sinks and UGV motors can become extremely hot during operation. | +|
| Impact Risk | Clearpath Robotics UGVs travelling through a facility can potentially impact objects and personnel. Keep clear of all docking Clearpath Robotics UGVs. | +|
| Laser Radiation Risk | Clearpath Robotics UGVs may use Class 1 laser products. These provide no hazard during normal use, however it is not recommended to stare directly into the beam(s). | +|
| Material Hazard - Lithium | Lithium UGV batteries contain harmful material. Always use proper handling procedures when handling UGV batteries. | +|
| Manual Load Lifting Risk | Always use ergonomic techniques when manually lifting loads. | +|
| Pinching Risk | Keep hands and other objects clear of pinch points at all times. Keep clear of all docking Clearpath Robotics UGVs. | +|
| Radio Frequency Risk | Clearpath Robotics UGVs and/or accessories may use radio frequency (RF) radiating antennas. These provide no hazard during normal use, however prolonged exposure around the antenna is not recommended. | +|
| Tripping Hazard | Clearpath Robotics products may pose a tripping hazard. | + +## Safety Awareness + +Personnel present during the operation of an Unmanned Ground Vehicle +(UGV) need to be made aware or be accompanied by personnel who are +familiar with the specific risks and hazards associated with autonomous +mobile robots (AMR). The following checklist identifies basic topics +that should be addressed by site-specific worker and visitor safety +orientation training. + +
+ +
+ +- Proper PPE must be worn, including safety footwear (ie. steel toe). +- Crossing into the path of a moving UGV should be avoided, as well as + placing or throwing obstacles into the path of a moving UGV. + +
+ +
+ +- Be aware that a UGV can be anywhere in the operating area of the + facility at any time, and may pose a tripping hazard even when not + in motion. +- Personnel need to be aware of the UGV docking and charging areas, + where detection fields are reduced. +- Personnel should be aware that Clearpath Robotics UGVs LiDAR safety + scanners use a class 1 laser and high intensity LED. +- Personnel should keep all loose clothing and body parts away from + UGVs, accessories, attachments, and payloads, while they are in + autonomous operation. Using an Emergency Stop button is the only + acceptable manner of interacting with a Clearpath Robotics UGV or + attachment while it is being operated autonomously. + +In addition to the preceding basic items for all workers and visitors, +the following should be considered for facility personnel, including +drivers of other UGVs: + +- When required to move a product manually, personnel must ensure it + is in an Emergency Stop state or shut down completely and should not + push manually for prolonged periods. +- Alert personnel that while operating a Clearpath Robotics UGV + outside of the Autonomy State, they are solely responsible for + obstacle and collision avoidance. +- Maintenance of a Clearpath UGV not outlined in either this document + or the operations and maintenance manual can only be performed by a + Clearpath Robotics Authorized Personnel. + +To reduce the risk of harming people or damaging properties, a trained +operator must monitor the behavior of the UGV under autonomous +navigation mode at all times. The operator should use the wireless +emergency stop device to immediately avert any possible damaging or +dangerous behavior from the UGV. Failure in proper use of the software +might result in collision of the UGV into objects. + +- The minimum height for detecting obstacles under ideal operation + conditions (flat ground, no snow/rain/fog, normal operation of the + LiDAR, etc) when using the standard Clearpath Robotics OutdoorNav + Hardware package on a Husky is typically 0.2 meters high at 2.3 + meters distance away from the UGV. Your UGV may differ. Ensure that + low-height obstacles are removed from the potential path of the UGV + prior to operation. +- OutdoorNav Software does not have negative obstacle detection + capability. This means that your UGV will not detect stairs, cliffs + or edges and may drive off these obstacles causing harm to people or + properties as well as potentially damage the UGV. +- Adverse weather conditions may obscure obstacle detection and + avoidance data from the VLP-16 LiDAR. Obstacle detection and + avoidance may not function properly in snow, rain or fog. +- The current configurations of the OutdoorNav Software will continue + navigation if the WiFi disconnects or goes out of range. The Web UI + will reconnect once the WiFi has reconnected but certain functions + of the Web UI may be limited such as the ability to issue a stop + command or send new missions to the UGV. +- If connection of the UGV to the base station is lost (e.g., WiFi + goes out of range, low battery level, etc), UGV will not receive RTK + corrections from the base station. This can potentially decrease the + accuracy of the GPS signal which can subsequently degrade path + following performance of your system. +- Obstacle detection and avoidance is disabled during the docking and + undocking operations. Keep this area clear of people and objects. diff --git a/outdoornav_user_manual_versioned_docs/version-0.8.0/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.8.0/_category_.json index c123e1bc..f5966a95 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.8.0/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.8.0/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "OutdoorNav User Manual", - "position": 1 -} +{ + "label": "OutdoorNav User Manual", + "position": 1 +} diff --git a/outdoornav_user_manual_versioned_docs/version-0.8.0/api/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.8.0/api/_category_.json index a6e53920..79c71658 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.8.0/api/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.8.0/api/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Application Programming Interface", - "position": 7 -} +{ + "label": "Application Programming Interface", + "position": 7 +} diff --git a/outdoornav_user_manual_versioned_docs/version-0.8.0/api/api_endpoints/api_endpoints.mdx b/outdoornav_user_manual_versioned_docs/version-0.8.0/api/api_endpoints/api_endpoints.mdx index c65c4150..e1169e6e 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.8.0/api/api_endpoints/api_endpoints.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.8.0/api/api_endpoints/api_endpoints.mdx @@ -1,16 +1,16 @@ ---- -title: API Endpoints -sidebar_label: API Endpoints -sidebar_position: 2 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -The ROS 1 Noetic API can be used to monitor and manage OutdoorNav Software. Details -are available through the child pages. - -- [Platform API](platform_api.mdx) -- [Autonomy API](autonomy_api.mdx) -- [Mission Manager API](mission_manager_api.mdx) -- [Definitions](definitions.mdx) - +--- +title: API Endpoints +sidebar_label: API Endpoints +sidebar_position: 2 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +The ROS 1 Noetic API can be used to monitor and manage OutdoorNav Software. Details +are available through the child pages. + +- [Platform API](platform_api.mdx) +- [Autonomy API](autonomy_api.mdx) +- [Mission Manager API](mission_manager_api.mdx) +- [Definitions](definitions.mdx) + diff --git a/outdoornav_user_manual_versioned_docs/version-0.8.0/api/api_overview.mdx b/outdoornav_user_manual_versioned_docs/version-0.8.0/api/api_overview.mdx index 3b69afd0..503de14d 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.8.0/api/api_overview.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.8.0/api/api_overview.mdx @@ -1,61 +1,61 @@ ---- -title: API Overview -sidebar_label: API Overview -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -While the Web User Interface provides a great way to get started quickly -with OutdoorNav Software, some users will want programmatic control or -may wish to develop their own graphical user interfaces \-- for those -users, the Application Programming Interface (API) provides the -flexibility to do so. This is illustrated in the figure below. - -
-
- -
Interconnection between OutdoorNav Software and UGV Controller
-
-
- -The API is, at present, a [ROS 1 Noetic](http://wiki.ros.org/noetic) API, -but will soon be extended to a ROS 2 API. The API is divided into two -sections, whose details are provided below: - -- [Platform API](api_endpoints/platform_api.mdx): The set of [ROS - Topics](http://wiki.ros.org/Topics) are used to comminucate with the - hardware platform (eg. sensor data, wireless, battery state, command - velocity). This API can be used by autonomy software packages to - interface with the hardware platform. - - [Topics Published by UGV](api_endpoints/platform_api.mdx#topics-published-by-platform): - The set of topics that are published by the hardware platform. - - [Topics Subscribed to by UGV](api_endpoints/platform_api.mdx#topics-subscribed-by-platform): - The set of topics that are subscribed to by the hardware - platform. -- [Autonomy API](api_endpoints/autonomy_api.mdx): The set of [ROS - Topics](http://wiki.ros.org/Topics) that are used for monitoring and - controlling the the hardware platform through the OutdoorNav - autonomy software. - - [Topics Published by Autonomy](api_endpoints/autonomy_api.mdx#topics-published-by-autonomy): - The set of [ROS Topics](http://wiki.ros.org/Topics) published by - OutdoorNav Software, to be subscribed to by the UGV. - - [Topics Subscribed to by Autonomy](api_endpoints/autonomy_api.mdx#topics-subscribed-to-by-autonomy): - The set of [ROS Topics](http://wiki.ros.org/Topics) - subscribed to by OutdoorNav Software, typically published by the - client for directing OutdoorNav operation. - - [Services Exported by Autonomy](api_endpoints/autonomy_api.mdx#services-exported-by-autonomy): - The set of [ROS Services](http://wiki.ros.org/Services) provided - by OutdoorNav Software, for use by the client to modify/control - the behaviour of the Autonomy. - - [Actions Exported by Autonomy](api_endpoints/autonomy_api.mdx#actions-exported-by-autonomy): - The set of [ROS Actions](http://wiki.ros.org/actionlib) provided - by OutdoorNav Software, for use by the client to modify/control - the behaviour of the Autonomy. -- [Mission Manager API](api_endpoints/mission_manager_api.mdx): The set of [ROS - Services](http://wiki.ros.org/Services) that are used for creating, deleting, and modifying OutdoorNav missions -- [Definitions](api_endpoints/definitions.mdx): The set of custom - [ROS Message](http://wiki.ros.org/Messages), [ROS - Service](http://wiki.ros.org/Services), and [ROS - Action](http://wiki.ros.org/actionlib) definitions. -- API Examples: Example code to come. +--- +title: API Overview +sidebar_label: API Overview +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +While the Web User Interface provides a great way to get started quickly +with OutdoorNav Software, some users will want programmatic control or +may wish to develop their own graphical user interfaces \-- for those +users, the Application Programming Interface (API) provides the +flexibility to do so. This is illustrated in the figure below. + +
+
+ +
Interconnection between OutdoorNav Software and UGV Controller
+
+
+ +The API is, at present, a [ROS 1 Noetic](http://wiki.ros.org/noetic) API, +but will soon be extended to a ROS 2 API. The API is divided into two +sections, whose details are provided below: + +- [Platform API](api_endpoints/platform_api.mdx): The set of [ROS + Topics](http://wiki.ros.org/Topics) are used to comminucate with the + hardware platform (eg. sensor data, wireless, battery state, command + velocity). This API can be used by autonomy software packages to + interface with the hardware platform. + - [Topics Published by UGV](api_endpoints/platform_api.mdx#topics-published-by-platform): + The set of topics that are published by the hardware platform. + - [Topics Subscribed to by UGV](api_endpoints/platform_api.mdx#topics-subscribed-by-platform): + The set of topics that are subscribed to by the hardware + platform. +- [Autonomy API](api_endpoints/autonomy_api.mdx): The set of [ROS + Topics](http://wiki.ros.org/Topics) that are used for monitoring and + controlling the the hardware platform through the OutdoorNav + autonomy software. + - [Topics Published by Autonomy](api_endpoints/autonomy_api.mdx#topics-published-by-autonomy): + The set of [ROS Topics](http://wiki.ros.org/Topics) published by + OutdoorNav Software, to be subscribed to by the UGV. + - [Topics Subscribed to by Autonomy](api_endpoints/autonomy_api.mdx#topics-subscribed-to-by-autonomy): + The set of [ROS Topics](http://wiki.ros.org/Topics) + subscribed to by OutdoorNav Software, typically published by the + client for directing OutdoorNav operation. + - [Services Exported by Autonomy](api_endpoints/autonomy_api.mdx#services-exported-by-autonomy): + The set of [ROS Services](http://wiki.ros.org/Services) provided + by OutdoorNav Software, for use by the client to modify/control + the behaviour of the Autonomy. + - [Actions Exported by Autonomy](api_endpoints/autonomy_api.mdx#actions-exported-by-autonomy): + The set of [ROS Actions](http://wiki.ros.org/actionlib) provided + by OutdoorNav Software, for use by the client to modify/control + the behaviour of the Autonomy. +- [Mission Manager API](api_endpoints/mission_manager_api.mdx): The set of [ROS + Services](http://wiki.ros.org/Services) that are used for creating, deleting, and modifying OutdoorNav missions +- [Definitions](api_endpoints/definitions.mdx): The set of custom + [ROS Message](http://wiki.ros.org/Messages), [ROS + Service](http://wiki.ros.org/Services), and [ROS + Action](http://wiki.ros.org/actionlib) definitions. +- API Examples: Example code to come. diff --git a/outdoornav_user_manual_versioned_docs/version-0.8.0/cpr_hardware.mdx b/outdoornav_user_manual_versioned_docs/version-0.8.0/cpr_hardware.mdx index 2eede524..04678bf9 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.8.0/cpr_hardware.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.8.0/cpr_hardware.mdx @@ -1,405 +1,405 @@ ---- -title: "Appendix B: CPR Hardware" -sidebar_label: "Appendix B: CPR Hardware" -sidebar_position: 13 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -When using a Clearpath Robotics UGV and Base Station, the following -hardware setup may be required. - -## Calibrating the IMU - -Although IMU magnetometers are calibrated at the factory to remove any -internal magnetic influences in the device, measurements are still -subject to influence from external magnetic anomalies when the sensor is -installed. These anomalies are divided into two classes: hard iron -offsets and soft iron distortions. Hard iron offsets are created by -objects that produce a magnetic field. Soft iron distortions are -considered deflections or alterations in the existing magnetic field. -Ideally, these influences are mitigated by installing the sensor away -from magnetic sources, such as coils, magnets, and ferrous metal -structures and mounting hardware. However, often these sources are hard -to avoid or are hidden. To mitigate this effect when using the IMU -magnetometer to aid in heading estimations, a field calibration of the -magnetometer after final installation is highly recommended. This means -that the IMU must be calibrated in the same environment that you use -your UGV for autonomous navigation. - -### Microstrain IMU - -If your UGV has a 3DM-GX5-25 Microstrain IMU, the complete instruction -on calibration of your IMU can be found in section 5.4 of the -[datasheet](https://www.microstrain.com/sites/default/files/3dm-gx5-25_user_manual_8500-0012.pdf). -Note that you need a computer with Windows system and the LORD Sensing -MIP Hard and Soft Iron Calibration software installed which can be found -at the Microstrain website. - -### UM6/7 IMU - -If you are using UM6 or UM7 IMUs, you will need the magnetometer display -package which is located at the following address on your UGV: -`/home/administrator/catkin_ws/Drivers/src/imu_tools/magnetometer_display`. - -Follow these steps to calibrate the IMU on your machine: - -1. Create a catkin workspace on your local machine and copy the package - `magnetometer_display` into your src folder. Build this package with - the `catkin_make` command. - -2. Perform the following command to make the calibration script - executable: - - ``` bash - $ sudo chmod +x calibration.py - ``` - -3. Connect the IMU to your computer and launch the driver. Or if you - are on the same network as your UGV, make your UGV the ROS master - and ensure that you can echo the IMU topic on your computer. - -4. Open the `magnetometer.launch` file in the `magnetometer_display` - package and change the sections shown in the figure below. - Specifically, set `use_mag_field` to true when the IMU is outputting - magnetometer measurements with a `sensor_msgs/MagneticField` - message, otherwise set to false. Microstrain is the only IMU which - uses the MagneticField message type. - -
-
- -
Magnetometer calibration, general launch settings
-
-
- -5. Launch the calibration using the following command: - - ``` bash - $ roslaunch magnetometer_display magnetometer.launch - ``` - -6. Move the IMU around to get good coverage. RViz will display - magnetometer points (red) and will plot current ellipsoid fit - (green) as shown in the figure below. - -
-
- -
Magnetometer calibration, ellipsoid fit plot
-
-
- -7. Ellipsoid fit parameters are displayed in terminal as shown in the - figure below. - -
-
- -
Magnetometer calibration, ellipsoid fit - parameters
-
-
- -8. Once there are enough red points on your fitted ellipsoid, enter the - above calibrations in the IMU driver launch file. Open the - `sensor.launch` file in the `cpr_gps_localization` package and go to - the UM7 (or UM6) section of the launch file. The figure below shows - this section for the UM7. - -
-
- -
Magnetometer calibration, ellipsoid fit settings in launch file
-
-
- - You should enter the parameters generated in the Ellipsoid fit step - as follows (to account for the NED to ENU transform the driver - applies): - - - Launch file X = Terminal Y - - Launch file Y = Terminal X - - Launch file Z = -Terminal Z - -## RTK Positioning GPS Setup - -:::note - -Please skip this section if your robot does not have RTK GPS. - -::: - -The following configuration is for establishing communications between -the Base Station and the UGV using TCP/IP for the purpose of -transmitting RTK corrections. Before starting this procedure, make sure -that you have installed the [SwiftNav -console](https://support.swiftnav.com/support/solutions/articles/44001903699-installing-swift-console). - -### Base Station GPS Configuration - -- Connect the Swift Navigation device to a computer via USB or the USB - to Serial Adapter cable. - -- Open Swift Console and connect to the device. - -- Set the following options in the **ethernet** section as shown in - the figure below. - - 1. ip_config_mode: `Static` - 2. ip_address: `192.168.131.30` - 3. netmask: `255.255.255.0` - -
-
- -
Base Station Ethernet settings
-
-
- -- Set the following options in the **tcp_server1** section as show in - the figure below. - - 1. mode: `SBP` - 2. port: `55556` - 3. enabled_sbp_messages: `72,74,117,65535` - -
-
- -
Base Station TCP1 Server settings
-
-
- -- Set the following options in the **solution** section as shown in - the figure below. - - 1. soln_freq: `10` - 2. correction_age_max: `30` - 3. output_every_n_obs: `10` - 4. dgnss_solution_mode: `Low Latency` - -
-
- -
Base Station Solution settings
-
-
- -- Next the Base Station has to be surveyed. There are two ways of - doing this which are explained in [RTK Survey Positioning](#base-station-survey). -- Click Save to Flash. -- Close Swift Console. -- Disconnect the device from the computer. - -### UGV Position GPS Configuration {#ugv-position-gps-config} - -- Connect the Swift Navigation device to a computer via USB or the USB - to Serial Adapter cable. - -- Open Swift Console and connect to the device. - -- Set the following options in the **ethernet** section as shown in - the figure below. - - 1. ip_config_mode: `Static` - 2. ip_address: `192.168.131.31` - 3. netmask: `255.255.255.0` - -
-
- -
UGV GPS Ethernet settings
-
-
- -- Set the following options in the **tcp_client0** section as show in - the figure below. - - 1. mode: `SBP` - 2. port: `192.168.131.30:55556` - 3. enabled_sbp_messages: `0` - -
-
- -
UGV GPS TCP Client0 settings
-
-
- -- Set the following options in the **solution** section as show in the - figure below. - - 1. soln_freq: `10` - 2. correction_age_max: `30` - 3. output_every_n_obs: `10` - 4. dgnss_solution_mode: `Low Latency` - -
-
- -
UGV GPS Solution settings
-
-
- -- Click Save to Flash. - -- Close Swift Console. - -- Disconnect the device from the computer. - -Once you have entered these settings. Connect your computer to the Wi-Fi -network of the Base Station. Also make sure that the UGC (which is -connected to the UGV GPS unit) is also connected to the Base Station -Wifi. The you should be able to verify connectivity across the devices. -To check the Base Station, complete the following steps. - -- Open Swift Console on you computer -- Select **TCP/IP** -- For IP Address enter `192.168.131.30` -- For IP Port enter `55555` -- Click **OK** -- Select the **Observations** tab -- In the **Remote** section you should see observation data from your - UGV. - -To check the UGV, complete the following steps. - -- Open Swift Console -- Select **TCP/IP** -- For IP Address enter `192.168.131.31` -- For IP Port enter `55555` -- Click **OK** -- Select the **Observations** tab -- In the **Remote** section you should see observation data from your - Base Station. - -Further information on [RTK setup](https://swiftnav.freshdesk.com/support/solutions/articles/44001904334-piksi-multi-gnss-rtk-position-with-stationary-base%7D%7Bhttps://swiftnav.freshdesk.com/support/solutions/articles/44001904334-piksi-multi-gnss-rtk-position-with-stationary-base) -is available from SwiftNav. - -## RTK Survey Positioning {#base-station-survey} - -:::note - -Please skip this section if your UGV does not have RTK GPS. - -::: - -:::warning - -Once you have surveyed the location of the Base Station, you **cannot** -relocate the Base Station throughout your tests. Otherwise, this step -has to be repeated. - -::: - -There are three ways to survey the Base Station location: - -1. OutdoorNav Web User Interface (easiest/accurate), -2. Swiftnav console autosurvey (fastest/least accurate), -3. ROS launch file geodetic survey (for debug output display). - -Using the OutdoorNav Web UI is the easiest and most accurate way to do -this since it runs the ROS geodetic survey tool which uses more samples -to compute the final position of the Base Station than the Swiftnav -console. Using the geodetic ROS survey launch file directly would allow -the user to visualize the output log directly but requires preliminary -knowledge in ROS. - -### Base Station Survey: Web UI - -Using the OutdoorNav Web UI to survey the Base Station is very simple. -See [Survey Base Station](getting_started/system_setup.mdx#survey_base_station) for details. - -### Base Station Survey: Piksi Console - -Use the Piksi console connect the base station GPS. Go to "Settings -\> -surveyed position", click to any field in this section and then click -the button on the top right corner "Auto Survey". The figure below -shows these steps. The last 1000 GPS points will be used to compute the -position of the Base Station. - -
-
- -
Auto Survey
-
-
- -After that, make sure the four fields in "surveyed position" -(broadcast, surveyed lat, surveyed lon, surveyed alt) are consistent -with your location. - -### Base Station Survey: ROS Geodetic Survey - -The `ethz_piksi_ros` repository should be installed in the UGV's -`catkin_ws`. To run the surveying process simply connect your PC to the -Base Station network, `ssh` into the UGV's computer and run the -following: - -``` bash -roslaunch {robot_name}_gps_navigation geodetic_survey.launch -``` - -where `robot_name` is either `jackal`, `husky`, or `warthog` depending -on your UGV. The surveying will begin and you will see a running tally -of the collected data. - -## RTK Heading Setup - -For the rest of this section, it is assumed that a third Swiftnav Duro -device is available with IP address of 192.168.131.32. Note that in -order to change the IP address of a Swiftnav Duro, you need to use the -Swiftnav console and connect to the device with the serial port. - -:::note - -The instructions in this section will overwrite some of the settings set -in [UGV Position GPS Configuration](#ugv-position-gps-config) on the -Position/Reference Duro receiver. This is normal since the configuration -in [UGV Position GPS Configuration](#ugv-position-gps-config) is for a UGV -with only the position Duro receiver. If the heading receiver is -connected as well, please continue with the instructions below. - -::: - -The two Swiftnav Duro GPS device on the UGV are connected via serial -cable. They are also both connected via Ethernet cable to the computer -on the UGV. For computing the heading, on Duro (the one on the rear with -IP address 192.168.131.31) operates only to provide GNSS Observations to -the other Duro that computes an RTK derived heading (the Duro on the -front with IP address 192.168.131.32). For the purposes of this -document, we will call the Duro/Piksi that operates to provide the raw -GNSS observations only the "Reference Receiver" and the Duro/Piksi -producing heading measurements the "Attitude Receiver." - -Use the Swiftnav console to connect to the Reference Receiver (with IP -address of 192.168.131.31) and insert the settings shown in the figure -below. - -
-
- -
Reference Receiver settings
-
-
- -Next, connect to the Attitude Receiver (with IP address of -192.168.131.32) and change the configuration as shown in the figure -below. - -
-
- -
Attitude Receiver settings
-
-
- -For further information please refer to [these instructions](https://swiftnav.freshdesk.com/support/solutions/articles/44001907898-rtk-heading-gnss-compass-configuration%7D%7Bhttps://swiftnav.freshdesk.com/support/solutions/articles/44001907898-rtk-heading-gnss-compass-configuration). - -## Wireless Motion Stop - -Please refer to the hardware user manual of the motion stop device for proper -usage. A trained operator should be used to supervise navigation of the -UGV under autonomous control at all times. The Operator should be -familiar with the use of the wireless motion stop device. +--- +title: "Appendix B: CPR Hardware" +sidebar_label: "Appendix B: CPR Hardware" +sidebar_position: 13 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +When using a Clearpath Robotics UGV and Base Station, the following +hardware setup may be required. + +## Calibrating the IMU + +Although IMU magnetometers are calibrated at the factory to remove any +internal magnetic influences in the device, measurements are still +subject to influence from external magnetic anomalies when the sensor is +installed. These anomalies are divided into two classes: hard iron +offsets and soft iron distortions. Hard iron offsets are created by +objects that produce a magnetic field. Soft iron distortions are +considered deflections or alterations in the existing magnetic field. +Ideally, these influences are mitigated by installing the sensor away +from magnetic sources, such as coils, magnets, and ferrous metal +structures and mounting hardware. However, often these sources are hard +to avoid or are hidden. To mitigate this effect when using the IMU +magnetometer to aid in heading estimations, a field calibration of the +magnetometer after final installation is highly recommended. This means +that the IMU must be calibrated in the same environment that you use +your UGV for autonomous navigation. + +### Microstrain IMU + +If your UGV has a 3DM-GX5-25 Microstrain IMU, the complete instruction +on calibration of your IMU can be found in section 5.4 of the +[datasheet](https://www.microstrain.com/sites/default/files/3dm-gx5-25_user_manual_8500-0012.pdf). +Note that you need a computer with Windows system and the LORD Sensing +MIP Hard and Soft Iron Calibration software installed which can be found +at the Microstrain website. + +### UM6/7 IMU + +If you are using UM6 or UM7 IMUs, you will need the magnetometer display +package which is located at the following address on your UGV: +`/home/administrator/catkin_ws/Drivers/src/imu_tools/magnetometer_display`. + +Follow these steps to calibrate the IMU on your machine: + +1. Create a catkin workspace on your local machine and copy the package + `magnetometer_display` into your src folder. Build this package with + the `catkin_make` command. + +2. Perform the following command to make the calibration script + executable: + + ``` bash + $ sudo chmod +x calibration.py + ``` + +3. Connect the IMU to your computer and launch the driver. Or if you + are on the same network as your UGV, make your UGV the ROS master + and ensure that you can echo the IMU topic on your computer. + +4. Open the `magnetometer.launch` file in the `magnetometer_display` + package and change the sections shown in the figure below. + Specifically, set `use_mag_field` to true when the IMU is outputting + magnetometer measurements with a `sensor_msgs/MagneticField` + message, otherwise set to false. Microstrain is the only IMU which + uses the MagneticField message type. + +
+
+ +
Magnetometer calibration, general launch settings
+
+
+ +5. Launch the calibration using the following command: + + ``` bash + $ roslaunch magnetometer_display magnetometer.launch + ``` + +6. Move the IMU around to get good coverage. RViz will display + magnetometer points (red) and will plot current ellipsoid fit + (green) as shown in the figure below. + +
+
+ +
Magnetometer calibration, ellipsoid fit plot
+
+
+ +7. Ellipsoid fit parameters are displayed in terminal as shown in the + figure below. + +
+
+ +
Magnetometer calibration, ellipsoid fit + parameters
+
+
+ +8. Once there are enough red points on your fitted ellipsoid, enter the + above calibrations in the IMU driver launch file. Open the + `sensor.launch` file in the `cpr_gps_localization` package and go to + the UM7 (or UM6) section of the launch file. The figure below shows + this section for the UM7. + +
+
+ +
Magnetometer calibration, ellipsoid fit settings in launch file
+
+
+ + You should enter the parameters generated in the Ellipsoid fit step + as follows (to account for the NED to ENU transform the driver + applies): + + - Launch file X = Terminal Y + - Launch file Y = Terminal X + - Launch file Z = -Terminal Z + +## RTK Positioning GPS Setup + +:::note + +Please skip this section if your robot does not have RTK GPS. + +::: + +The following configuration is for establishing communications between +the Base Station and the UGV using TCP/IP for the purpose of +transmitting RTK corrections. Before starting this procedure, make sure +that you have installed the [SwiftNav +console](https://support.swiftnav.com/support/solutions/articles/44001903699-installing-swift-console). + +### Base Station GPS Configuration + +- Connect the Swift Navigation device to a computer via USB or the USB + to Serial Adapter cable. + +- Open Swift Console and connect to the device. + +- Set the following options in the **ethernet** section as shown in + the figure below. + + 1. ip_config_mode: `Static` + 2. ip_address: `192.168.131.30` + 3. netmask: `255.255.255.0` + +
+
+ +
Base Station Ethernet settings
+
+
+ +- Set the following options in the **tcp_server1** section as show in + the figure below. + + 1. mode: `SBP` + 2. port: `55556` + 3. enabled_sbp_messages: `72,74,117,65535` + +
+
+ +
Base Station TCP1 Server settings
+
+
+ +- Set the following options in the **solution** section as shown in + the figure below. + + 1. soln_freq: `10` + 2. correction_age_max: `30` + 3. output_every_n_obs: `10` + 4. dgnss_solution_mode: `Low Latency` + +
+
+ +
Base Station Solution settings
+
+
+ +- Next the Base Station has to be surveyed. There are two ways of + doing this which are explained in [RTK Survey Positioning](#base-station-survey). +- Click Save to Flash. +- Close Swift Console. +- Disconnect the device from the computer. + +### UGV Position GPS Configuration {#ugv-position-gps-config} + +- Connect the Swift Navigation device to a computer via USB or the USB + to Serial Adapter cable. + +- Open Swift Console and connect to the device. + +- Set the following options in the **ethernet** section as shown in + the figure below. + + 1. ip_config_mode: `Static` + 2. ip_address: `192.168.131.31` + 3. netmask: `255.255.255.0` + +
+
+ +
UGV GPS Ethernet settings
+
+
+ +- Set the following options in the **tcp_client0** section as show in + the figure below. + + 1. mode: `SBP` + 2. port: `192.168.131.30:55556` + 3. enabled_sbp_messages: `0` + +
+
+ +
UGV GPS TCP Client0 settings
+
+
+ +- Set the following options in the **solution** section as show in the + figure below. + + 1. soln_freq: `10` + 2. correction_age_max: `30` + 3. output_every_n_obs: `10` + 4. dgnss_solution_mode: `Low Latency` + +
+
+ +
UGV GPS Solution settings
+
+
+ +- Click Save to Flash. + +- Close Swift Console. + +- Disconnect the device from the computer. + +Once you have entered these settings. Connect your computer to the Wi-Fi +network of the Base Station. Also make sure that the UGC (which is +connected to the UGV GPS unit) is also connected to the Base Station +Wifi. The you should be able to verify connectivity across the devices. +To check the Base Station, complete the following steps. + +- Open Swift Console on you computer +- Select **TCP/IP** +- For IP Address enter `192.168.131.30` +- For IP Port enter `55555` +- Click **OK** +- Select the **Observations** tab +- In the **Remote** section you should see observation data from your + UGV. + +To check the UGV, complete the following steps. + +- Open Swift Console +- Select **TCP/IP** +- For IP Address enter `192.168.131.31` +- For IP Port enter `55555` +- Click **OK** +- Select the **Observations** tab +- In the **Remote** section you should see observation data from your + Base Station. + +Further information on [RTK setup](https://swiftnav.freshdesk.com/support/solutions/articles/44001904334-piksi-multi-gnss-rtk-position-with-stationary-base%7D%7Bhttps://swiftnav.freshdesk.com/support/solutions/articles/44001904334-piksi-multi-gnss-rtk-position-with-stationary-base) +is available from SwiftNav. + +## RTK Survey Positioning {#base-station-survey} + +:::note + +Please skip this section if your UGV does not have RTK GPS. + +::: + +:::warning + +Once you have surveyed the location of the Base Station, you **cannot** +relocate the Base Station throughout your tests. Otherwise, this step +has to be repeated. + +::: + +There are three ways to survey the Base Station location: + +1. OutdoorNav Web User Interface (easiest/accurate), +2. Swiftnav console autosurvey (fastest/least accurate), +3. ROS launch file geodetic survey (for debug output display). + +Using the OutdoorNav Web UI is the easiest and most accurate way to do +this since it runs the ROS geodetic survey tool which uses more samples +to compute the final position of the Base Station than the Swiftnav +console. Using the geodetic ROS survey launch file directly would allow +the user to visualize the output log directly but requires preliminary +knowledge in ROS. + +### Base Station Survey: Web UI + +Using the OutdoorNav Web UI to survey the Base Station is very simple. +See [Survey Base Station](getting_started/system_setup.mdx#survey_base_station) for details. + +### Base Station Survey: Piksi Console + +Use the Piksi console connect the base station GPS. Go to "Settings -\> +surveyed position", click to any field in this section and then click +the button on the top right corner "Auto Survey". The figure below +shows these steps. The last 1000 GPS points will be used to compute the +position of the Base Station. + +
+
+ +
Auto Survey
+
+
+ +After that, make sure the four fields in "surveyed position" +(broadcast, surveyed lat, surveyed lon, surveyed alt) are consistent +with your location. + +### Base Station Survey: ROS Geodetic Survey + +The `ethz_piksi_ros` repository should be installed in the UGV's +`catkin_ws`. To run the surveying process simply connect your PC to the +Base Station network, `ssh` into the UGV's computer and run the +following: + +``` bash +roslaunch {robot_name}_gps_navigation geodetic_survey.launch +``` + +where `robot_name` is either `jackal`, `husky`, or `warthog` depending +on your UGV. The surveying will begin and you will see a running tally +of the collected data. + +## RTK Heading Setup + +For the rest of this section, it is assumed that a third Swiftnav Duro +device is available with IP address of 192.168.131.32. Note that in +order to change the IP address of a Swiftnav Duro, you need to use the +Swiftnav console and connect to the device with the serial port. + +:::note + +The instructions in this section will overwrite some of the settings set +in [UGV Position GPS Configuration](#ugv-position-gps-config) on the +Position/Reference Duro receiver. This is normal since the configuration +in [UGV Position GPS Configuration](#ugv-position-gps-config) is for a UGV +with only the position Duro receiver. If the heading receiver is +connected as well, please continue with the instructions below. + +::: + +The two Swiftnav Duro GPS device on the UGV are connected via serial +cable. They are also both connected via Ethernet cable to the computer +on the UGV. For computing the heading, on Duro (the one on the rear with +IP address 192.168.131.31) operates only to provide GNSS Observations to +the other Duro that computes an RTK derived heading (the Duro on the +front with IP address 192.168.131.32). For the purposes of this +document, we will call the Duro/Piksi that operates to provide the raw +GNSS observations only the "Reference Receiver" and the Duro/Piksi +producing heading measurements the "Attitude Receiver." + +Use the Swiftnav console to connect to the Reference Receiver (with IP +address of 192.168.131.31) and insert the settings shown in the figure +below. + +
+
+ +
Reference Receiver settings
+
+
+ +Next, connect to the Attitude Receiver (with IP address of +192.168.131.32) and change the configuration as shown in the figure +below. + +
+
+ +
Attitude Receiver settings
+
+
+ +For further information please refer to [these instructions](https://swiftnav.freshdesk.com/support/solutions/articles/44001907898-rtk-heading-gnss-compass-configuration%7D%7Bhttps://swiftnav.freshdesk.com/support/solutions/articles/44001907898-rtk-heading-gnss-compass-configuration). + +## Wireless Motion Stop + +Please refer to the hardware user manual of the motion stop device for proper +usage. A trained operator should be used to supervise navigation of the +UGV under autonomous control at all times. The Operator should be +familiar with the use of the wireless motion stop device. diff --git a/outdoornav_user_manual_versioned_docs/version-0.8.0/customized_tuning/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.8.0/customized_tuning/_category_.json index 4c27a4d9..d38b7f55 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.8.0/customized_tuning/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.8.0/customized_tuning/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Appendix C: Tuning & Customization", - "position": 14 +{ + "label": "Appendix C: Tuning & Customization", + "position": 14 } \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.8.0/customized_tuning/sensor_customization.mdx b/outdoornav_user_manual_versioned_docs/version-0.8.0/customized_tuning/sensor_customization.mdx index 9d9f115a..f2cce53a 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.8.0/customized_tuning/sensor_customization.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.8.0/customized_tuning/sensor_customization.mdx @@ -1,9 +1,9 @@ ---- -title: "Sensor Customization" -sidebar_label: "Sensor Customization" -sidebar_position: 4 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -Information incoming in a future release. Please contact Clearpath customer support at \ to discuss any related issue. +--- +title: "Sensor Customization" +sidebar_label: "Sensor Customization" +sidebar_position: 4 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +Information incoming in a future release. Please contact Clearpath customer support at \ to discuss any related issue. diff --git a/outdoornav_user_manual_versioned_docs/version-0.8.0/customized_tuning/tuning_instructions/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.8.0/customized_tuning/tuning_instructions/_category_.json index d62e291a..4b3e7b59 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.8.0/customized_tuning/tuning_instructions/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.8.0/customized_tuning/tuning_instructions/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Tuning Instructions", - "position": 2 -} +{ + "label": "Tuning Instructions", + "position": 2 +} diff --git a/outdoornav_user_manual_versioned_docs/version-0.8.0/customized_tuning/tuning_instructions/ackermann_drive_dynamics.mdx b/outdoornav_user_manual_versioned_docs/version-0.8.0/customized_tuning/tuning_instructions/ackermann_drive_dynamics.mdx index c8f6f0c5..d3518673 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.8.0/customized_tuning/tuning_instructions/ackermann_drive_dynamics.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.8.0/customized_tuning/tuning_instructions/ackermann_drive_dynamics.mdx @@ -1,9 +1,9 @@ ---- -title: "Ackermann Drive" -sidebar_label: "Ackermann Drive" -sidebar_position: 4 -toc_min_heading_level: 2 -toc_max_heading_level: 2 ---- - -Information incoming in release 0.9.0. Please contact Clearpath customer support at \ to discuss any related issue. +--- +title: "Ackermann Drive" +sidebar_label: "Ackermann Drive" +sidebar_position: 4 +toc_min_heading_level: 2 +toc_max_heading_level: 2 +--- + +Information incoming in release 0.9.0. Please contact Clearpath customer support at \ to discuss any related issue. diff --git a/outdoornav_user_manual_versioned_docs/version-0.8.0/customized_tuning/tuning_instructions/footprint_tuning.mdx b/outdoornav_user_manual_versioned_docs/version-0.8.0/customized_tuning/tuning_instructions/footprint_tuning.mdx index 4b90f600..6b105ecb 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.8.0/customized_tuning/tuning_instructions/footprint_tuning.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.8.0/customized_tuning/tuning_instructions/footprint_tuning.mdx @@ -1,9 +1,9 @@ ---- -title: "Footprint Tuning" -sidebar_label: "Footprint Tuning" -sidebar_position: 5 -toc_min_heading_level: 2 -toc_max_heading_level: 2 ---- - -Information incoming in release 0.9.0. Please contact Clearpath customer support at \ to discuss any related issue. +--- +title: "Footprint Tuning" +sidebar_label: "Footprint Tuning" +sidebar_position: 5 +toc_min_heading_level: 2 +toc_max_heading_level: 2 +--- + +Information incoming in release 0.9.0. Please contact Clearpath customer support at \ to discuss any related issue. diff --git a/outdoornav_user_manual_versioned_docs/version-0.8.0/customized_tuning/tuning_overview.mdx b/outdoornav_user_manual_versioned_docs/version-0.8.0/customized_tuning/tuning_overview.mdx index 851df29b..77fbabeb 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.8.0/customized_tuning/tuning_overview.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.8.0/customized_tuning/tuning_overview.mdx @@ -1,25 +1,25 @@ ---- -title: "Tuning Overview" -sidebar_label: "Tuning Overview" -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -The scope of Appendix C is to provide information on how to tune the various components of -OutdoorNav. - -Instructions for tuning specific platform types can be found here: - -- [Differential Drive (Skid-Steer) Dynamics](tuning_instructions/differential_drive_dynamics.mdx) -- [Ackermann Drive Dynamics](tuning_instructions/ackermann_drive_dynamics.mdx) - - -Lists of parameters related to each component of the autonomy can be found here: - -- [Localization Parameters](tuning_parameters/localization_parameters.mdx) -- [Navigation Parameters](tuning_parameters/navigation_parameters.mdx) -- [Collision Avoidance Parameters](tuning_parameters/collision_avoidance_parameters.mdx) - -In future releases, we will describe how the user can [Customize their UI](user_interface_customization.mdx) +--- +title: "Tuning Overview" +sidebar_label: "Tuning Overview" +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +The scope of Appendix C is to provide information on how to tune the various components of +OutdoorNav. + +Instructions for tuning specific platform types can be found here: + +- [Differential Drive (Skid-Steer) Dynamics](tuning_instructions/differential_drive_dynamics.mdx) +- [Ackermann Drive Dynamics](tuning_instructions/ackermann_drive_dynamics.mdx) + + +Lists of parameters related to each component of the autonomy can be found here: + +- [Localization Parameters](tuning_parameters/localization_parameters.mdx) +- [Navigation Parameters](tuning_parameters/navigation_parameters.mdx) +- [Collision Avoidance Parameters](tuning_parameters/collision_avoidance_parameters.mdx) + +In future releases, we will describe how the user can [Customize their UI](user_interface_customization.mdx) as well as how to [Customize which Sensors](sensor_customization.mdx) are input into OutdoorNav. \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.8.0/customized_tuning/tuning_parameters/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.8.0/customized_tuning/tuning_parameters/_category_.json index fb6592a9..0e2dc60a 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.8.0/customized_tuning/tuning_parameters/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.8.0/customized_tuning/tuning_parameters/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Tuning Parameters", - "position": 3 -} +{ + "label": "Tuning Parameters", + "position": 3 +} diff --git a/outdoornav_user_manual_versioned_docs/version-0.8.0/customized_tuning/tuning_parameters/navigation_parameters.mdx b/outdoornav_user_manual_versioned_docs/version-0.8.0/customized_tuning/tuning_parameters/navigation_parameters.mdx index 8c986090..7cd7b144 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.8.0/customized_tuning/tuning_parameters/navigation_parameters.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.8.0/customized_tuning/tuning_parameters/navigation_parameters.mdx @@ -1,167 +1,167 @@ ---- -title: "Navigation Parameters" -sidebar_label: "Navigation Parameters" -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 3 ---- - -import versions from "@site/static/versions.js" - -## Controllers {#controllers} - -### Determine the file location of the parameter {#file_location} - -The parameters related to the controller, can be found here: - -``` bash -~/cpr_outdoornav_launch/onav_robots/params//navigation/controls_general.yaml -``` - -If they are not listed in the above file, it is because they are using the default values and are not being overwritten. - -### MPC Controller {#controller} - -#### MBF Plugins - -Currently we have implemented a Move-Base Flex controller plugin named: **OnavMbfMpcController** - -Two instances of this plugin are loaded at runtime by our navigation node (as seen in the table below). The parameters are equivalent for each instance of the plugin but the values of certain of these parameters are different. - -| Controller name | Description | -|-----------------|-------------| -| **`mpc_controller`** | The controller used during normal navigation and applies to tracking the paths generated between all the mission waypoints. | -| **`mpc_dock_controller`** | The controller used during docking and applies only to tracking the dock and undock paths. | - -#### MPC State Machine - -The MPC controller operates as a state machine that contains the following states: - -| MPC State | Description | Condition | -|-----------|-------------|-----------| -| **`DEFAULT`** | Standard tracking behavior. | Will revert to this state if none of the other state conditions are met. | -| **`GOAL`** | Tracking behavior as the UGV approaches the goal. | Will enter GOAL mode when the `goal_horizon_threshold` parameter distance to the goal has been reached.| -| **`PRECISE`** | State when more precision is required in the tracking. | At the start of the path, we begin in Precise mode to ensure that we have a good start to tracking.| -| **`RESCUE`** | State to rescue the tracker when the UGV is stuck. | Will enter RESCUE mode when UGV is appraching a condition that make it stuck.| -| **`HYSTERESIS`** | State when you the UGV requires compensation for tire flexion. | Will enter HYSTERESIS mode when the UGV detects that it will begin oscillating due to tire deformation. | -| **`CORNER`** | State when there is a curve or a corner ahead. | Will enter CORNER mode when the UGV approaches, within a `corner_lookahead` parameter distance, to a corner with at least `corner_detection_threshold` of a curvature.| - -#### Default State Parameters {#default_state_params} - -The following list defines the default parameters that the MPC controller uses. -For the most part, they apply to all states of the MPC controller. - -| Parameter | Description | Namespace | SI Units | -|-----------|-------------|-----------|:--------:| -| `vehicle_length` | The length (longitudinally) of the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | -| `mpc_horizon` | The prediction horizon of the MPC. | [/navigation/*<controller>*/path_tracker](#file_location) | **s** | -| `max_lookahead` | Maximum distance along the path we seek to follow. Affects how far we do collision checks as well as the maximum velocity of the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | -| `min_lookahead` | Minimum distance along the path we seek to follow. Affects how far we do collision checks as well as the maximum velocity of the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | -| `lookahead_smoother` | Factor between 0 and 1 that determines the smoothness of the change in lookahead distance: 0 means only maximum velocity is used to determine the horizon (can be jumpy but speeds up the UGV faster); 1 means only averaged planned velocity is used to determine the horizon (smoother but speeds up the UGV slowly). | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `lookahead_factor` | How aggressively do we want to increase the lookahead from min_lookahead to max_lookahead | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `mpc_opt_maxiteration` | The maximum number of iterations that the solver will run. Increase this value for better performance, decrease for shorter computation time. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `discretization_steps` | Number of grid points along the MPC prediction; Lower: less accuracy, but faster | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `max_fwd_velocity` | The maximum allowable linear velocity that the MPC controller can compute. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | -| `min_fwd_velocity` | The minimum allowable linear velocity, in any mode, that the MPC controller can compute. This can be used to overcome the different deadbands that different UGVs may have. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | -| `max_rev_velocity` | The maximum allowable reverse linear velocity (ie. positive value), in any mode, that the MPC controller can compute. By default this is set to the `max_fwd_velocity`, so only needed if your maximum linear reverse velocity is different than the forward linear velocity.| [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | -| `max_ang_velocity` | The maximum allowable angular velocity, in any mode, that the MPC controller can compute. This parameter bounds both positive and negative angular velocities. | [/navigation/*<controller>*/path_tracker](#file_location) | **rad/s** | -| `max_accel` | The maximum allowable linear acceleration, in normal navigation mode, that the MPC controller can compute. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s/s** | -| `max_decel` | The maximum allowable linear deceleration (ie. negative value), in any mode, that the MPC controller can compute. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s/s** | -| `max_ang_accel` | The maximum allowable angular acceleration, in any mode, that the MPC controller can compute. This parameter bounds both positive and negative angular accelerations. | [/navigation/*<controller>*/path_tracker](#file_location) | **rad/s/s** | -| `max_lateral_accel` | The maximum allowable lateral acceleration, in any mode, that the MPC controller can compute. This parameter bounds both positive and negative lateral accelerations. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s/s** | -| `stiction_compensator_fwd` | The minimum linear velocity for movement of the UGV. This should typically be the minimum linear velocity that the UGV requires for it to move. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | -| `stiction_compensator_yaw` | The minimum angular velocity for movement of the UGV. This should typically be the minimum angular velocity that the UGV requires for it to move. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | -| `x_weight` | Weight for state x in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `y_weight` | Weight for state y in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `yaw_weight` | Weight for state yaw in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `fwd_v_weight` | Weight for state ẋ (forward velocity) in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `yaw_d_weight` | Weight for state (yaw velocity) in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `fwd_a_weight` | Weight for state ẍ (forward acceleration) in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `yaw_a_weight` | Weight for state (yaw acceleration) in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `horizon_percent_change` | The percentage factor used when shortening the MPC horizon. This will affect how quickly we want to speed up after a curvature slowdown. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `error_slowdown_multiplier` | The amount by which to increase the MPC horizon based on the crosstrack and/or heading error. This should be greater than 1.0 since increasing the MPC horizon will decrease the maximum MPC velocity. ** Less than 1.0 will result in the opposite behaviour which is not the expected behaviour for this parameter. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `crosstrackerror_slowdown` | Threshold on the amount of crosstrack error, above which to a slowdown the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `headingerror_slowdown` | Threshold on the amount of heading error, above which to a slowdown the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `curvature_slowdown` | Threshold on the path curvature, above which to a slowdown the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `endpoint_multiplier` | Weight multiplier of the very last point along the local plan segment in MPC state: DEFAULT. This value ensures convergence/stability of the optimizer by mimicking the MPCs infinite horizon by applying a terminal cost. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `shrinking_horizon_min` | The minimum horizon that will be used in the computation. This value will prevent the horizon from dropping below this value during all the horizon adjustments. | [/navigation/*<controller>*/path_tracker](#file_location) | **s** | -| `crosstrack_tolerance` | The amount of lateral error that the controller will handle before stopping the UGV and replanning a new path. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | -| `reference_trajectory_factor` | A factor that will skew the path parameter. This value should be between 0 and 1. Values closer to 0.0 will skew the path param closer to the UGV, decreasing speed but increasing the accuracy of the path tracking, and vice versa as you approach 1.0. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | - -#### Goal State Parameters {#goal_state_params} - -The following parameters can be modified to tune the controller as it approaches -the goal point as well as its behavior around the goal point. - -| Parameter | Description | Namespace | SI Units | -|-----------|-------------|-----------|:--------:| -| `goal_horizon_threshold` | The distance from the goal point which the MPC state will switch into state: GOAL , and begin reducing the horizon accordingly. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | -| `goal_slowdown_multiplier` | The multiplier by which to increase the MPC horizon during the MPCs GOAL state in order to slow the UGV down from its top speed. This value should be greater than 1.0. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `max_speed_at_goal` | The maximum allowable speed at the goal point for the controller to stop and consider the goal complete. On OEM UGVs, this value should be increased. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | -| `x_weight_goal` | Weight for state x in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `y_weight_goal` | Weight for state y in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `yaw_weight_goal` | Weight for state yaw in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `fwd_v_weight_goal` | Weight for state ẋ (forward velocity) in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `yaw_d_weight_goal` | Weight for state (yaw velocity) in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `fwd_a_weight_goal` | Weight for state ẍ (forward acceleration) in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `yaw_a_weight_goal` | Weight for state (yaw acceleration) in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `endpoint_multiplier_goal` | Weight multiplier of the very last point along the local plan segment in MPC state: GOAL. This value ensures convergence/stability of the optimizer by mimicking the MPCs infinite horizon by applying a terminal cost. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `goal_tolerance_xy_rtk` | The (x, y) tolerance value (ie. radius) assigned to a goal, when RTK is enabled, in order to determine whether or not to consider the goal complete. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | -| `goal_tolerance_yaw_rtk` | The yaw tolerance value (ie. heading) assigned to a goal, when RTK is enabled, in order to determine whether or not to consider the goal complete. | [/navigation/*<controller>*/path_tracker](#file_location) | **rad** | -| `goal_tolerance_xy_nortk` | The (x, y) tolerance value (ie. radius) assigned to a goal, when RTK is disabled, in order to determine whether or not to consider the goal complete. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | -| `goal_tolerance_yaw_nortk` | The yaw tolerance value (ie. heading) assigned to a goal, when RTK is disabled, in order to determine whether or not to consider the goal complete. | [/navigation/*<controller>*/path_tracker](#file_location) | **rad** | - -#### Corner State Parameters {#corner_state_params} - -The following parameters can be modified to tune the behavior of the controller during and as it -as it approaches corners. - -| Parameter | Description | Namespace | SI Units | -|-----------|-------------|-----------|:--------:| -| `corner_segment_slowdown` | Flag to enable/disable the slowdown behaviour in MPC state: CORNER | [/navigation/*<controller>*/path_tracker](#file_location)| **bool** | -| `corner_lookahead` | The distance on the reference path from the UGVs current location, along which to determine if a corner is present. If a corner is present the MPC state will switch to CORNER state and begin reducing the horizon accordingly. | [/navigation/*<controller>*/path_tracker](#file_location)| **m** | -| `corner_detection_threshold` | Threshold on the path curvature, between the UGVs current location and the end of the corner_lookahead distance, above which to switch the MPC in state: CORNER, and begin reducing the horizon accordingly. | [/navigation/*<controller>*/path_tracker](#file_location)| **rad** | -| `corner_slowdown_multiplier` | The multiplier by which to increase the MPC horizon during the MPCs CORNER state in order to slow the UGV down from its top speed. This value should be greater than 1.0. | [/navigation/*<controller>*/path_tracker](#file_location)| **--** | -| `endpoint_multiplier_corner` | Weight multiplier of the very last point along the local plan segment in MPC state: CORNER. This value ensures convergence/stability of the optimizer by mimicking the MPCs infinite horizon by applying a terminal cost. | [/navigation/*<controller>*/path_tracker](#file_location)| **--** | - -#### OEM Specific Parameters {#oem_tuning_params} - -When tuning the controller on a third-party OEM UGV, there are several other considerations -that we will not have taken into account during the tuning of our UGVs. Below, we define -parameters that may be modified to tune the controller for your third-party OEM UGV. - -##### UGV Dynamics {#platform_dynamics_params} - -The following parameters can be used to modify the dynamics model that the contrller uses to -compute command velocities. - -| Parameter | Description | Namespace | SI Units | -|-----------|-------------|-----------|:--------:| -| `no_turn_on_spot_motion` | Flag to enable/disable turn on spot motion. By default, the MPC motion model is represented by a differential drive kinematics. This parameter will modify the MPC motion model to remove turn in place motions and bias the motion in the forward direction. | [/navigation/*<controller>*/path_tracker](#file_location) | - | -| `min_fwd_turn` | | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `pivot_point_offset_x` | The longitudinal offset that can be applied to the MPC model in order to account for a particular UGVs center of rotation | [/navigation/*<controller>*/path_tracker](#file_location) | - | -| `pivot_point_offset_y` | The lateral offset that can be applied to the MPC model in order to account for a particular UGVs center of rotation | [/navigation/*<controller>*/path_tracker](#file_location) | - | -| `min_fwd_turn` | | [/navigation/*<controller>*/path_tracker](#file_location) | **--**| - -##### Delay Compensation {#delay_compensation_params} - -The following parameters can be used to compensate for any delays that are present in the system. - -| Parameter | Description | Namespace | SI Units | -|-----------|-------------|-----------|:--------:| -| `enable_delay_compensation` | A boolean flag to enable/disable the delay compensation feature. The delay compensation feature is used to compensate for low-level dynamics delays that may be present in the UGV to be controlled. The user can apply an input controller delay and the feature will compute command velocities that compensate for such a delay. | [/navigation/*<controller>*/path_tracker](#file_location) | **bool** | -| `controller_delay` | The amount of controller delay that the delay compensation feature will attempt to compensate for, in ms. | [/navigation/*<controller>*/path_tracker](#file_location) | **ms** | - -##### Stop Distance {#stop_distance_params} - -The following parameters can be used to set a specific stop distance away from obstacles. - -| Parameter | Description | Namespace | SI Units | -|-----------|-------------|-----------|:--------:| -| `enable_stop_distance` | A flag to use enable/disable the stop distance feature. The stop distance feature forces the UGV to stop a specified distance in front of obstacles. | [/navigation/*<controller>*/path_tracker](#file_location) | **bool** | -| `obstacle_stop_distance` | The distance at which the UGV will stop in front of a detected obstacle. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | - - -## Path Planners {#path_planners} - -Information incoming in release 0.9. Please contact Clearpath customer support at \ to discuss the issue. +--- +title: "Navigation Parameters" +sidebar_label: "Navigation Parameters" +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 3 +--- + +import versions from "@site/static/versions.js" + +## Controllers {#controllers} + +### Determine the file location of the parameter {#file_location} + +The parameters related to the controller, can be found here: + +``` bash +~/cpr_outdoornav_launch/onav_robots/params//navigation/controls_general.yaml +``` + +If they are not listed in the above file, it is because they are using the default values and are not being overwritten. + +### MPC Controller {#controller} + +#### MBF Plugins + +Currently we have implemented a Move-Base Flex controller plugin named: **OnavMbfMpcController** + +Two instances of this plugin are loaded at runtime by our navigation node (as seen in the table below). The parameters are equivalent for each instance of the plugin but the values of certain of these parameters are different. + +| Controller name | Description | +|-----------------|-------------| +| **`mpc_controller`** | The controller used during normal navigation and applies to tracking the paths generated between all the mission waypoints. | +| **`mpc_dock_controller`** | The controller used during docking and applies only to tracking the dock and undock paths. | + +#### MPC State Machine + +The MPC controller operates as a state machine that contains the following states: + +| MPC State | Description | Condition | +|-----------|-------------|-----------| +| **`DEFAULT`** | Standard tracking behavior. | Will revert to this state if none of the other state conditions are met. | +| **`GOAL`** | Tracking behavior as the UGV approaches the goal. | Will enter GOAL mode when the `goal_horizon_threshold` parameter distance to the goal has been reached.| +| **`PRECISE`** | State when more precision is required in the tracking. | At the start of the path, we begin in Precise mode to ensure that we have a good start to tracking.| +| **`RESCUE`** | State to rescue the tracker when the UGV is stuck. | Will enter RESCUE mode when UGV is appraching a condition that make it stuck.| +| **`HYSTERESIS`** | State when you the UGV requires compensation for tire flexion. | Will enter HYSTERESIS mode when the UGV detects that it will begin oscillating due to tire deformation. | +| **`CORNER`** | State when there is a curve or a corner ahead. | Will enter CORNER mode when the UGV approaches, within a `corner_lookahead` parameter distance, to a corner with at least `corner_detection_threshold` of a curvature.| + +#### Default State Parameters {#default_state_params} + +The following list defines the default parameters that the MPC controller uses. +For the most part, they apply to all states of the MPC controller. + +| Parameter | Description | Namespace | SI Units | +|-----------|-------------|-----------|:--------:| +| `vehicle_length` | The length (longitudinally) of the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | +| `mpc_horizon` | The prediction horizon of the MPC. | [/navigation/*<controller>*/path_tracker](#file_location) | **s** | +| `max_lookahead` | Maximum distance along the path we seek to follow. Affects how far we do collision checks as well as the maximum velocity of the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | +| `min_lookahead` | Minimum distance along the path we seek to follow. Affects how far we do collision checks as well as the maximum velocity of the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | +| `lookahead_smoother` | Factor between 0 and 1 that determines the smoothness of the change in lookahead distance: 0 means only maximum velocity is used to determine the horizon (can be jumpy but speeds up the UGV faster); 1 means only averaged planned velocity is used to determine the horizon (smoother but speeds up the UGV slowly). | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `lookahead_factor` | How aggressively do we want to increase the lookahead from min_lookahead to max_lookahead | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `mpc_opt_maxiteration` | The maximum number of iterations that the solver will run. Increase this value for better performance, decrease for shorter computation time. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `discretization_steps` | Number of grid points along the MPC prediction; Lower: less accuracy, but faster | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `max_fwd_velocity` | The maximum allowable linear velocity that the MPC controller can compute. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | +| `min_fwd_velocity` | The minimum allowable linear velocity, in any mode, that the MPC controller can compute. This can be used to overcome the different deadbands that different UGVs may have. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | +| `max_rev_velocity` | The maximum allowable reverse linear velocity (ie. positive value), in any mode, that the MPC controller can compute. By default this is set to the `max_fwd_velocity`, so only needed if your maximum linear reverse velocity is different than the forward linear velocity.| [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | +| `max_ang_velocity` | The maximum allowable angular velocity, in any mode, that the MPC controller can compute. This parameter bounds both positive and negative angular velocities. | [/navigation/*<controller>*/path_tracker](#file_location) | **rad/s** | +| `max_accel` | The maximum allowable linear acceleration, in normal navigation mode, that the MPC controller can compute. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s/s** | +| `max_decel` | The maximum allowable linear deceleration (ie. negative value), in any mode, that the MPC controller can compute. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s/s** | +| `max_ang_accel` | The maximum allowable angular acceleration, in any mode, that the MPC controller can compute. This parameter bounds both positive and negative angular accelerations. | [/navigation/*<controller>*/path_tracker](#file_location) | **rad/s/s** | +| `max_lateral_accel` | The maximum allowable lateral acceleration, in any mode, that the MPC controller can compute. This parameter bounds both positive and negative lateral accelerations. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s/s** | +| `stiction_compensator_fwd` | The minimum linear velocity for movement of the UGV. This should typically be the minimum linear velocity that the UGV requires for it to move. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | +| `stiction_compensator_yaw` | The minimum angular velocity for movement of the UGV. This should typically be the minimum angular velocity that the UGV requires for it to move. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | +| `x_weight` | Weight for state x in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `y_weight` | Weight for state y in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `yaw_weight` | Weight for state yaw in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `fwd_v_weight` | Weight for state ẋ (forward velocity) in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `yaw_d_weight` | Weight for state (yaw velocity) in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `fwd_a_weight` | Weight for state ẍ (forward acceleration) in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `yaw_a_weight` | Weight for state (yaw acceleration) in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `horizon_percent_change` | The percentage factor used when shortening the MPC horizon. This will affect how quickly we want to speed up after a curvature slowdown. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `error_slowdown_multiplier` | The amount by which to increase the MPC horizon based on the crosstrack and/or heading error. This should be greater than 1.0 since increasing the MPC horizon will decrease the maximum MPC velocity. ** Less than 1.0 will result in the opposite behaviour which is not the expected behaviour for this parameter. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `crosstrackerror_slowdown` | Threshold on the amount of crosstrack error, above which to a slowdown the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `headingerror_slowdown` | Threshold on the amount of heading error, above which to a slowdown the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `curvature_slowdown` | Threshold on the path curvature, above which to a slowdown the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `endpoint_multiplier` | Weight multiplier of the very last point along the local plan segment in MPC state: DEFAULT. This value ensures convergence/stability of the optimizer by mimicking the MPCs infinite horizon by applying a terminal cost. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `shrinking_horizon_min` | The minimum horizon that will be used in the computation. This value will prevent the horizon from dropping below this value during all the horizon adjustments. | [/navigation/*<controller>*/path_tracker](#file_location) | **s** | +| `crosstrack_tolerance` | The amount of lateral error that the controller will handle before stopping the UGV and replanning a new path. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | +| `reference_trajectory_factor` | A factor that will skew the path parameter. This value should be between 0 and 1. Values closer to 0.0 will skew the path param closer to the UGV, decreasing speed but increasing the accuracy of the path tracking, and vice versa as you approach 1.0. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | + +#### Goal State Parameters {#goal_state_params} + +The following parameters can be modified to tune the controller as it approaches +the goal point as well as its behavior around the goal point. + +| Parameter | Description | Namespace | SI Units | +|-----------|-------------|-----------|:--------:| +| `goal_horizon_threshold` | The distance from the goal point which the MPC state will switch into state: GOAL , and begin reducing the horizon accordingly. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | +| `goal_slowdown_multiplier` | The multiplier by which to increase the MPC horizon during the MPCs GOAL state in order to slow the UGV down from its top speed. This value should be greater than 1.0. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `max_speed_at_goal` | The maximum allowable speed at the goal point for the controller to stop and consider the goal complete. On OEM UGVs, this value should be increased. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | +| `x_weight_goal` | Weight for state x in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `y_weight_goal` | Weight for state y in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `yaw_weight_goal` | Weight for state yaw in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `fwd_v_weight_goal` | Weight for state ẋ (forward velocity) in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `yaw_d_weight_goal` | Weight for state (yaw velocity) in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `fwd_a_weight_goal` | Weight for state ẍ (forward acceleration) in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `yaw_a_weight_goal` | Weight for state (yaw acceleration) in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `endpoint_multiplier_goal` | Weight multiplier of the very last point along the local plan segment in MPC state: GOAL. This value ensures convergence/stability of the optimizer by mimicking the MPCs infinite horizon by applying a terminal cost. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `goal_tolerance_xy_rtk` | The (x, y) tolerance value (ie. radius) assigned to a goal, when RTK is enabled, in order to determine whether or not to consider the goal complete. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | +| `goal_tolerance_yaw_rtk` | The yaw tolerance value (ie. heading) assigned to a goal, when RTK is enabled, in order to determine whether or not to consider the goal complete. | [/navigation/*<controller>*/path_tracker](#file_location) | **rad** | +| `goal_tolerance_xy_nortk` | The (x, y) tolerance value (ie. radius) assigned to a goal, when RTK is disabled, in order to determine whether or not to consider the goal complete. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | +| `goal_tolerance_yaw_nortk` | The yaw tolerance value (ie. heading) assigned to a goal, when RTK is disabled, in order to determine whether or not to consider the goal complete. | [/navigation/*<controller>*/path_tracker](#file_location) | **rad** | + +#### Corner State Parameters {#corner_state_params} + +The following parameters can be modified to tune the behavior of the controller during and as it +as it approaches corners. + +| Parameter | Description | Namespace | SI Units | +|-----------|-------------|-----------|:--------:| +| `corner_segment_slowdown` | Flag to enable/disable the slowdown behaviour in MPC state: CORNER | [/navigation/*<controller>*/path_tracker](#file_location)| **bool** | +| `corner_lookahead` | The distance on the reference path from the UGVs current location, along which to determine if a corner is present. If a corner is present the MPC state will switch to CORNER state and begin reducing the horizon accordingly. | [/navigation/*<controller>*/path_tracker](#file_location)| **m** | +| `corner_detection_threshold` | Threshold on the path curvature, between the UGVs current location and the end of the corner_lookahead distance, above which to switch the MPC in state: CORNER, and begin reducing the horizon accordingly. | [/navigation/*<controller>*/path_tracker](#file_location)| **rad** | +| `corner_slowdown_multiplier` | The multiplier by which to increase the MPC horizon during the MPCs CORNER state in order to slow the UGV down from its top speed. This value should be greater than 1.0. | [/navigation/*<controller>*/path_tracker](#file_location)| **--** | +| `endpoint_multiplier_corner` | Weight multiplier of the very last point along the local plan segment in MPC state: CORNER. This value ensures convergence/stability of the optimizer by mimicking the MPCs infinite horizon by applying a terminal cost. | [/navigation/*<controller>*/path_tracker](#file_location)| **--** | + +#### OEM Specific Parameters {#oem_tuning_params} + +When tuning the controller on a third-party OEM UGV, there are several other considerations +that we will not have taken into account during the tuning of our UGVs. Below, we define +parameters that may be modified to tune the controller for your third-party OEM UGV. + +##### UGV Dynamics {#platform_dynamics_params} + +The following parameters can be used to modify the dynamics model that the contrller uses to +compute command velocities. + +| Parameter | Description | Namespace | SI Units | +|-----------|-------------|-----------|:--------:| +| `no_turn_on_spot_motion` | Flag to enable/disable turn on spot motion. By default, the MPC motion model is represented by a differential drive kinematics. This parameter will modify the MPC motion model to remove turn in place motions and bias the motion in the forward direction. | [/navigation/*<controller>*/path_tracker](#file_location) | - | +| `min_fwd_turn` | | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `pivot_point_offset_x` | The longitudinal offset that can be applied to the MPC model in order to account for a particular UGVs center of rotation | [/navigation/*<controller>*/path_tracker](#file_location) | - | +| `pivot_point_offset_y` | The lateral offset that can be applied to the MPC model in order to account for a particular UGVs center of rotation | [/navigation/*<controller>*/path_tracker](#file_location) | - | +| `min_fwd_turn` | | [/navigation/*<controller>*/path_tracker](#file_location) | **--**| + +##### Delay Compensation {#delay_compensation_params} + +The following parameters can be used to compensate for any delays that are present in the system. + +| Parameter | Description | Namespace | SI Units | +|-----------|-------------|-----------|:--------:| +| `enable_delay_compensation` | A boolean flag to enable/disable the delay compensation feature. The delay compensation feature is used to compensate for low-level dynamics delays that may be present in the UGV to be controlled. The user can apply an input controller delay and the feature will compute command velocities that compensate for such a delay. | [/navigation/*<controller>*/path_tracker](#file_location) | **bool** | +| `controller_delay` | The amount of controller delay that the delay compensation feature will attempt to compensate for, in ms. | [/navigation/*<controller>*/path_tracker](#file_location) | **ms** | + +##### Stop Distance {#stop_distance_params} + +The following parameters can be used to set a specific stop distance away from obstacles. + +| Parameter | Description | Namespace | SI Units | +|-----------|-------------|-----------|:--------:| +| `enable_stop_distance` | A flag to use enable/disable the stop distance feature. The stop distance feature forces the UGV to stop a specified distance in front of obstacles. | [/navigation/*<controller>*/path_tracker](#file_location) | **bool** | +| `obstacle_stop_distance` | The distance at which the UGV will stop in front of a detected obstacle. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | + + +## Path Planners {#path_planners} + +Information incoming in release 0.9. Please contact Clearpath customer support at \ to discuss the issue. diff --git a/outdoornav_user_manual_versioned_docs/version-0.8.0/customized_tuning/user_interface_customization.mdx b/outdoornav_user_manual_versioned_docs/version-0.8.0/customized_tuning/user_interface_customization.mdx index c67bca22..1e7d39c9 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.8.0/customized_tuning/user_interface_customization.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.8.0/customized_tuning/user_interface_customization.mdx @@ -1,9 +1,9 @@ ---- -title: "UI Customization" -sidebar_label: "UI Customization" -sidebar_position: 4 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -Information incoming in a future release. Please contact Clearpath customer support at \ to discuss any related issue. +--- +title: "UI Customization" +sidebar_label: "UI Customization" +sidebar_position: 4 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +Information incoming in a future release. Please contact Clearpath customer support at \ to discuss any related issue. diff --git a/outdoornav_user_manual_versioned_docs/version-0.8.0/faq.mdx b/outdoornav_user_manual_versioned_docs/version-0.8.0/faq.mdx index c9e5650c..fc1003e5 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.8.0/faq.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.8.0/faq.mdx @@ -1,84 +1,84 @@ ---- -title: Frequently Asked Questions -sidebar_label: Frequently Asked Questions -sidebar_position: 10 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -## Autonomous Missions - -1. **How do I start, pause or stop a mission?** - - See [Mission Execution](web_user_interface/ui_autonomous_mode.mdx#mission-execution) for - information on how to start, pause or stop a mission. - -2. **When I start a mission the UGV does not move. What could be the - problem?** - - There could be one of several reasons for why this is happening: - - 1. Check that none of the onboard Motion-Stop actuators are - activated. - 2. Check that none of the wireless Motion-Stops are engaged. This - can be checked via the UI (a red Status Indicator means - Motion-Stop is engaged) or the onboard UGV lights (will flash - when Motion-Stop is engaged). - 3. If OutdoorNav is running on a Clearpath Robotics Warthog UGV - that is programmed with a Futaba controller, then ensure that - the controller is turned off. If it is on then it will be - sending "no motion" commands that will be overriding the - autonomy commands. - 4. Check the task settings for each Waypoint in the Mission. - A missing task setting for a Move PTZ task will block the - execution of the Mission it is in. - -3. **How do I delete a waypoint?** - - Make sure the **Edit Missions** toggle is enabled, then click the - **Waypoint Mode** button. Now you can click the Waypoint you wish to - delete. A drop down list will appear. Select **Delete**. - -4. **How do I add a Task to a Waypoint?** - - See [Add Task to Waypoint](web_user_interface/ui_autonomous_mode.mdx#add-task) for information on how - to add a Task to a Waypoint. - -5. **Why is the "Save Image" Task failing?** - - Check the Waypoints that have a **Save Image** task in the Waypoint panel. - If you see a red warning triangle beside the **Save Image** task it means - that the settings for this task were not set. Set them and rerun the - mission. - -6. **The navigation gets stuck on the "Compute Path" feedback. - What should I do?** - - Power cycle the UGV by powering off the base platform. Wait 10 - seconds, then turn the base power back on. Allow 1-2 minutes for the - software to start up and refresh the Web UI page. - -7. **The UGV position and/or heading are behaving erratically while the - UGV is stationary. What should I do?** - - Power cycle the UGV by powering off the base platform. Wait 10 - seconds, then turn the base power back on, wait 10 seconds, then - turn the computer power back on (labelled **PWR** on the port/right - side of mast). Allow 1-2 minutes for the software to startup and - refresh the Web UI page. - -## Autonomous Docking - -1. **When trying to dock, my UGV drives towards the dock but stops 2 - meters away and remains there. "Docking Failed" is displayed in - the UI feedback bar. How can I fix this?** - - It is likely that one of these 3 things occurred: - - 1. The Base Station was recently resurveyed, or - 2. The datum was recently changed, or - 3. The dock location was not set correctly. - - If any of these have occurred recently and you did not reset the - dock location from the Web UI, you will need to do so by following - the instructions in [Set Dock Location](getting_started/system_setup.mdx#set-dock-location). +--- +title: Frequently Asked Questions +sidebar_label: Frequently Asked Questions +sidebar_position: 10 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +## Autonomous Missions + +1. **How do I start, pause or stop a mission?** + + See [Mission Execution](web_user_interface/ui_autonomous_mode.mdx#mission-execution) for + information on how to start, pause or stop a mission. + +2. **When I start a mission the UGV does not move. What could be the + problem?** + + There could be one of several reasons for why this is happening: + + 1. Check that none of the onboard Motion-Stop actuators are + activated. + 2. Check that none of the wireless Motion-Stops are engaged. This + can be checked via the UI (a red Status Indicator means + Motion-Stop is engaged) or the onboard UGV lights (will flash + when Motion-Stop is engaged). + 3. If OutdoorNav is running on a Clearpath Robotics Warthog UGV + that is programmed with a Futaba controller, then ensure that + the controller is turned off. If it is on then it will be + sending "no motion" commands that will be overriding the + autonomy commands. + 4. Check the task settings for each Waypoint in the Mission. + A missing task setting for a Move PTZ task will block the + execution of the Mission it is in. + +3. **How do I delete a waypoint?** + + Make sure the **Edit Missions** toggle is enabled, then click the + **Waypoint Mode** button. Now you can click the Waypoint you wish to + delete. A drop down list will appear. Select **Delete**. + +4. **How do I add a Task to a Waypoint?** + + See [Add Task to Waypoint](web_user_interface/ui_autonomous_mode.mdx#add-task) for information on how + to add a Task to a Waypoint. + +5. **Why is the "Save Image" Task failing?** + + Check the Waypoints that have a **Save Image** task in the Waypoint panel. + If you see a red warning triangle beside the **Save Image** task it means + that the settings for this task were not set. Set them and rerun the + mission. + +6. **The navigation gets stuck on the "Compute Path" feedback. + What should I do?** + + Power cycle the UGV by powering off the base platform. Wait 10 + seconds, then turn the base power back on. Allow 1-2 minutes for the + software to start up and refresh the Web UI page. + +7. **The UGV position and/or heading are behaving erratically while the + UGV is stationary. What should I do?** + + Power cycle the UGV by powering off the base platform. Wait 10 + seconds, then turn the base power back on, wait 10 seconds, then + turn the computer power back on (labelled **PWR** on the port/right + side of mast). Allow 1-2 minutes for the software to startup and + refresh the Web UI page. + +## Autonomous Docking + +1. **When trying to dock, my UGV drives towards the dock but stops 2 + meters away and remains there. "Docking Failed" is displayed in + the UI feedback bar. How can I fix this?** + + It is likely that one of these 3 things occurred: + + 1. The Base Station was recently resurveyed, or + 2. The datum was recently changed, or + 3. The dock location was not set correctly. + + If any of these have occurred recently and you did not reset the + dock location from the Web UI, you will need to do so by following + the instructions in [Set Dock Location](getting_started/system_setup.mdx#set-dock-location). diff --git a/outdoornav_user_manual_versioned_docs/version-0.8.0/getting_started/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.8.0/getting_started/_category_.json index 8b4a486d..9a9747ef 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.8.0/getting_started/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.8.0/getting_started/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Getting Started", - "position": 5 -} +{ + "label": "Getting Started", + "position": 5 +} diff --git a/outdoornav_user_manual_versioned_docs/version-0.8.0/getting_started/first_time_checklist.mdx b/outdoornav_user_manual_versioned_docs/version-0.8.0/getting_started/first_time_checklist.mdx index 2713f004..24fbe18f 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.8.0/getting_started/first_time_checklist.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.8.0/getting_started/first_time_checklist.mdx @@ -1,116 +1,116 @@ ---- -title: First Time Use Checklist -sidebar_label: First Time Use Checklist -sidebar_position: 2 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -## Hardware Setup - -### ☐ Has the Base Station been set up? - -Ensure that the Base Station has been set up approximately 5 meters -away from any buildings and is currently powered on. See -[System Startup](system_setup.mdx) for further -instructions related to setting up the Base Station. - -### ☐ Is the UGV connected to the Base Station? - -Check to see that the UGV can be pinged from the Base Station network. -See [Connecting to Web UI](system_setup.mdx#connecting_to_web_ui) for further -details. - -## Software Setup - -### ☐ Is ROS running on the UGV? - -SSH into the UGV and run `rostopic list` to generate a list of the -rostopics that are currently available. The list is generally fairly -long so if you are looking for any specific topic please refer to -[API Endpoints](../api/api_endpoints/api_endpoints.mdx). You can also check the -ROS status through the OutdoorNAV UI by selecting the ROS icon next to -the POS/DIR icons. - -![](/img/outdoornav_images/rosNavBarIcon.png) - -### ☐ Is the OutdoorNAV software running? - -Check to see if the relevant dockers are running (ssh into the UGV and -run `docker ps` which should show 4 separate docker containers -running.) - -### ☐ Is the computer using the UI connected to the Base Station network? - -This can be confirmed by following the steps found in -[Connecting to Web UI](system_setup.mdx#connecting_to_web_ui). - -### ☐ Have you surveyed the Base Station? - -See [RTK Survey Positioning](../cpr_hardware.mdx#base-station-survey) for -information on how and when to survey the Base station. - -### ☐ Do you have a strong GPS signal? - -After surveying the Base Station check the upper right hand corner of -the UI to confirm that you have a strong GPS signal (the POS and DIR -icons should be green). If either of these icons are not green refer -to [Checking GPS RTK Fix](system_setup.mdx#checking-gpt-rtk-fix) for further -troubleshooting information. - -### ☐ Is the map loading correctly? - -Currently the map requires internet access to load. Refer to -[Loading Map Tiles](system_setup.mdx#loading_map_tiles) for more details -related to setting up the map. - -### ☐ Has the Datum been set? - -See [Set Datum](system_setup.mdx#set-datum) for information on how -to set the Datum variables. - -### ☐ If docking is enabled has the location been set? - -If the Clearpath Robotics autonomous docking package was purchased the -docking location will need to be set. See -[Set Dock Location](system_setup.mdx#set-dock-location) for information on -how to set the docking location. - -### ☐ Is the Navbar status icon functioning? - -To check if the Navbar icon is functioning, trigger the UGV's motion stop -and check to see if it has turned to a red icon. Clicking the icon -will bring up the status information as well as any recent messages -(see below). - -![](/img/outdoornav_images/ugvStatusMessages.png) - -## Using the UI - -The following items are general checks to ensure that the UI is working -properly. - -### ☐ Can the virtual joystick drive the UGV? - -See [Web UI Manual Mode](../web_user_interface/ui_manual_mode.mdx) for further details -related to this. - -### ☐ Can you create a new mission? - -Select the mission list and then click on `Add Mission` to create a -new mission. To add new waypoints for the mission refer to -[Mission Creation](../web_user_interface/ui_autonomous_mode.mdx#mission-creation). - -### ☐ After creating a new mission, can you execute the mission? - -To execute a mission refer to [Mission Execution](../web_user_interface/ui_autonomous_mode.mdx#mission-execution). - -### ☐ Are the cameras (if present) active in the view bar section when running the mission? - -For more information related to camera views see -[Camera Views](../web_user_interface/ui_overview.mdx#camera-views). - -### ☐ Can you select a camera and save an image after it loads on the main screen? - -See [Pan-Tilt-Zoom (PTZ) View ](../web_user_interface/ui_overview.mdx#ptz-view) for more details related +--- +title: First Time Use Checklist +sidebar_label: First Time Use Checklist +sidebar_position: 2 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +## Hardware Setup + +### ☐ Has the Base Station been set up? + +Ensure that the Base Station has been set up approximately 5 meters +away from any buildings and is currently powered on. See +[System Startup](system_setup.mdx) for further +instructions related to setting up the Base Station. + +### ☐ Is the UGV connected to the Base Station? + +Check to see that the UGV can be pinged from the Base Station network. +See [Connecting to Web UI](system_setup.mdx#connecting_to_web_ui) for further +details. + +## Software Setup + +### ☐ Is ROS running on the UGV? + +SSH into the UGV and run `rostopic list` to generate a list of the +rostopics that are currently available. The list is generally fairly +long so if you are looking for any specific topic please refer to +[API Endpoints](../api/api_endpoints/api_endpoints.mdx). You can also check the +ROS status through the OutdoorNAV UI by selecting the ROS icon next to +the POS/DIR icons. + +![](/img/outdoornav_images/rosNavBarIcon.png) + +### ☐ Is the OutdoorNAV software running? + +Check to see if the relevant dockers are running (ssh into the UGV and +run `docker ps` which should show 4 separate docker containers +running.) + +### ☐ Is the computer using the UI connected to the Base Station network? + +This can be confirmed by following the steps found in +[Connecting to Web UI](system_setup.mdx#connecting_to_web_ui). + +### ☐ Have you surveyed the Base Station? + +See [RTK Survey Positioning](../cpr_hardware.mdx#base-station-survey) for +information on how and when to survey the Base station. + +### ☐ Do you have a strong GPS signal? + +After surveying the Base Station check the upper right hand corner of +the UI to confirm that you have a strong GPS signal (the POS and DIR +icons should be green). If either of these icons are not green refer +to [Checking GPS RTK Fix](system_setup.mdx#checking-gpt-rtk-fix) for further +troubleshooting information. + +### ☐ Is the map loading correctly? + +Currently the map requires internet access to load. Refer to +[Loading Map Tiles](system_setup.mdx#loading_map_tiles) for more details +related to setting up the map. + +### ☐ Has the Datum been set? + +See [Set Datum](system_setup.mdx#set-datum) for information on how +to set the Datum variables. + +### ☐ If docking is enabled has the location been set? + +If the Clearpath Robotics autonomous docking package was purchased the +docking location will need to be set. See +[Set Dock Location](system_setup.mdx#set-dock-location) for information on +how to set the docking location. + +### ☐ Is the Navbar status icon functioning? + +To check if the Navbar icon is functioning, trigger the UGV's motion stop +and check to see if it has turned to a red icon. Clicking the icon +will bring up the status information as well as any recent messages +(see below). + +![](/img/outdoornav_images/ugvStatusMessages.png) + +## Using the UI + +The following items are general checks to ensure that the UI is working +properly. + +### ☐ Can the virtual joystick drive the UGV? + +See [Web UI Manual Mode](../web_user_interface/ui_manual_mode.mdx) for further details +related to this. + +### ☐ Can you create a new mission? + +Select the mission list and then click on `Add Mission` to create a +new mission. To add new waypoints for the mission refer to +[Mission Creation](../web_user_interface/ui_autonomous_mode.mdx#mission-creation). + +### ☐ After creating a new mission, can you execute the mission? + +To execute a mission refer to [Mission Execution](../web_user_interface/ui_autonomous_mode.mdx#mission-execution). + +### ☐ Are the cameras (if present) active in the view bar section when running the mission? + +For more information related to camera views see +[Camera Views](../web_user_interface/ui_overview.mdx#camera-views). + +### ☐ Can you select a camera and save an image after it loads on the main screen? + +See [Pan-Tilt-Zoom (PTZ) View ](../web_user_interface/ui_overview.mdx#ptz-view) for more details related to saving images. \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.8.0/getting_started/system_setup.mdx b/outdoornav_user_manual_versioned_docs/version-0.8.0/getting_started/system_setup.mdx index d5703b8e..02ab18d5 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.8.0/getting_started/system_setup.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.8.0/getting_started/system_setup.mdx @@ -1,307 +1,307 @@ ---- -title: System Setup -sidebar_label: System Setup -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -This section outlines how to set up your OutdoorNav system for some -preliminary testing with the OutdoorNav Software on a UGV. For details -on simulation, refer to [Simulation](../simulation.mdx). - -These instructions assume that the UGV is already powered ON. - - - -## Connecting to Web UI {#connecting_to_web_ui} - -The web server for the UI typically runs on a computer on the UGV. As -such, it is necessary for the networking setup on the UGV to be complete -and for all related hardware to be powered on. - -:::note - -In the case of Clearpath Robotics OutdoorNav Hardware, ensure that the -Base Station is powered ON. - -::: - -Follow the steps below to connect to the Web UI. - -1. Connect your computer to the same network as the UGV. - - :::note - - For Clearpath Robotics OutdoorNav Hardware, use the Base Station - network. Enter the network list and find the wireless network - related for your UGV. The SSID of the network is located in the - Robosmith manual that was shipped with your UGV. - - ::: - -2. Open an Internet browser (preferably Chrome) on your computer. - -3. Enter the UGV's IP address followed by a forward slash in the - search bar. A bookmark of this page can also be created for future - sessions. - - :::note - - For Clearpath Robotics OutdoorNav Hardware, this will be - **192.168.131.1/** for normal use cases and **192.168.131.100/** for - systems with a separate OutdoorNav computer. - - ::: - -The above steps will open the Web UI, which will allow the user to -operate the UGV in Manual Mode (teleoperation) or in Autonomous Mode -(missions). - -## Loading Map Tiles {#loading_map_tiles} - -The Web UI does not cache map tiles on the browser; therefore, the user -will need to ensure their computer has a connection to an Internet -source to load the map tiles. There are a several options to achieve -this: - -1. If the system includes a Base Station that is connected to the - Internet, you will be able to access the Internet and therefore map - tiles over the base station network without needing any further - updates. -2. Connect your phone via USB to your computer (or tablet) and enable - USB tethering on your phone to share the Internet from your phone. -3. Switch your computer (or tablet) to a network that is connected to - the Internet, zoom in/out of the map to load the tiles then switch - back to the original network. - -## Survey Base Station {#survey_base_station} - -If your system includes a Base Station, it must be surveyed using the -steps below to be able to to operate the UGV autonomously. - -1. Access the Menu → Settings → Map. -2. In the **Survey Base Station** section, click the **Start** button - begin the surveying process. - -During surveying, the Status Indicator will turn orange -and return to its green default state when surveying is -done . -Only then should the UGV be sent on autonomous missions. -The entire surveying will take approximately 5 minutes. A feedback bar -will also be displayed showing the current progress of the surveying. Do -not refresh the page or you will lose the feedback bar. - -:::warning - -For an accurate survey, do NOT move the Base Station during this -process. After the surveying has completed, the Base Station should not -be moved unless required. If you need to move the Base Station or it has -been moved accidentally, the surveying process needs to be run again. - -::: - -## Set Datum - -Before operating the UGV autonomously, the user will need to set the -datum, which is the reference point in the world coordinate frame. - -1. Access the Menu → Settings → Map. - -2. In the **Change Datum** section, enter the latitude and longitude of - a location close to the test site (within 10km). Decimal lat/lon are - expected. Use a minimum of 6 decimal places. - -3. Click **Set Datum** button to set the new datum. - - The user should see the blue dot (datum) and the blue arrow (UGV) - move to the test site. If the GPS status indicators are green, the - UGV should be at its correct position on the map as well as facing - in the correct direction. - -## Set Dock Location - -:::note - -If the Clearpath Robotics autonomous docking package has been purchased, -follow these instructions to set up the dock location. Otherwise, this -section can be skipped. - -::: - -:::warning - -Keep the area around the dock free of objects and people. There is no -obstacle detection between the pre-docking point and the dock; -similarly, there is no obstacle detection during the undocking -operation. - -::: - -
-
- -
Autocharge Dock
-
-
- -Before being able to dock the UGV autonomously, set up the dock -location. Follow these steps to position the UGV in its correct position -and orientation. - -1. Power ON the UGV and computer and wait for the system to finish - booting. For example, on the Clearpath Robotics Husky, booting is - complete when the COMM indicator turns green. - -2. Start by manually driving the UGV to the dock target and align it as - straight and centered as possible so that it begins charging. The - Wibotic receiver on the UGV should be centered longitudinally and - laterally with the circle on the Wibotic transmitter (TR-300). - -3. Measure a distance of 2 meters from the center panel of the dock - target (see figure below). Lock a measuring tape to a distance of 2 - meters and then lay it down beside the charge dock so that one end - is even with the center panel. - -
-
- -
Dock target location setup, using Husky as the reference UGV
-
-
- -4. Reduce the joystick scale on the Web UI to 20%. - -5. Reverse the UGV slowly so that its heading remains as perpendicular - as possible to the center panel. Reverse the UGV until the front of - the UGV (furthest front part) is 2 meters from the center panel (see - figure above for a visual description of what the final position - should look like). Centimeter precision is expected and the user - should aim to get this front piece within 1-2 centimeters of the - measured position (step 3). - -6. Let the UGV sit in this position for 2 minutes to acquire an RTK GPS - fix. The POS (position) and DIR (heading) GPS status indicators on - the UI should read as follows: . - - **If the GPS status indicators are yellow or red, the selected - location of the dock is NOT appropriate. Please change the dock - location such that the GPS antennas have a clearer visibility.** - -7. On the UI, access the drop down menu on the top-left of the page, - select **Settings** and click the **Add New Dock Location** button. The - dock location will be stored in 5 - 10 seconds as data is collected. - -If the Base Station has been moved (and therefore been resurveyed), or -if the dock has been moved to a new location, the user will need to -reset the location of the dock. This is done in the following manner: - -1. Repeat the previous set of instructions from step 1 to 6. - -2. While in **Edit Mode** select the dock on the UI. A drop down should appear - with the option to reset the dock location. Select that option. - -3. After approximately 5 - 10 seconds the dock location should be updated and the UI will - reflect the change accordingly. - -## Set the Magnetic Declination of the IMU - -Before using OutdoorNav Software, the `MAGNETIC_DECLINATION` variable -must be set. This parameter is in degrees and in ENU convention. Use the -online calculator on this website to find out the magnetic declination -at your location. - -https://www.magnetic-declination.com/countries.php - -From this website, navigate to your city and note the **decimal** value -given. Once the magnetic declination of your location is determined, -modify the `MAGNETIC_DECLINATION` environment variable in the -`/etc/ros/setup.bash` on the OutdoorNav Computer. Refer to -[Connecting to the OutdoorNav Computer](../navigation.mdx#connecting-to-outdoornav-computer) for -details on connecting to the OutdoorNav Computer. Then execute the -following command to open the required file: - -``` -sudo nano /etc/ros/setup.bash -``` - -Once the file has been opened, find the line that exports the -`MAGNETIC_DECLINATION` variable and modify its value. Once done, use -`ctrl+x` to close and save your changes. Next reboot the robot using -`sudo reboot`. commands: - -To make sure that your changes have been applied, echo the value of -`MAGNETIC_DECLINATION` and make sure it has the correct value. - -``` bash -echo $MAGNETIC_DECLINATION -``` - -## Checking GPS RTK Fix {#checking-gpt-rtk-fix} - -Each time the UGV has been powered up (or moved from a GPS-denied -environment to a GPS-available environment), let the UGV sit in this -position for 2 minutes to acquire an RTK GPS fix. The POS (position) and -DIR (heading) GPS status indicators on the UI should be green: . - -**If the GPS status indicators are yellow or red, the selected location -does not have an adequate GPS signal. Move the UGV such that the GPS -antennas have a clearer visibility.** - -If using Switft Navigation Duros and/or a Clearpath Robotics Base -Station, each of these will have a solid blue LED on all of them when -the RTK GPS fix is acquired. - -## Recording a Rosbag - -If you need to perform a quick rosbag recording from the UI you can do -so by navigating to the Settings dropdown in the hamburger menu and -select **Start rosbag recording**. This will record a rosbag of the -following topics (or all the topics in the namespace if followed by a -`/*`): - -- rosout_agg/* -- rosout -- twist_marker_server/* -- localization_helper/* -- localization_core/* -- navigation/* -- piksi_position/* -- piksi_heading/* - -To stop the recording navigate to the Settings drop down and select -**Stop rosbag recording**. This will save the rosbag with the date and -time as its file name in the onav_log/rosbag_data folder. - -## Subsequent Sections - -The following sections of this manual will outline the instructions for -different tasks that can be accomplished while operating the UGV. - -1. **Web User Interface:** - - Overview of the Web UI components as well as the available views - and icons/buttons associated with them. - - - Overview of the buttons required to operate the UGV in Manual - Mode (teleoperation). - - - Instructions to send the UGV on autonomous navigation missions, - including: - - > - Adding Waypoints to the map - > - Creating missions - > - Viewing and updating missions - > - Adding task to missions, such as **Move PTZ** camera, - > **Save Image**, **Dock/Undock** UGV, and **Wait**. - > - Start/Stop/Pause missions - - - Description of the docking procedures allowing the user to dock - and undock the UGV autonomously. Recovery instructions are also - described. -2. **Application Programming Interface:** Details on how to control the - UGV programmatically. -3. **Navigation** Details on the software used for autonomous - navigation. -4. **Simulation:** Details on how to simulate autonomous operation of - the UGV. -5. **FAQs:** A list of frequently asked questions. +--- +title: System Setup +sidebar_label: System Setup +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +This section outlines how to set up your OutdoorNav system for some +preliminary testing with the OutdoorNav Software on a UGV. For details +on simulation, refer to [Simulation](../simulation.mdx). + +These instructions assume that the UGV is already powered ON. + + + +## Connecting to Web UI {#connecting_to_web_ui} + +The web server for the UI typically runs on a computer on the UGV. As +such, it is necessary for the networking setup on the UGV to be complete +and for all related hardware to be powered on. + +:::note + +In the case of Clearpath Robotics OutdoorNav Hardware, ensure that the +Base Station is powered ON. + +::: + +Follow the steps below to connect to the Web UI. + +1. Connect your computer to the same network as the UGV. + + :::note + + For Clearpath Robotics OutdoorNav Hardware, use the Base Station + network. Enter the network list and find the wireless network + related for your UGV. The SSID of the network is located in the + Robosmith manual that was shipped with your UGV. + + ::: + +2. Open an Internet browser (preferably Chrome) on your computer. + +3. Enter the UGV's IP address followed by a forward slash in the + search bar. A bookmark of this page can also be created for future + sessions. + + :::note + + For Clearpath Robotics OutdoorNav Hardware, this will be + **192.168.131.1/** for normal use cases and **192.168.131.100/** for + systems with a separate OutdoorNav computer. + + ::: + +The above steps will open the Web UI, which will allow the user to +operate the UGV in Manual Mode (teleoperation) or in Autonomous Mode +(missions). + +## Loading Map Tiles {#loading_map_tiles} + +The Web UI does not cache map tiles on the browser; therefore, the user +will need to ensure their computer has a connection to an Internet +source to load the map tiles. There are a several options to achieve +this: + +1. If the system includes a Base Station that is connected to the + Internet, you will be able to access the Internet and therefore map + tiles over the base station network without needing any further + updates. +2. Connect your phone via USB to your computer (or tablet) and enable + USB tethering on your phone to share the Internet from your phone. +3. Switch your computer (or tablet) to a network that is connected to + the Internet, zoom in/out of the map to load the tiles then switch + back to the original network. + +## Survey Base Station {#survey_base_station} + +If your system includes a Base Station, it must be surveyed using the +steps below to be able to to operate the UGV autonomously. + +1. Access the Menu → Settings → Map. +2. In the **Survey Base Station** section, click the **Start** button + begin the surveying process. + +During surveying, the Status Indicator will turn orange +and return to its green default state when surveying is +done . +Only then should the UGV be sent on autonomous missions. +The entire surveying will take approximately 5 minutes. A feedback bar +will also be displayed showing the current progress of the surveying. Do +not refresh the page or you will lose the feedback bar. + +:::warning + +For an accurate survey, do NOT move the Base Station during this +process. After the surveying has completed, the Base Station should not +be moved unless required. If you need to move the Base Station or it has +been moved accidentally, the surveying process needs to be run again. + +::: + +## Set Datum + +Before operating the UGV autonomously, the user will need to set the +datum, which is the reference point in the world coordinate frame. + +1. Access the Menu → Settings → Map. + +2. In the **Change Datum** section, enter the latitude and longitude of + a location close to the test site (within 10km). Decimal lat/lon are + expected. Use a minimum of 6 decimal places. + +3. Click **Set Datum** button to set the new datum. + + The user should see the blue dot (datum) and the blue arrow (UGV) + move to the test site. If the GPS status indicators are green, the + UGV should be at its correct position on the map as well as facing + in the correct direction. + +## Set Dock Location + +:::note + +If the Clearpath Robotics autonomous docking package has been purchased, +follow these instructions to set up the dock location. Otherwise, this +section can be skipped. + +::: + +:::warning + +Keep the area around the dock free of objects and people. There is no +obstacle detection between the pre-docking point and the dock; +similarly, there is no obstacle detection during the undocking +operation. + +::: + +
+
+ +
Autocharge Dock
+
+
+ +Before being able to dock the UGV autonomously, set up the dock +location. Follow these steps to position the UGV in its correct position +and orientation. + +1. Power ON the UGV and computer and wait for the system to finish + booting. For example, on the Clearpath Robotics Husky, booting is + complete when the COMM indicator turns green. + +2. Start by manually driving the UGV to the dock target and align it as + straight and centered as possible so that it begins charging. The + Wibotic receiver on the UGV should be centered longitudinally and + laterally with the circle on the Wibotic transmitter (TR-300). + +3. Measure a distance of 2 meters from the center panel of the dock + target (see figure below). Lock a measuring tape to a distance of 2 + meters and then lay it down beside the charge dock so that one end + is even with the center panel. + +
+
+ +
Dock target location setup, using Husky as the reference UGV
+
+
+ +4. Reduce the joystick scale on the Web UI to 20%. + +5. Reverse the UGV slowly so that its heading remains as perpendicular + as possible to the center panel. Reverse the UGV until the front of + the UGV (furthest front part) is 2 meters from the center panel (see + figure above for a visual description of what the final position + should look like). Centimeter precision is expected and the user + should aim to get this front piece within 1-2 centimeters of the + measured position (step 3). + +6. Let the UGV sit in this position for 2 minutes to acquire an RTK GPS + fix. The POS (position) and DIR (heading) GPS status indicators on + the UI should read as follows: . + + **If the GPS status indicators are yellow or red, the selected + location of the dock is NOT appropriate. Please change the dock + location such that the GPS antennas have a clearer visibility.** + +7. On the UI, access the drop down menu on the top-left of the page, + select **Settings** and click the **Add New Dock Location** button. The + dock location will be stored in 5 - 10 seconds as data is collected. + +If the Base Station has been moved (and therefore been resurveyed), or +if the dock has been moved to a new location, the user will need to +reset the location of the dock. This is done in the following manner: + +1. Repeat the previous set of instructions from step 1 to 6. + +2. While in **Edit Mode** select the dock on the UI. A drop down should appear + with the option to reset the dock location. Select that option. + +3. After approximately 5 - 10 seconds the dock location should be updated and the UI will + reflect the change accordingly. + +## Set the Magnetic Declination of the IMU + +Before using OutdoorNav Software, the `MAGNETIC_DECLINATION` variable +must be set. This parameter is in degrees and in ENU convention. Use the +online calculator on this website to find out the magnetic declination +at your location. + +https://www.magnetic-declination.com/countries.php + +From this website, navigate to your city and note the **decimal** value +given. Once the magnetic declination of your location is determined, +modify the `MAGNETIC_DECLINATION` environment variable in the +`/etc/ros/setup.bash` on the OutdoorNav Computer. Refer to +[Connecting to the OutdoorNav Computer](../navigation.mdx#connecting-to-outdoornav-computer) for +details on connecting to the OutdoorNav Computer. Then execute the +following command to open the required file: + +``` +sudo nano /etc/ros/setup.bash +``` + +Once the file has been opened, find the line that exports the +`MAGNETIC_DECLINATION` variable and modify its value. Once done, use +`ctrl+x` to close and save your changes. Next reboot the robot using +`sudo reboot`. commands: + +To make sure that your changes have been applied, echo the value of +`MAGNETIC_DECLINATION` and make sure it has the correct value. + +``` bash +echo $MAGNETIC_DECLINATION +``` + +## Checking GPS RTK Fix {#checking-gpt-rtk-fix} + +Each time the UGV has been powered up (or moved from a GPS-denied +environment to a GPS-available environment), let the UGV sit in this +position for 2 minutes to acquire an RTK GPS fix. The POS (position) and +DIR (heading) GPS status indicators on the UI should be green: . + +**If the GPS status indicators are yellow or red, the selected location +does not have an adequate GPS signal. Move the UGV such that the GPS +antennas have a clearer visibility.** + +If using Switft Navigation Duros and/or a Clearpath Robotics Base +Station, each of these will have a solid blue LED on all of them when +the RTK GPS fix is acquired. + +## Recording a Rosbag + +If you need to perform a quick rosbag recording from the UI you can do +so by navigating to the Settings dropdown in the hamburger menu and +select **Start rosbag recording**. This will record a rosbag of the +following topics (or all the topics in the namespace if followed by a +`/*`): + +- rosout_agg/* +- rosout +- twist_marker_server/* +- localization_helper/* +- localization_core/* +- navigation/* +- piksi_position/* +- piksi_heading/* + +To stop the recording navigate to the Settings drop down and select +**Stop rosbag recording**. This will save the rosbag with the date and +time as its file name in the onav_log/rosbag_data folder. + +## Subsequent Sections + +The following sections of this manual will outline the instructions for +different tasks that can be accomplished while operating the UGV. + +1. **Web User Interface:** + - Overview of the Web UI components as well as the available views + and icons/buttons associated with them. + + - Overview of the buttons required to operate the UGV in Manual + Mode (teleoperation). + + - Instructions to send the UGV on autonomous navigation missions, + including: + + > - Adding Waypoints to the map + > - Creating missions + > - Viewing and updating missions + > - Adding task to missions, such as **Move PTZ** camera, + > **Save Image**, **Dock/Undock** UGV, and **Wait**. + > - Start/Stop/Pause missions + + - Description of the docking procedures allowing the user to dock + and undock the UGV autonomously. Recovery instructions are also + described. +2. **Application Programming Interface:** Details on how to control the + UGV programmatically. +3. **Navigation** Details on the software used for autonomous + navigation. +4. **Simulation:** Details on how to simulate autonomous operation of + the UGV. +5. **FAQs:** A list of frequently asked questions. diff --git a/outdoornav_user_manual_versioned_docs/version-0.8.0/index.mdx b/outdoornav_user_manual_versioned_docs/version-0.8.0/index.mdx index 09a63a7f..3d1655b9 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.8.0/index.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.8.0/index.mdx @@ -1,18 +1,18 @@ ---- -title: OutdoorNav User Manual -sidebar_label: OutdoorNav User Manual -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -
-
- -
-
- -OutdoorNav is an outdoor autonomy software platform designed for vehicle developers, -OEMs and robotics researchers. Compatible with Clearpath outdoor mobile platforms -and third-party vehicles, OutdoorNav provides reliable, industry-leading GPS-based +--- +title: OutdoorNav User Manual +sidebar_label: OutdoorNav User Manual +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +
+
+ +
+
+ +OutdoorNav is an outdoor autonomy software platform designed for vehicle developers, +OEMs and robotics researchers. Compatible with Clearpath outdoor mobile platforms +and third-party vehicles, OutdoorNav provides reliable, industry-leading GPS-based navigation for faster, more efficient autonomous vehicle development. \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.8.0/integration_requirements/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.8.0/integration_requirements/_category_.json index e9e0ff1d..adbe22cb 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.8.0/integration_requirements/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.8.0/integration_requirements/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Appendix A: UGV Integration Requirements", - "position": 12 +{ + "label": "Appendix A: UGV Integration Requirements", + "position": 12 } \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.8.0/integration_requirements/hardware_integration_requirements/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.8.0/integration_requirements/hardware_integration_requirements/_category_.json index 75ebaf1b..7950de6b 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.8.0/integration_requirements/hardware_integration_requirements/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.8.0/integration_requirements/hardware_integration_requirements/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Hardware Kit Installation", - "position": 2 -} +{ + "label": "Hardware Kit Installation", + "position": 2 +} diff --git a/outdoornav_user_manual_versioned_docs/version-0.8.0/integration_requirements/integration_overview.mdx b/outdoornav_user_manual_versioned_docs/version-0.8.0/integration_requirements/integration_overview.mdx index 00cf8a07..72d78ae3 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.8.0/integration_requirements/integration_overview.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.8.0/integration_requirements/integration_overview.mdx @@ -1,34 +1,34 @@ ---- -title: "Integration Overview" -sidebar_label: "Integration Overview" -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -The scope of work to transform a non-autonomous UGV into an autonomous -one will vary depending on the exact hardware capabilities and software -interfaces of the UGV. Development work will be required by Clearpath -Robotics, the end user, or a third party developer to bring the UGV into -compliance with the requirements listed in the table below. This may -involve implementing encoders and controllers to provide velocity -control of the UGV and implementing a CAN bus to ROS interface with -kinematic control. The table below provides a general outline of the -requirements; the detailed requirements are covered in the following -sections. - -_Navigation hardware and software general integration scope of work_ - -| \# | Task | Note | -|-----|----------------------------------|---------------------------------| -| 1 | **Convert UGV to drive by wire** | If required; can be a significant electromechanical integration | -| 1.1 | Implement actuated steering and throttle control if necessary | | -| 1.2 | Implement the encoder and controller hardware to provide wheel velocity control and odometry feedback | May require electronic power steering position feedback and controller | -| 2 | **Create a ROS interface** | | -| 2.1 | Commission an OutdoorNav computer running Ubuntu 20.04 and ROS Noetic | | -| 2.2 | Create a ROS interface to the UGV Often interfacing via CAN bus motor controllers and UGV controller | | -| 2.3 | Create a ROS driver including UGV kinematics with ROS-control | Accepts velocity input, commands motor controllers, provides other status feedback | -| 3 | **Install and configure OutdoorNav Hardware and Software** | | -| 3.1 | Install OutdoorNav computer and sensors on the UGV | Provide mechanical mounting, power and ethernet communication to UGV computer | -| 3.2 | Install, update and configure OutdoorNav Software on computer | Configure for sensor mounting locations, UGV kinematics and data topics. Can be done remotely with assistance from Clearpath Robotics Engineering. Approximately 1-2 days. | -| 3.3 | Tune the path planning and following controllers for new UGV | Can be done at a Clearpath Robotics facility. Can often be done at end user facility via remote login from Clearpath Robotics Engineering. Approximately 2-5 days. | +--- +title: "Integration Overview" +sidebar_label: "Integration Overview" +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +The scope of work to transform a non-autonomous UGV into an autonomous +one will vary depending on the exact hardware capabilities and software +interfaces of the UGV. Development work will be required by Clearpath +Robotics, the end user, or a third party developer to bring the UGV into +compliance with the requirements listed in the table below. This may +involve implementing encoders and controllers to provide velocity +control of the UGV and implementing a CAN bus to ROS interface with +kinematic control. The table below provides a general outline of the +requirements; the detailed requirements are covered in the following +sections. + +_Navigation hardware and software general integration scope of work_ + +| \# | Task | Note | +|-----|----------------------------------|---------------------------------| +| 1 | **Convert UGV to drive by wire** | If required; can be a significant electromechanical integration | +| 1.1 | Implement actuated steering and throttle control if necessary | | +| 1.2 | Implement the encoder and controller hardware to provide wheel velocity control and odometry feedback | May require electronic power steering position feedback and controller | +| 2 | **Create a ROS interface** | | +| 2.1 | Commission an OutdoorNav computer running Ubuntu 20.04 and ROS Noetic | | +| 2.2 | Create a ROS interface to the UGV Often interfacing via CAN bus motor controllers and UGV controller | | +| 2.3 | Create a ROS driver including UGV kinematics with ROS-control | Accepts velocity input, commands motor controllers, provides other status feedback | +| 3 | **Install and configure OutdoorNav Hardware and Software** | | +| 3.1 | Install OutdoorNav computer and sensors on the UGV | Provide mechanical mounting, power and ethernet communication to UGV computer | +| 3.2 | Install, update and configure OutdoorNav Software on computer | Configure for sensor mounting locations, UGV kinematics and data topics. Can be done remotely with assistance from Clearpath Robotics Engineering. Approximately 1-2 days. | +| 3.3 | Tune the path planning and following controllers for new UGV | Can be done at a Clearpath Robotics facility. Can often be done at end user facility via remote login from Clearpath Robotics Engineering. Approximately 2-5 days. | diff --git a/outdoornav_user_manual_versioned_docs/version-0.8.0/integration_requirements/interface_control_requirements.mdx b/outdoornav_user_manual_versioned_docs/version-0.8.0/integration_requirements/interface_control_requirements.mdx index 396f6dcd..c3d11a6f 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.8.0/integration_requirements/interface_control_requirements.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.8.0/integration_requirements/interface_control_requirements.mdx @@ -1,119 +1,119 @@ ---- -title: "ROS Interface Control Requirements" -sidebar_label: "ROS Interface Control Requirements" -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -## ROS Interface Control Checklist - -Prior to the installation and tuning of Clearpath Robotics (CPR) -OutdoorNav software on your platform (robot computer), CPR requires that the platform's -ROS interface satisfies the conditions listed below. Ensure that all of the requirements -are satisfied for a smooth installation and tuning process. - -![](/img/outdoornav_images/onav_interface_control.png) - -| | Requirement | -|------|------------------------------------------------------------------| -| | The platform computer is on the 192.168.131.xxx subnet (ideally in the range 1-4). | -| | The platform computer has an installation of [ROS 1 Noetic](http://wiki.ros.org/noetic/Installation). | -| | A URDF is supplied to CPR by the customer, in which the `base_link` coordinate frame is defined according to the [REP-105 base-link](https://www.ros.org/reps/rep-0105.html#base-link) ROS standard. | -| | The platform outputs [tf2_msgs/TFMessage](http://docs.ros.org/en/jade/api/tf2_msgs/html/msg/TFMessage.html) messages on the ROS standard `/tf` topic, at a minimum rate of **30 Hz**. | -| | The platform outputs a latched [tf2_msgs/TFMessage](http://docs.ros.org/en/jade/api/tf2_msgs/html/msg/TFMessage.html) message on the ROS standard `/tf_static` topic. This should include any fixed frames of ROS enabled devices/sensors that are available on your platform. | -| | The platform computer has a velocity controller that accepts, as input, [geometry_msgs/Twist](http://docs.ros.org/en/melodic/api/geometry_msgs/html/msg/Twist.html) messages on the ROS standard `/cmd_vel` topic, at a minimum rate of **10 Hz**. | -| | The platform computer has a velocity controller that tracks the input velocity and outputs the resulting platform velocity on the `/platform/cmd_vel` topic. | -| | The platform outputs [nav_msgs/Odometry](http://docs.ros.org/en/noetic/api/nav_msgs/html/msg/Odometry.html) messages on the `/platform/odom` topic, at a minimum rate of **10 Hz**. | -| | The `/platform/odom` topic publishes its data with the header.frame_id = `odom` and the child_frame_id = `base_link`, as per the [REP-105 odom](https://www.ros.org/reps/rep-0105.html#odom) ROS standard. **IMPORTANT**: The platform should however not broadcast the `odom` --> `base_link` transformation since the OutdoorNav software will do so. | -| | If available, the platform odometry output has less than ±5% linear position error. | -| | If available, the platform odometry output has less than ±5% orientation error. | -| | The platform outputs [std_msgs/Bool](http://docs.ros.org/en/noetic/api/std_msgs/html/msg/Bool.html) messages on the `/platform/emergency_stop` topic, at a minimum rate of **5 Hz**, indicating whether or not the platform is in a stopped state. | -| | Perform the validation tests described in [Interface Control Validation Test](#interface-control-validation) section and [record a rosbag](http://wiki.ros.org/rosbag/Commandline#rosbag_record) of all of your topics. The linear and angular velocities of the three trial runs recorded should be noted here:

Trial #1: Linear x: , Angular z:
Trial #2: Linear x: , Angular z:
Trial #3: Linear x: , Angular z:
| - -:::note - -Consult the [Platform API](../api/api_endpoints/platform_api.mdx) for -detailed information on the published/subscribed platform topics. - -::: - -If the platform is an Ackermann (or double Ackermann) drive vehicle: - -| | Requirement | -|------|------------------------------------------------------------------| -| | A conversion from [geometry_msgs/Twist](http://docs.ros.org/en/melodic/api/geometry_msgs/html/msg/Twist.html) messages to Ackermann inputs is provided. | - -:::note - -Ackermann drive platforms require both steering and throttle inputs to -drive the platform. It is required that our OutdoorNav output `/cmd_vel` -be converted into a message suitable to your platform. An example of an -Ackermann message type can be found -[here](http://wiki.ros.org/teb_local_planner/Tutorials/Planning%20for%20car-like%20robots). -This may satisfy your particular platform, and is only a starting point -on how to do this conversion. - -::: - -If the platform computer is running a version of ROS 2: - -| | Requirement | -|------|------------------------------------------------------------------| -| | The platform computer has a [ROS 2 to ROS 1 bridge](https://github.com/ros2/ros1_bridge) is installed to enable the exchange of messages between the two ROS versions. | - -Signature: Date: - -## Interface Control Validation Test {#interface-control-validation} - -The following test is designed to validate the platforms velocity -controller. It will be required that you command the robot to drive in -three circles, of varying radii, by applying the following command to -the platform. - -``` bash -rostopic pub -r 10 /cmd_vel geometry_msgs/Twist "linear: -x: ___ -y: 0.0 -z: 0.0 -angular: -x: 0.0 -y: 0.0 -z: ___" -``` - -The three trials that we request will vary between platforms depending -on the its maximum linear $(v_\{max\})$ and angular velocities -$(\omega_\{max\})$, minimum linear $(v_\{min\})$ and angular velocities -$(\omega_\{min\})$, as well as limitations due to the minimum allowable -turning radius $(r_\{min\})$. Of these three trials, we would like to see -data within three linear velocity bands, as seen in the table below, -resulting in three different turning radii. For the purpose of these -tests, the following formula can be used when determining the required -linear and angular velocities to apply: $r = v/\omega$. - -| Trial \# | Linear X Bands \[m/s\] | Example Linear X Band \[m/s\] | -| ---------|--------------------------------------------|-------------------------------------| -| 1 | $v_\{min\} \cdot [1.0, 1.5]$ | $[0.5, 0.75]$ | -| 2 | $((v_\{max\} - v_\{min\})/2) \cdot [0.9, 1.1]$ | $[2.025, 2.475]$ | -| 3 | $v_\{max\} \cdot [0.9, 1.0]$ | $[4.5, 5.0]$ | - -As an example, a platform with specs $v \in [0.5, 5.0]$, $r_\{min\} = 3$ -would have linear x velocity bands as listed in the table above. The -trials could then be as outlined in the table below. - -| Trial \# | Linear X \[m/s\] | Angular Z \[rad/s\] |Turn Radius \[m\] | -|-----------|--------------------|---------------------|------------------| -| 1 | 0.75 | 0.25 | 3 | -| 2 | 2.25 | 0.5 | 4.5 | -| 3 | 4.5 | 0.75 | 6 | - -Finally, the test data in the collected ROSbag should include the -following: - -1. `/tf` and `/tf_static` -2. `/platform/cmd_vel` -3. `/platform/odom` -4. `/cmd_vel` -5. `/platform/emergency_stop` (if available) -6. raw NavSatFix data from a GPS unit (if possible). +--- +title: "ROS Interface Control Requirements" +sidebar_label: "ROS Interface Control Requirements" +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +## ROS Interface Control Checklist + +Prior to the installation and tuning of Clearpath Robotics (CPR) +OutdoorNav software on your platform (robot computer), CPR requires that the platform's +ROS interface satisfies the conditions listed below. Ensure that all of the requirements +are satisfied for a smooth installation and tuning process. + +![](/img/outdoornav_images/onav_interface_control.png) + +| | Requirement | +|------|------------------------------------------------------------------| +| | The platform computer is on the 192.168.131.xxx subnet (ideally in the range 1-4). | +| | The platform computer has an installation of [ROS 1 Noetic](http://wiki.ros.org/noetic/Installation). | +| | A URDF is supplied to CPR by the customer, in which the `base_link` coordinate frame is defined according to the [REP-105 base-link](https://www.ros.org/reps/rep-0105.html#base-link) ROS standard. | +| | The platform outputs [tf2_msgs/TFMessage](http://docs.ros.org/en/jade/api/tf2_msgs/html/msg/TFMessage.html) messages on the ROS standard `/tf` topic, at a minimum rate of **30 Hz**. | +| | The platform outputs a latched [tf2_msgs/TFMessage](http://docs.ros.org/en/jade/api/tf2_msgs/html/msg/TFMessage.html) message on the ROS standard `/tf_static` topic. This should include any fixed frames of ROS enabled devices/sensors that are available on your platform. | +| | The platform computer has a velocity controller that accepts, as input, [geometry_msgs/Twist](http://docs.ros.org/en/melodic/api/geometry_msgs/html/msg/Twist.html) messages on the ROS standard `/cmd_vel` topic, at a minimum rate of **10 Hz**. | +| | The platform computer has a velocity controller that tracks the input velocity and outputs the resulting platform velocity on the `/platform/cmd_vel` topic. | +| | The platform outputs [nav_msgs/Odometry](http://docs.ros.org/en/noetic/api/nav_msgs/html/msg/Odometry.html) messages on the `/platform/odom` topic, at a minimum rate of **10 Hz**. | +| | The `/platform/odom` topic publishes its data with the header.frame_id = `odom` and the child_frame_id = `base_link`, as per the [REP-105 odom](https://www.ros.org/reps/rep-0105.html#odom) ROS standard. **IMPORTANT**: The platform should however not broadcast the `odom` --> `base_link` transformation since the OutdoorNav software will do so. | +| | If available, the platform odometry output has less than ±5% linear position error. | +| | If available, the platform odometry output has less than ±5% orientation error. | +| | The platform outputs [std_msgs/Bool](http://docs.ros.org/en/noetic/api/std_msgs/html/msg/Bool.html) messages on the `/platform/emergency_stop` topic, at a minimum rate of **5 Hz**, indicating whether or not the platform is in a stopped state. | +| | Perform the validation tests described in [Interface Control Validation Test](#interface-control-validation) section and [record a rosbag](http://wiki.ros.org/rosbag/Commandline#rosbag_record) of all of your topics. The linear and angular velocities of the three trial runs recorded should be noted here:

Trial #1: Linear x: , Angular z:
Trial #2: Linear x: , Angular z:
Trial #3: Linear x: , Angular z:
| + +:::note + +Consult the [Platform API](../api/api_endpoints/platform_api.mdx) for +detailed information on the published/subscribed platform topics. + +::: + +If the platform is an Ackermann (or double Ackermann) drive vehicle: + +| | Requirement | +|------|------------------------------------------------------------------| +| | A conversion from [geometry_msgs/Twist](http://docs.ros.org/en/melodic/api/geometry_msgs/html/msg/Twist.html) messages to Ackermann inputs is provided. | + +:::note + +Ackermann drive platforms require both steering and throttle inputs to +drive the platform. It is required that our OutdoorNav output `/cmd_vel` +be converted into a message suitable to your platform. An example of an +Ackermann message type can be found +[here](http://wiki.ros.org/teb_local_planner/Tutorials/Planning%20for%20car-like%20robots). +This may satisfy your particular platform, and is only a starting point +on how to do this conversion. + +::: + +If the platform computer is running a version of ROS 2: + +| | Requirement | +|------|------------------------------------------------------------------| +| | The platform computer has a [ROS 2 to ROS 1 bridge](https://github.com/ros2/ros1_bridge) is installed to enable the exchange of messages between the two ROS versions. | + +Signature: Date: + +## Interface Control Validation Test {#interface-control-validation} + +The following test is designed to validate the platforms velocity +controller. It will be required that you command the robot to drive in +three circles, of varying radii, by applying the following command to +the platform. + +``` bash +rostopic pub -r 10 /cmd_vel geometry_msgs/Twist "linear: +x: ___ +y: 0.0 +z: 0.0 +angular: +x: 0.0 +y: 0.0 +z: ___" +``` + +The three trials that we request will vary between platforms depending +on the its maximum linear $(v_\{max\})$ and angular velocities +$(\omega_\{max\})$, minimum linear $(v_\{min\})$ and angular velocities +$(\omega_\{min\})$, as well as limitations due to the minimum allowable +turning radius $(r_\{min\})$. Of these three trials, we would like to see +data within three linear velocity bands, as seen in the table below, +resulting in three different turning radii. For the purpose of these +tests, the following formula can be used when determining the required +linear and angular velocities to apply: $r = v/\omega$. + +| Trial \# | Linear X Bands \[m/s\] | Example Linear X Band \[m/s\] | +| ---------|--------------------------------------------|-------------------------------------| +| 1 | $v_\{min\} \cdot [1.0, 1.5]$ | $[0.5, 0.75]$ | +| 2 | $((v_\{max\} - v_\{min\})/2) \cdot [0.9, 1.1]$ | $[2.025, 2.475]$ | +| 3 | $v_\{max\} \cdot [0.9, 1.0]$ | $[4.5, 5.0]$ | + +As an example, a platform with specs $v \in [0.5, 5.0]$, $r_\{min\} = 3$ +would have linear x velocity bands as listed in the table above. The +trials could then be as outlined in the table below. + +| Trial \# | Linear X \[m/s\] | Angular Z \[rad/s\] |Turn Radius \[m\] | +|-----------|--------------------|---------------------|------------------| +| 1 | 0.75 | 0.25 | 3 | +| 2 | 2.25 | 0.5 | 4.5 | +| 3 | 4.5 | 0.75 | 6 | + +Finally, the test data in the collected ROSbag should include the +following: + +1. `/tf` and `/tf_static` +2. `/platform/cmd_vel` +3. `/platform/odom` +4. `/cmd_vel` +5. `/platform/emergency_stop` (if available) +6. raw NavSatFix data from a GPS unit (if possible). diff --git a/outdoornav_user_manual_versioned_docs/version-0.8.0/integration_requirements/software_integration_instructions.mdx b/outdoornav_user_manual_versioned_docs/version-0.8.0/integration_requirements/software_integration_instructions.mdx index 186361f3..0154d4b9 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.8.0/integration_requirements/software_integration_instructions.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.8.0/integration_requirements/software_integration_instructions.mdx @@ -1,145 +1,145 @@ ---- -title: "Software Integration Instructions" -sidebar_label: "Software Integration Instructions" -sidebar_position: 4 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -import versions from "@site/static/versions.js" - -Prior to installing the OutdoorNav software, ensure that you have completed the relevant [Hardware Kit Checklist](hardware_integration_requirements/hardware_integration_requirements.mdx). If installing on a secondary/backpack/Starter Kit computer, ensure to have also completed the: -- [Interface Control Checklist](interface_control_requirements.mdx) - -All the following instructions, unless otherwise specified, are to be run on the OutdoorNav computer. - -### Clone OutdoorNav Repository {#clone-install-repo} - -The following repository is required to run the instructions in the subsequent sections. - - -{` -cd ~/ -git clone -b ${versions.outdoornav} https://gitlab.clearpathrobotics.com/cpr-outdoornav/cpr_outdoornav_launch.git -`} - - -For remote installations, please contact Clearpath Robotics customer support in order to obtain the relevant information required to proceed. - -### Install Docker {#install-docker} - -``` bash -cd ~/cpr_outdoornav_launch/scripts/ -./install_docker.sh -``` - -### Configure OutdoorNav Sensors {#configure-outdoornav-sensors} - -Prior to configuring the sensors, ensure that you have measured the position (XYZ) and orientation (RPY) of each of your sensors with respect to the `base_link`. See your results from the [Integration Requirements](hardware_integration_requirements/hardware_integration_requirements.mdx). - -``` bash -cd ~/cpr_outdoornav_launch/scripts/ -./configure_outdoornav.sh -``` - -### Finalize Setup {#final-setup} - -The script in the sections below will reboot the computer it is run on. - -##### UGV Computer - -For installations of the OutdoorNav software on the UGV computer (not a secondary or Starter Kit computer), run the following: - -``` bash -cd ~/cpr_outdoornav_launch/scripts -sudo ./setup_computers.sh -``` -##### Secondary or Starter Kit Computer - -Prior to running the script on the secondary or Starter Kit computer, ensure that you have the user and IP of the UGV computer that the secondary/starter kit computer is connected to. Run the following: - -``` bash -cd ~/cpr_outdoornav_launch/scripts -sudo ./setup_computers.sh -b -``` - -### Install OutdoorNav Software {#install-outdoornav} - -``` bash -cd ~/cpr_outdoornav_launch/scripts/ -docker compose --profile outdoornav pull -``` - -:::note -If you are installing the OutdoorNav software on a secondary or Starter Kit computer, you must also complete the [UGV Computer Checklist](platform_computer_checklist.mdx) -::: - -### Configure UGV Footprint {#configure-platform-footprint} - -If the UGV has sensors and/or parts that protrude outside of the UGV body, then a few environment variables will need to be modified to adjust the footprint of the robot. Things that could be extending past the footprint could include but are not limited to: - -- GPS antennae, -- Charging receivers, -- Arms, -- etc... - -Change the environment variables from the Table below, in the following file: - -``` -cd ~/cpr_outdoornav_launch -nano outdoornav_tuning.env -``` - -| Environment Variable | Description | Default | -|-----------------------------|----------------------------------------|---------| -| **FOOTPRINT_OFFSET_POS_X** | Distance from base_link to the furthest edge of any part/sensor at the front of the robot | 0.5 | -| **FOOTPRINT_OFFSET_NEG_X** | Distance from base_link to the furthest edge of any part/sensor at the rear of the robot | -0.5 | -| **FOOTPRINT_OFFSET_POS_Y** | Distance from base_link to the furthest edge of any part/sensor at the left of the robot | 0.35 | -| **FOOTPRINT_OFFSET_NEG_Y** | Distance from base_link to the furthest edge of any part/sensor at the right of the robot | -0.35 | - - - -### Start OutdoorNav - -``` bash -cd ~/cpr_outdoornav_launch/ # directory with docker-compose.yaml -docker compose --profile outdoornav up -d -``` - -### Test OutdoorNav Installation - -1. Ping all of the network sensors to ensure proper communication with the UGV or secondary computer. - -2. Check the following topics and make sure there is data being published to them: - -``` bash -rostopic echo -n 1 /platform/odom -rostopic echo -n 1 /platform/cmd_vel - -# IMU 1 (if included) -rostopic echo -n 1 /sensors/imu/0/data - -rostopic echo -n 1 /localization/odom - -# Velodyne 1 (if included) -rostopic echo /sensors/lidar/0/pointcloud - -# Velodyne 2 (if included) -rostopic echo -n 1 /sensors/lidar/1/pointcloud - -# Laser Scan Front (if included) -rostopic echo -n 1 /sensors/lidar/0/scan - -# Laser Scan Rear (if included) -rostopic echo -n 1 /sensors/lidar/1/scan - -# Realsense D435 Front (if included) -rostopic echo -n 1 /sensors/stereo/0/pointcloud -rostopic echo -n 1 /sensors/stereo/0/depth/image_rect_raw - -# Realsense D435 Rear (if included) -rostopic echo -n 1 /sensors/stereo/1/pointcloud -rostopic echo -n 1 /sensors/stereo/1/depth/image_rect_raw -``` - -Once installation is complete, you can proceed to [Getting Started](../getting_started/system_setup.mdx) to start using the software. +--- +title: "Software Integration Instructions" +sidebar_label: "Software Integration Instructions" +sidebar_position: 4 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +import versions from "@site/static/versions.js" + +Prior to installing the OutdoorNav software, ensure that you have completed the relevant [Hardware Kit Checklist](hardware_integration_requirements/hardware_integration_requirements.mdx). If installing on a secondary/backpack/Starter Kit computer, ensure to have also completed the: +- [Interface Control Checklist](interface_control_requirements.mdx) + +All the following instructions, unless otherwise specified, are to be run on the OutdoorNav computer. + +### Clone OutdoorNav Repository {#clone-install-repo} + +The following repository is required to run the instructions in the subsequent sections. + + +{` +cd ~/ +git clone -b ${versions.outdoornav} https://gitlab.clearpathrobotics.com/cpr-outdoornav/cpr_outdoornav_launch.git +`} + + +For remote installations, please contact Clearpath Robotics customer support in order to obtain the relevant information required to proceed. + +### Install Docker {#install-docker} + +``` bash +cd ~/cpr_outdoornav_launch/scripts/ +./install_docker.sh +``` + +### Configure OutdoorNav Sensors {#configure-outdoornav-sensors} + +Prior to configuring the sensors, ensure that you have measured the position (XYZ) and orientation (RPY) of each of your sensors with respect to the `base_link`. See your results from the [Integration Requirements](hardware_integration_requirements/hardware_integration_requirements.mdx). + +``` bash +cd ~/cpr_outdoornav_launch/scripts/ +./configure_outdoornav.sh +``` + +### Finalize Setup {#final-setup} + +The script in the sections below will reboot the computer it is run on. + +##### UGV Computer + +For installations of the OutdoorNav software on the UGV computer (not a secondary or Starter Kit computer), run the following: + +``` bash +cd ~/cpr_outdoornav_launch/scripts +sudo ./setup_computers.sh +``` +##### Secondary or Starter Kit Computer + +Prior to running the script on the secondary or Starter Kit computer, ensure that you have the user and IP of the UGV computer that the secondary/starter kit computer is connected to. Run the following: + +``` bash +cd ~/cpr_outdoornav_launch/scripts +sudo ./setup_computers.sh -b +``` + +### Install OutdoorNav Software {#install-outdoornav} + +``` bash +cd ~/cpr_outdoornav_launch/scripts/ +docker compose --profile outdoornav pull +``` + +:::note +If you are installing the OutdoorNav software on a secondary or Starter Kit computer, you must also complete the [UGV Computer Checklist](platform_computer_checklist.mdx) +::: + +### Configure UGV Footprint {#configure-platform-footprint} + +If the UGV has sensors and/or parts that protrude outside of the UGV body, then a few environment variables will need to be modified to adjust the footprint of the robot. Things that could be extending past the footprint could include but are not limited to: + +- GPS antennae, +- Charging receivers, +- Arms, +- etc... + +Change the environment variables from the Table below, in the following file: + +``` +cd ~/cpr_outdoornav_launch +nano outdoornav_tuning.env +``` + +| Environment Variable | Description | Default | +|-----------------------------|----------------------------------------|---------| +| **FOOTPRINT_OFFSET_POS_X** | Distance from base_link to the furthest edge of any part/sensor at the front of the robot | 0.5 | +| **FOOTPRINT_OFFSET_NEG_X** | Distance from base_link to the furthest edge of any part/sensor at the rear of the robot | -0.5 | +| **FOOTPRINT_OFFSET_POS_Y** | Distance from base_link to the furthest edge of any part/sensor at the left of the robot | 0.35 | +| **FOOTPRINT_OFFSET_NEG_Y** | Distance from base_link to the furthest edge of any part/sensor at the right of the robot | -0.35 | + + + +### Start OutdoorNav + +``` bash +cd ~/cpr_outdoornav_launch/ # directory with docker-compose.yaml +docker compose --profile outdoornav up -d +``` + +### Test OutdoorNav Installation + +1. Ping all of the network sensors to ensure proper communication with the UGV or secondary computer. + +2. Check the following topics and make sure there is data being published to them: + +``` bash +rostopic echo -n 1 /platform/odom +rostopic echo -n 1 /platform/cmd_vel + +# IMU 1 (if included) +rostopic echo -n 1 /sensors/imu/0/data + +rostopic echo -n 1 /localization/odom + +# Velodyne 1 (if included) +rostopic echo /sensors/lidar/0/pointcloud + +# Velodyne 2 (if included) +rostopic echo -n 1 /sensors/lidar/1/pointcloud + +# Laser Scan Front (if included) +rostopic echo -n 1 /sensors/lidar/0/scan + +# Laser Scan Rear (if included) +rostopic echo -n 1 /sensors/lidar/1/scan + +# Realsense D435 Front (if included) +rostopic echo -n 1 /sensors/stereo/0/pointcloud +rostopic echo -n 1 /sensors/stereo/0/depth/image_rect_raw + +# Realsense D435 Rear (if included) +rostopic echo -n 1 /sensors/stereo/1/pointcloud +rostopic echo -n 1 /sensors/stereo/1/depth/image_rect_raw +``` + +Once installation is complete, you can proceed to [Getting Started](../getting_started/system_setup.mdx) to start using the software. diff --git a/outdoornav_user_manual_versioned_docs/version-0.8.0/navigation.mdx b/outdoornav_user_manual_versioned_docs/version-0.8.0/navigation.mdx index 55abd146..3653607b 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.8.0/navigation.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.8.0/navigation.mdx @@ -1,348 +1,348 @@ ---- -title: Navigation -sidebar_label: Navigation -sidebar_position: 8 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -## Features - -The OutdoorNav Software contains a set of features that can be enabled -or disabled according to your required application requirements. These -features can be enabled or disabled through the use of environment -variables, which should be added to the -`/home/administrator/cpr_outdoornav_launch/outdoornav_tuning.env`. The -following table describes the available features, their default state -and any additional parameters that we expose that may also be included -to tune the feature. - -| Feature | Description | -|-----------------------------|----------------------------------------| -| **Data Collection** | The data collection feature enabled the user to record rosbag data of the sensors, localization, and navigation components of OutdoorNav. If `true`, rosbags will be saved and timestamed in the `/home/administrator/onav_log/rosbag_data/` directory. If `false`, no rosbag will be recorded.

Environment Variable: `ENABLE_BAGGING` (Default: `false`). | -| **Collision Avoidance** | Collision avoidance is the UGV's ability to detect obstacles and stop/maneuver around the obstacle without any collisions. If `true`, the UGV will detect obstacles and if `false` no obstacles will be detected. Setting to `false` is not recommended and may cause harm to property or to individuals.

Environment Variable: `ENABLE_COLLISION_AVOIDANCE` (Default: `true`). | -| **Obstacle Avoidance Mode** | When collision avoidance is enabled, the UGV will behave in one of two ways according to the obstacle avoidance mode. If set to `true`, the UGV will perform obstacle avoidance maneuvers, replanning around detected obstacles. If set to `false`, the UGV will slow down to a stop in front of detected obstacles and wait for the obstacle to clear before proceeding.

Environment Variable: `OBSTACLE_AVOIDANCE_MODE` (Default: `true`). | -| **Continuous Planning** | The continuous planning feature allows the UGV to continuously monitor whether an obstacle is on the UGV's path and replan around said obstacle smoothly without the need for stopping in front of the obstacle. If disabled, the UGV will come to a full stop in front of an obstacle and then replan around said obstacle.

Environment Variable: `ENABLE_CONTINUOUS_PLANNER` (Default: `true`). | -| **Path Smoothing** | The path smoothing feature according to a specified turning radius. The default behaviour will generate point-to-point straight line paths.

Environment Variable: `ENABLE_PATH_SMOOTHER` (Default: `false`). | -| **Path Shifting** | The path shifting feature is designed to reduce the oscillation around the initial reference path if the UGV begins to deviate of said reference path. It is particularly useful for the Clearpath Robotics Warthog platform whose tires are incredibly pliable and results in unmodelled effects on the navigation.

Environment Variable: `ENABLE_PATH_SHIFTING` (Default: `false`). | -| **Constrained Replanning** | The constrained replanning feature restricts the area in which replanning paths can be generated. For example, if a `REPLANNING_CONSTRAINT` of 3.0 m is used, the UGV will not be allowed to replan a path that drives it more than 3.0 m from the initial path. This replanning area can be shown on the map over the connecting lines between waypoints. See [Constrained Replanning](web_user_interface/ui_autonomous_mode.mdx#constrained_path) for further details.

Environment Variable: `ENABLE_CONSTRAINED_REPLANNING` (Default: `false`).

Use the `REPLANNING_CONSTRAINT` environment variable to modify the replanning constraint (in meters). | -| **Stop Distance** | The stop distance feature allows the UGV to stop a predefined distance away from obstacles. This is useful if a UGV cannot drive in reverse and needs the required room in front of it to replan around an obstacle.

Environment Variable: `ENABLE_STOP_DISTANCE` (Default: `false`)

Use the `STOP_DISTANCE` environment variable to modify the stop distance (in meters). Note that if the stop distance is larger than 4.5 meters for the Clearpath Robotics Jackal and Husky UGVs, or 10.0 meters for the Clearpath Robotics Warthog UGV, the computational load will increase and may cause a decrease in performance in the navigation. | -| **Delay Compensation** | The delay compensation feature is able to compensate for mechanical delay on UGVs where either the accelerator introduces delay into the linear velocity or the steering introduces delay in the angular velocity. This feature is not required for Clearpath Robotics UGVs as negligible delay is present in our system.

Environment Variable: `ENABLE_DELAY_COMPENSATION` (Default: `false`)

Use the `CONTROLLER_DELAY` environment variable to modify the amount of delay to be compensated (in milliseconds). | - -## Advanced Configuration - -The following section provides a list of environment variables that can -be modified in order to tune both the sensor systems as well as tuning -the navigation software. All of the environment variables listed below -can be modified in the -`/home/administrator/cpr_outdoornav_launch/outdoornav_tuning.env` file. - -### Sensor Tuning - -The following table lists the sensors that are useable with the -OutdoorNav software. These sensor drivers can be turned on/off using -these environment variables, however, the sensor will always remain -powered on. - -| Environment Variable | Description | Data Type -|--------------------------------|-------------------------------------------|-------------- -| **SWIFTNAV_ENABLE_DRIVER** | Enable/disable the Swiftnav Piksi/Duro ROS driver, if integrated. | bool | -| **UBLOX_ENABLE_DRIVER** | Enable/disable the UBlox ROS driver, if integrated. | bool | -| **MICROSTRAIN_ENABLE_DRIVER** | Enable/disable the Microstrain GX5/CV5 ROS driver, if integrated. | bool | -| **XSENS_ENABLE_DRIVER** | Enable/disable the XSens MTI ROS driver, if integrated. | bool | -| **VLP_ENABLE_DRIVER** | Enable/disable the Velodyne ROS driver, if integrated (front unit if more than one). | bool | -| **REAR_VLP_ENABLE_DRIVER** | Enable/disable the Velodyne ROS driver, if integrated (rear unit if more than one). | bool | -| **LMS1XX_ENABLE_DRIVER** | Enable/disbale the Sick LMS1XX ROS driver, if integrated (front unit if more than one). | bool | -| **REAR_LMS1XX_ENABLE_DRIVER** | Enable/disbale the Sick LMS1XX ROS driver, if integrated (rear unit if more than one). | bool | -| **HOKUYO_ENABLE_DRIVER** | Enable/disbale the Hokuyo ROS driver, if integrated (front unit if more than one). | bool | -| **REAR_HOKUYO_ENABLE_DRIVER** | Enable/disbale the Hokuyo ROS driver, if integrated (rear unit if more than one). | bool | -| **D435_ENABLE_DRIVER** | Enable/disable the Realsense ROS driver, if integrated (front unit if more than one). | bool | -| **REAR_D435_ENABLE_DRIVER** | Enable/disable the Realsense ROS driver, if integrated (rear unit if more than one). | bool | - - -### Sensor Tuning (Advanced) - -The following list of environment variables can be used to filter the -sensor data in order to modify/improve the sensory input to the -OutdoorNav autonomy. It is recommended that you first consult the -following links before attempting to modify these parameters. - -- [PCL Filters](http://wiki.ros.org/pcl_ros/Tutorials/filters) -- [PointCloud to LaserScan Filter](http://wiki.ros.org/pointcloud_to_laserscan) -- [DepthImage to LaserScan Filter](http://wiki.ros.org/depthimage_to_laserscan) - -#### Voxel Grid Filter - -| Environment Variable | Description | Data Type (Default) | -|----------------------|------------------------------------------|---------------------| -| **\_ENABLE_FILTER_VOXEL** | Enable/disable the PCL voxel filter for the sensor of type \.

type = \{VLP, D435, REAR_VLP, REAR_D435\} | bool
(false) | -| **PCL_FIL_FILTER_VOXEL_LEAF_SIZE** | The size of a leaf (on x,y,z), in meters, used for downsampling. Range: 0.0 to 1.0. | double (0.01) | - -#### Cropbox Filter - -| Environment Variable | Description | Data Type (Default) | -|----------------------|------------------------------------------|---------------------| -| **\_ENABLE_FILTER_CROPBOX** | Enable/disable the PCL cropbox filter for the sensor of type \.

type = \{VLP, D435, REAR_VLP, REAR_D435\} | bool
(false) | -| **PCL_FILTER_CROPBOX_MIN_X** | The lower bound, in meters, on the x-axis within which to reject points from the pointcloud. Range: -1000.0 to 1000.0. | double
(0.01) | -| **PCL_FILTER_CROPBOX_MAX_X** | The upper bound, in meters, on the x-axis within which to reject points from the pointcloud. Range: -1000.0 to 1000.0. | double
(2.0) | -| **PCL_FILTER_CROPBOX_MIN_Y** | The lower bound, in meters, on the y-axis within which to reject points from the pointcloud. Range: -1000.0 to 1000.0. | double
(-10.0) | -| **PCL_FILTER_CROPBOX_MAX_Y** | The upper bound, in meters, on the y-axis within which to reject points from the pointcloud. Range: -1000.0 to 1000.0. | double
(10.0) | -| **PCL_FILTER_CROPBOX_MIN_Z** | The lower bound, in meters, on the z-axis within which to reject points from the pointcloud. Range: -1000.0 to 1000.0. | double
(-0.5) | -| **PCL_FILTER_CROPBOX_MAX_Z** | The upper bound, in meters, on the z-axis within which to reject points from the pointcloud. Range: -1000.0 to 1000.0. | double
(10.0) | - -#### Radius Outlier Filter - -| Environment Variable | Description | Data Type (Default) | -|----------------------|------------------------------------------|---------------------| -| **\_ENABLE_FILTER_RADIUS_OUTLIER** | Enable/disable the PCL radius outlier filter for the sensor of type \.

type = \{VLP, D435, REAR_VLP, REAR_D435\} | bool
(false) | -| **PCL_FILTER_ROR_RADIUS_SEARCH** | The number of points within this distance, in meters, from the query point will need to be equal or greater than PCL_FILTER_ROR_MIN_NEIGHBORS in order to be classified as an inlier point (i.e. will not be filtered). | double
(0.05) | -| **PCL_FILTER_ROR_MIN_NEIGHBORS** | The number of points within PCL_FILTER_ROR_RADIUS_SEARCH from the query point will need to be equal or greater than this number in order to be classified as an inlier point (i.e. will not be filtered). | int
(10) | - -#### Statistical Outlier Filter - -| Environment Variable | Description | Data Type (Default) | -|----------------------|------------------------------------------|---------------------| -| **\_ENABLE_FILTER_STATISTICAL_OUTLIER** | Enable/disable the PCL statistical outlier filter for the sensor of type \.

type = \{VLP, D435, REAR_VLP, REAR_D435\} | bool
(false) | -| **PCL_FILTER_SOR_MEAN_K** | The number of points (k) to use for mean distance estimation Range: 2 to 100. | double
(5.0) | -| **PCL_FILTER_SOR_STD_DEV** | The standard deviation multiplier threshold. All points outside the mean +- sigma * std_mul will be considered outliers. Range: 0.0 to 5.0. | double
(0.3) | - -#### PointCloud to LaserScan Filter - -| Environment Variable | Description | Data Type (Default) | -|----------------------|------------------------------------------|---------------------| -| **\_ENABLE_POINTCLOUD_TO_LASERSCAN** | Enable/disable the pointcloud to laserscan outlier filter for the sensor of type \.

type = \{VLP, D435, REAR_VLP, REAR_D435\} | bool
(false) | -| **PCL_TO_SCAN_MIN_HEIGHT** | The minimum height to sample in the point cloud, in meters. | double
(0.2) | -| **PCL_TO_SCAN_MAX_HEIGHT** | The maximum height to sample in the point cloud, in meters. | double
(1.2) | -| **PCL_TO_SCAN_MIN_ANGLE** | The minimum scan angle, in radians. | double
(3.14) | -| **PCL_TO_SCAN_MAX_ANGLE** | The maximum scan angle, in radians. | double
(3.14) | -| **PCL_TO_SCAN_ANGLE_INCREMENT** | Resolution of laser scan, in radians, per ray. | double
(0.00218) | -| **PCL_TO_SCAN_TIME** | The scan rate in seconds. | double
(0.3333) | -| **PCL_TO_SCAN_MIN_RANGE** | The minimum ranges to return, in meters. | double
(0.3) | -| **PCL_TO_SCAN_MAX_RANGE** | The maximum ranges to return, in meters. | double
(100.0) | - - -#### DepthImage to LaserScan Filter - -| Environment Variable | Description | Data Type (Default) | -|----------------------|------------------------------------------|---------------------| -| **\_ENABLE_DEPTH_TO_LASERSCAN** | Enable/disable the depth image to laserscan outlier filter for the sensor of type \.

type = \{D435, REAR_D435\} | bool
(false) | -| **DEPTH_TO_SCAN_HEIGHT** | The number of pixel rows to use to generate the laserscan. For each column, the scan will return the minimum value for those pixels centered vertically in the image. | int | -| **DEPTH_TO_SCAN_TIME** | Time between scans (seconds). Typically, 1.0/frame_rate. This value is not easily calculated from consecutive messages, and is thus left to the user to set correctly. | double | -| **DEPTH_TO_SCAN_MIN_RANGE** | The minimum ranges to return in meters. Ranges less than this will be output as -Inf. | double | -| **DEPTH_TO_SCAN_MAX_RANGE** | The maximum ranges to return in meters. Ranges greater than this will be output as +Inf. | double | - -### Navigation Tuning - -The following table lists the environment variables that can be used to -enable/disable which sensor is used as part of the collision avoidance -feature of OutdoorNav. - -| Environment Variable | Description | Data Type | -|----------------------|------------------------------------------|-----------| -| **VLP_ENABLE_COSTMAP** | Enable/disable the Velodyne from populating the costmap and being used for collision avoidance. This variable should only be used if the sensor is integrated (front unit if more than one). | bool | -| **REAR_VLP_ENABLE_COSTMAP** | Enable/disable the Velodyne from populating the costmap and being used for collision avoidance. This variable should only be used if the sensor is integrated (rear unit if more than one). | bool | -| **LMS1XX_ENABLE_COSTMAP** | Enable/disable the Sick LMS1XX from populating the costmap and being used for collision avoidance. This variable should only be used if the sensor is integrated (front unit if more than one). | bool | -| **REAR_LMS1XX_ENABLE_COSTMAP** | Enable/disable the Sick LMS1XX from populating the costmap and being used for collision avoidance. This variable should only be used if the sensor is integrated (rear unit if more than one). | bool | -| **HOKUYO_ENABLE_COSTMAP** | Enable/disable the Hokuyo from populating the costmap and being used for collision avoidance. This variable should only be used if the sensor is integrated (front unit if more than one). | bool | -| **REAR_HOKUYO_ENABLE_COSTMAP** | Enable/disable the Hokuyo from populating the costmap and being used for collision avoidance. This variable should only be used if the sensor is integrated (rear unit if more than one). | bool | -| **D435_ENABLE_COSTMAP** | Enable/disable the Realsense from populating the costmap and being used for collision avoidance. This variable should only be used if the sensor is integrated (front unit if more than one). | bool | -| **REAR_D435_ENABLE_COSTMAP** | Enable/disable the Realsense from populating the costmap and being used for collision avoidance. This variable should only be used if the sensor is integrated (rear unit if more than one). | bool | - -### Navigation Tuning (Advanced) - -The following list of environment variables can be used to modify some -of the navigation inputs of to the OutdoorNav autonomy. It is -recommended that you first consult the following link(s) before -attempting to modify these parameters. - -- [Costmap2D/ObstacleLayer](http://wiki.ros.org/costmap_2d/hydro/obstacles) - -| Environment Variable | Description | Data Type | -|----------------------|------------------------------------------|-----------| -| **COSTMAP\_LIDAR\_\<2D/3D\>_OBSTACLE_RANGE** | The maximum range in meters at which to insert obstacles into the costmap using sensor data. This can apply for either 2D or 3D variables, associated with 2D and 3D lidars, respectively (front unit if more than one). | double | -| **COSTMAP\_LIDAR\_\<2D/3D\>_RAYTRACE_RANGE** | The maximum range in meters at which to raytrace out obstacles from the map using sensor data. This can apply for either 2D or 3D variables, associated with 2D and 3D lidars, respectively (front unit if more than one). | double | -| **COSTMAP\_REAR_LIDAR\_\<2D/3D\>_OBSTACLE_RANGE** | The maximum range in meters at which to insert obstacles into the costmap using sensor data. This can apply for either 2D or 3D variables, associated with 2D and 3D lidars, respectively (rear unit if more than one). | double | -| **COSTMAP\_REAR_LIDAR\_\<2D/3D\>_RAYTRACE_RANGE** | The maximum range in meters at which to raytrace out obstacles from the map using sensor data. This can apply for either 2D or 3D variables, associated with 2D and 3D lidars, respectively (front unit if more than one). | double | - -## Command Line Operation - -By default the OutdoorNav Software, including the Navigation component, -begins automatically when the system is powered on. This section -outlines the commands that can be used by developers who are debugging -the system or who want more precise control for managing the Navigation -component. - -### Connecting to the OutdoorNav Computer {#connecting-to-outdoornav-computer} - -To connect to your UGV, consult its corresponding user manual. - -If you are using a Clearpath Robotics UGV with an OutdoorNav computer, -first `ssh` to the UGV using the details provided in the UGV user -manual. If you have a wired connection to the Clearpath Robotics UGV, -use the following command. If using wifi, you can replace the IP address -with the wifi-assigned IP address or the hostname of the UGV. - -``` bash -ssh administrator@192.168.131.1 -``` - -Then, connect to the OutdoorNav Computer: - -``` bash -ssh administrator@192.168.131.100 -``` - -### Starting the Navigation Software {#starting-outdoornav} - -Begin by connecting to the OutdoorNav Computer as outlined above. - -On UGV startup, all the sensors, the user interface, as well as the -Navigation software are set to start automatically through a Docker -container. You can check the Docker container's status by running -`docker compose ps` and checking for: - -- onav-web (Docker image containing the web interface) -- onav-web-ros (Docker image containing the ROS web bridge nodes) -- onav-sensors (Docker image containing that launches the ROS sensor - drivers) -- onav-autonomy (Docker image containing the ROS nodes related to the - autonomy) - -If the Docker containers are not running, they can be started with: - -``` bash -cd ~/cpr_outdoornav_launch/ # directory with docker-compose.yaml -docker compose --profile outdoornav up -d -``` - -### Stopping/Restarting all of OutdoorNav - -To use the UGV without the OutdoorNav software, use these commands to -stop the software and prevent it from automatic startup: - -``` bash -cd ~/cpr_outdoornav_launch/ # directory with docker-compose.yaml -docker compose --profile outdoornav stop -``` - -If the OutdoorNav software is currently running or has been stopped, it -can be restarted by running: - -``` bash -cd ~/cpr_outdoornav_launch/ # directory with docker-compose.yaml -docker compose --profile outdoornav start -``` - -### Stopping/Restarting the Autonomy - -To use the UGV without the autonomy core of OutdoorNav, use these -commands to stop the nodes and prevent them from automatic startup: - -``` bash -cd ~/cpr_outdoornav_launch/ # directory with docker-compose.yaml -docker compose --profile autonomy stop -``` - -The autonomy core can be restarted by running: - -``` bash -cd ~/cpr_outdoornav_launch/ # directory with docker-compose.yaml -docker compose --profile outdoornav start -``` - -### Stopping/Restarting the Sensors - -To use the UGV without the sensors, use these commands to disable the -nodes and prevent them from automatic startup: - -``` bash -cd ~/cpr_outdoornav_launch/ # directory with docker-compose.yaml -docker compose stop -``` - -### Accessing the Shell in Docker Container - -To access the shell in a Docker container for debugging (optionally -replace `onav-autonomy` with `onav-web` in the following command): - -``` bash -cd ~/cpr_outdoornav_launch/ # directory with docker-compose.yaml -docker compose exec -it onav-autonomy bash -``` - -### Accessing the Navigation Software Logs - -To check the logs of the Navigation software: - -``` bash -cd ~/cpr_outdoornav_launch/ # The directory with docker-compose.yaml -docker compose logs -f -``` - -### Validating TF Setup - -:::note - -Sensor TF validation should only be required if the performance is -noticeably poor, such as when the UGV drifts off of the planned path or -oscillations occur around the path). - -::: - -The coordinate transformation of the two GPS antennas, the IMU, the 2D -and 3D Lidars to the base_link of the UGV should have already been set -prior to receiving the UGV. However, ensure that they are set correctly. - -The ROS coordinate frame base_link, shown in the figure below, is -located at the center of the bottom plate of the UGV. The environment -variables below should be taken with respect to this coordinate frame. -The X axis is in red (and pointing towards the front of the UGV), Y in -green (pointing towards the left of the UGV) and Z in blue (pointing -towards the sky). - -You can check the current value of the environment variables by running -the following (and setting \ to the names listed in the -table below). - -``` bash -printenv | grep -``` - -The environment variables for the position and orientation of each -sensor are provided in the table below. - -_GPS Navigation sensor position and orientation environment variables_ - -| Environment Variable | Function | -|----------------------|---------------------------------------| -| POSITION_GPS_XYZ | [X,Y,Z] position, in meters, of the position (rear) GPS antenna with respect to the base_link coordinate frame. | -| POSITION_GPS_RPY | [Roll,Pitch,Yaw], in radians, of the position (rear) GPS antenna with respect to the base_link coordinate frame. | -| HEADING_GPS_XYZ | [X,Y,Z] position, in meters, of the heading (front) GPS antenna with respect to the base_link coordinate frame. | -| HEADING_GPS_RPY | [Roll,Pitch,Yaw], in radians, of the heading (front) GPS antenna with respect to the base_link coordinate frame. | -| MICROSTRAIN_XYZ | [X,Y,Z] position, in meters, of the IMU with respect to the base_link coordinate frame. | -| MICROSTRAIN_RPY | [Roll,Pitch,Yaw], in radians, of the IMU with respect to the base_link coordinate frame. | -| LIDAR_XYZ | [X,Y,Z] position, in meters, of the 3D Lidar with respect to the base_link coordinate frame. | -| LIDAR_RPY | [Roll,Pitch,Yaw], in radians, of the 3D Lidar with respect to the base_link coordinate frame. | -| LASER_XYZ | [X,Y,Z] position, in meters, of the 2D Lidar with respect to the base_link coordinate frame. | -| LASER_RPY | [Roll,Pitch,Yaw], in radians, of the 2D Lidar with respect to the base_link coordinate frame. | - -:::note - -When the printed Y axis on the IMU is pointing towards the front of the -robot (i.e., aligned to X axis of base_link), MICROSTRAIN_RPY = [0, 0, 0]. - -::: - -:::warning - -If you decide to move any of these sensors, you must modify these -variables accordingly. - -
-
- -
base_link coordinate frame
-
-
- -::: +--- +title: Navigation +sidebar_label: Navigation +sidebar_position: 8 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +## Features + +The OutdoorNav Software contains a set of features that can be enabled +or disabled according to your required application requirements. These +features can be enabled or disabled through the use of environment +variables, which should be added to the +`/home/administrator/cpr_outdoornav_launch/outdoornav_tuning.env`. The +following table describes the available features, their default state +and any additional parameters that we expose that may also be included +to tune the feature. + +| Feature | Description | +|-----------------------------|----------------------------------------| +| **Data Collection** | The data collection feature enabled the user to record rosbag data of the sensors, localization, and navigation components of OutdoorNav. If `true`, rosbags will be saved and timestamed in the `/home/administrator/onav_log/rosbag_data/` directory. If `false`, no rosbag will be recorded.

Environment Variable: `ENABLE_BAGGING` (Default: `false`). | +| **Collision Avoidance** | Collision avoidance is the UGV's ability to detect obstacles and stop/maneuver around the obstacle without any collisions. If `true`, the UGV will detect obstacles and if `false` no obstacles will be detected. Setting to `false` is not recommended and may cause harm to property or to individuals.

Environment Variable: `ENABLE_COLLISION_AVOIDANCE` (Default: `true`). | +| **Obstacle Avoidance Mode** | When collision avoidance is enabled, the UGV will behave in one of two ways according to the obstacle avoidance mode. If set to `true`, the UGV will perform obstacle avoidance maneuvers, replanning around detected obstacles. If set to `false`, the UGV will slow down to a stop in front of detected obstacles and wait for the obstacle to clear before proceeding.

Environment Variable: `OBSTACLE_AVOIDANCE_MODE` (Default: `true`). | +| **Continuous Planning** | The continuous planning feature allows the UGV to continuously monitor whether an obstacle is on the UGV's path and replan around said obstacle smoothly without the need for stopping in front of the obstacle. If disabled, the UGV will come to a full stop in front of an obstacle and then replan around said obstacle.

Environment Variable: `ENABLE_CONTINUOUS_PLANNER` (Default: `true`). | +| **Path Smoothing** | The path smoothing feature according to a specified turning radius. The default behaviour will generate point-to-point straight line paths.

Environment Variable: `ENABLE_PATH_SMOOTHER` (Default: `false`). | +| **Path Shifting** | The path shifting feature is designed to reduce the oscillation around the initial reference path if the UGV begins to deviate of said reference path. It is particularly useful for the Clearpath Robotics Warthog platform whose tires are incredibly pliable and results in unmodelled effects on the navigation.

Environment Variable: `ENABLE_PATH_SHIFTING` (Default: `false`). | +| **Constrained Replanning** | The constrained replanning feature restricts the area in which replanning paths can be generated. For example, if a `REPLANNING_CONSTRAINT` of 3.0 m is used, the UGV will not be allowed to replan a path that drives it more than 3.0 m from the initial path. This replanning area can be shown on the map over the connecting lines between waypoints. See [Constrained Replanning](web_user_interface/ui_autonomous_mode.mdx#constrained_path) for further details.

Environment Variable: `ENABLE_CONSTRAINED_REPLANNING` (Default: `false`).

Use the `REPLANNING_CONSTRAINT` environment variable to modify the replanning constraint (in meters). | +| **Stop Distance** | The stop distance feature allows the UGV to stop a predefined distance away from obstacles. This is useful if a UGV cannot drive in reverse and needs the required room in front of it to replan around an obstacle.

Environment Variable: `ENABLE_STOP_DISTANCE` (Default: `false`)

Use the `STOP_DISTANCE` environment variable to modify the stop distance (in meters). Note that if the stop distance is larger than 4.5 meters for the Clearpath Robotics Jackal and Husky UGVs, or 10.0 meters for the Clearpath Robotics Warthog UGV, the computational load will increase and may cause a decrease in performance in the navigation. | +| **Delay Compensation** | The delay compensation feature is able to compensate for mechanical delay on UGVs where either the accelerator introduces delay into the linear velocity or the steering introduces delay in the angular velocity. This feature is not required for Clearpath Robotics UGVs as negligible delay is present in our system.

Environment Variable: `ENABLE_DELAY_COMPENSATION` (Default: `false`)

Use the `CONTROLLER_DELAY` environment variable to modify the amount of delay to be compensated (in milliseconds). | + +## Advanced Configuration + +The following section provides a list of environment variables that can +be modified in order to tune both the sensor systems as well as tuning +the navigation software. All of the environment variables listed below +can be modified in the +`/home/administrator/cpr_outdoornav_launch/outdoornav_tuning.env` file. + +### Sensor Tuning + +The following table lists the sensors that are useable with the +OutdoorNav software. These sensor drivers can be turned on/off using +these environment variables, however, the sensor will always remain +powered on. + +| Environment Variable | Description | Data Type +|--------------------------------|-------------------------------------------|-------------- +| **SWIFTNAV_ENABLE_DRIVER** | Enable/disable the Swiftnav Piksi/Duro ROS driver, if integrated. | bool | +| **UBLOX_ENABLE_DRIVER** | Enable/disable the UBlox ROS driver, if integrated. | bool | +| **MICROSTRAIN_ENABLE_DRIVER** | Enable/disable the Microstrain GX5/CV5 ROS driver, if integrated. | bool | +| **XSENS_ENABLE_DRIVER** | Enable/disable the XSens MTI ROS driver, if integrated. | bool | +| **VLP_ENABLE_DRIVER** | Enable/disable the Velodyne ROS driver, if integrated (front unit if more than one). | bool | +| **REAR_VLP_ENABLE_DRIVER** | Enable/disable the Velodyne ROS driver, if integrated (rear unit if more than one). | bool | +| **LMS1XX_ENABLE_DRIVER** | Enable/disbale the Sick LMS1XX ROS driver, if integrated (front unit if more than one). | bool | +| **REAR_LMS1XX_ENABLE_DRIVER** | Enable/disbale the Sick LMS1XX ROS driver, if integrated (rear unit if more than one). | bool | +| **HOKUYO_ENABLE_DRIVER** | Enable/disbale the Hokuyo ROS driver, if integrated (front unit if more than one). | bool | +| **REAR_HOKUYO_ENABLE_DRIVER** | Enable/disbale the Hokuyo ROS driver, if integrated (rear unit if more than one). | bool | +| **D435_ENABLE_DRIVER** | Enable/disable the Realsense ROS driver, if integrated (front unit if more than one). | bool | +| **REAR_D435_ENABLE_DRIVER** | Enable/disable the Realsense ROS driver, if integrated (rear unit if more than one). | bool | + + +### Sensor Tuning (Advanced) + +The following list of environment variables can be used to filter the +sensor data in order to modify/improve the sensory input to the +OutdoorNav autonomy. It is recommended that you first consult the +following links before attempting to modify these parameters. + +- [PCL Filters](http://wiki.ros.org/pcl_ros/Tutorials/filters) +- [PointCloud to LaserScan Filter](http://wiki.ros.org/pointcloud_to_laserscan) +- [DepthImage to LaserScan Filter](http://wiki.ros.org/depthimage_to_laserscan) + +#### Voxel Grid Filter + +| Environment Variable | Description | Data Type (Default) | +|----------------------|------------------------------------------|---------------------| +| **\_ENABLE_FILTER_VOXEL** | Enable/disable the PCL voxel filter for the sensor of type \.

type = \{VLP, D435, REAR_VLP, REAR_D435\} | bool
(false) | +| **PCL_FIL_FILTER_VOXEL_LEAF_SIZE** | The size of a leaf (on x,y,z), in meters, used for downsampling. Range: 0.0 to 1.0. | double (0.01) | + +#### Cropbox Filter + +| Environment Variable | Description | Data Type (Default) | +|----------------------|------------------------------------------|---------------------| +| **\_ENABLE_FILTER_CROPBOX** | Enable/disable the PCL cropbox filter for the sensor of type \.

type = \{VLP, D435, REAR_VLP, REAR_D435\} | bool
(false) | +| **PCL_FILTER_CROPBOX_MIN_X** | The lower bound, in meters, on the x-axis within which to reject points from the pointcloud. Range: -1000.0 to 1000.0. | double
(0.01) | +| **PCL_FILTER_CROPBOX_MAX_X** | The upper bound, in meters, on the x-axis within which to reject points from the pointcloud. Range: -1000.0 to 1000.0. | double
(2.0) | +| **PCL_FILTER_CROPBOX_MIN_Y** | The lower bound, in meters, on the y-axis within which to reject points from the pointcloud. Range: -1000.0 to 1000.0. | double
(-10.0) | +| **PCL_FILTER_CROPBOX_MAX_Y** | The upper bound, in meters, on the y-axis within which to reject points from the pointcloud. Range: -1000.0 to 1000.0. | double
(10.0) | +| **PCL_FILTER_CROPBOX_MIN_Z** | The lower bound, in meters, on the z-axis within which to reject points from the pointcloud. Range: -1000.0 to 1000.0. | double
(-0.5) | +| **PCL_FILTER_CROPBOX_MAX_Z** | The upper bound, in meters, on the z-axis within which to reject points from the pointcloud. Range: -1000.0 to 1000.0. | double
(10.0) | + +#### Radius Outlier Filter + +| Environment Variable | Description | Data Type (Default) | +|----------------------|------------------------------------------|---------------------| +| **\_ENABLE_FILTER_RADIUS_OUTLIER** | Enable/disable the PCL radius outlier filter for the sensor of type \.

type = \{VLP, D435, REAR_VLP, REAR_D435\} | bool
(false) | +| **PCL_FILTER_ROR_RADIUS_SEARCH** | The number of points within this distance, in meters, from the query point will need to be equal or greater than PCL_FILTER_ROR_MIN_NEIGHBORS in order to be classified as an inlier point (i.e. will not be filtered). | double
(0.05) | +| **PCL_FILTER_ROR_MIN_NEIGHBORS** | The number of points within PCL_FILTER_ROR_RADIUS_SEARCH from the query point will need to be equal or greater than this number in order to be classified as an inlier point (i.e. will not be filtered). | int
(10) | + +#### Statistical Outlier Filter + +| Environment Variable | Description | Data Type (Default) | +|----------------------|------------------------------------------|---------------------| +| **\_ENABLE_FILTER_STATISTICAL_OUTLIER** | Enable/disable the PCL statistical outlier filter for the sensor of type \.

type = \{VLP, D435, REAR_VLP, REAR_D435\} | bool
(false) | +| **PCL_FILTER_SOR_MEAN_K** | The number of points (k) to use for mean distance estimation Range: 2 to 100. | double
(5.0) | +| **PCL_FILTER_SOR_STD_DEV** | The standard deviation multiplier threshold. All points outside the mean +- sigma * std_mul will be considered outliers. Range: 0.0 to 5.0. | double
(0.3) | + +#### PointCloud to LaserScan Filter + +| Environment Variable | Description | Data Type (Default) | +|----------------------|------------------------------------------|---------------------| +| **\_ENABLE_POINTCLOUD_TO_LASERSCAN** | Enable/disable the pointcloud to laserscan outlier filter for the sensor of type \.

type = \{VLP, D435, REAR_VLP, REAR_D435\} | bool
(false) | +| **PCL_TO_SCAN_MIN_HEIGHT** | The minimum height to sample in the point cloud, in meters. | double
(0.2) | +| **PCL_TO_SCAN_MAX_HEIGHT** | The maximum height to sample in the point cloud, in meters. | double
(1.2) | +| **PCL_TO_SCAN_MIN_ANGLE** | The minimum scan angle, in radians. | double
(3.14) | +| **PCL_TO_SCAN_MAX_ANGLE** | The maximum scan angle, in radians. | double
(3.14) | +| **PCL_TO_SCAN_ANGLE_INCREMENT** | Resolution of laser scan, in radians, per ray. | double
(0.00218) | +| **PCL_TO_SCAN_TIME** | The scan rate in seconds. | double
(0.3333) | +| **PCL_TO_SCAN_MIN_RANGE** | The minimum ranges to return, in meters. | double
(0.3) | +| **PCL_TO_SCAN_MAX_RANGE** | The maximum ranges to return, in meters. | double
(100.0) | + + +#### DepthImage to LaserScan Filter + +| Environment Variable | Description | Data Type (Default) | +|----------------------|------------------------------------------|---------------------| +| **\_ENABLE_DEPTH_TO_LASERSCAN** | Enable/disable the depth image to laserscan outlier filter for the sensor of type \.

type = \{D435, REAR_D435\} | bool
(false) | +| **DEPTH_TO_SCAN_HEIGHT** | The number of pixel rows to use to generate the laserscan. For each column, the scan will return the minimum value for those pixels centered vertically in the image. | int | +| **DEPTH_TO_SCAN_TIME** | Time between scans (seconds). Typically, 1.0/frame_rate. This value is not easily calculated from consecutive messages, and is thus left to the user to set correctly. | double | +| **DEPTH_TO_SCAN_MIN_RANGE** | The minimum ranges to return in meters. Ranges less than this will be output as -Inf. | double | +| **DEPTH_TO_SCAN_MAX_RANGE** | The maximum ranges to return in meters. Ranges greater than this will be output as +Inf. | double | + +### Navigation Tuning + +The following table lists the environment variables that can be used to +enable/disable which sensor is used as part of the collision avoidance +feature of OutdoorNav. + +| Environment Variable | Description | Data Type | +|----------------------|------------------------------------------|-----------| +| **VLP_ENABLE_COSTMAP** | Enable/disable the Velodyne from populating the costmap and being used for collision avoidance. This variable should only be used if the sensor is integrated (front unit if more than one). | bool | +| **REAR_VLP_ENABLE_COSTMAP** | Enable/disable the Velodyne from populating the costmap and being used for collision avoidance. This variable should only be used if the sensor is integrated (rear unit if more than one). | bool | +| **LMS1XX_ENABLE_COSTMAP** | Enable/disable the Sick LMS1XX from populating the costmap and being used for collision avoidance. This variable should only be used if the sensor is integrated (front unit if more than one). | bool | +| **REAR_LMS1XX_ENABLE_COSTMAP** | Enable/disable the Sick LMS1XX from populating the costmap and being used for collision avoidance. This variable should only be used if the sensor is integrated (rear unit if more than one). | bool | +| **HOKUYO_ENABLE_COSTMAP** | Enable/disable the Hokuyo from populating the costmap and being used for collision avoidance. This variable should only be used if the sensor is integrated (front unit if more than one). | bool | +| **REAR_HOKUYO_ENABLE_COSTMAP** | Enable/disable the Hokuyo from populating the costmap and being used for collision avoidance. This variable should only be used if the sensor is integrated (rear unit if more than one). | bool | +| **D435_ENABLE_COSTMAP** | Enable/disable the Realsense from populating the costmap and being used for collision avoidance. This variable should only be used if the sensor is integrated (front unit if more than one). | bool | +| **REAR_D435_ENABLE_COSTMAP** | Enable/disable the Realsense from populating the costmap and being used for collision avoidance. This variable should only be used if the sensor is integrated (rear unit if more than one). | bool | + +### Navigation Tuning (Advanced) + +The following list of environment variables can be used to modify some +of the navigation inputs of to the OutdoorNav autonomy. It is +recommended that you first consult the following link(s) before +attempting to modify these parameters. + +- [Costmap2D/ObstacleLayer](http://wiki.ros.org/costmap_2d/hydro/obstacles) + +| Environment Variable | Description | Data Type | +|----------------------|------------------------------------------|-----------| +| **COSTMAP\_LIDAR\_\<2D/3D\>_OBSTACLE_RANGE** | The maximum range in meters at which to insert obstacles into the costmap using sensor data. This can apply for either 2D or 3D variables, associated with 2D and 3D lidars, respectively (front unit if more than one). | double | +| **COSTMAP\_LIDAR\_\<2D/3D\>_RAYTRACE_RANGE** | The maximum range in meters at which to raytrace out obstacles from the map using sensor data. This can apply for either 2D or 3D variables, associated with 2D and 3D lidars, respectively (front unit if more than one). | double | +| **COSTMAP\_REAR_LIDAR\_\<2D/3D\>_OBSTACLE_RANGE** | The maximum range in meters at which to insert obstacles into the costmap using sensor data. This can apply for either 2D or 3D variables, associated with 2D and 3D lidars, respectively (rear unit if more than one). | double | +| **COSTMAP\_REAR_LIDAR\_\<2D/3D\>_RAYTRACE_RANGE** | The maximum range in meters at which to raytrace out obstacles from the map using sensor data. This can apply for either 2D or 3D variables, associated with 2D and 3D lidars, respectively (front unit if more than one). | double | + +## Command Line Operation + +By default the OutdoorNav Software, including the Navigation component, +begins automatically when the system is powered on. This section +outlines the commands that can be used by developers who are debugging +the system or who want more precise control for managing the Navigation +component. + +### Connecting to the OutdoorNav Computer {#connecting-to-outdoornav-computer} + +To connect to your UGV, consult its corresponding user manual. + +If you are using a Clearpath Robotics UGV with an OutdoorNav computer, +first `ssh` to the UGV using the details provided in the UGV user +manual. If you have a wired connection to the Clearpath Robotics UGV, +use the following command. If using wifi, you can replace the IP address +with the wifi-assigned IP address or the hostname of the UGV. + +``` bash +ssh administrator@192.168.131.1 +``` + +Then, connect to the OutdoorNav Computer: + +``` bash +ssh administrator@192.168.131.100 +``` + +### Starting the Navigation Software {#starting-outdoornav} + +Begin by connecting to the OutdoorNav Computer as outlined above. + +On UGV startup, all the sensors, the user interface, as well as the +Navigation software are set to start automatically through a Docker +container. You can check the Docker container's status by running +`docker compose ps` and checking for: + +- onav-web (Docker image containing the web interface) +- onav-web-ros (Docker image containing the ROS web bridge nodes) +- onav-sensors (Docker image containing that launches the ROS sensor + drivers) +- onav-autonomy (Docker image containing the ROS nodes related to the + autonomy) + +If the Docker containers are not running, they can be started with: + +``` bash +cd ~/cpr_outdoornav_launch/ # directory with docker-compose.yaml +docker compose --profile outdoornav up -d +``` + +### Stopping/Restarting all of OutdoorNav + +To use the UGV without the OutdoorNav software, use these commands to +stop the software and prevent it from automatic startup: + +``` bash +cd ~/cpr_outdoornav_launch/ # directory with docker-compose.yaml +docker compose --profile outdoornav stop +``` + +If the OutdoorNav software is currently running or has been stopped, it +can be restarted by running: + +``` bash +cd ~/cpr_outdoornav_launch/ # directory with docker-compose.yaml +docker compose --profile outdoornav start +``` + +### Stopping/Restarting the Autonomy + +To use the UGV without the autonomy core of OutdoorNav, use these +commands to stop the nodes and prevent them from automatic startup: + +``` bash +cd ~/cpr_outdoornav_launch/ # directory with docker-compose.yaml +docker compose --profile autonomy stop +``` + +The autonomy core can be restarted by running: + +``` bash +cd ~/cpr_outdoornav_launch/ # directory with docker-compose.yaml +docker compose --profile outdoornav start +``` + +### Stopping/Restarting the Sensors + +To use the UGV without the sensors, use these commands to disable the +nodes and prevent them from automatic startup: + +``` bash +cd ~/cpr_outdoornav_launch/ # directory with docker-compose.yaml +docker compose stop +``` + +### Accessing the Shell in Docker Container + +To access the shell in a Docker container for debugging (optionally +replace `onav-autonomy` with `onav-web` in the following command): + +``` bash +cd ~/cpr_outdoornav_launch/ # directory with docker-compose.yaml +docker compose exec -it onav-autonomy bash +``` + +### Accessing the Navigation Software Logs + +To check the logs of the Navigation software: + +``` bash +cd ~/cpr_outdoornav_launch/ # The directory with docker-compose.yaml +docker compose logs -f +``` + +### Validating TF Setup + +:::note + +Sensor TF validation should only be required if the performance is +noticeably poor, such as when the UGV drifts off of the planned path or +oscillations occur around the path). + +::: + +The coordinate transformation of the two GPS antennas, the IMU, the 2D +and 3D Lidars to the base_link of the UGV should have already been set +prior to receiving the UGV. However, ensure that they are set correctly. + +The ROS coordinate frame base_link, shown in the figure below, is +located at the center of the bottom plate of the UGV. The environment +variables below should be taken with respect to this coordinate frame. +The X axis is in red (and pointing towards the front of the UGV), Y in +green (pointing towards the left of the UGV) and Z in blue (pointing +towards the sky). + +You can check the current value of the environment variables by running +the following (and setting \ to the names listed in the +table below). + +``` bash +printenv | grep +``` + +The environment variables for the position and orientation of each +sensor are provided in the table below. + +_GPS Navigation sensor position and orientation environment variables_ + +| Environment Variable | Function | +|----------------------|---------------------------------------| +| POSITION_GPS_XYZ | [X,Y,Z] position, in meters, of the position (rear) GPS antenna with respect to the base_link coordinate frame. | +| POSITION_GPS_RPY | [Roll,Pitch,Yaw], in radians, of the position (rear) GPS antenna with respect to the base_link coordinate frame. | +| HEADING_GPS_XYZ | [X,Y,Z] position, in meters, of the heading (front) GPS antenna with respect to the base_link coordinate frame. | +| HEADING_GPS_RPY | [Roll,Pitch,Yaw], in radians, of the heading (front) GPS antenna with respect to the base_link coordinate frame. | +| MICROSTRAIN_XYZ | [X,Y,Z] position, in meters, of the IMU with respect to the base_link coordinate frame. | +| MICROSTRAIN_RPY | [Roll,Pitch,Yaw], in radians, of the IMU with respect to the base_link coordinate frame. | +| LIDAR_XYZ | [X,Y,Z] position, in meters, of the 3D Lidar with respect to the base_link coordinate frame. | +| LIDAR_RPY | [Roll,Pitch,Yaw], in radians, of the 3D Lidar with respect to the base_link coordinate frame. | +| LASER_XYZ | [X,Y,Z] position, in meters, of the 2D Lidar with respect to the base_link coordinate frame. | +| LASER_RPY | [Roll,Pitch,Yaw], in radians, of the 2D Lidar with respect to the base_link coordinate frame. | + +:::note + +When the printed Y axis on the IMU is pointing towards the front of the +robot (i.e., aligned to X axis of base_link), MICROSTRAIN_RPY = [0, 0, 0]. + +::: + +:::warning + +If you decide to move any of these sensors, you must modify these +variables accordingly. + +
+
+ +
base_link coordinate frame
+
+
+ +::: diff --git a/outdoornav_user_manual_versioned_docs/version-0.8.0/overview/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.8.0/overview/_category_.json index 663e4088..8414dc7f 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.8.0/overview/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.8.0/overview/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Overview", - "position": 4 -} +{ + "label": "Overview", + "position": 4 +} diff --git a/outdoornav_user_manual_versioned_docs/version-0.8.0/overview/overview_hardware_requirements.mdx b/outdoornav_user_manual_versioned_docs/version-0.8.0/overview/overview_hardware_requirements.mdx index 7c35a31c..14c01e44 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.8.0/overview/overview_hardware_requirements.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.8.0/overview/overview_hardware_requirements.mdx @@ -1,44 +1,44 @@ ---- -title: Hardware Requirements -sidebar_label: Hardware Requirements -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -OutdoorNav Software works with compatible UGVs, either from Clearpath -Robotics or third parties. High level requirements for compatible UGVs -are outlined below. Detailed qualification requirements are outlined in -[UGV Integration Requirements](../integration_requirements/integration_overview.mdx). - -## Requirements - -OutdoorNav software does not communicate directly with the UGV motors. -Rather, it publishes target linear and angular velocities packaged in -the [ROS Twist message](http://docs.ros.org/en/noetic/api/geometry_msgs/html/msg/Twist.html) -format and relies on the low level velocity controller of the vehicle to -translate these velocities into correct motor control commands. -Therefore, OutdoorNav Software requires that the UGV must accept the -control commands sent in the [ROS Twist message](http://docs.ros.org/en/noetic/api/geometry_msgs/html/msg/Twist.html) -format. More detailed requirements are outlined in the following table. - -| # | Requirement | Notes | -| - | --------------------------------- | ----------------------------------- | -| 1 | The UGV must be a differential drive or Ackermann drive configuration | Ackerman drive is currently available as a custom implementation; standard in 2023 | -| 2 | The UGV must have velocity control of the wheels and provide kinematic control of the platform | | -| 3 | The UGV shall provide odometry feedback of the wheel direction and velocities and/or steering position | Recommended encoder resolution of 500 ticks per revolution or greater | -| 4 | The UGV should have an emergency stop system with status feedback | | -| 5 | The UGV must accept ROS 1 Twist Commands on the `/cmd_vel` topic | See: [API Endpoints](../api/api_endpoints/api_endpoints.mdx); ROS 2 interface available in future release | -| 6 | The UGV must provide odometry and status feedback through ROS topics | See: [API Endpoints](../api/api_endpoints/api_endpoints.mdx) | - -## Typical Hardware - -While a variety of different sensors and equipment can be used with -OutdoorNav Software, the following are used most commonly: - -- Clearpath Robotics UGV: Jackal, Husky or Warthog -- GPS System: Dual DURO RTK system or NovAtel Terrastar -- IMU: Microstrain 3DM-GX5-25 -- 3D Laser Sensor: Velodyne VLP-16 -- Tablet Computer: Getac F110 -- Clearpath Long Range Network Station with RTK corrections ("Base Station") +--- +title: Hardware Requirements +sidebar_label: Hardware Requirements +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +OutdoorNav Software works with compatible UGVs, either from Clearpath +Robotics or third parties. High level requirements for compatible UGVs +are outlined below. Detailed qualification requirements are outlined in +[UGV Integration Requirements](../integration_requirements/integration_overview.mdx). + +## Requirements + +OutdoorNav software does not communicate directly with the UGV motors. +Rather, it publishes target linear and angular velocities packaged in +the [ROS Twist message](http://docs.ros.org/en/noetic/api/geometry_msgs/html/msg/Twist.html) +format and relies on the low level velocity controller of the vehicle to +translate these velocities into correct motor control commands. +Therefore, OutdoorNav Software requires that the UGV must accept the +control commands sent in the [ROS Twist message](http://docs.ros.org/en/noetic/api/geometry_msgs/html/msg/Twist.html) +format. More detailed requirements are outlined in the following table. + +| # | Requirement | Notes | +| - | --------------------------------- | ----------------------------------- | +| 1 | The UGV must be a differential drive or Ackermann drive configuration | Ackerman drive is currently available as a custom implementation; standard in 2023 | +| 2 | The UGV must have velocity control of the wheels and provide kinematic control of the platform | | +| 3 | The UGV shall provide odometry feedback of the wheel direction and velocities and/or steering position | Recommended encoder resolution of 500 ticks per revolution or greater | +| 4 | The UGV should have an emergency stop system with status feedback | | +| 5 | The UGV must accept ROS 1 Twist Commands on the `/cmd_vel` topic | See: [API Endpoints](../api/api_endpoints/api_endpoints.mdx); ROS 2 interface available in future release | +| 6 | The UGV must provide odometry and status feedback through ROS topics | See: [API Endpoints](../api/api_endpoints/api_endpoints.mdx) | + +## Typical Hardware + +While a variety of different sensors and equipment can be used with +OutdoorNav Software, the following are used most commonly: + +- Clearpath Robotics UGV: Jackal, Husky or Warthog +- GPS System: Dual DURO RTK system or NovAtel Terrastar +- IMU: Microstrain 3DM-GX5-25 +- 3D Laser Sensor: Velodyne VLP-16 +- Tablet Computer: Getac F110 +- Clearpath Long Range Network Station with RTK corrections ("Base Station") diff --git a/outdoornav_user_manual_versioned_docs/version-0.8.0/overview/overview_introduction.mdx b/outdoornav_user_manual_versioned_docs/version-0.8.0/overview/overview_introduction.mdx index 83bfa1d6..4f3f1bf7 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.8.0/overview/overview_introduction.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.8.0/overview/overview_introduction.mdx @@ -1,93 +1,93 @@ ---- -title: Introduction -sidebar_label: Introduction -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -## Summary - -OutdoorNav Software is a software package developed by Clearpath -Robotics for autonomous and manual navigation of Unmanned Ground -Vehicles (UGVs) in outdoor environments. - -
-
- -
Web UI Mission Planning View
-
-
- -
-
- -
Web UI Front Camera View
-
-
- -## Compatible Platforms - -While it has been optimized for use with OutdoorNav Hardware from -Clearpath Robotics -([Husky](https://clearpathrobotics.com/husky-unmanned-ground-vehicle-robot/), -[Jackal](https://clearpathrobotics.com/jackal-small-unmanned-ground-vehicle/), -and -[Warthog](https://clearpathrobotics.com/warthog-unmanned-ground-vehicle-robot/)), -it has been designed so that it can be added easily to third-party UGVs. - -
-
- -
Clearpath Robotics Warthog UGV with navigation equipment and operator control unit
-
-
- -## Key Features - -Key features of OutdoorNav Software include: - -- Mission Planning and Autonomous Navigation - - - Robust GPS-based localization with sensor fusion of IMU, LiDAR - and platform odometry - - Autonomous path following via waypoints - - Obstacle Detection and Avoidance: Stop and wait or - autonomously plan a collision-free path around obstacles - without the need to stop - -- Teleoperation - - - Operate the robot remotely using an on-screen or physical - joystick - - Visualize what the robot sees by displaying its network - cameras and LiDAR data - -- Web User Interface (Web UI) - - - Build missions containing sets of paths, with optional task - execution on each path; tasks can be standard tasks (eg. save - camera image) or user provided functions - - View the robot's live position and attitude on the map - - Display robot data such as velocity, signal strength, status - of the motion stop, status of navigation system, and battery charge - - Save and export Missions - -- Application Programming Interface (API) - - - Build your own application and UI by accessing the navigation - API to control the UGV through software or implement fleet - management by accessing the mission API - -- Simulation - - - Begin development of your application prior to purchasing - licenses or commissioning hardware with OutdoorNav software and - the ROS Gazebo simulator - -- Third Party Integration - - - The Web UI and API can be accessed through a network connection; - cloud-based services are available from third parties to - facilitate remote connections and networking to robot hardware - such as Formant.io and Freedom Robotics +--- +title: Introduction +sidebar_label: Introduction +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +## Summary + +OutdoorNav Software is a software package developed by Clearpath +Robotics for autonomous and manual navigation of Unmanned Ground +Vehicles (UGVs) in outdoor environments. + +
+
+ +
Web UI Mission Planning View
+
+
+ +
+
+ +
Web UI Front Camera View
+
+
+ +## Compatible Platforms + +While it has been optimized for use with OutdoorNav Hardware from +Clearpath Robotics +([Husky](https://clearpathrobotics.com/husky-unmanned-ground-vehicle-robot/), +[Jackal](https://clearpathrobotics.com/jackal-small-unmanned-ground-vehicle/), +and +[Warthog](https://clearpathrobotics.com/warthog-unmanned-ground-vehicle-robot/)), +it has been designed so that it can be added easily to third-party UGVs. + +
+
+ +
Clearpath Robotics Warthog UGV with navigation equipment and operator control unit
+
+
+ +## Key Features + +Key features of OutdoorNav Software include: + +- Mission Planning and Autonomous Navigation + + - Robust GPS-based localization with sensor fusion of IMU, LiDAR + and platform odometry + - Autonomous path following via waypoints + - Obstacle Detection and Avoidance: Stop and wait or + autonomously plan a collision-free path around obstacles + without the need to stop + +- Teleoperation + + - Operate the robot remotely using an on-screen or physical + joystick + - Visualize what the robot sees by displaying its network + cameras and LiDAR data + +- Web User Interface (Web UI) + + - Build missions containing sets of paths, with optional task + execution on each path; tasks can be standard tasks (eg. save + camera image) or user provided functions + - View the robot's live position and attitude on the map + - Display robot data such as velocity, signal strength, status + of the motion stop, status of navigation system, and battery charge + - Save and export Missions + +- Application Programming Interface (API) + + - Build your own application and UI by accessing the navigation + API to control the UGV through software or implement fleet + management by accessing the mission API + +- Simulation + + - Begin development of your application prior to purchasing + licenses or commissioning hardware with OutdoorNav software and + the ROS Gazebo simulator + +- Third Party Integration + + - The Web UI and API can be accessed through a network connection; + cloud-based services are available from third parties to + facilitate remote connections and networking to robot hardware + such as Formant.io and Freedom Robotics diff --git a/outdoornav_user_manual_versioned_docs/version-0.8.0/overview/overview_operating_conditions.mdx b/outdoornav_user_manual_versioned_docs/version-0.8.0/overview/overview_operating_conditions.mdx index 2911ec1e..ceb1dc52 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.8.0/overview/overview_operating_conditions.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.8.0/overview/overview_operating_conditions.mdx @@ -1,178 +1,178 @@ ---- -title: Operating Conditions -sidebar_label: Operating Conditions -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -OutdoorNav Software is designed and tested for use in rugged outdoor -environments. - -## Operating Conditions - -### Terrain - -OutdoorNav Software is compatible with terrains in which the UGV can be -driven manually without excessive slipping. The performance limits will -be a function of the base UGV traction. - -Using Clearpath Robotics Husky, Jackal, and Warthog as a the base UGV, -OutdoorNav Software is suitable for use in the following terrains: - -- asphalt -- concrete -- grass -- snow - -:::note - -Grass should not exceed 30 cm in height if collision avoidance is -enabled. - -::: - -:::note - -Winter/studded tires may be required for proper traction on snow. - -::: - -OutdoorNav Software is currently **not** suitable in the following -terrains: - -- ice -- loose gravel - -:::note - -Support for loose gravel environments is currently being tested and is -expected to be available in late 2023. - -::: - -The terrain capabilities of third-party UGVs will be dependent on a -variety of factors including the vehicle mass, the tire treading, and -motor power. - -### Environment - -OutdoorNav Software is suitable for use in the following environmental -conditions: - -- light rainfall (drizzle) -- light snowfall (powdery snow) - -:::note - -If erratic behavior, such as frequent replanning, is perceived in these -light precipitation conditions, disabling the "continuous planning" -feature may help. - -::: - -OutdoorNav Software is **not** suitable for use in the following -environmental conditions: - -- heavy rainfall -- heavy snowfall - -:::note - -If navigation is required in heavy rain or snow, disabling the collision -avoidance feature will allow the UGV to navigate properly. This should -be done with caution. - -![](/img/outdoornav_images/gps_danger.png) - -::: - -## Performance - -The performance of the system is highly dependent on both the base UGV, -the sensors, the system integration details, and the environment. The -following table provides typical performance metrics for Clearpath -Robotics Jackal and Husky UGVs. - -_System Performance for Husky/Jackal with Typical Sensors_ - -| | Starter Sensor Kit | Standard Sensor Kit (No RTK) | Standard Sensor Kit (RTK) | -|----------------------------------------|-----------------------------------|----------------------------------|----------------------------------| -| GPS sensors | UBlox F9P | 2x SwiftNav Duro | 2x SwiftNav Duro | -| Location accuracy (position & heading) | Less than 60 cm
Less than 10° | Less than 30 cm
Less than 5° | Less than 5 cm
Less than 2° | -| Path tracking accuracy (approximate) | 20 cm | 15 cm | 10 cm | - -## Limitations - -While OutdoorNav Software operates effectively in a range of rugged -outdoor environments, the operator should be aware of the following -limitations and plan accordingly. - -_OutdoorNav System Limitations_ - -| Limitation | Details | -|--------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| RTK accuracy | Localization accuracy for the Standard (RTK) configuration assumes the base station location has been accurately surveyed. | -| Localization accuracy | Localization accuracy is influenced by the quality of GNSS data that is available. Navigating in GNSS denied areas (e.g., under bridges, near tall buildings, etc.) will cause degradation in localization performance. | -| Negative obstacle detection not present | Outdoor Navigation Software does not have negative obstacle detection capability. Your UGV will not detect stairs, cliffs, potholes, depressions or edges and may drive into these obstacles causing harm to people or property. | -| Limited obstacle detection in vertical dimension | The small vertical field of view of 3D LiDARs limits the vertical obstacle detection capability of the OutdoorNav Software. See [Obstacle Detection Limitations](#obstacle-detection-limitations) for details. | -| Low traction may cause UGV to get stuck | Your UGV may navigate itself into a situation where wheels slip or do not make contact with the ground. | -| Rain and snow may affect obstacle detection | Adverse weather conditions may obscure obstacle detection and avoidance data from the VLP-16 LiDAR. Obstacle detection and avoidance may not function in all weather conditions and must be disabled to navigate in heavy snow or rain. | -| Maximum distance between two Viapoints | Distance between any two consecutive Viapoints of a Mission should be less than 20 meters. This will ensure that the global planner can find a valid path to the next Viapoint for the UGV in case there is an obstacle on the path of the UGV. | -| WiFi range limits | The current configurations of the OutdoorNav Software will continue navigation if the WiFi disconnects or goes out of range. The Web UI will reconnect once the WiFi has reconnected but certain functions of the UI may be limited such as the ability to issue a pause/stop commands or sending new missions to the UGV. | -| Wireless motion stop range limits | The UGV will motion stop if the UGV is driven out of range of the wireless motion stop device. | -| RTK GPS limited by WiFi range | If WiFi goes out of range, your UGV will not receive RTK corrections from the Base Station. This can potentially decrease the accuracy of the GPS signal which can subsequently degrade path following performance of your system. | -| Obstacle detection may cause UGV to become stuck | The UGV may stop and become stuck if obstacles are detected and not cleared from its path. If obstacle avoidance is enabled, it may not be able to calculate an acceptable path to the next Viapoint or Goal Point under all circumstances. This will result in the UGV becoming stuck and failing its Mission. | -| Failure to set Datum causes undefined behavior | If the Datum is not set or is not synchronized with the navigation module, the UGV's driven path is undefined and will move unpredictably if Missions are sent in this state. | -| Zones are not currently supported | It is not possible to define “keep-out” or “unsafe” zones that the UGV needs to avoid. Rather, careful use of Waypoint placement by the operator can be used to keep the UGV at a safe distance from unsafe zones. | -| No collision avoidance during teleoperation mode | When operating in Manual Mode (Teleoperation), no collision avoidance is enabled. The operator is responsible for avoiding collisions. | - -### Obstacle Detection Limitations {#obstacle-detection-limitations} - -The maximum collision avoidance range for the OutdoorNav Software is -UGV-dependent and is related to the maximum speed of the UGV. These -ranges for Clearpath Robotics UGVs are: - -- Jackal UGV: 4.5 meters -- Husky UGV: 4.5 meters -- Warthog UGV: 15.0 meters - -While the sensors are able to detect objects at further distances, the -OutdoorNav Software only considers obstacles detected within these -distances for collision avoidance. That is, the UGV will only begin to -decelerate as it detects obstacles within this range. - -The detection itself is also related to the horizontal size -(width/diameter) of the obstacle. The limitations in detecting objects -with small horizontal size are described in the table below. - -_Maximum Reliable Obstacle Detection Distance from UGV, according to Obstacle Horizontal Size_ - -| Object Size (Horizontal) | Starter Sensor Kit | Standard Sensor Kit | -|--------------------------|----------------------------------------------------------------|----------------------------------------------------------------| -| Less than 0.6 cm | No reliable detection | No reliable detection | -| 0.6 to 1.0 cm | 0.8 m | No reliable detection | -| 1.0 to 3.0 cm | 2.0 m | 1.75 m | -| Greater than 3.0 cm | Maximum collision avoidance distance (UGV-specific; see above) | Maximum collision avoidance distance (UGV-specific; see above) | - -Finally, the OutdoorNav Software bounds the obstacle detection to -prevent ground hits and to remove detections above the UGV body. The -following bounds are relative to the ground, assuming a flat surface. -Obstacles that are entirely below the lower bound or entirely above the -upper bound are not considered obstacles and will not be avoided. - -_Obstacle Detection Vertical Bounds_ - -| Vertical Bound | Jackal UGV | Husky UGV | Warthog UGV | -|-----------------------|------------|-----------|-------------| -| Lower Detection Bound | 0.3 m | 0.3 m | 0.3 m | -| Upper Detection Bound | 0.8 m | 1.3 m | 1.8 m | - -:::note - -The vertical detection bounds above are for the Standard Sensor Kit or a -custom sensor configuration that includes a Velodyne. The vertical -detection bounds for the Starter Sensor Kit have yet to be determined -for release 0.5.0. - +--- +title: Operating Conditions +sidebar_label: Operating Conditions +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +OutdoorNav Software is designed and tested for use in rugged outdoor +environments. + +## Operating Conditions + +### Terrain + +OutdoorNav Software is compatible with terrains in which the UGV can be +driven manually without excessive slipping. The performance limits will +be a function of the base UGV traction. + +Using Clearpath Robotics Husky, Jackal, and Warthog as a the base UGV, +OutdoorNav Software is suitable for use in the following terrains: + +- asphalt +- concrete +- grass +- snow + +:::note + +Grass should not exceed 30 cm in height if collision avoidance is +enabled. + +::: + +:::note + +Winter/studded tires may be required for proper traction on snow. + +::: + +OutdoorNav Software is currently **not** suitable in the following +terrains: + +- ice +- loose gravel + +:::note + +Support for loose gravel environments is currently being tested and is +expected to be available in late 2023. + +::: + +The terrain capabilities of third-party UGVs will be dependent on a +variety of factors including the vehicle mass, the tire treading, and +motor power. + +### Environment + +OutdoorNav Software is suitable for use in the following environmental +conditions: + +- light rainfall (drizzle) +- light snowfall (powdery snow) + +:::note + +If erratic behavior, such as frequent replanning, is perceived in these +light precipitation conditions, disabling the "continuous planning" +feature may help. + +::: + +OutdoorNav Software is **not** suitable for use in the following +environmental conditions: + +- heavy rainfall +- heavy snowfall + +:::note + +If navigation is required in heavy rain or snow, disabling the collision +avoidance feature will allow the UGV to navigate properly. This should +be done with caution. + +![](/img/outdoornav_images/gps_danger.png) + +::: + +## Performance + +The performance of the system is highly dependent on both the base UGV, +the sensors, the system integration details, and the environment. The +following table provides typical performance metrics for Clearpath +Robotics Jackal and Husky UGVs. + +_System Performance for Husky/Jackal with Typical Sensors_ + +| | Starter Sensor Kit | Standard Sensor Kit (No RTK) | Standard Sensor Kit (RTK) | +|----------------------------------------|-----------------------------------|----------------------------------|----------------------------------| +| GPS sensors | UBlox F9P | 2x SwiftNav Duro | 2x SwiftNav Duro | +| Location accuracy (position & heading) | Less than 60 cm
Less than 10° | Less than 30 cm
Less than 5° | Less than 5 cm
Less than 2° | +| Path tracking accuracy (approximate) | 20 cm | 15 cm | 10 cm | + +## Limitations + +While OutdoorNav Software operates effectively in a range of rugged +outdoor environments, the operator should be aware of the following +limitations and plan accordingly. + +_OutdoorNav System Limitations_ + +| Limitation | Details | +|--------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| RTK accuracy | Localization accuracy for the Standard (RTK) configuration assumes the base station location has been accurately surveyed. | +| Localization accuracy | Localization accuracy is influenced by the quality of GNSS data that is available. Navigating in GNSS denied areas (e.g., under bridges, near tall buildings, etc.) will cause degradation in localization performance. | +| Negative obstacle detection not present | Outdoor Navigation Software does not have negative obstacle detection capability. Your UGV will not detect stairs, cliffs, potholes, depressions or edges and may drive into these obstacles causing harm to people or property. | +| Limited obstacle detection in vertical dimension | The small vertical field of view of 3D LiDARs limits the vertical obstacle detection capability of the OutdoorNav Software. See [Obstacle Detection Limitations](#obstacle-detection-limitations) for details. | +| Low traction may cause UGV to get stuck | Your UGV may navigate itself into a situation where wheels slip or do not make contact with the ground. | +| Rain and snow may affect obstacle detection | Adverse weather conditions may obscure obstacle detection and avoidance data from the VLP-16 LiDAR. Obstacle detection and avoidance may not function in all weather conditions and must be disabled to navigate in heavy snow or rain. | +| Maximum distance between two Viapoints | Distance between any two consecutive Viapoints of a Mission should be less than 20 meters. This will ensure that the global planner can find a valid path to the next Viapoint for the UGV in case there is an obstacle on the path of the UGV. | +| WiFi range limits | The current configurations of the OutdoorNav Software will continue navigation if the WiFi disconnects or goes out of range. The Web UI will reconnect once the WiFi has reconnected but certain functions of the UI may be limited such as the ability to issue a pause/stop commands or sending new missions to the UGV. | +| Wireless motion stop range limits | The UGV will motion stop if the UGV is driven out of range of the wireless motion stop device. | +| RTK GPS limited by WiFi range | If WiFi goes out of range, your UGV will not receive RTK corrections from the Base Station. This can potentially decrease the accuracy of the GPS signal which can subsequently degrade path following performance of your system. | +| Obstacle detection may cause UGV to become stuck | The UGV may stop and become stuck if obstacles are detected and not cleared from its path. If obstacle avoidance is enabled, it may not be able to calculate an acceptable path to the next Viapoint or Goal Point under all circumstances. This will result in the UGV becoming stuck and failing its Mission. | +| Failure to set Datum causes undefined behavior | If the Datum is not set or is not synchronized with the navigation module, the UGV's driven path is undefined and will move unpredictably if Missions are sent in this state. | +| Zones are not currently supported | It is not possible to define “keep-out” or “unsafe” zones that the UGV needs to avoid. Rather, careful use of Waypoint placement by the operator can be used to keep the UGV at a safe distance from unsafe zones. | +| No collision avoidance during teleoperation mode | When operating in Manual Mode (Teleoperation), no collision avoidance is enabled. The operator is responsible for avoiding collisions. | + +### Obstacle Detection Limitations {#obstacle-detection-limitations} + +The maximum collision avoidance range for the OutdoorNav Software is +UGV-dependent and is related to the maximum speed of the UGV. These +ranges for Clearpath Robotics UGVs are: + +- Jackal UGV: 4.5 meters +- Husky UGV: 4.5 meters +- Warthog UGV: 15.0 meters + +While the sensors are able to detect objects at further distances, the +OutdoorNav Software only considers obstacles detected within these +distances for collision avoidance. That is, the UGV will only begin to +decelerate as it detects obstacles within this range. + +The detection itself is also related to the horizontal size +(width/diameter) of the obstacle. The limitations in detecting objects +with small horizontal size are described in the table below. + +_Maximum Reliable Obstacle Detection Distance from UGV, according to Obstacle Horizontal Size_ + +| Object Size (Horizontal) | Starter Sensor Kit | Standard Sensor Kit | +|--------------------------|----------------------------------------------------------------|----------------------------------------------------------------| +| Less than 0.6 cm | No reliable detection | No reliable detection | +| 0.6 to 1.0 cm | 0.8 m | No reliable detection | +| 1.0 to 3.0 cm | 2.0 m | 1.75 m | +| Greater than 3.0 cm | Maximum collision avoidance distance (UGV-specific; see above) | Maximum collision avoidance distance (UGV-specific; see above) | + +Finally, the OutdoorNav Software bounds the obstacle detection to +prevent ground hits and to remove detections above the UGV body. The +following bounds are relative to the ground, assuming a flat surface. +Obstacles that are entirely below the lower bound or entirely above the +upper bound are not considered obstacles and will not be avoided. + +_Obstacle Detection Vertical Bounds_ + +| Vertical Bound | Jackal UGV | Husky UGV | Warthog UGV | +|-----------------------|------------|-----------|-------------| +| Lower Detection Bound | 0.3 m | 0.3 m | 0.3 m | +| Upper Detection Bound | 0.8 m | 1.3 m | 1.8 m | + +:::note + +The vertical detection bounds above are for the Standard Sensor Kit or a +custom sensor configuration that includes a Velodyne. The vertical +detection bounds for the Starter Sensor Kit have yet to be determined +for release 0.5.0. + ::: \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.8.0/overview/overview_scope.mdx b/outdoornav_user_manual_versioned_docs/version-0.8.0/overview/overview_scope.mdx index ba0092f1..f1a32607 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.8.0/overview/overview_scope.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.8.0/overview/overview_scope.mdx @@ -1,15 +1,15 @@ ---- -title: Scope -sidebar_label: Scope -sidebar_position: 2 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -This documentation focuses on the OutdoorNav Software itself, including -hardware dependencies and integration, but not the specifics of UGV -hardware. For details on compatible Clearpath Robotics UGVs and custom -hardware integrations, contact \ or check -out our [YouTube channel](https://www.youtube.com/channel/UCNPP3C-ZK3mwpG2x89VE-2Q). - - +--- +title: Scope +sidebar_label: Scope +sidebar_position: 2 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +This documentation focuses on the OutdoorNav Software itself, including +hardware dependencies and integration, but not the specifics of UGV +hardware. For details on compatible Clearpath Robotics UGVs and custom +hardware integrations, contact \ or check +out our [YouTube channel](https://www.youtube.com/channel/UCNPP3C-ZK3mwpG2x89VE-2Q). + + diff --git a/outdoornav_user_manual_versioned_docs/version-0.8.0/release_notes.mdx b/outdoornav_user_manual_versioned_docs/version-0.8.0/release_notes.mdx index 9849b86f..51dc16e1 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.8.0/release_notes.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.8.0/release_notes.mdx @@ -1,184 +1,184 @@ ---- -title: Release Notes -sidebar_label: Release Notes -sidebar_position: 2 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -import Style from '/assets/css/changelog.css'; - -
- -## 0.8.0 - -### New Features - -- Inertial Measurement Units (IMUs) integrated into localization. -- Added localization status topic (see see [API Endpoints](api/api_endpoints/autonomy_api.mdx)). -- Added re-localization service (see [API Endpoints](api/api_endpoints/autonomy_api.mdx)). -- Additional diagnostic information in the status view. -- Docking improvements including: multiple docks, visual representation of docks on map, - local docking/undocking through teleop view. Docking only functional with 2D LiDARs. -- Customization & Tuning Appendix C added. Lists of tuning parameters for navigation - and collision avoidance are now available. As well as, instructions/process on how to - tune UGVs with differential drive dynamics. Instructions for UGVs with Ackermann dynamics - are on their way. - -### Bug Fixes - -- 1134: Display/Hide Datum Point not working. -- 1139: Issues with non-husky platforms. -- 1137: Refreshing page re-enables edit button while mission running. -- 1276: Feedback added for incorrect first Waypoint placement. - -### Known Issues - -- 131: Software upgrade process not documented fully. -- 609: Realsense D435 collision avoidance not fully tuned. -- 751: Wireless icon in UI doesn't work for Ubiquity hardware. -- 1138: Issues with greying out Waypoints in edge cases . -- 1324: Allow single Waypoint missions and/or tasks on first waypoint (required for undocking through tasks). - -## 0.7.0 - -### New Features - -- Goal terminology has been removed from the mission generation nomenclature (see - [Definitions](web_user_interface/ui_autonomous_mode.mdx#definitions)) - Users can now add tasks, apply final headings, and set navigation tolerances - to any Waypoint in a Mission. -- Drag and Drop of Waypoints now available in Edit Mode. -- New Waypoints can be inserted between existing Waypoints in a Mission. -- Mission API now available to create/edit/load missions, waypoints and tasks. -- Mission execution via mission ID is now available. -- The base station location is now displayed in the UI after carrying out an automated survey. -- New coloring scheme for GNSS status icons to provide more accurate information. - -### Bug Fixes - -- 996: Axis camera missing ptz_state - -### Known Issues - -- 131: Software upgrade process not documented fully. -- 609: Realsense D435 collision avoidance not fully tuned. -- 751: Wireless icon in UI doesn't work for Ubiquity hardware. -- 1134: Display/Hide Datum point not working. -- 1137: Refreshing page re-enables edit button while mission running. -- 1138: Issues with greying out Waypoints in edge cases. - -## 0.6.0 - -### New Features - -- OutdoorNav ROS API updated. API now divided into Platform and - Autonomy sections. See [API Overview](api/api_overview.mdx) - for more details. -- Simulation environment created with charge dock, base station and - camera plugins. -- Added deviation path visualization to UI when constrained replanning - is enabled. -- Modified goalpoint icons to reflect tasks assigned to them. -- Added the ability to record rosbags from UI. -- Added GPS signal strength to status page. -- Added improvements to PTZ controls (cosmetic changes, ability to - disable zoom, added a reset mark). -- User can set map source from OpenStreet, MapBox, Bing Maps, or - custom map tiles through UI. - -### Bug Fixes - -- 632: Prevent users from changing mission while a mission is running. -- 661: Removed map view when no map is provided in default-state.json. - file. -- 712: Fixed front end hanging when user opens menu from any view - other than main view. -- 716: Removed connecting lines from disabled goals. - -### Known Issues - -- 131: Software upgrade process not documented fully. -- 609: Realsense D435 collision avoidance not fully tuned. -- 751: Wireless icon in UI doesn't work for Ubiquity hardware. -- 756: Waypoints stop turning grey when they are hit if a waypoint is - skipped. - -## 0.5.0 - -### New Features - -- Sensor Kit Options: Starter, Standard, Backpack. -- New localization module. -- Added support for UBlox F9K and F9P GNSS receivers in the - localization module. -- Added support for either single or dual Swiftnav Duro/Piksi GNSS - receiver(s) in the localization module. -- Added support for Realsense D435 camera in collision avoidance - module. -- New/updated user modifiable environment variables for sensor and - navigation tuning. -- Added a Virtual Guided tour of the application for first time users. -- Added StreetView and Bing map tiles (to existing MapBox tile). -- Allow users to specify custom map tile source. -- Added cosmetic changes to traversed waypoints as well as a robot. - status icon with ROS topic health information. - -### Bug Fixes - -- 253: Replace default camera image for camera views when stream is - unavailable. -- 281: Fixed navigation latched in a PAUSE state. -- 574: Fixed map settings page to not rerender when robots position - changes. - -### Known Issues - -- 131: Software upgrade process not documented fully. -- 609: Realsense D435 collision avoidance not fully tuned. - -## 0.4.0 - -### New Features - -- Improved wireless charger docking workflow and added ROS Noetic - docking support. -- Added option to record videos from cameras. -- Improved Docker setup to allow concurrent installation with - IndoorNav. -- Added initial support for integration with - [Formant](https://formant.io/). -- Added Docker installation support for Jackal and Warthog robots. - -### Bug Fixes - -- 480: Added rate limiter for continuous planner. -- 490: Fixed base station survey pop up to better reflect survey time. - -### Known Issues - -- 131: Software upgrade process not documented fully. - -## 0.3.0 - -### New Features - -- Upgraded from ROS Melodic to ROS Noetic. -- Published initial performance metrics. -- Updated system architecture to work in Docker containers. - -### Bug Fixes - -- 266: Allowed map offsets to be set more than once without needing to - reset them back to zero. -- 365: Updated costmap to handle large stop distances properly. -- 377: Fixed handling of goal tolerances of 0.02m or less. -- 389: Fixed issue with goal being skipped in some cases where final - heading was specified. - -### Known Issues - -- 131: Software upgrade process not documented fully. -- 150: Docking not yet implemented in Noetic. - +--- +title: Release Notes +sidebar_label: Release Notes +sidebar_position: 2 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +import Style from '/assets/css/changelog.css'; + +
+ +## 0.8.0 + +### New Features + +- Inertial Measurement Units (IMUs) integrated into localization. +- Added localization status topic (see see [API Endpoints](api/api_endpoints/autonomy_api.mdx)). +- Added re-localization service (see [API Endpoints](api/api_endpoints/autonomy_api.mdx)). +- Additional diagnostic information in the status view. +- Docking improvements including: multiple docks, visual representation of docks on map, + local docking/undocking through teleop view. Docking only functional with 2D LiDARs. +- Customization & Tuning Appendix C added. Lists of tuning parameters for navigation + and collision avoidance are now available. As well as, instructions/process on how to + tune UGVs with differential drive dynamics. Instructions for UGVs with Ackermann dynamics + are on their way. + +### Bug Fixes + +- 1134: Display/Hide Datum Point not working. +- 1139: Issues with non-husky platforms. +- 1137: Refreshing page re-enables edit button while mission running. +- 1276: Feedback added for incorrect first Waypoint placement. + +### Known Issues + +- 131: Software upgrade process not documented fully. +- 609: Realsense D435 collision avoidance not fully tuned. +- 751: Wireless icon in UI doesn't work for Ubiquity hardware. +- 1138: Issues with greying out Waypoints in edge cases . +- 1324: Allow single Waypoint missions and/or tasks on first waypoint (required for undocking through tasks). + +## 0.7.0 + +### New Features + +- Goal terminology has been removed from the mission generation nomenclature (see + [Definitions](web_user_interface/ui_autonomous_mode.mdx#definitions)) + Users can now add tasks, apply final headings, and set navigation tolerances + to any Waypoint in a Mission. +- Drag and Drop of Waypoints now available in Edit Mode. +- New Waypoints can be inserted between existing Waypoints in a Mission. +- Mission API now available to create/edit/load missions, waypoints and tasks. +- Mission execution via mission ID is now available. +- The base station location is now displayed in the UI after carrying out an automated survey. +- New coloring scheme for GNSS status icons to provide more accurate information. + +### Bug Fixes + +- 996: Axis camera missing ptz_state + +### Known Issues + +- 131: Software upgrade process not documented fully. +- 609: Realsense D435 collision avoidance not fully tuned. +- 751: Wireless icon in UI doesn't work for Ubiquity hardware. +- 1134: Display/Hide Datum point not working. +- 1137: Refreshing page re-enables edit button while mission running. +- 1138: Issues with greying out Waypoints in edge cases. + +## 0.6.0 + +### New Features + +- OutdoorNav ROS API updated. API now divided into Platform and + Autonomy sections. See [API Overview](api/api_overview.mdx) + for more details. +- Simulation environment created with charge dock, base station and + camera plugins. +- Added deviation path visualization to UI when constrained replanning + is enabled. +- Modified goalpoint icons to reflect tasks assigned to them. +- Added the ability to record rosbags from UI. +- Added GPS signal strength to status page. +- Added improvements to PTZ controls (cosmetic changes, ability to + disable zoom, added a reset mark). +- User can set map source from OpenStreet, MapBox, Bing Maps, or + custom map tiles through UI. + +### Bug Fixes + +- 632: Prevent users from changing mission while a mission is running. +- 661: Removed map view when no map is provided in default-state.json. + file. +- 712: Fixed front end hanging when user opens menu from any view + other than main view. +- 716: Removed connecting lines from disabled goals. + +### Known Issues + +- 131: Software upgrade process not documented fully. +- 609: Realsense D435 collision avoidance not fully tuned. +- 751: Wireless icon in UI doesn't work for Ubiquity hardware. +- 756: Waypoints stop turning grey when they are hit if a waypoint is + skipped. + +## 0.5.0 + +### New Features + +- Sensor Kit Options: Starter, Standard, Backpack. +- New localization module. +- Added support for UBlox F9K and F9P GNSS receivers in the + localization module. +- Added support for either single or dual Swiftnav Duro/Piksi GNSS + receiver(s) in the localization module. +- Added support for Realsense D435 camera in collision avoidance + module. +- New/updated user modifiable environment variables for sensor and + navigation tuning. +- Added a Virtual Guided tour of the application for first time users. +- Added StreetView and Bing map tiles (to existing MapBox tile). +- Allow users to specify custom map tile source. +- Added cosmetic changes to traversed waypoints as well as a robot. + status icon with ROS topic health information. + +### Bug Fixes + +- 253: Replace default camera image for camera views when stream is + unavailable. +- 281: Fixed navigation latched in a PAUSE state. +- 574: Fixed map settings page to not rerender when robots position + changes. + +### Known Issues + +- 131: Software upgrade process not documented fully. +- 609: Realsense D435 collision avoidance not fully tuned. + +## 0.4.0 + +### New Features + +- Improved wireless charger docking workflow and added ROS Noetic + docking support. +- Added option to record videos from cameras. +- Improved Docker setup to allow concurrent installation with + IndoorNav. +- Added initial support for integration with + [Formant](https://formant.io/). +- Added Docker installation support for Jackal and Warthog robots. + +### Bug Fixes + +- 480: Added rate limiter for continuous planner. +- 490: Fixed base station survey pop up to better reflect survey time. + +### Known Issues + +- 131: Software upgrade process not documented fully. + +## 0.3.0 + +### New Features + +- Upgraded from ROS Melodic to ROS Noetic. +- Published initial performance metrics. +- Updated system architecture to work in Docker containers. + +### Bug Fixes + +- 266: Allowed map offsets to be set more than once without needing to + reset them back to zero. +- 365: Updated costmap to handle large stop distances properly. +- 377: Fixed handling of goal tolerances of 0.02m or less. +- 389: Fixed issue with goal being skipped in some cases where final + heading was specified. + +### Known Issues + +- 131: Software upgrade process not documented fully. +- 150: Docking not yet implemented in Noetic. +
\ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.8.0/safety.mdx b/outdoornav_user_manual_versioned_docs/version-0.8.0/safety.mdx index ea70a51b..ba0e8ddf 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.8.0/safety.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.8.0/safety.mdx @@ -1,144 +1,144 @@ ---- -title: Safety -sidebar_label: Safety -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -## Important Safety Information - -The use of Unmanned Ground Vehicles (UGVs) can result in unexpected and -dangerous behavior. Although Clearpath Robotics endeavors to create safe -and reliable software and systems, autonomous outdoor UGVs should not be -considered safe for unsupervised use around humans or other obstacles. -No level of safety and reliability of software and non-safety rated -hardware components is guaranteed. - -Clearpath strongly recommends that users carry out a risk assessment -related to their application and deployment of autonomous UGVs. The -ISO-12100 standard [Risk assessment and risk reduction](https://www.iso.org/standard/51528.html) provides guidance on -performing risk assessments. - -Functional safety in robotics is often achieved through the use of -safety related parts and control systems to minimize risks such as -safety LiDARs for obstacle detection. These hardware components must be -designed into the UGV hardware and can be tightly integrated with -navigation software. Clearpath Robotics recommends that this process be -undertaken after the product or process has been fully defined. It can -be a significant design effort. - -## Safety Notice Levels - -For Clearpath Robotics hardware and software, the risk level is captured -using the following types of labels. - -![](/img/outdoornav_images/safety_information.png) - -## General Hazard Labels - -Review the following to learn more about the labels that may be used on -Clearpath Robotics products. Hazards can also apply to attachments and -accessories used in conjunction with a Clearpath Robotics product. UGVs -from other providers may present additional hazards and risks. - -_General Hazards_ - -| Label | Label Title | Label Description | -|--------------------------------------------------------------------------------------|----------------------|------------------------------------------| -|
| Automatic Motion Hazard | Clearpath Robotics UGVs may begin moving suddenly, either autonomously or when being driven manually. Always be aware of Clearpath Robotics products and their potential for movement. | -|
| Crushing Risk | Objects or personnel can be crushed between the Clearpath Robotics UGV and another object. Keep hands and other objects clear of crush points at all times. Keep clear of all docking Clearpath Robotics UGVs. | -|
| Electrical Shock Risk | Clearpath Robotics UGVs contain circuitry and batteries that may cause electrical shock if not properly insulated. | -|
| Entanglement Risk | Clearpath Robotics UGVs as well as their cameras can lead to entanglement of hair or dangling materials during their rotation. Keep hair and dangling materials away from Clearpath Robotics UGVs during motion. | -|
| Environmental Hazard | Clearpath Robotics UGVs contain batteries and materials that may require special disposal methods. Consult local regulations. | -|
| Falling Object Risk | Beware of objects that may have shifted in any Clearpath Robotics UGV crate as they pose a risk of falling when opened. | -|
| High Surface Temperature Risk | UGV computer heat sinks and UGV motors can become extremely hot during operation. | -|
| Impact Risk | Clearpath Robotics UGVs travelling through a facility can potentially impact objects and personnel. Keep clear of all docking Clearpath Robotics UGVs. | -|
| Laser Radiation Risk | Clearpath Robotics UGVs may use Class 1 laser products. These provide no hazard during normal use, however it is not recommended to stare directly into the beam(s). | -|
| Material Hazard - Lithium | Lithium UGV batteries contain harmful material. Always use proper handling procedures when handling UGV batteries. | -|
| Manual Load Lifting Risk | Always use ergonomic techniques when manually lifting loads. | -|
| Pinching Risk | Keep hands and other objects clear of pinch points at all times. Keep clear of all docking Clearpath Robotics UGVs. | -|
| Radio Frequency Risk | Clearpath Robotics UGVs and/or accessories may use radio frequency (RF) radiating antennas. These provide no hazard during normal use, however prolonged exposure around the antenna is not recommended. | -|
| Tripping Hazard | Clearpath Robotics products may pose a tripping hazard. | - -## Safety Awareness - -Personnel present during the operation of an Unmanned Ground Vehicle -(UGV) need to be made aware or be accompanied by personnel who are -familiar with the specific risks and hazards associated with autonomous -mobile robots (AMR). The following checklist identifies basic topics -that should be addressed by site-specific worker and visitor safety -orientation training. - -
- -
- -- Proper PPE must be worn, including safety footwear (ie. steel toe). -- Crossing into the path of a moving UGV should be avoided, as well as - placing or throwing obstacles into the path of a moving UGV. - -
- -
- -- Be aware that a UGV can be anywhere in the operating area of the - facility at any time, and may pose a tripping hazard even when not - in motion. -- Personnel need to be aware of the UGV docking and charging areas, - where detection fields are reduced. -- Personnel should be aware that Clearpath Robotics UGVs LiDAR safety - scanners use a class 1 laser and high intensity LED. -- Personnel should keep all loose clothing and body parts away from - UGVs, accessories, attachments, and payloads, while they are in - autonomous operation. Using an Emergency Stop button is the only - acceptable manner of interacting with a Clearpath Robotics UGV or - attachment while it is being operated autonomously. - -In addition to the preceding basic items for all workers and visitors, -the following should be considered for facility personnel, including -drivers of other UGVs: - -- When required to move a product manually, personnel must ensure it - is in an Emergency Stop state or shut down completely and should not - push manually for prolonged periods. -- Alert personnel that while operating a Clearpath Robotics UGV - outside of the Autonomy State, they are solely responsible for - obstacle and collision avoidance. -- Maintenance of a Clearpath UGV not outlined in either this document - or the operations and maintenance manual can only be performed by a - Clearpath Robotics Authorized Personnel. - -To reduce the risk of harming people or damaging properties, a trained -operator must monitor the behavior of the UGV under autonomous -navigation mode at all times. The operator should use the wireless -emergency stop device to immediately avert any possible damaging or -dangerous behavior from the UGV. Failure in proper use of the software -might result in collision of the UGV into objects. - -- The minimum height for detecting obstacles under ideal operation - conditions (flat ground, no snow/rain/fog, normal operation of the - LiDAR, etc) when using the standard Clearpath Robotics OutdoorNav - Hardware package on a Husky is typically 0.2 meters high at 2.3 - meters distance away from the UGV. Your UGV may differ. Ensure that - low-height obstacles are removed from the potential path of the UGV - prior to operation. -- OutdoorNav Software does not have negative obstacle detection - capability. This means that your UGV will not detect stairs, cliffs - or edges and may drive off these obstacles causing harm to people or - properties as well as potentially damage the UGV. -- Adverse weather conditions may obscure obstacle detection and - avoidance data from the VLP-16 LiDAR. Obstacle detection and - avoidance may not function properly in snow, rain or fog. -- The current configurations of the OutdoorNav Software will continue - navigation if the WiFi disconnects or goes out of range. The Web UI - will reconnect once the WiFi has reconnected but certain functions - of the Web UI may be limited such as the ability to issue a stop - command or send new missions to the UGV. -- If connection of the UGV to the base station is lost (e.g., WiFi - goes out of range, low battery level, etc), UGV will not receive RTK - corrections from the base station. This can potentially decrease the - accuracy of the GPS signal which can subsequently degrade path - following performance of your system. -- Obstacle detection and avoidance is disabled during the docking and - undocking operations. Keep this area clear of people and objects. +--- +title: Safety +sidebar_label: Safety +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +## Important Safety Information + +The use of Unmanned Ground Vehicles (UGVs) can result in unexpected and +dangerous behavior. Although Clearpath Robotics endeavors to create safe +and reliable software and systems, autonomous outdoor UGVs should not be +considered safe for unsupervised use around humans or other obstacles. +No level of safety and reliability of software and non-safety rated +hardware components is guaranteed. + +Clearpath strongly recommends that users carry out a risk assessment +related to their application and deployment of autonomous UGVs. The +ISO-12100 standard [Risk assessment and risk reduction](https://www.iso.org/standard/51528.html) provides guidance on +performing risk assessments. + +Functional safety in robotics is often achieved through the use of +safety related parts and control systems to minimize risks such as +safety LiDARs for obstacle detection. These hardware components must be +designed into the UGV hardware and can be tightly integrated with +navigation software. Clearpath Robotics recommends that this process be +undertaken after the product or process has been fully defined. It can +be a significant design effort. + +## Safety Notice Levels + +For Clearpath Robotics hardware and software, the risk level is captured +using the following types of labels. + +![](/img/outdoornav_images/safety_information.png) + +## General Hazard Labels + +Review the following to learn more about the labels that may be used on +Clearpath Robotics products. Hazards can also apply to attachments and +accessories used in conjunction with a Clearpath Robotics product. UGVs +from other providers may present additional hazards and risks. + +_General Hazards_ + +| Label | Label Title | Label Description | +|--------------------------------------------------------------------------------------|----------------------|------------------------------------------| +|
| Automatic Motion Hazard | Clearpath Robotics UGVs may begin moving suddenly, either autonomously or when being driven manually. Always be aware of Clearpath Robotics products and their potential for movement. | +|
| Crushing Risk | Objects or personnel can be crushed between the Clearpath Robotics UGV and another object. Keep hands and other objects clear of crush points at all times. Keep clear of all docking Clearpath Robotics UGVs. | +|
| Electrical Shock Risk | Clearpath Robotics UGVs contain circuitry and batteries that may cause electrical shock if not properly insulated. | +|
| Entanglement Risk | Clearpath Robotics UGVs as well as their cameras can lead to entanglement of hair or dangling materials during their rotation. Keep hair and dangling materials away from Clearpath Robotics UGVs during motion. | +|
| Environmental Hazard | Clearpath Robotics UGVs contain batteries and materials that may require special disposal methods. Consult local regulations. | +|
| Falling Object Risk | Beware of objects that may have shifted in any Clearpath Robotics UGV crate as they pose a risk of falling when opened. | +|
| High Surface Temperature Risk | UGV computer heat sinks and UGV motors can become extremely hot during operation. | +|
| Impact Risk | Clearpath Robotics UGVs travelling through a facility can potentially impact objects and personnel. Keep clear of all docking Clearpath Robotics UGVs. | +|
| Laser Radiation Risk | Clearpath Robotics UGVs may use Class 1 laser products. These provide no hazard during normal use, however it is not recommended to stare directly into the beam(s). | +|
| Material Hazard - Lithium | Lithium UGV batteries contain harmful material. Always use proper handling procedures when handling UGV batteries. | +|
| Manual Load Lifting Risk | Always use ergonomic techniques when manually lifting loads. | +|
| Pinching Risk | Keep hands and other objects clear of pinch points at all times. Keep clear of all docking Clearpath Robotics UGVs. | +|
| Radio Frequency Risk | Clearpath Robotics UGVs and/or accessories may use radio frequency (RF) radiating antennas. These provide no hazard during normal use, however prolonged exposure around the antenna is not recommended. | +|
| Tripping Hazard | Clearpath Robotics products may pose a tripping hazard. | + +## Safety Awareness + +Personnel present during the operation of an Unmanned Ground Vehicle +(UGV) need to be made aware or be accompanied by personnel who are +familiar with the specific risks and hazards associated with autonomous +mobile robots (AMR). The following checklist identifies basic topics +that should be addressed by site-specific worker and visitor safety +orientation training. + +
+ +
+ +- Proper PPE must be worn, including safety footwear (ie. steel toe). +- Crossing into the path of a moving UGV should be avoided, as well as + placing or throwing obstacles into the path of a moving UGV. + +
+ +
+ +- Be aware that a UGV can be anywhere in the operating area of the + facility at any time, and may pose a tripping hazard even when not + in motion. +- Personnel need to be aware of the UGV docking and charging areas, + where detection fields are reduced. +- Personnel should be aware that Clearpath Robotics UGVs LiDAR safety + scanners use a class 1 laser and high intensity LED. +- Personnel should keep all loose clothing and body parts away from + UGVs, accessories, attachments, and payloads, while they are in + autonomous operation. Using an Emergency Stop button is the only + acceptable manner of interacting with a Clearpath Robotics UGV or + attachment while it is being operated autonomously. + +In addition to the preceding basic items for all workers and visitors, +the following should be considered for facility personnel, including +drivers of other UGVs: + +- When required to move a product manually, personnel must ensure it + is in an Emergency Stop state or shut down completely and should not + push manually for prolonged periods. +- Alert personnel that while operating a Clearpath Robotics UGV + outside of the Autonomy State, they are solely responsible for + obstacle and collision avoidance. +- Maintenance of a Clearpath UGV not outlined in either this document + or the operations and maintenance manual can only be performed by a + Clearpath Robotics Authorized Personnel. + +To reduce the risk of harming people or damaging properties, a trained +operator must monitor the behavior of the UGV under autonomous +navigation mode at all times. The operator should use the wireless +emergency stop device to immediately avert any possible damaging or +dangerous behavior from the UGV. Failure in proper use of the software +might result in collision of the UGV into objects. + +- The minimum height for detecting obstacles under ideal operation + conditions (flat ground, no snow/rain/fog, normal operation of the + LiDAR, etc) when using the standard Clearpath Robotics OutdoorNav + Hardware package on a Husky is typically 0.2 meters high at 2.3 + meters distance away from the UGV. Your UGV may differ. Ensure that + low-height obstacles are removed from the potential path of the UGV + prior to operation. +- OutdoorNav Software does not have negative obstacle detection + capability. This means that your UGV will not detect stairs, cliffs + or edges and may drive off these obstacles causing harm to people or + properties as well as potentially damage the UGV. +- Adverse weather conditions may obscure obstacle detection and + avoidance data from the VLP-16 LiDAR. Obstacle detection and + avoidance may not function properly in snow, rain or fog. +- The current configurations of the OutdoorNav Software will continue + navigation if the WiFi disconnects or goes out of range. The Web UI + will reconnect once the WiFi has reconnected but certain functions + of the Web UI may be limited such as the ability to issue a stop + command or send new missions to the UGV. +- If connection of the UGV to the base station is lost (e.g., WiFi + goes out of range, low battery level, etc), UGV will not receive RTK + corrections from the base station. This can potentially decrease the + accuracy of the GPS signal which can subsequently degrade path + following performance of your system. +- Obstacle detection and avoidance is disabled during the docking and + undocking operations. Keep this area clear of people and objects. diff --git a/outdoornav_user_manual_versioned_docs/version-0.8.0/simulation.mdx b/outdoornav_user_manual_versioned_docs/version-0.8.0/simulation.mdx index 44cff5f7..86043ef7 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.8.0/simulation.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.8.0/simulation.mdx @@ -1,20 +1,20 @@ ---- -title: Simulation -sidebar_label: Simulation -sidebar_position: 9 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -Simulation with OutdoorNav Software can be useful in several ways. - -- It provides an easy (and low cost!) way of evaluating the main - features in OutdoorNav Software prior to purchasing. -- It allows missions to be planned, executed, and refined in a - repeatable way prior to deployment on UGV hardware. This can be - particularly helpful when integrating OutdoorNav into a larger - software solution, such as a fleet manager. - -At present, OutdoorNav Software simulation is restricted to internal -Clearpath Robotics development and select partners, but is planned for +--- +title: Simulation +sidebar_label: Simulation +sidebar_position: 9 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +Simulation with OutdoorNav Software can be useful in several ways. + +- It provides an easy (and low cost!) way of evaluating the main + features in OutdoorNav Software prior to purchasing. +- It allows missions to be planned, executed, and refined in a + repeatable way prior to deployment on UGV hardware. This can be + particularly helpful when integrating OutdoorNav into a larger + software solution, such as a fleet manager. + +At present, OutdoorNav Software simulation is restricted to internal +Clearpath Robotics development and select partners, but is planned for full deployment. Check back soon for further details. \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.8.0/support.mdx b/outdoornav_user_manual_versioned_docs/version-0.8.0/support.mdx index 9212d99f..4da40f82 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.8.0/support.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.8.0/support.mdx @@ -1,11 +1,11 @@ ---- -title: Support -sidebar_label: Support -sidebar_position: 11 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -import OutdoorNavSupport from "/components/support_outdoornav.mdx"; - +--- +title: Support +sidebar_label: Support +sidebar_position: 11 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +import OutdoorNavSupport from "/components/support_outdoornav.mdx"; + \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.8.0/web_user_interface/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.8.0/web_user_interface/_category_.json index a07ca158..31b78035 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.8.0/web_user_interface/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.8.0/web_user_interface/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Web User Interface", - "position": 6 -} +{ + "label": "Web User Interface", + "position": 6 +} diff --git a/outdoornav_user_manual_versioned_docs/version-0.8.0/web_user_interface/ui_autonomous_mode.mdx b/outdoornav_user_manual_versioned_docs/version-0.8.0/web_user_interface/ui_autonomous_mode.mdx index c3919a07..00a6a771 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.8.0/web_user_interface/ui_autonomous_mode.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.8.0/web_user_interface/ui_autonomous_mode.mdx @@ -1,344 +1,344 @@ ---- -title: Web UI Autonomous Mode -sidebar_label: Web UI Autonomous Mode -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -![](/img/outdoornav_images/gps_danger.png) - -Ensure that the [Safety](../safety.mdx) document has been -read and the user is aware of possible hazards when using this product as well as the safety -methods that can be used to stop the moving UGV. - -The Autonomous Mode of OutdoorNav Software is a set of robotic -navigation modules that enables robotics developers to define and then -autonomously execute missions on UGVs, getting work done without -requiring direct operator action. This software is composed of four main -modules: localization, navigation, safety monitoring and user control -unit. This a combination of Clearpath's proprietary packages and custom -configured open-source packages from ROS community. Please see the -software architecture section for more information. - -## Definitions {#definitions} - -The list below defines what a "Mission" is as well as its components. -These components are referred to throughout this manual. - -- **Mission** A Mission is a set of one or more Waypoints. -- **Path** The list of Waypoints that will determine the path - for the specific Mission. -- **Waypoint** A Waypoint is any geographical point referenced by its - position relative to the datum in meters. -- **Task** A Task is an automated activity or wait time implemented as - a ROS action at a specific Waypoint. Tasks are called in the order they are - added to a Waypoint. -- **Ghost Waypoint** A transparent waypoint that is not part of the mission. This - Waypoint appears between two other waypoints when in edit mode. The user can - drag and drop this ghost waypoint to add a new waypoint to the mission between - the other two waypoints. - -## Map Settings - -
-
- -
Map settings
-
-
- -To access the Map Settings: Menu → Settings → Map: - -1. **Map Offset:** The map tiles used in this software are not - perfectly aligned with the real world. Therefore, the user may need - to apply an offset to the map so that the UGV's position in the - real world matches its position on the map. -2. **Change Datum:** The datum is represented by a blue marker on the - map and should be set to a location within 10km of the test site. - The user can change this value in the Map Settings page. Enter the - new values and click the "Set Datum" button. - -## Mission Creation - -To create a new Mission first ensure that the UI is in "Edit Mode" ( -select the pencil icon in the bottom bar). Then open the drop down menu in the bottom -bar and select the "Add Mission" option. This will allow the user to create a new mission -which can then be defined with Waypoints. - -### Waypoint Mode - -To add new Waypoints to a mission while edit mode is enabled select the -"Waypoint Mode" button. This will allow the user to place Waypoints at -locations where the user clicks on the map. These will appear as red -Waypoints with the exception of the first waypoint (green) and the last waypoint (yellow). - -:::note - -**The first Waypoint in the mission must be within 1.5 meters of the UGV's current position.** - -::: - -As Waypoints are placed, a "ghost waypoint" will appear between each pair of real -Waypoints and can be dragged to a new spot to insert a real Waypoint -between them. Waypoints can also be dragged and dropped on the map to -modify their positions. - -## Constrained Replanning {#constrained_path} - -If constrained replanning is enabled the user can show on the path -deviation distance by navigating to the General settings in the -hamburger menu. Once enabled the area of possible deviation will show -over the planned route as can be seen in the following figure. - -
-
- -
Route with deviation
-
-
- -:::note - -If the UGV is manually driven outside of the constrained replanning area -while a Mission is running, the Mission will need to be restarted as the UGV -will no longer be able to find it's way back onto the path. - -::: - -### Waypoint Panel - -
-
- -
Waypoint Panel
-
-
- -Enable the "Waypoint Panel" toggle to open the list of available Waypoints -within the selected Mission as shown in the figure above. The user can -now rearrange the list, rename Waypoints, add Tasks to the Waypoints, -and modify the final heading and/or tolerance of each Waypoint. - -### Rearrange List of Waypoints - -Waypoints can be rearranged in order of operation in the list. To do this, -enable the "Waypoints Panel" toggle to access the list of Waypoints. Here, the -user will be able to drag and drop the Waypoints to reorder them. - -### Rename Waypoint - -By default, once Waypoints are created they are assigned a default name -which is the word "Waypoint" followed by a numeric value representing the -the number of Waypoints that have been created plus one. The user has the -option to rename these Waypoints in order for them to have more descriptive -meaning. - -To rename a Waypoint follow these steps: - -1. Enable the "Waypoint Panel" toggle. See [Waypoint Panel](#waypoint-panel) - for further details. -2. Click the name of the Waypoint which the user wants to rename. -3. Erase the current name and type the new name. - -### Add Task to Waypoint {#add-task} - -
-
- -
Add Task to Waypoint
-
-
- -To add a Task to the end of a Mission: - -1. Click the "+" icon (beside the Gear icon) in the Waypoint Row the Task is - to be added to. - -2. Click the "Add Task" Button that has appeared. - -3. Select the Task from the dropdown list. Standard waypoint icons will be - replaced accordingly depending on the task selected (waypoint icons will keep the colours - assigned to them based on placement). - - - **Dock UGV:** - Will dock the UGV to begin charging the UGVs - battery. See [Autonomous Docking](#autonomous-docking) - for more information on the autonomous docking feature. - - - **Move PTZ:** - Will move the PTZ camera to the position selected - in the task settings. - - Settings: Select the camera position. See - [Pan-Tilt-Zoom (PTZ) View](ui_overview.mdx#ptz-view) for details on how to - save camera positions. - - - **Save Image:** - Will save an image using one of the UGV camera(s) - to the **/onav_log** folder and can be retrieved using a tool - such as Filezilla. - - Settings: Select which camera the image will be saved from. - - - **Start/Stop Video Recording:** - Will start/stop recording video using one of the - UGV camera(s) to the **/onav_log** folder and can be retrieved - using a tool such as Filezilla. - - Settings: Select which camera the recording will come from. - - - **Undock UGV:** - Will undock the UGV from the autocharge dock. Once - completed, the UGV can be sent on autonomous missions. It is - often recommended to place the undock Task first in the list of Waypoints; - that way, the UGV will automatically continue towards its next - Waypoint once undocked. See Section - [Autonomous Docking](#autonomous-docking) for more - information on the autonomous docking feature. - - - **Wait:** - Will pause and wait for the specified number of - seconds at the end of the Waypoint. - - Settings: Enter the amount of time to wait, in seconds. - -4. Click the Gear icon next to the selected Task to add the required - Settings. - - :::note - - If a waypoint has more than one task assigned to it, the icon will - be replaced with - - ::: - -### Advanced Settings - - - -#### Waypoint Heading - -When creating a Waypoint, the user has the option of setting a final heading -for the Waypoint. For example, when creating a Waypoint at an inspection point, -the user may want the UGV to navigate and stop facing a certain -direction. In [Waypoint Panel](#waypoint-panel), the list of -Waypoints can be seen and the advanced settings of each Waypoint can be accessed -by clicking the "Gear" icon. - -To set the Waypoint's final heading, the user will need to check the -"Final Heading Enabled" checkbox and enter the heading value in -degrees. The heading indicator on the top bar can be used to help set -this value. See the figure below showing the advanced settings. - -
-
- -
Waypoint Advanced Settings
-
-
- -The heading that has been entered will only be applied to the Waypoint -(ie. the robot will only align itself with the correct heading at the -Waypoint). If the robot is required to be at specific headings at -other Waypoints the user will need to enter these in for each specific Waypoint. - -#### Waypoint Tolerance - -When creating a Mission, the user has the option of setting a specific -tolerance for each Waypoint. By default, the Waypoint position and orientation -tolerances are 0.3 meters and 180°, respectively. If a specific Waypoint -requires that the tolerances be either increased or decreased, these -values can be modified in the advanced settings. For example, if it's -required that the position and/or orientation at a Waypoint be very accurate, -such as 0.1 meters position and 5° orientation, or looser at 1.0 meter -position, this can be done within these settings. - -In [Waypoint Panel](#waypoint-panel), the list of waypoints can be -seen and the advanced settings of each Waypoint can be accessed by clicking -the "Gear" icon. To set the Waypoint's tolerance, the user will need to -check the "Waypoint Tolerance Enabled" checkbox and enter the position and -orientation values, in meters and degrees, respectively. - -## Mission Execution - -### Start Mission - -At the bottom of the UI, the user has the ability to start the currently -selected Mission by clicking the "Play" button . When the -Mission has been started this button will turn green. - -### Pause Mission - -At the bottom of the UI, the user has the ability to pause the currently -running mission by clicking the "Pause" button . When the -mission has been paused this button will turn yellow. Pausing a mission -allows the user to take time to look around with the camera or to -teleoperate the UGV to a nearby location to perform an inspection. For -ease of operation, the user must PAUSE the active mission if the user -wants to teleoperate the UGV. - -### Cancel Mission/Task - -At the bottom of the UI, the user has the ability to stop the currently -running mission or task by clicking the "Stop" button . When the -mission/task has been cancelled this button will turn red. The name of -the mission/task will be shown to be cancelled in the feedback bar. - -## Autonomous Docking - -
-
- -
Dock Icon
-
-
- -### Docking The UGV - -To dock the UGV autonomously, the user should follow these steps: - -- Enable the "Edit Mission" toggle. -- Create a Mission whose Waypoints approach the dock from the front and - whose final Waypoint is within the maximum predock distance which is shown as a circle around the dock. -- Enable the Waypoints Panel toggle to view the list of Waypoints, rename the last - Waypoint to "Dock Waypoint" or something descriptive and add the "Dock - UGV" Task to this Waypoint. If there is more than one dock in the system the user will - have to open the task options and select the dock name from the list. -- Run the Mission. - -### Undocking The UGV - -To undock the UGV autonomously, the user should follow these steps: - -- Enable the "Edit Mission" toggle. Select the "Waypoint Mode" - button. -- Select the Waypoint icon on the bottom bar to create a Waypoint at the - current location of the UGV. This step should either be it's own mission - or it should be the starting point of a mission. -- Enable the Waypoints Panel toggle to view the list of Waypoints, rename this - Waypoint to "Undock Waypoint" or something descriptive and add the - "Undock UGV" task to the Waypoint that was just created. -- Run the Mission. - -### Compatibility with a Doghouse - -In order for the autonomous docking feature to be compatible with a doghouse, the -doghouse must conform to a few specifications: - -- Must be installed on a flat surface, and have no elevation change between the - charge-deck and the outdoor surface (ie. no ramp into the doghouse). -- Must be greater than 1.2 m wide. -- Must be between 1.5 and 2.5 m long. -- Dock target should be installed centered along the back of the doghouse. - -### Recover from Failed Docking or Undocking - -If for any reason, the docking or undocking tasks fail, the user can: - -- Manually drive the UGV towards the dock target, aligning the - charging unit with the receiver on the UGV. -- Manually drive the UGV in reverse away from the dock target. It is - suggested that the user reverse roughly 2-3 meters away from the target, - then wait 1-2 minutes before starting any autonomous navigation - missions. +--- +title: Web UI Autonomous Mode +sidebar_label: Web UI Autonomous Mode +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +![](/img/outdoornav_images/gps_danger.png) + +Ensure that the [Safety](../safety.mdx) document has been +read and the user is aware of possible hazards when using this product as well as the safety +methods that can be used to stop the moving UGV. + +The Autonomous Mode of OutdoorNav Software is a set of robotic +navigation modules that enables robotics developers to define and then +autonomously execute missions on UGVs, getting work done without +requiring direct operator action. This software is composed of four main +modules: localization, navigation, safety monitoring and user control +unit. This a combination of Clearpath's proprietary packages and custom +configured open-source packages from ROS community. Please see the +software architecture section for more information. + +## Definitions {#definitions} + +The list below defines what a "Mission" is as well as its components. +These components are referred to throughout this manual. + +- **Mission** A Mission is a set of one or more Waypoints. +- **Path** The list of Waypoints that will determine the path + for the specific Mission. +- **Waypoint** A Waypoint is any geographical point referenced by its + position relative to the datum in meters. +- **Task** A Task is an automated activity or wait time implemented as + a ROS action at a specific Waypoint. Tasks are called in the order they are + added to a Waypoint. +- **Ghost Waypoint** A transparent waypoint that is not part of the mission. This + Waypoint appears between two other waypoints when in edit mode. The user can + drag and drop this ghost waypoint to add a new waypoint to the mission between + the other two waypoints. + +## Map Settings + +
+
+ +
Map settings
+
+
+ +To access the Map Settings: Menu → Settings → Map: + +1. **Map Offset:** The map tiles used in this software are not + perfectly aligned with the real world. Therefore, the user may need + to apply an offset to the map so that the UGV's position in the + real world matches its position on the map. +2. **Change Datum:** The datum is represented by a blue marker on the + map and should be set to a location within 10km of the test site. + The user can change this value in the Map Settings page. Enter the + new values and click the "Set Datum" button. + +## Mission Creation + +To create a new Mission first ensure that the UI is in "Edit Mode" ( +select the pencil icon in the bottom bar). Then open the drop down menu in the bottom +bar and select the "Add Mission" option. This will allow the user to create a new mission +which can then be defined with Waypoints. + +### Waypoint Mode + +To add new Waypoints to a mission while edit mode is enabled select the +"Waypoint Mode" button. This will allow the user to place Waypoints at +locations where the user clicks on the map. These will appear as red +Waypoints with the exception of the first waypoint (green) and the last waypoint (yellow). + +:::note + +**The first Waypoint in the mission must be within 1.5 meters of the UGV's current position.** + +::: + +As Waypoints are placed, a "ghost waypoint" will appear between each pair of real +Waypoints and can be dragged to a new spot to insert a real Waypoint +between them. Waypoints can also be dragged and dropped on the map to +modify their positions. + +## Constrained Replanning {#constrained_path} + +If constrained replanning is enabled the user can show on the path +deviation distance by navigating to the General settings in the +hamburger menu. Once enabled the area of possible deviation will show +over the planned route as can be seen in the following figure. + +
+
+ +
Route with deviation
+
+
+ +:::note + +If the UGV is manually driven outside of the constrained replanning area +while a Mission is running, the Mission will need to be restarted as the UGV +will no longer be able to find it's way back onto the path. + +::: + +### Waypoint Panel + +
+
+ +
Waypoint Panel
+
+
+ +Enable the "Waypoint Panel" toggle to open the list of available Waypoints +within the selected Mission as shown in the figure above. The user can +now rearrange the list, rename Waypoints, add Tasks to the Waypoints, +and modify the final heading and/or tolerance of each Waypoint. + +### Rearrange List of Waypoints + +Waypoints can be rearranged in order of operation in the list. To do this, +enable the "Waypoints Panel" toggle to access the list of Waypoints. Here, the +user will be able to drag and drop the Waypoints to reorder them. + +### Rename Waypoint + +By default, once Waypoints are created they are assigned a default name +which is the word "Waypoint" followed by a numeric value representing the +the number of Waypoints that have been created plus one. The user has the +option to rename these Waypoints in order for them to have more descriptive +meaning. + +To rename a Waypoint follow these steps: + +1. Enable the "Waypoint Panel" toggle. See [Waypoint Panel](#waypoint-panel) + for further details. +2. Click the name of the Waypoint which the user wants to rename. +3. Erase the current name and type the new name. + +### Add Task to Waypoint {#add-task} + +
+
+ +
Add Task to Waypoint
+
+
+ +To add a Task to the end of a Mission: + +1. Click the "+" icon (beside the Gear icon) in the Waypoint Row the Task is + to be added to. + +2. Click the "Add Task" Button that has appeared. + +3. Select the Task from the dropdown list. Standard waypoint icons will be + replaced accordingly depending on the task selected (waypoint icons will keep the colours + assigned to them based on placement). + + - **Dock UGV:** + Will dock the UGV to begin charging the UGVs + battery. See [Autonomous Docking](#autonomous-docking) + for more information on the autonomous docking feature. + + - **Move PTZ:** + Will move the PTZ camera to the position selected + in the task settings. + + Settings: Select the camera position. See + [Pan-Tilt-Zoom (PTZ) View](ui_overview.mdx#ptz-view) for details on how to + save camera positions. + + - **Save Image:** + Will save an image using one of the UGV camera(s) + to the **/onav_log** folder and can be retrieved using a tool + such as Filezilla. + + Settings: Select which camera the image will be saved from. + + - **Start/Stop Video Recording:** + Will start/stop recording video using one of the + UGV camera(s) to the **/onav_log** folder and can be retrieved + using a tool such as Filezilla. + + Settings: Select which camera the recording will come from. + + - **Undock UGV:** + Will undock the UGV from the autocharge dock. Once + completed, the UGV can be sent on autonomous missions. It is + often recommended to place the undock Task first in the list of Waypoints; + that way, the UGV will automatically continue towards its next + Waypoint once undocked. See Section + [Autonomous Docking](#autonomous-docking) for more + information on the autonomous docking feature. + + - **Wait:** + Will pause and wait for the specified number of + seconds at the end of the Waypoint. + + Settings: Enter the amount of time to wait, in seconds. + +4. Click the Gear icon next to the selected Task to add the required + Settings. + + :::note + + If a waypoint has more than one task assigned to it, the icon will + be replaced with + + ::: + +### Advanced Settings + + + +#### Waypoint Heading + +When creating a Waypoint, the user has the option of setting a final heading +for the Waypoint. For example, when creating a Waypoint at an inspection point, +the user may want the UGV to navigate and stop facing a certain +direction. In [Waypoint Panel](#waypoint-panel), the list of +Waypoints can be seen and the advanced settings of each Waypoint can be accessed +by clicking the "Gear" icon. + +To set the Waypoint's final heading, the user will need to check the +"Final Heading Enabled" checkbox and enter the heading value in +degrees. The heading indicator on the top bar can be used to help set +this value. See the figure below showing the advanced settings. + +
+
+ +
Waypoint Advanced Settings
+
+
+ +The heading that has been entered will only be applied to the Waypoint +(ie. the robot will only align itself with the correct heading at the +Waypoint). If the robot is required to be at specific headings at +other Waypoints the user will need to enter these in for each specific Waypoint. + +#### Waypoint Tolerance + +When creating a Mission, the user has the option of setting a specific +tolerance for each Waypoint. By default, the Waypoint position and orientation +tolerances are 0.3 meters and 180°, respectively. If a specific Waypoint +requires that the tolerances be either increased or decreased, these +values can be modified in the advanced settings. For example, if it's +required that the position and/or orientation at a Waypoint be very accurate, +such as 0.1 meters position and 5° orientation, or looser at 1.0 meter +position, this can be done within these settings. + +In [Waypoint Panel](#waypoint-panel), the list of waypoints can be +seen and the advanced settings of each Waypoint can be accessed by clicking +the "Gear" icon. To set the Waypoint's tolerance, the user will need to +check the "Waypoint Tolerance Enabled" checkbox and enter the position and +orientation values, in meters and degrees, respectively. + +## Mission Execution + +### Start Mission + +At the bottom of the UI, the user has the ability to start the currently +selected Mission by clicking the "Play" button . When the +Mission has been started this button will turn green. + +### Pause Mission + +At the bottom of the UI, the user has the ability to pause the currently +running mission by clicking the "Pause" button . When the +mission has been paused this button will turn yellow. Pausing a mission +allows the user to take time to look around with the camera or to +teleoperate the UGV to a nearby location to perform an inspection. For +ease of operation, the user must PAUSE the active mission if the user +wants to teleoperate the UGV. + +### Cancel Mission/Task + +At the bottom of the UI, the user has the ability to stop the currently +running mission or task by clicking the "Stop" button . When the +mission/task has been cancelled this button will turn red. The name of +the mission/task will be shown to be cancelled in the feedback bar. + +## Autonomous Docking + +
+
+ +
Dock Icon
+
+
+ +### Docking The UGV + +To dock the UGV autonomously, the user should follow these steps: + +- Enable the "Edit Mission" toggle. +- Create a Mission whose Waypoints approach the dock from the front and + whose final Waypoint is within the maximum predock distance which is shown as a circle around the dock. +- Enable the Waypoints Panel toggle to view the list of Waypoints, rename the last + Waypoint to "Dock Waypoint" or something descriptive and add the "Dock + UGV" Task to this Waypoint. If there is more than one dock in the system the user will + have to open the task options and select the dock name from the list. +- Run the Mission. + +### Undocking The UGV + +To undock the UGV autonomously, the user should follow these steps: + +- Enable the "Edit Mission" toggle. Select the "Waypoint Mode" + button. +- Select the Waypoint icon on the bottom bar to create a Waypoint at the + current location of the UGV. This step should either be it's own mission + or it should be the starting point of a mission. +- Enable the Waypoints Panel toggle to view the list of Waypoints, rename this + Waypoint to "Undock Waypoint" or something descriptive and add the + "Undock UGV" task to the Waypoint that was just created. +- Run the Mission. + +### Compatibility with a Doghouse + +In order for the autonomous docking feature to be compatible with a doghouse, the +doghouse must conform to a few specifications: + +- Must be installed on a flat surface, and have no elevation change between the + charge-deck and the outdoor surface (ie. no ramp into the doghouse). +- Must be greater than 1.2 m wide. +- Must be between 1.5 and 2.5 m long. +- Dock target should be installed centered along the back of the doghouse. + +### Recover from Failed Docking or Undocking + +If for any reason, the docking or undocking tasks fail, the user can: + +- Manually drive the UGV towards the dock target, aligning the + charging unit with the receiver on the UGV. +- Manually drive the UGV in reverse away from the dock target. It is + suggested that the user reverse roughly 2-3 meters away from the target, + then wait 1-2 minutes before starting any autonomous navigation + missions. diff --git a/outdoornav_user_manual_versioned_docs/version-0.8.0/web_user_interface/ui_manual_mode.mdx b/outdoornav_user_manual_versioned_docs/version-0.8.0/web_user_interface/ui_manual_mode.mdx index 05588284..7c049a0a 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.8.0/web_user_interface/ui_manual_mode.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.8.0/web_user_interface/ui_manual_mode.mdx @@ -1,49 +1,49 @@ ---- -title: Web UI Manual Mode (Teleoperation) -sidebar_label: Web UI Manual Mode (Teleoperation) -sidebar_position: 2 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -The Manual Mode in the Web UI allows the user to operate the UGV -remotely (teleoperate) by using sensors on the UGV to visualize the -environment and by using a joystick to control the motion of the UGV. - -![](/img/outdoornav_images/teleop_danger.png) - -Ensure that you have read [Safety](../safety.mdx) and are -aware of possible hazards when using this product as well as the safety -methods that can be used to stop the moving UGV. - -
-
- -
Teleoperation Components
-
-
- -1. **Speedometer:** An indicator of the UGV's current forward speed. -2. **Joystick:** The joystick will allow the user to move the UGV - manually from the UI. Motion can be sent to the UGV in 360° - directions and the speed can be controlled by the distance of the - joystick from its neutral position. -3. **Sensitivity Scale:** A UGV-specific scale that controls the - maximum allowable UGV velocities at each level. The maximum linear - velocity is 1.0 meters per second and the maximum angular velocity - is 0.5 radians per second. The scale levels are 100%, 80%, 50% and - 20%, with the default set to 80%. -4. **Local Docking Buttons:** The local docking/undocking buttons used - to dock/undock the UGV through the teleop view. To dock, the UGV - must be within the predock distance and facing the dock before the - button is selected. - -## Monitor Wireless Strength - -While teleoperating the UGV, the user will notice that the delay between -the time a command is sent and the time it is executed (and/or visible -on the UI camera views) will increase as the distance increases. This -effect will be further amplified by any obstacles between the UGV and -the base (eg. walls, vehicles, mounds, etc.). It is important to monitor -this delay an be cautious when driving the UGV with larger delay for +--- +title: Web UI Manual Mode (Teleoperation) +sidebar_label: Web UI Manual Mode (Teleoperation) +sidebar_position: 2 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +The Manual Mode in the Web UI allows the user to operate the UGV +remotely (teleoperate) by using sensors on the UGV to visualize the +environment and by using a joystick to control the motion of the UGV. + +![](/img/outdoornav_images/teleop_danger.png) + +Ensure that you have read [Safety](../safety.mdx) and are +aware of possible hazards when using this product as well as the safety +methods that can be used to stop the moving UGV. + +
+
+ +
Teleoperation Components
+
+
+ +1. **Speedometer:** An indicator of the UGV's current forward speed. +2. **Joystick:** The joystick will allow the user to move the UGV + manually from the UI. Motion can be sent to the UGV in 360° + directions and the speed can be controlled by the distance of the + joystick from its neutral position. +3. **Sensitivity Scale:** A UGV-specific scale that controls the + maximum allowable UGV velocities at each level. The maximum linear + velocity is 1.0 meters per second and the maximum angular velocity + is 0.5 radians per second. The scale levels are 100%, 80%, 50% and + 20%, with the default set to 80%. +4. **Local Docking Buttons:** The local docking/undocking buttons used + to dock/undock the UGV through the teleop view. To dock, the UGV + must be within the predock distance and facing the dock before the + button is selected. + +## Monitor Wireless Strength + +While teleoperating the UGV, the user will notice that the delay between +the time a command is sent and the time it is executed (and/or visible +on the UI camera views) will increase as the distance increases. This +effect will be further amplified by any obstacles between the UGV and +the base (eg. walls, vehicles, mounds, etc.). It is important to monitor +this delay an be cautious when driving the UGV with larger delay for risk of crashing into obstacles. \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.8.0/web_user_interface/ui_overview.mdx b/outdoornav_user_manual_versioned_docs/version-0.8.0/web_user_interface/ui_overview.mdx index f21f973d..25f17d37 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.8.0/web_user_interface/ui_overview.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.8.0/web_user_interface/ui_overview.mdx @@ -1,383 +1,383 @@ ---- -title: Web UI Overview -sidebar_label: Web UI Overview -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -The Web User Interface (Web UI) provides a easy, graphical, means to -control both manual and autonomous operation of your UGV. The following -sections outline: the components and views of the UI, the details of -operating in manual mode, and the details of operating in autonomous -mode. - -## Main Components - -
-
- -
UI Main Components
-
-
- -1. **Menu:** A dropdown menu allowing the user to access the Dashboard - (ie. Home), Settings, Status or Help pages. - -2. **Path Progress Meter:** A meter indicating the percentage complete - of a Mission. - -3. **UGV Position:** The UGV's X and Y position in the world frame - relative to the Datum. - -4. **UGV Heading:** The UGV's heading in the world frame. - -5. **Status Indicator:** The status indicator will display information - regarding various UGV status monitors such as the Emergency Stop, - Surveying, etc. When the UGV is fully operational, the indicator - will be green. - -6. **GPS Status Indicator:** The GPS status indicators will display GPS - signal accuracy for position (POS indicator) and heading (DIR - indicator). Green indicators represent RTK accuracy and are - currently required for accurate autonomous navigation. Yellow and orange - indicators represent SBAS and SPP accuracy respectively and noticeable - oscillations may occur in such cases. Red indicators mean no GPS signal - and autonomous navigation missions should not be started. - -7. **ROS Status Indicator:** The ROS status indicator is used to give a - quick overview of the current status of the watched ROS topics. If - green it means that all topics are being received correctly while yellow - indicates that one or more topics is not being recieved. Further information - can be found in the status page by clicking on the ROS status indicator. - -8. **Battery Life Indicator:** The UGV's battery life indicator. - - :::note - - If the indicator is stuck at 50%, that means that your UGV does not - have a supported battery management system and this indicator is not - active. - - ::: - -9. **Wireless Connection Indicator:** The wireless connection indicator - represents the signal strength between the wifi access point - (typically the Base Station) and the UGV. - -10. **Views List:** A dropdown list of available views, detailed later - in this section. Some of the available views are Map, Camera and 3D - views, etc. - -11. **Mission List:** View the list of Missions that Operator(s) have - created. - -12. **Edit Mission Toggle:** This toggle allows the user to start - creating Waypoints for the current Mission. The user will also be able to - drag and drop Waypoints in this mode. Once this button is enabled, - the Waypoint Mode will now be available for selection. When a Mission is - started this toggle will be disabled (ie. the Operator will not be able - to modify/add Waypoints). - - :::note - - If the toggle is enabled while an autonomous Mission is running, it - will cancel the current Mission. - - ::: - -13. **Waypoint Panel Toggle:** View list of Waypoints in the current Mission. - -14. **Waypoint Drop Button:** The Waypoint indicator marker on the - bottom bar allows the user to place a Waypoint at the location of the UGV. - -15. **Start Button:** Start the current Mission. - -16. **Pause Button:** Pause the current Mission. Pressing the start button - while paused will continue the current Mission. - -17. **Stop Button:** Cancel the Mission or Task that is currently being - executed. Pressing the start button while when stopped will restart - the list of steps in the current Mission. - -18. **Feedback Bar:** The feedback bar will display information - regarding the execution state of the navigation and of any Tasks - being executed. - -By opening the dropdown list "Views", on the right side of the UI, the -Operator can access the following views: - -- Map View -- PTZ Camera View (if available) -- Front/Back Camera View (if available) -- 3D View - -## Map View - -
-
- -
Map View
-
-
- -1. **Zoom Buttons:** These buttons allow the user to zoom in/out of the - map levels. -2. **Zoom-to-Fit Button:** This button will zoom the map to where there - is activity (ie. where the datum is set or where Waypoints have been - set on the map. -3. **Pointer Mode Button:** This button allows the user to move the map - and select point on the map to see their coordinate (lat/lon or - x/y). -4. **Waypoint Mode Button:** This button allows the user to place - Waypoints on the map. Users can also select existing Waypoints to - modify/delete them. -5. **UGV:** The blue arrow represents the UGV. Its location is its - position in the world frame and its orientation is the heading in - the world frame. -6. **Base Station:** The yellow antenna icon is the last known location of - the base station based on the last survey performed. By clicking it the - user will be presented with the base station's coordinates, when it was - surveyed, and how many samples were taken during the survey. - -7. **Datum:** The blue Waypoint marker on the map view represents the - location of the reference point (ie. (x,y)=(0,0)) of the world - coordinate system. The world (ie. map) coordinate system is in the - ENU convention. -8. **Scale:** The scale representing the ratio of a distance on the map - to the corresponding distance on the ground. - -## Camera Views - -:::note - -If PTZ and/or Front/Back camera(s) are included on the UGV, their feeds -can be viewed through the UI and the PTZ can be controlled through the -UI. If not, there will not be any PTZ, Front/Back view(s) in the list of -available views. - -::: - -### Pan-Tilt-Zoom (PTZ) View {#ptz-view} - -
-
- -
PTZ Camera View
-
-
- -1. **Tilt Slider:** The left slider can be used to tilt the camera in a - vertical motion, (ie. upwards or downwards motion). By default, the - slider is at its neutral ("zero") position. -2. **Pan Slider:** The bottom slider can be used to pan/rotate the - camera, (ie. rotational motion). By default, the slider is at its - neutral ("zero") position. -3. **Zoom Slider:** The right slider can be used to zoom the camera - feed. By default, the slider is at its neutral ("zero") position. -4. **Save Image:** Depending on the current camera view selected, this - button will save an image to the computer/tablet running the UI. - Images will be saved to the location in which your browser saves - files. -5. **Camera Positions List:** Display the list of available camera - positions that have been saved. These camera positions can be - deleted from this list by clicking the "garbage can" icon beside - the corresponding position. -6. **Save Camera Position:** This button will save the camera position - to be used in the "Move PTZ" task. An example use case would be: - 1. Switch to the PTZ camera view. - 2. Teleoperate the UGV to a location at which the user can inspect - something. - 3. Move the camera sliders to orient the camera such that it is - looking at the inspection point. - 4. Click the "Save Camera Position". - 5. When creating an autonomous mission to this inspection point, - add the "Move PTZ" task to a Waypoint. - 6. Click the settings button beside the task and add the camera - position related to the inspection point. - -### Front and Back Views - -
-
- -
Front View
-
-
- -
-
- -
Back View
-
-
- -## 3D View - -The 3D view allows the user to visualize the pointcloud data being -acquired by the VLP-16 LiDAR. - -
-
- -
3D View
-
-
- -## System Configuration - -### Map Source Configuration - -The Web UI ships with access to free -[OpenStreetMap](https://www.openstreetmap.org/) maps. Aerial view -requires access to third-party aerial maps or your own aerial maps. - -The Web UI is pre-configured to work with -[MapBox](https://www.mapbox.com/) and [Bing -Maps](https://www.bingmapsportal.com/) once a suitable map key has been -acquired. Both services offer a free tier that will be sufficient in -almost all cases. - -#### Using OpenStreetMap Maps - -As no key is required to use -[OpenStreetMap](https://www.openstreetmap.org/) maps, the process to -select these maps in the Web UI is simple. - -1. In the Web UI, from the menu, select **Settings→Map** to bring up - the **Map Settings** page. -2. Select **OpenStreetMap** -3. Click **Ok**. - -
-
- -
Using Map Settings to select OpenStreetMap
-
-
- -#### Using MapBox Maps - -Using [MapBox](https://www.mapbox.com/) maps requires a key, which can -then be used by the Web UI. The steps to set up MapBox are outlined -below. - -1. Acquire a MapBox key from the [MapBox - website](https://account.mapbox.com/auth/signup/). Review the - license terms and select the appropriate plan. In most cases, the - free tier will be sufficient. -2. Back in the Web UI, from the menu, select **Settings→Map** to bring - up the **Map Settings** page. -3. Select **MapBox**. -4. Copy the MapBox key from Step 1 into the **Map Key** field. -5. Click **Ok**. - -
-
- -
Using Map Settings to select MapBox
-
-
- -#### Using Bing Maps - -Using [Bing Maps](https://www.bingmapsportal.com/) requires a key, which -can then be used by the Web UI. The steps to set up Bing Maps are -outlined below. - -1. Acquire a Bing Maps key from the [Bing - website](https://www.microsoft.com/en-us/maps/create-a-bing-maps-key). - Review the license terms and select the appropriate plan. In most - cases, the free tier will be sufficient. -2. Back in the Web UI, from the menu, select **Settings→Map** to bring - up the **Map Settings** page. -3. Select **Bing Maps**. -4. Copy the Bing Maps key from Step 1 into the **Map Key** field. -5. Click **Ok**. - -
-
- -
Using Map Settings to select Bing Maps
-
-
- -#### Using Custom Maps {#using_custom_maps} - -Custom Maps allow you to use another set of maps in XYZ format, either -from a third-party map provider or from maps that you have generated on -your own, such as from drone aerial images. Custom maps can be selected -by using the steps below. - -1. Ensure that the maps are accessible on an internal network or on the - Internet by the device that is being used to display the Web UI, - such as a laptop, tablet, or desktop computer. -2. Ensure that the directory structure for the individual tiles is well - defined. See the section below for details on - [Preparing Custom Map Tiles from Drone Aerial Images](#preparing_custom_map_tiles). -3. In the Web UI, from the menu, select **Settings→Map** to bring up - the **Map Settings** page. -4. Select **Custom**. -5. Enter the network path for the maps into the **Custom URL** field. - If hosting the maps on your local computer, this will be similar to - http://localhost:8000/{z}/{x}/{-y}.png. Note how the - URL is parameterized with `{z}`, `{x}`, and `{-y}` values. This will - need to be adapted to match the directory structure of your map tile - images. -6. Click **Ok**. - -
-
- -
Using Map Settings to select Custom maps
-
-
- -#### Preparing Custom Map Tiles from Drone Aerial Images {#preparing_custom_map_tiles} - -In some cases, it is desirable to create your own maps rather than using -third party maps which might be outdated. One way to do this is to use a -drone to capture aerial images and convert those images into map tiles. -While there are many ways to accomplish this, one approach is outlined -below. - -1. Use a drone to collect top-down photos covering the area of - interest. It is highly recommended to use a drone control app that - allows you to specify the area of interest and desired image overlap - (recommended \~75%) and takes care of coverage planning, drone - control, and image acquisition. - -2. Perform ortho-mosaicing/ortho-rectification to stitch the collected - images together into a single orthographic image. [Open Drone - Map](https://www.opendronemap.org/) is a popular open source project - that Clearpath has used for stitching, but there are also paid - services that automate the process. - -3. Georeference the orthographic image. One way to do this is to define - the locations of well-defined features (sewer grates, utility holes, - etc.) based on their known positions, such as their position data - from an existing mapping service (e.g., Google Maps). Open source - tools, such as [QGIS](https://www.qgis.org/en/site/) can help with - this process. - -4. Generate the map tiles. Using Ubuntu, this can be accomplished with - the following commands, where `GEOREFERENCED_IMG.tif` is the output - of the previous step. - - ``` - sudo apt install gdal-bin - gdal2tiles.py - ``` - -5. Use a web server to host the tiles locally. Using Ubuntu, one way to - accomplish this is to use the commands below, which will make the - tiles available at: \. - - ``` - cd /base/directory/of/tiles - python3 -m http.server - ``` - -Once your map tiles are available on the network, you can follow the -steps in [Using Custom Maps](#using_custom_maps) to have the -Web UI use your custom tiles. +--- +title: Web UI Overview +sidebar_label: Web UI Overview +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +The Web User Interface (Web UI) provides a easy, graphical, means to +control both manual and autonomous operation of your UGV. The following +sections outline: the components and views of the UI, the details of +operating in manual mode, and the details of operating in autonomous +mode. + +## Main Components + +
+
+ +
UI Main Components
+
+
+ +1. **Menu:** A dropdown menu allowing the user to access the Dashboard + (ie. Home), Settings, Status or Help pages. + +2. **Path Progress Meter:** A meter indicating the percentage complete + of a Mission. + +3. **UGV Position:** The UGV's X and Y position in the world frame + relative to the Datum. + +4. **UGV Heading:** The UGV's heading in the world frame. + +5. **Status Indicator:** The status indicator will display information + regarding various UGV status monitors such as the Emergency Stop, + Surveying, etc. When the UGV is fully operational, the indicator + will be green. + +6. **GPS Status Indicator:** The GPS status indicators will display GPS + signal accuracy for position (POS indicator) and heading (DIR + indicator). Green indicators represent RTK accuracy and are + currently required for accurate autonomous navigation. Yellow and orange + indicators represent SBAS and SPP accuracy respectively and noticeable + oscillations may occur in such cases. Red indicators mean no GPS signal + and autonomous navigation missions should not be started. + +7. **ROS Status Indicator:** The ROS status indicator is used to give a + quick overview of the current status of the watched ROS topics. If + green it means that all topics are being received correctly while yellow + indicates that one or more topics is not being recieved. Further information + can be found in the status page by clicking on the ROS status indicator. + +8. **Battery Life Indicator:** The UGV's battery life indicator. + + :::note + + If the indicator is stuck at 50%, that means that your UGV does not + have a supported battery management system and this indicator is not + active. + + ::: + +9. **Wireless Connection Indicator:** The wireless connection indicator + represents the signal strength between the wifi access point + (typically the Base Station) and the UGV. + +10. **Views List:** A dropdown list of available views, detailed later + in this section. Some of the available views are Map, Camera and 3D + views, etc. + +11. **Mission List:** View the list of Missions that Operator(s) have + created. + +12. **Edit Mission Toggle:** This toggle allows the user to start + creating Waypoints for the current Mission. The user will also be able to + drag and drop Waypoints in this mode. Once this button is enabled, + the Waypoint Mode will now be available for selection. When a Mission is + started this toggle will be disabled (ie. the Operator will not be able + to modify/add Waypoints). + + :::note + + If the toggle is enabled while an autonomous Mission is running, it + will cancel the current Mission. + + ::: + +13. **Waypoint Panel Toggle:** View list of Waypoints in the current Mission. + +14. **Waypoint Drop Button:** The Waypoint indicator marker on the + bottom bar allows the user to place a Waypoint at the location of the UGV. + +15. **Start Button:** Start the current Mission. + +16. **Pause Button:** Pause the current Mission. Pressing the start button + while paused will continue the current Mission. + +17. **Stop Button:** Cancel the Mission or Task that is currently being + executed. Pressing the start button while when stopped will restart + the list of steps in the current Mission. + +18. **Feedback Bar:** The feedback bar will display information + regarding the execution state of the navigation and of any Tasks + being executed. + +By opening the dropdown list "Views", on the right side of the UI, the +Operator can access the following views: + +- Map View +- PTZ Camera View (if available) +- Front/Back Camera View (if available) +- 3D View + +## Map View + +
+
+ +
Map View
+
+
+ +1. **Zoom Buttons:** These buttons allow the user to zoom in/out of the + map levels. +2. **Zoom-to-Fit Button:** This button will zoom the map to where there + is activity (ie. where the datum is set or where Waypoints have been + set on the map. +3. **Pointer Mode Button:** This button allows the user to move the map + and select point on the map to see their coordinate (lat/lon or + x/y). +4. **Waypoint Mode Button:** This button allows the user to place + Waypoints on the map. Users can also select existing Waypoints to + modify/delete them. +5. **UGV:** The blue arrow represents the UGV. Its location is its + position in the world frame and its orientation is the heading in + the world frame. +6. **Base Station:** The yellow antenna icon is the last known location of + the base station based on the last survey performed. By clicking it the + user will be presented with the base station's coordinates, when it was + surveyed, and how many samples were taken during the survey. + +7. **Datum:** The blue Waypoint marker on the map view represents the + location of the reference point (ie. (x,y)=(0,0)) of the world + coordinate system. The world (ie. map) coordinate system is in the + ENU convention. +8. **Scale:** The scale representing the ratio of a distance on the map + to the corresponding distance on the ground. + +## Camera Views + +:::note + +If PTZ and/or Front/Back camera(s) are included on the UGV, their feeds +can be viewed through the UI and the PTZ can be controlled through the +UI. If not, there will not be any PTZ, Front/Back view(s) in the list of +available views. + +::: + +### Pan-Tilt-Zoom (PTZ) View {#ptz-view} + +
+
+ +
PTZ Camera View
+
+
+ +1. **Tilt Slider:** The left slider can be used to tilt the camera in a + vertical motion, (ie. upwards or downwards motion). By default, the + slider is at its neutral ("zero") position. +2. **Pan Slider:** The bottom slider can be used to pan/rotate the + camera, (ie. rotational motion). By default, the slider is at its + neutral ("zero") position. +3. **Zoom Slider:** The right slider can be used to zoom the camera + feed. By default, the slider is at its neutral ("zero") position. +4. **Save Image:** Depending on the current camera view selected, this + button will save an image to the computer/tablet running the UI. + Images will be saved to the location in which your browser saves + files. +5. **Camera Positions List:** Display the list of available camera + positions that have been saved. These camera positions can be + deleted from this list by clicking the "garbage can" icon beside + the corresponding position. +6. **Save Camera Position:** This button will save the camera position + to be used in the "Move PTZ" task. An example use case would be: + 1. Switch to the PTZ camera view. + 2. Teleoperate the UGV to a location at which the user can inspect + something. + 3. Move the camera sliders to orient the camera such that it is + looking at the inspection point. + 4. Click the "Save Camera Position". + 5. When creating an autonomous mission to this inspection point, + add the "Move PTZ" task to a Waypoint. + 6. Click the settings button beside the task and add the camera + position related to the inspection point. + +### Front and Back Views + +
+
+ +
Front View
+
+
+ +
+
+ +
Back View
+
+
+ +## 3D View + +The 3D view allows the user to visualize the pointcloud data being +acquired by the VLP-16 LiDAR. + +
+
+ +
3D View
+
+
+ +## System Configuration + +### Map Source Configuration + +The Web UI ships with access to free +[OpenStreetMap](https://www.openstreetmap.org/) maps. Aerial view +requires access to third-party aerial maps or your own aerial maps. + +The Web UI is pre-configured to work with +[MapBox](https://www.mapbox.com/) and [Bing +Maps](https://www.bingmapsportal.com/) once a suitable map key has been +acquired. Both services offer a free tier that will be sufficient in +almost all cases. + +#### Using OpenStreetMap Maps + +As no key is required to use +[OpenStreetMap](https://www.openstreetmap.org/) maps, the process to +select these maps in the Web UI is simple. + +1. In the Web UI, from the menu, select **Settings→Map** to bring up + the **Map Settings** page. +2. Select **OpenStreetMap** +3. Click **Ok**. + +
+
+ +
Using Map Settings to select OpenStreetMap
+
+
+ +#### Using MapBox Maps + +Using [MapBox](https://www.mapbox.com/) maps requires a key, which can +then be used by the Web UI. The steps to set up MapBox are outlined +below. + +1. Acquire a MapBox key from the [MapBox + website](https://account.mapbox.com/auth/signup/). Review the + license terms and select the appropriate plan. In most cases, the + free tier will be sufficient. +2. Back in the Web UI, from the menu, select **Settings→Map** to bring + up the **Map Settings** page. +3. Select **MapBox**. +4. Copy the MapBox key from Step 1 into the **Map Key** field. +5. Click **Ok**. + +
+
+ +
Using Map Settings to select MapBox
+
+
+ +#### Using Bing Maps + +Using [Bing Maps](https://www.bingmapsportal.com/) requires a key, which +can then be used by the Web UI. The steps to set up Bing Maps are +outlined below. + +1. Acquire a Bing Maps key from the [Bing + website](https://www.microsoft.com/en-us/maps/create-a-bing-maps-key). + Review the license terms and select the appropriate plan. In most + cases, the free tier will be sufficient. +2. Back in the Web UI, from the menu, select **Settings→Map** to bring + up the **Map Settings** page. +3. Select **Bing Maps**. +4. Copy the Bing Maps key from Step 1 into the **Map Key** field. +5. Click **Ok**. + +
+
+ +
Using Map Settings to select Bing Maps
+
+
+ +#### Using Custom Maps {#using_custom_maps} + +Custom Maps allow you to use another set of maps in XYZ format, either +from a third-party map provider or from maps that you have generated on +your own, such as from drone aerial images. Custom maps can be selected +by using the steps below. + +1. Ensure that the maps are accessible on an internal network or on the + Internet by the device that is being used to display the Web UI, + such as a laptop, tablet, or desktop computer. +2. Ensure that the directory structure for the individual tiles is well + defined. See the section below for details on + [Preparing Custom Map Tiles from Drone Aerial Images](#preparing_custom_map_tiles). +3. In the Web UI, from the menu, select **Settings→Map** to bring up + the **Map Settings** page. +4. Select **Custom**. +5. Enter the network path for the maps into the **Custom URL** field. + If hosting the maps on your local computer, this will be similar to + http://localhost:8000/{z}/{x}/{-y}.png. Note how the + URL is parameterized with `{z}`, `{x}`, and `{-y}` values. This will + need to be adapted to match the directory structure of your map tile + images. +6. Click **Ok**. + +
+
+ +
Using Map Settings to select Custom maps
+
+
+ +#### Preparing Custom Map Tiles from Drone Aerial Images {#preparing_custom_map_tiles} + +In some cases, it is desirable to create your own maps rather than using +third party maps which might be outdated. One way to do this is to use a +drone to capture aerial images and convert those images into map tiles. +While there are many ways to accomplish this, one approach is outlined +below. + +1. Use a drone to collect top-down photos covering the area of + interest. It is highly recommended to use a drone control app that + allows you to specify the area of interest and desired image overlap + (recommended \~75%) and takes care of coverage planning, drone + control, and image acquisition. + +2. Perform ortho-mosaicing/ortho-rectification to stitch the collected + images together into a single orthographic image. [Open Drone + Map](https://www.opendronemap.org/) is a popular open source project + that Clearpath has used for stitching, but there are also paid + services that automate the process. + +3. Georeference the orthographic image. One way to do this is to define + the locations of well-defined features (sewer grates, utility holes, + etc.) based on their known positions, such as their position data + from an existing mapping service (e.g., Google Maps). Open source + tools, such as [QGIS](https://www.qgis.org/en/site/) can help with + this process. + +4. Generate the map tiles. Using Ubuntu, this can be accomplished with + the following commands, where `GEOREFERENCED_IMG.tif` is the output + of the previous step. + + ``` + sudo apt install gdal-bin + gdal2tiles.py + ``` + +5. Use a web server to host the tiles locally. Using Ubuntu, one way to + accomplish this is to use the commands below, which will make the + tiles available at: \. + + ``` + cd /base/directory/of/tiles + python3 -m http.server + ``` + +Once your map tiles are available on the network, you can follow the +steps in [Using Custom Maps](#using_custom_maps) to have the +Web UI use your custom tiles. diff --git a/outdoornav_user_manual_versioned_docs/version-0.9.0/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.9.0/_category_.json index c123e1bc..f5966a95 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.9.0/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.9.0/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "OutdoorNav User Manual", - "position": 1 -} +{ + "label": "OutdoorNav User Manual", + "position": 1 +} diff --git a/outdoornav_user_manual_versioned_docs/version-0.9.0/api/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.9.0/api/_category_.json index a6e53920..79c71658 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.9.0/api/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.9.0/api/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Application Programming Interface", - "position": 7 -} +{ + "label": "Application Programming Interface", + "position": 7 +} diff --git a/outdoornav_user_manual_versioned_docs/version-0.9.0/api/api_endpoints/api_endpoints.mdx b/outdoornav_user_manual_versioned_docs/version-0.9.0/api/api_endpoints/api_endpoints.mdx index c65c4150..e1169e6e 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.9.0/api/api_endpoints/api_endpoints.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.9.0/api/api_endpoints/api_endpoints.mdx @@ -1,16 +1,16 @@ ---- -title: API Endpoints -sidebar_label: API Endpoints -sidebar_position: 2 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -The ROS 1 Noetic API can be used to monitor and manage OutdoorNav Software. Details -are available through the child pages. - -- [Platform API](platform_api.mdx) -- [Autonomy API](autonomy_api.mdx) -- [Mission Manager API](mission_manager_api.mdx) -- [Definitions](definitions.mdx) - +--- +title: API Endpoints +sidebar_label: API Endpoints +sidebar_position: 2 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +The ROS 1 Noetic API can be used to monitor and manage OutdoorNav Software. Details +are available through the child pages. + +- [Platform API](platform_api.mdx) +- [Autonomy API](autonomy_api.mdx) +- [Mission Manager API](mission_manager_api.mdx) +- [Definitions](definitions.mdx) + diff --git a/outdoornav_user_manual_versioned_docs/version-0.9.0/api/api_examples/api_examples.mdx b/outdoornav_user_manual_versioned_docs/version-0.9.0/api/api_examples/api_examples.mdx index e123509b..86c5eb41 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.9.0/api/api_examples/api_examples.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.9.0/api/api_examples/api_examples.mdx @@ -1,18 +1,18 @@ ---- -title: API Examples -sidebar_label: API Examples -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -:::info - -The API Examples section is currently in BETA. That is, we are providing instructions and examples of how to -generate your own example scripts using our API, however not everyone will be able to run these -scripts. During the BETA release of this feature, only a select few partners will be eligible to -run their custom example scripts. Full access/release of this feature will be available in version 0.10.0 -(estimated Nov. 2023). - -::: - +--- +title: API Examples +sidebar_label: API Examples +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +:::info + +The API Examples section is currently in BETA. That is, we are providing instructions and examples of how to +generate your own example scripts using our API, however not everyone will be able to run these +scripts. During the BETA release of this feature, only a select few partners will be eligible to +run their custom example scripts. Full access/release of this feature will be available in version 0.10.0 +(estimated Nov. 2023). + +::: + diff --git a/outdoornav_user_manual_versioned_docs/version-0.9.0/api/api_examples/mission_from_file.mdx b/outdoornav_user_manual_versioned_docs/version-0.9.0/api/api_examples/mission_from_file.mdx index 2c80b317..9c2a0305 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.9.0/api/api_examples/mission_from_file.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.9.0/api/api_examples/mission_from_file.mdx @@ -1,220 +1,220 @@ ---- -title: Mission from YAML File -sidebar_label: Mission from YAML File -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -:::info - -API examples are currently in BETA. That is, we are providing instructions and examples of how to -generate your own example scripts using our API, however not everyone will be able to run these -scripts. During the BETA release of this feature, only a select few partners will be eligible to -run their custom example scripts. Full access/release of this feature will be available in version 0.10.0 -(estimated Nov. 2023). - -::: - -## The Code - -``` python -#! /usr/bin/env python3 - -from cpr_outdoornav_api_examples_lib.ros_node import RosNode -from cpr_outdoornav_api_examples_lib.yaml_config import YamlConfig -import time -import os - -# The file containing the mission configuration (adjust as needed) -MISSION_YAML_FILE = os.environ.get("HOME", "administrator") + "/example_ws/src/" + \ - "CPR-OutdoorNav/src/cpr_outdoornav_api_examples/config/sample_mission.yaml" - -class MissionFromYamlFile(RosNode): - """ - Create and run a mission loaded from a YAML configuration file. - Be sure that your robot is within 3 meters of your first Waypoint prior to starting the mission. - """ - - def __init__(self): - """Initialize the mission details and server connection.""" - - RosNode.__init__(self, 'mission_from_yaml_file') - self.mission = YamlConfig.yamlFileToMission(MISSION_YAML_FILE) - - # NOTE: to save the configuration to file, uncomment the following lines: - # YamlConfig.missionToYamlFile('/tmp/test1.yaml', self.mission) - - def run(self): - """Execute the mission.""" - - if not self.mission.startMission(): - return False - while not self.mission.isMissionComplete(): - time.sleep(1.0) - return self.mission.getMissionSuccess() - - -if __name__ == '__main__': - if MissionFromYamlFile().run(): - print("Mission completed successfully") - else: - print("Mission failed") - -``` - -## The Code Explained - -Let's break down the code. - -``` python -#! /usr/bin/env python3 -``` - -Every Python ROS Node will have this declaration at the top. The first line makes sure your script is executed as a Python3 script. - - -``` python -from cpr_outdoornav_api_examples_lib.ros_node import RosNode -from cpr_outdoornav_api_examples_lib.yaml_config import YamlConfig -``` - -We provide a library of classes that can be used within your file for ease of use. In the above example, we import the RosNode and YamlConfig classes. -The RosNode class is used by all of our examples to initialize a ROS node that will execute the example mission. The YamlConfig class is used to import -a YAML file and convert it to a Mission object. - -``` python -MISSION_YAML_FILE = os.environ.get("HOME", "administrator") + "/example_ws/src/" + \ - "CPR-OutdoorNav/src/cpr_outdoornav_api_examples/config/sample_mission.yaml" -``` - -This defines the file path of the YAML file that contains the mission to be executed. See the [YAML file](#yaml-file) below for the example YAML file -that will be executed. - -``` python -class MissionFromYamlFile(RosNode): -``` - -Creates a class for your example, which inherits a RosNode object. All python mission files are requried to inherit the RosNode class. - -``` python - RosNode.__init__(self, 'mission_from_yaml_file') - self.mission = YamlConfig.yamlFileToMission(MISSION_YAML_FILE)``` -``` - -Initialize the ROS node with name `mission_from_yaml_file` and import the the mission from the yaml config file. The `YamlConfig.yamlFileToMission()` function -reads teh configuration you have created in the YAML file and converts it into a Mission object. - -``` python - if not self.mission.startMission(): - return False -``` - -Upon execution of the script, the `self.mission.startMission()` function creates the mission client if not yet created, connects to the mission action server -and sends the goal to the action server to begin the execution of the mission. - -``` python - while not self.mission.isMissionComplete(): - time.sleep(1.0) - return self.mission.getMissionSuccess() -``` - -`self.mission.isMissionComplete()` monitors the mission status and only proceeds to terminating the mission has completed or been cancelled. - - -## YAML File {#yaml-file} - -The following YAML file is used in the above example mission. - -``` python -mission: - header: - seq: 0 - stamp: - secs: 0 - nsecs: 0 - frame_id: '' - name: "Sample Mission" - uuid: "8f57fd20-8a8c-4748-85ef-be1495b3ee06" - waypoints: - - - name: "Waypoint: 60" - uuid: "3edcedd7-ae0d-47cf-bd23-f7988d2779b7" - latitude: 50.10950820165676 - longitude: -97.31898507913323 - heading: -1.0 - tasks: [] - position_tolerance: -1.0 - yaw_tolerance: -1.0 - - - name: "Waypoint: 61" - uuid: "ad23202e-7067-4f1c-8677-2dc07af1e729" - latitude: 50.1095698924641 - longitude: -97.31929487427445 - heading: -1.0 - tasks: [] - position_tolerance: -1.0 - yaw_tolerance: -1.0 - - - name: "Waypoint: 62" - uuid: "fe452e77-4a26-41b0-b4ab-ee1859612a60" - latitude: 50.109437123117864 - longitude: -97.31946787675591 - heading: -1.0 - tasks: - - - name: "Wait" - uuid: "ec1121a8-7481-420f-b532-c47ea86afcd7" - service_call: "/wait" - version: "0.0.0" - floats: [3.0] - strings: [] - position_tolerance: -1.0 - yaw_tolerance: -1.0 - - - name: "Waypoint: 63" - uuid: "5ed54c1f-1599-497a-9c16-93c7ca6c355e" - latitude: 50.109384820042074 - longitude: -97.3194477601883 - heading: -1.0 - tasks: [] - position_tolerance: -1.0 - yaw_tolerance: -1.0 - - - name: "Waypoint: 64" - uuid: "2e021345-636b-4bd3-81ba-4f6901fdc016" - latitude: 50.10934056359333 - longitude: -97.31936192949982 - heading: -1.0 - tasks: [] - position_tolerance: -1.0 - yaw_tolerance: -1.0 - - - name: "Waypoint: 65" - uuid: "00c041ee-2ca4-40ba-8e38-65ac900d5a1d" - latitude: 50.10946930962604 - longitude: -97.31921709021302 - heading: -1.0 - tasks: [] - position_tolerance: -1.0 - yaw_tolerance: -1.0 - - - name: "Waypoint: 66" - uuid: "a5826fc5-b696-4b63-82aa-cc2e7a426640" - latitude: 50.10949344950718 - longitude: -97.31911382516594 - heading: -1.0 - tasks: [] - position_tolerance: -1.0 - yaw_tolerance: -1.0 - - - name: "Waypoint: 67" - uuid: "7ff204b2-79a3-46da-a8c0-2c734b4c5314" - latitude: 50.10949613171619 - longitude: -97.31898910244675 - heading: -1.0 - tasks: [] - position_tolerance: -1.0 - yaw_tolerance: -1.0 - onav_config: "To be determined" -``` +--- +title: Mission from YAML File +sidebar_label: Mission from YAML File +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +:::info + +API examples are currently in BETA. That is, we are providing instructions and examples of how to +generate your own example scripts using our API, however not everyone will be able to run these +scripts. During the BETA release of this feature, only a select few partners will be eligible to +run their custom example scripts. Full access/release of this feature will be available in version 0.10.0 +(estimated Nov. 2023). + +::: + +## The Code + +``` python +#! /usr/bin/env python3 + +from cpr_outdoornav_api_examples_lib.ros_node import RosNode +from cpr_outdoornav_api_examples_lib.yaml_config import YamlConfig +import time +import os + +# The file containing the mission configuration (adjust as needed) +MISSION_YAML_FILE = os.environ.get("HOME", "administrator") + "/example_ws/src/" + \ + "CPR-OutdoorNav/src/cpr_outdoornav_api_examples/config/sample_mission.yaml" + +class MissionFromYamlFile(RosNode): + """ + Create and run a mission loaded from a YAML configuration file. + Be sure that your robot is within 3 meters of your first Waypoint prior to starting the mission. + """ + + def __init__(self): + """Initialize the mission details and server connection.""" + + RosNode.__init__(self, 'mission_from_yaml_file') + self.mission = YamlConfig.yamlFileToMission(MISSION_YAML_FILE) + + # NOTE: to save the configuration to file, uncomment the following lines: + # YamlConfig.missionToYamlFile('/tmp/test1.yaml', self.mission) + + def run(self): + """Execute the mission.""" + + if not self.mission.startMission(): + return False + while not self.mission.isMissionComplete(): + time.sleep(1.0) + return self.mission.getMissionSuccess() + + +if __name__ == '__main__': + if MissionFromYamlFile().run(): + print("Mission completed successfully") + else: + print("Mission failed") + +``` + +## The Code Explained + +Let's break down the code. + +``` python +#! /usr/bin/env python3 +``` + +Every Python ROS Node will have this declaration at the top. The first line makes sure your script is executed as a Python3 script. + + +``` python +from cpr_outdoornav_api_examples_lib.ros_node import RosNode +from cpr_outdoornav_api_examples_lib.yaml_config import YamlConfig +``` + +We provide a library of classes that can be used within your file for ease of use. In the above example, we import the RosNode and YamlConfig classes. +The RosNode class is used by all of our examples to initialize a ROS node that will execute the example mission. The YamlConfig class is used to import +a YAML file and convert it to a Mission object. + +``` python +MISSION_YAML_FILE = os.environ.get("HOME", "administrator") + "/example_ws/src/" + \ + "CPR-OutdoorNav/src/cpr_outdoornav_api_examples/config/sample_mission.yaml" +``` + +This defines the file path of the YAML file that contains the mission to be executed. See the [YAML file](#yaml-file) below for the example YAML file +that will be executed. + +``` python +class MissionFromYamlFile(RosNode): +``` + +Creates a class for your example, which inherits a RosNode object. All python mission files are requried to inherit the RosNode class. + +``` python + RosNode.__init__(self, 'mission_from_yaml_file') + self.mission = YamlConfig.yamlFileToMission(MISSION_YAML_FILE)``` +``` + +Initialize the ROS node with name `mission_from_yaml_file` and import the the mission from the yaml config file. The `YamlConfig.yamlFileToMission()` function +reads teh configuration you have created in the YAML file and converts it into a Mission object. + +``` python + if not self.mission.startMission(): + return False +``` + +Upon execution of the script, the `self.mission.startMission()` function creates the mission client if not yet created, connects to the mission action server +and sends the goal to the action server to begin the execution of the mission. + +``` python + while not self.mission.isMissionComplete(): + time.sleep(1.0) + return self.mission.getMissionSuccess() +``` + +`self.mission.isMissionComplete()` monitors the mission status and only proceeds to terminating the mission has completed or been cancelled. + + +## YAML File {#yaml-file} + +The following YAML file is used in the above example mission. + +``` python +mission: + header: + seq: 0 + stamp: + secs: 0 + nsecs: 0 + frame_id: '' + name: "Sample Mission" + uuid: "8f57fd20-8a8c-4748-85ef-be1495b3ee06" + waypoints: + - + name: "Waypoint: 60" + uuid: "3edcedd7-ae0d-47cf-bd23-f7988d2779b7" + latitude: 50.10950820165676 + longitude: -97.31898507913323 + heading: -1.0 + tasks: [] + position_tolerance: -1.0 + yaw_tolerance: -1.0 + - + name: "Waypoint: 61" + uuid: "ad23202e-7067-4f1c-8677-2dc07af1e729" + latitude: 50.1095698924641 + longitude: -97.31929487427445 + heading: -1.0 + tasks: [] + position_tolerance: -1.0 + yaw_tolerance: -1.0 + - + name: "Waypoint: 62" + uuid: "fe452e77-4a26-41b0-b4ab-ee1859612a60" + latitude: 50.109437123117864 + longitude: -97.31946787675591 + heading: -1.0 + tasks: + - + name: "Wait" + uuid: "ec1121a8-7481-420f-b532-c47ea86afcd7" + service_call: "/wait" + version: "0.0.0" + floats: [3.0] + strings: [] + position_tolerance: -1.0 + yaw_tolerance: -1.0 + - + name: "Waypoint: 63" + uuid: "5ed54c1f-1599-497a-9c16-93c7ca6c355e" + latitude: 50.109384820042074 + longitude: -97.3194477601883 + heading: -1.0 + tasks: [] + position_tolerance: -1.0 + yaw_tolerance: -1.0 + - + name: "Waypoint: 64" + uuid: "2e021345-636b-4bd3-81ba-4f6901fdc016" + latitude: 50.10934056359333 + longitude: -97.31936192949982 + heading: -1.0 + tasks: [] + position_tolerance: -1.0 + yaw_tolerance: -1.0 + - + name: "Waypoint: 65" + uuid: "00c041ee-2ca4-40ba-8e38-65ac900d5a1d" + latitude: 50.10946930962604 + longitude: -97.31921709021302 + heading: -1.0 + tasks: [] + position_tolerance: -1.0 + yaw_tolerance: -1.0 + - + name: "Waypoint: 66" + uuid: "a5826fc5-b696-4b63-82aa-cc2e7a426640" + latitude: 50.10949344950718 + longitude: -97.31911382516594 + heading: -1.0 + tasks: [] + position_tolerance: -1.0 + yaw_tolerance: -1.0 + - + name: "Waypoint: 67" + uuid: "7ff204b2-79a3-46da-a8c0-2c734b4c5314" + latitude: 50.10949613171619 + longitude: -97.31898910244675 + heading: -1.0 + tasks: [] + position_tolerance: -1.0 + yaw_tolerance: -1.0 + onav_config: "To be determined" +``` diff --git a/outdoornav_user_manual_versioned_docs/version-0.9.0/api/api_examples/mission_with_custom_tasks.mdx b/outdoornav_user_manual_versioned_docs/version-0.9.0/api/api_examples/mission_with_custom_tasks.mdx index 9a4a4efd..a73ebb7e 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.9.0/api/api_examples/mission_with_custom_tasks.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.9.0/api/api_examples/mission_with_custom_tasks.mdx @@ -1,243 +1,243 @@ ---- -title: Mission with Custom Tasks -sidebar_label: Mission with Custom Tasks -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -:::info - -API examples are currently in BETA. That is, we are providing instructions and examples of how to -generate your own example scripts using our API, however not everyone will be able to run these -scripts. During the BETA release of this feature, only a select few partners will be eligible to -run their custom example scripts. Full access/release of this feature will be available in version 0.10.0 -(estimated Nov. 2023). - -::: - -Before being able to run the examples similar to the one explained below, it is required that you have written your own custom tasks. See the -[Custom Tasks](../../features/custom_tasks.mdx) section for information on how to develop tasks for your application. - -## The Code - -``` python -#! /usr/bin/env python3 - -import rospy -import actionlib -from cpr_outdoornav_api_examples_lib.ros_node import RosNode -from cpr_outdoornav_api_examples_lib.waypoint import Waypoint -from cpr_outdoornav_api_examples_lib.mission import Mission -from clearpath_navigation_msgs.msg import Task, UITaskResult, UITaskAction - - -CUSTOM_ACTION_NAME = "/record_gnss" -UNSPECIFIED_HEADING = -1 - - -class MissionWithCustomTask(RosNode): - """Create and run a mission with 3 waypoints, each of which executes a custom task. - - Our goal is to set up 3 waypoints, then create a mission such that the robot drives - to each waypoint in order. In addition, at each of the waypoints, a custom task will be - called to record the timestamp, goal name, and GPS coordinates. Since this is a custom task, - it is necessary to create an actionlib server to implement the custom task. - - The main component of this example is the mission builder, which builds up the set of goals, - including information on the custom tasks, and runs the mission, to execute the custom task. - - The coordinates used in this example are based on the cpr_agriculture_gazebo - world and should be updated to match the location in which the user's - robot will be operating. - """ - - class MissionBuilder: - """Creates and runs the mission, including custom tasks.""" - - def __init__(self): - """Creates the mission with 3 waypoints and custom tasks.""" - - # First waypoint, with custom task - waypoint_a_name = "A" - custom_task_a = Task() - custom_task_a.name = "my_custom_task_a" # choose any name here - custom_task_a.action_server_name = CUSTOM_ACTION_NAME # must match server name - custom_task_a.version = "1.0" # choose any version - custom_task_a.floats = [1000] # param: unique ID - custom_task_a.strings = [waypoint_a_name] # param: goal name - - # Second waypoint, with custom task - waypoint_b_name = "B" - custom_task_b = Task() - custom_task_b.name = "my_custom_task_b" # choose any name here - custom_task_b.action_server_name = CUSTOM_ACTION_NAME # must match server name - custom_task_b.version = "1.0" # choose any version - custom_task_b.floats = [1001] # param: unique ID - custom_task_b.strings = [waypoint_b_name] # param: goal name - - # Third waypoint, with custom task - waypoint_c_name = "C" - custom_task_c = Task() - custom_task_c.name = "my_custom_task_c" # choose any name here - custom_task_c.action_server_name = CUSTOM_ACTION_NAME # must match server name - custom_task_c.version = "1.0" # choose any version - custom_task_c.floats = [1002] # param: unique ID - custom_task_c.strings = [waypoint_c_name] # param: goal name - - waypoints = [ - Waypoint(waypoint_a_name, "uuid-waypoint-01", 43.50076203007681, -80.546296281104, UNSPECIFIED_HEADING), - Waypoint(waypoint_b_name, "uuid-waypoint-02", 43.50073600330896, -80.54621215801687, UNSPECIFIED_HEADING, [custom_task_b]), - Waypoint(waypoint_c_name, "uuid-waypoint-03", 43.50067256664828, -80.5462159469465, UNSPECIFIED_HEADING, [custom_task_c]), - ] - - # Build mission from two waypoints with custom tasks - self._mission = Mission("Custom task mission", "uuid-mission-1", waypoints) - - def getMission(self): - """Gets a reference to the mission. - - Returns - ------- - A reference to the mission. - """ - return self._mission - - def __init__(self): - """Initializes ROS, the custom task server, GPS subscriber and mission.""" - - RosNode.__init__(self, 'mission_with_custom_task') - self._mission_builder = MissionWithCustomTask.MissionBuilder() - - - def run(self): - """Execute the mission. - - This function blocks until the mission is complete. - - Returns - ------- - True on successful execution of the mission; else False on any error. - """ - - if not self._mission_builder.getMission().startMission(): - return False - while not self._mission_builder.getMission().isMissionComplete(): - rospy.sleep(1.0) - return self._mission_builder.getMission().getMissionSuccess() - - -if __name__ == '__main__': - if MissionWithCustomTask().run(): - print("Mission completed successfully") - else: - print("Mission failed") - rospy.signal_shutdown('Done') -``` - -## The Code Explained - -``` python -import rospy -import actionlib -from cpr_outdoornav_api_examples_lib.ros_node import RosNode -from cpr_outdoornav_api_examples_lib.waypoint import Waypoint -from cpr_outdoornav_api_examples_lib.mission import Mission -from clearpath_navigation_msgs.msg import Task, UITaskResult, UITaskAction -``` - -Import the `RosNode`, `Waypoint` and `Mission` classes which will be used to create the mission to be executed. -We also import the `Task` and `UITask` messages which are used to generate the action servers. - -``` python - class MissionBuilder: - """Creates and runs the mission, including custom tasks.""" - - def __init__(self): - """Creates the mission with 3 waypoints and custom tasks.""" - - # First waypoint, with custom task - waypoint_a_name = "A" - custom_task_a = Task() - custom_task_a.name = "my_custom_task_a" # choose any name here - custom_task_a.action_server_name = CUSTOM_ACTION_NAME # must match server name - custom_task_a.version = "1.0" # choose any version - custom_task_a.floats = [1000] # param: unique ID - custom_task_a.strings = [waypoint_a_name] # param: goal name - - # Second waypoint, with custom task - waypoint_b_name = "B" - custom_task_b = Task() - custom_task_b.name = "my_custom_task_b" # choose any name here - custom_task_b.action_server_name = CUSTOM_ACTION_NAME # must match server name - custom_task_b.version = "1.0" # choose any version - custom_task_b.floats = [1001] # param: unique ID - custom_task_b.strings = [waypoint_b_name] # param: goal name - - # Third waypoint, with custom task - waypoint_c_name = "C" - custom_task_c = Task() - custom_task_c.name = "my_custom_task_c" # choose any name here - custom_task_c.action_server_name = CUSTOM_ACTION_NAME # must match server name - custom_task_c.version = "1.0" # choose any version - custom_task_c.floats = [1002] # param: unique ID - custom_task_c.strings = [waypoint_c_name] # param: goal name - - - waypoints = [ - Waypoint(waypoint_a_name, "uuid-waypoint-01", 50.1095255, -97.3192484, UNSPECIFIED_HEADING, [custom_task_a]), - Waypoint(waypoint_b_name, "uuid-waypoint-02", 50.1094938, -97.3191085, UNSPECIFIED_HEADING, [custom_task_b]), - Waypoint(waypoint_c_name, "uuid-waypoint-03", 50.1094600, -97.3192100, UNSPECIFIED_HEADING, [custom_task_c]), - ] - - # Build mission from two waypoints with custom tasks - self._mission = Mission("Custom task mission", "uuid-mission-1", waypoints) -``` - -We create the `MissionBuilder` subclass that will create the mission to be executed. We initialize custom task objects -where we specify the `action_server_name` field with the specific action of the custom task. These are then added to the -Waypoints as a list of tasks and the Mission object is created. - -``` python - def __init__(self): - """Initializes ROS, the custom task server, GPS subscriber and mission.""" - - RosNode.__init__(self, 'mission_with_custom_task') - self._mission_builder = MissionWithCustomTask.MissionBuilder() -``` - -We initialize the example class by starting a ROS node and initialize the mission to be executed. - -``` python - def run(self): - """Execute the mission. - - This function blocks until the mission is complete. - - Returns - ------- - True on successful execution of the mission; else False on any error. - """ - - if not self._mission_builder.getMission().startMission(): - return False - while not self._mission_builder.getMission().isMissionComplete(): - time.sleep(1.0) - return self._mission_builder.getMission().getMissionSuccess() -``` - -The `run()` function starts the mission and checks for completion. Once complete we terminate the example code. - -``` python -if __name__ == '__main__': - if MissionWithCustomTask().run(): - print("Mission completed successfully") - else: - print("Mission failed") - rospy.signal_shutdown('Done') -``` - -The main python execution block. We first initialize the example class (runs the __init__ function) and then execute the run() function which -executes the mission and outputs the status information. - - +--- +title: Mission with Custom Tasks +sidebar_label: Mission with Custom Tasks +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +:::info + +API examples are currently in BETA. That is, we are providing instructions and examples of how to +generate your own example scripts using our API, however not everyone will be able to run these +scripts. During the BETA release of this feature, only a select few partners will be eligible to +run their custom example scripts. Full access/release of this feature will be available in version 0.10.0 +(estimated Nov. 2023). + +::: + +Before being able to run the examples similar to the one explained below, it is required that you have written your own custom tasks. See the +[Custom Tasks](../../features/custom_tasks.mdx) section for information on how to develop tasks for your application. + +## The Code + +``` python +#! /usr/bin/env python3 + +import rospy +import actionlib +from cpr_outdoornav_api_examples_lib.ros_node import RosNode +from cpr_outdoornav_api_examples_lib.waypoint import Waypoint +from cpr_outdoornav_api_examples_lib.mission import Mission +from clearpath_navigation_msgs.msg import Task, UITaskResult, UITaskAction + + +CUSTOM_ACTION_NAME = "/record_gnss" +UNSPECIFIED_HEADING = -1 + + +class MissionWithCustomTask(RosNode): + """Create and run a mission with 3 waypoints, each of which executes a custom task. + + Our goal is to set up 3 waypoints, then create a mission such that the robot drives + to each waypoint in order. In addition, at each of the waypoints, a custom task will be + called to record the timestamp, goal name, and GPS coordinates. Since this is a custom task, + it is necessary to create an actionlib server to implement the custom task. + + The main component of this example is the mission builder, which builds up the set of goals, + including information on the custom tasks, and runs the mission, to execute the custom task. + + The coordinates used in this example are based on the cpr_agriculture_gazebo + world and should be updated to match the location in which the user's + robot will be operating. + """ + + class MissionBuilder: + """Creates and runs the mission, including custom tasks.""" + + def __init__(self): + """Creates the mission with 3 waypoints and custom tasks.""" + + # First waypoint, with custom task + waypoint_a_name = "A" + custom_task_a = Task() + custom_task_a.name = "my_custom_task_a" # choose any name here + custom_task_a.action_server_name = CUSTOM_ACTION_NAME # must match server name + custom_task_a.version = "1.0" # choose any version + custom_task_a.floats = [1000] # param: unique ID + custom_task_a.strings = [waypoint_a_name] # param: goal name + + # Second waypoint, with custom task + waypoint_b_name = "B" + custom_task_b = Task() + custom_task_b.name = "my_custom_task_b" # choose any name here + custom_task_b.action_server_name = CUSTOM_ACTION_NAME # must match server name + custom_task_b.version = "1.0" # choose any version + custom_task_b.floats = [1001] # param: unique ID + custom_task_b.strings = [waypoint_b_name] # param: goal name + + # Third waypoint, with custom task + waypoint_c_name = "C" + custom_task_c = Task() + custom_task_c.name = "my_custom_task_c" # choose any name here + custom_task_c.action_server_name = CUSTOM_ACTION_NAME # must match server name + custom_task_c.version = "1.0" # choose any version + custom_task_c.floats = [1002] # param: unique ID + custom_task_c.strings = [waypoint_c_name] # param: goal name + + waypoints = [ + Waypoint(waypoint_a_name, "uuid-waypoint-01", 43.50076203007681, -80.546296281104, UNSPECIFIED_HEADING), + Waypoint(waypoint_b_name, "uuid-waypoint-02", 43.50073600330896, -80.54621215801687, UNSPECIFIED_HEADING, [custom_task_b]), + Waypoint(waypoint_c_name, "uuid-waypoint-03", 43.50067256664828, -80.5462159469465, UNSPECIFIED_HEADING, [custom_task_c]), + ] + + # Build mission from two waypoints with custom tasks + self._mission = Mission("Custom task mission", "uuid-mission-1", waypoints) + + def getMission(self): + """Gets a reference to the mission. + + Returns + ------- + A reference to the mission. + """ + return self._mission + + def __init__(self): + """Initializes ROS, the custom task server, GPS subscriber and mission.""" + + RosNode.__init__(self, 'mission_with_custom_task') + self._mission_builder = MissionWithCustomTask.MissionBuilder() + + + def run(self): + """Execute the mission. + + This function blocks until the mission is complete. + + Returns + ------- + True on successful execution of the mission; else False on any error. + """ + + if not self._mission_builder.getMission().startMission(): + return False + while not self._mission_builder.getMission().isMissionComplete(): + rospy.sleep(1.0) + return self._mission_builder.getMission().getMissionSuccess() + + +if __name__ == '__main__': + if MissionWithCustomTask().run(): + print("Mission completed successfully") + else: + print("Mission failed") + rospy.signal_shutdown('Done') +``` + +## The Code Explained + +``` python +import rospy +import actionlib +from cpr_outdoornav_api_examples_lib.ros_node import RosNode +from cpr_outdoornav_api_examples_lib.waypoint import Waypoint +from cpr_outdoornav_api_examples_lib.mission import Mission +from clearpath_navigation_msgs.msg import Task, UITaskResult, UITaskAction +``` + +Import the `RosNode`, `Waypoint` and `Mission` classes which will be used to create the mission to be executed. +We also import the `Task` and `UITask` messages which are used to generate the action servers. + +``` python + class MissionBuilder: + """Creates and runs the mission, including custom tasks.""" + + def __init__(self): + """Creates the mission with 3 waypoints and custom tasks.""" + + # First waypoint, with custom task + waypoint_a_name = "A" + custom_task_a = Task() + custom_task_a.name = "my_custom_task_a" # choose any name here + custom_task_a.action_server_name = CUSTOM_ACTION_NAME # must match server name + custom_task_a.version = "1.0" # choose any version + custom_task_a.floats = [1000] # param: unique ID + custom_task_a.strings = [waypoint_a_name] # param: goal name + + # Second waypoint, with custom task + waypoint_b_name = "B" + custom_task_b = Task() + custom_task_b.name = "my_custom_task_b" # choose any name here + custom_task_b.action_server_name = CUSTOM_ACTION_NAME # must match server name + custom_task_b.version = "1.0" # choose any version + custom_task_b.floats = [1001] # param: unique ID + custom_task_b.strings = [waypoint_b_name] # param: goal name + + # Third waypoint, with custom task + waypoint_c_name = "C" + custom_task_c = Task() + custom_task_c.name = "my_custom_task_c" # choose any name here + custom_task_c.action_server_name = CUSTOM_ACTION_NAME # must match server name + custom_task_c.version = "1.0" # choose any version + custom_task_c.floats = [1002] # param: unique ID + custom_task_c.strings = [waypoint_c_name] # param: goal name + + + waypoints = [ + Waypoint(waypoint_a_name, "uuid-waypoint-01", 50.1095255, -97.3192484, UNSPECIFIED_HEADING, [custom_task_a]), + Waypoint(waypoint_b_name, "uuid-waypoint-02", 50.1094938, -97.3191085, UNSPECIFIED_HEADING, [custom_task_b]), + Waypoint(waypoint_c_name, "uuid-waypoint-03", 50.1094600, -97.3192100, UNSPECIFIED_HEADING, [custom_task_c]), + ] + + # Build mission from two waypoints with custom tasks + self._mission = Mission("Custom task mission", "uuid-mission-1", waypoints) +``` + +We create the `MissionBuilder` subclass that will create the mission to be executed. We initialize custom task objects +where we specify the `action_server_name` field with the specific action of the custom task. These are then added to the +Waypoints as a list of tasks and the Mission object is created. + +``` python + def __init__(self): + """Initializes ROS, the custom task server, GPS subscriber and mission.""" + + RosNode.__init__(self, 'mission_with_custom_task') + self._mission_builder = MissionWithCustomTask.MissionBuilder() +``` + +We initialize the example class by starting a ROS node and initialize the mission to be executed. + +``` python + def run(self): + """Execute the mission. + + This function blocks until the mission is complete. + + Returns + ------- + True on successful execution of the mission; else False on any error. + """ + + if not self._mission_builder.getMission().startMission(): + return False + while not self._mission_builder.getMission().isMissionComplete(): + time.sleep(1.0) + return self._mission_builder.getMission().getMissionSuccess() +``` + +The `run()` function starts the mission and checks for completion. Once complete we terminate the example code. + +``` python +if __name__ == '__main__': + if MissionWithCustomTask().run(): + print("Mission completed successfully") + else: + print("Mission failed") + rospy.signal_shutdown('Done') +``` + +The main python execution block. We first initialize the example class (runs the __init__ function) and then execute the run() function which +executes the mission and outputs the status information. + + diff --git a/outdoornav_user_manual_versioned_docs/version-0.9.0/api/api_examples/monitor_status.mdx b/outdoornav_user_manual_versioned_docs/version-0.9.0/api/api_examples/monitor_status.mdx index 8aeb3ca8..6e9f280e 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.9.0/api/api_examples/monitor_status.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.9.0/api/api_examples/monitor_status.mdx @@ -1,162 +1,162 @@ ---- -title: Monitor Status -sidebar_label: Monitor Status -sidebar_position: 2 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -:::info - -API examples are currently in BETA. That is, we are providing instructions and examples of how to -generate your own example scripts using our API, however not everyone will be able to run these -scripts. During the BETA release of this feature, only a select few partners will be eligible to -run their custom example scripts. Full access/release of this feature will be available in version 0.10.0 -(estimated Nov. 2023). - -::: - -## The Code - -``` python -#! /usr/bin/env python3 - -import rospy -from cpr_outdoornav_api_examples_lib.ros_node import RosNode -from cpr_outdoornav_api_examples_lib.waypoint import Waypoint -from cpr_outdoornav_api_examples_lib.mission import Mission -from cpr_outdoornav_api_examples_lib.platform_status import PlatformStatusMonitor -from cpr_outdoornav_api_examples_lib.control_status import ControlStatusMonitor -from cpr_outdoornav_api_examples_lib.localization_status import LocalizationStatusMonitor -from cpr_outdoornav_api_examples_lib.navigation_status import NavigationStatusMonitor - - -class MonitorStatus(RosNode): - """Run a simple mission and report status throughout. - - The coordinates used in this example are based on the cpr_agriculture_gazebo - world and should be updated to match the location in which the user's - robot will be operating. - """ - - def __init__(self): - """Initialize the mission details and server connection.""" - - RosNode.__init__(self, 'monitor_status') - waypoints = [ - Waypoint("A", "uuid-waypoint-1", 50.1094938, -97.3191085), - Waypoint("B", "uuid-waypoint-2", 50.1095100, -97.3192000), - Waypoint("C", "uuid-waypoint-3", 50.1095255, -97.3192484), - ] - self.mission = Mission("Monitor status mission", "uuid-mission-1", waypoints) - self._platform_status = PlatformStatusMonitor() - self._control_status = ControlStatusMonitor() - self._localization_status = LocalizationStatusMonitor() - self._navigation_status = NavigationStatusMonitor() - - def _reportStatus(self): - """Report the current status.""" - - rospy.loginfo("--------------------------------------------------------") - self._platform_status.report() - self._control_status.report() - self._localization_status.report() - self._navigation_status.report() - - def run(self): - """Execute the mission and report status.""" - - if not self.mission.startMission(): - rospy.logerr("Failed to start mission") - return False - while not self.mission.isMissionComplete(): - self._reportStatus() - rospy.sleep(1.0) - return self.mission.getMissionSuccess() - - -if __name__ == '__main__': - if MonitorStatus().run(): - print("Mission completed successfully") - else: - print("Mission failed") - -``` - -## The Code Explained - -``` python -import rospy -from cpr_outdoornav_api_examples_lib.ros_node import RosNode -from cpr_outdoornav_api_examples_lib.waypoint import Waypoint -from cpr_outdoornav_api_examples_lib.mission import Mission -from cpr_outdoornav_api_examples_lib.platform_status import PlatformStatusMonitor -from cpr_outdoornav_api_examples_lib.control_status import ControlStatusMonitor -from cpr_outdoornav_api_examples_lib.localization_status import LocalizationStatusMonitor -from cpr_outdoornav_api_examples_lib.navigation_status import NavigationStatusMonitor -``` - -Import the `RosNode`, `Waypoint`, `Mission` classes which will be used to create the mission to be executed. We also import the -`PlatformStatusMonitor`, `ControlStatusMonitor`, `LocalizationStatusMonitor`, `NavigationStatusMonitor` classes which are set up to monitor the topics -relavant to the platform, localization, contrle selection an navigation modules respectively. - -``` python - waypoints = [ - Waypoint("A", "uuid-waypoint-1", 50.1094938, -97.3191085), - Waypoint("B", "uuid-waypoint-2", 50.1095100, -97.3192000), - Waypoint("C", "uuid-waypoint-3", 50.1095255, -97.3192484), - ] - self.mission = Mission("Monitor status mission", "uuid-mission-1", waypoints) -``` - -After initializing the ROS node, we create a mission manually by first creating a list of Waypoint objects and then adding then using the waypoint list -to construct the Mission object. - -``` python - self._platform_status = PlatformStatusMonitor() - self._control_status = ControlStatusMonitor() - self._localization_status = LocalizationStatusMonitor() - self._navigation_status = NavigationStatusMonitor() -``` - -We then initialize the platform, control, localization and navigation monitors, which subscribes to several API topics. - -``` python - def _reportStatus(self): - """Report the current status.""" - - rospy.loginfo("--------------------------------------------------------") - self._platform_status.report() - self._control_status.report() - self._localization_status.report() - self._navigation_status.report() -``` - -The `_reportStatus()` function outputs the results of the monitors to the ROS logs. This includes both the internal ROS logs as well as terminal output. - -``` python - def run(self): - """Execute the mission and report status.""" - - if not self.mission.startMission(): - rospy.logerr("Failed to start mission") - return False - while not self.mission.isMissionComplete(): - self._reportStatus() - rospy.sleep(1.0) - return self.mission.getMissionSuccess() -``` - -The `run()` function starts the mission and checks for completion. Every seconds we run the `reportStatus()` function to output the status information. -Once complete we terminate the example code. - -``` python -if __name__ == '__main__': - if MonitorStatus().run(): - print("Mission completed successfully") - else: - print("Mission failed") -``` - -The main python execution block. We first initialize the example class (runs the __init__ function) and then execute the run() function which -executes the mission and outputs the status information. +--- +title: Monitor Status +sidebar_label: Monitor Status +sidebar_position: 2 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +:::info + +API examples are currently in BETA. That is, we are providing instructions and examples of how to +generate your own example scripts using our API, however not everyone will be able to run these +scripts. During the BETA release of this feature, only a select few partners will be eligible to +run their custom example scripts. Full access/release of this feature will be available in version 0.10.0 +(estimated Nov. 2023). + +::: + +## The Code + +``` python +#! /usr/bin/env python3 + +import rospy +from cpr_outdoornav_api_examples_lib.ros_node import RosNode +from cpr_outdoornav_api_examples_lib.waypoint import Waypoint +from cpr_outdoornav_api_examples_lib.mission import Mission +from cpr_outdoornav_api_examples_lib.platform_status import PlatformStatusMonitor +from cpr_outdoornav_api_examples_lib.control_status import ControlStatusMonitor +from cpr_outdoornav_api_examples_lib.localization_status import LocalizationStatusMonitor +from cpr_outdoornav_api_examples_lib.navigation_status import NavigationStatusMonitor + + +class MonitorStatus(RosNode): + """Run a simple mission and report status throughout. + + The coordinates used in this example are based on the cpr_agriculture_gazebo + world and should be updated to match the location in which the user's + robot will be operating. + """ + + def __init__(self): + """Initialize the mission details and server connection.""" + + RosNode.__init__(self, 'monitor_status') + waypoints = [ + Waypoint("A", "uuid-waypoint-1", 50.1094938, -97.3191085), + Waypoint("B", "uuid-waypoint-2", 50.1095100, -97.3192000), + Waypoint("C", "uuid-waypoint-3", 50.1095255, -97.3192484), + ] + self.mission = Mission("Monitor status mission", "uuid-mission-1", waypoints) + self._platform_status = PlatformStatusMonitor() + self._control_status = ControlStatusMonitor() + self._localization_status = LocalizationStatusMonitor() + self._navigation_status = NavigationStatusMonitor() + + def _reportStatus(self): + """Report the current status.""" + + rospy.loginfo("--------------------------------------------------------") + self._platform_status.report() + self._control_status.report() + self._localization_status.report() + self._navigation_status.report() + + def run(self): + """Execute the mission and report status.""" + + if not self.mission.startMission(): + rospy.logerr("Failed to start mission") + return False + while not self.mission.isMissionComplete(): + self._reportStatus() + rospy.sleep(1.0) + return self.mission.getMissionSuccess() + + +if __name__ == '__main__': + if MonitorStatus().run(): + print("Mission completed successfully") + else: + print("Mission failed") + +``` + +## The Code Explained + +``` python +import rospy +from cpr_outdoornav_api_examples_lib.ros_node import RosNode +from cpr_outdoornav_api_examples_lib.waypoint import Waypoint +from cpr_outdoornav_api_examples_lib.mission import Mission +from cpr_outdoornav_api_examples_lib.platform_status import PlatformStatusMonitor +from cpr_outdoornav_api_examples_lib.control_status import ControlStatusMonitor +from cpr_outdoornav_api_examples_lib.localization_status import LocalizationStatusMonitor +from cpr_outdoornav_api_examples_lib.navigation_status import NavigationStatusMonitor +``` + +Import the `RosNode`, `Waypoint`, `Mission` classes which will be used to create the mission to be executed. We also import the +`PlatformStatusMonitor`, `ControlStatusMonitor`, `LocalizationStatusMonitor`, `NavigationStatusMonitor` classes which are set up to monitor the topics +relavant to the platform, localization, contrle selection an navigation modules respectively. + +``` python + waypoints = [ + Waypoint("A", "uuid-waypoint-1", 50.1094938, -97.3191085), + Waypoint("B", "uuid-waypoint-2", 50.1095100, -97.3192000), + Waypoint("C", "uuid-waypoint-3", 50.1095255, -97.3192484), + ] + self.mission = Mission("Monitor status mission", "uuid-mission-1", waypoints) +``` + +After initializing the ROS node, we create a mission manually by first creating a list of Waypoint objects and then adding then using the waypoint list +to construct the Mission object. + +``` python + self._platform_status = PlatformStatusMonitor() + self._control_status = ControlStatusMonitor() + self._localization_status = LocalizationStatusMonitor() + self._navigation_status = NavigationStatusMonitor() +``` + +We then initialize the platform, control, localization and navigation monitors, which subscribes to several API topics. + +``` python + def _reportStatus(self): + """Report the current status.""" + + rospy.loginfo("--------------------------------------------------------") + self._platform_status.report() + self._control_status.report() + self._localization_status.report() + self._navigation_status.report() +``` + +The `_reportStatus()` function outputs the results of the monitors to the ROS logs. This includes both the internal ROS logs as well as terminal output. + +``` python + def run(self): + """Execute the mission and report status.""" + + if not self.mission.startMission(): + rospy.logerr("Failed to start mission") + return False + while not self.mission.isMissionComplete(): + self._reportStatus() + rospy.sleep(1.0) + return self.mission.getMissionSuccess() +``` + +The `run()` function starts the mission and checks for completion. Every seconds we run the `reportStatus()` function to output the status information. +Once complete we terminate the example code. + +``` python +if __name__ == '__main__': + if MonitorStatus().run(): + print("Mission completed successfully") + else: + print("Mission failed") +``` + +The main python execution block. We first initialize the example class (runs the __init__ function) and then execute the run() function which +executes the mission and outputs the status information. diff --git a/outdoornav_user_manual_versioned_docs/version-0.9.0/api/api_overview.mdx b/outdoornav_user_manual_versioned_docs/version-0.9.0/api/api_overview.mdx index 3b69afd0..503de14d 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.9.0/api/api_overview.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.9.0/api/api_overview.mdx @@ -1,61 +1,61 @@ ---- -title: API Overview -sidebar_label: API Overview -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -While the Web User Interface provides a great way to get started quickly -with OutdoorNav Software, some users will want programmatic control or -may wish to develop their own graphical user interfaces \-- for those -users, the Application Programming Interface (API) provides the -flexibility to do so. This is illustrated in the figure below. - -
-
- -
Interconnection between OutdoorNav Software and UGV Controller
-
-
- -The API is, at present, a [ROS 1 Noetic](http://wiki.ros.org/noetic) API, -but will soon be extended to a ROS 2 API. The API is divided into two -sections, whose details are provided below: - -- [Platform API](api_endpoints/platform_api.mdx): The set of [ROS - Topics](http://wiki.ros.org/Topics) are used to comminucate with the - hardware platform (eg. sensor data, wireless, battery state, command - velocity). This API can be used by autonomy software packages to - interface with the hardware platform. - - [Topics Published by UGV](api_endpoints/platform_api.mdx#topics-published-by-platform): - The set of topics that are published by the hardware platform. - - [Topics Subscribed to by UGV](api_endpoints/platform_api.mdx#topics-subscribed-by-platform): - The set of topics that are subscribed to by the hardware - platform. -- [Autonomy API](api_endpoints/autonomy_api.mdx): The set of [ROS - Topics](http://wiki.ros.org/Topics) that are used for monitoring and - controlling the the hardware platform through the OutdoorNav - autonomy software. - - [Topics Published by Autonomy](api_endpoints/autonomy_api.mdx#topics-published-by-autonomy): - The set of [ROS Topics](http://wiki.ros.org/Topics) published by - OutdoorNav Software, to be subscribed to by the UGV. - - [Topics Subscribed to by Autonomy](api_endpoints/autonomy_api.mdx#topics-subscribed-to-by-autonomy): - The set of [ROS Topics](http://wiki.ros.org/Topics) - subscribed to by OutdoorNav Software, typically published by the - client for directing OutdoorNav operation. - - [Services Exported by Autonomy](api_endpoints/autonomy_api.mdx#services-exported-by-autonomy): - The set of [ROS Services](http://wiki.ros.org/Services) provided - by OutdoorNav Software, for use by the client to modify/control - the behaviour of the Autonomy. - - [Actions Exported by Autonomy](api_endpoints/autonomy_api.mdx#actions-exported-by-autonomy): - The set of [ROS Actions](http://wiki.ros.org/actionlib) provided - by OutdoorNav Software, for use by the client to modify/control - the behaviour of the Autonomy. -- [Mission Manager API](api_endpoints/mission_manager_api.mdx): The set of [ROS - Services](http://wiki.ros.org/Services) that are used for creating, deleting, and modifying OutdoorNav missions -- [Definitions](api_endpoints/definitions.mdx): The set of custom - [ROS Message](http://wiki.ros.org/Messages), [ROS - Service](http://wiki.ros.org/Services), and [ROS - Action](http://wiki.ros.org/actionlib) definitions. -- API Examples: Example code to come. +--- +title: API Overview +sidebar_label: API Overview +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +While the Web User Interface provides a great way to get started quickly +with OutdoorNav Software, some users will want programmatic control or +may wish to develop their own graphical user interfaces \-- for those +users, the Application Programming Interface (API) provides the +flexibility to do so. This is illustrated in the figure below. + +
+
+ +
Interconnection between OutdoorNav Software and UGV Controller
+
+
+ +The API is, at present, a [ROS 1 Noetic](http://wiki.ros.org/noetic) API, +but will soon be extended to a ROS 2 API. The API is divided into two +sections, whose details are provided below: + +- [Platform API](api_endpoints/platform_api.mdx): The set of [ROS + Topics](http://wiki.ros.org/Topics) are used to comminucate with the + hardware platform (eg. sensor data, wireless, battery state, command + velocity). This API can be used by autonomy software packages to + interface with the hardware platform. + - [Topics Published by UGV](api_endpoints/platform_api.mdx#topics-published-by-platform): + The set of topics that are published by the hardware platform. + - [Topics Subscribed to by UGV](api_endpoints/platform_api.mdx#topics-subscribed-by-platform): + The set of topics that are subscribed to by the hardware + platform. +- [Autonomy API](api_endpoints/autonomy_api.mdx): The set of [ROS + Topics](http://wiki.ros.org/Topics) that are used for monitoring and + controlling the the hardware platform through the OutdoorNav + autonomy software. + - [Topics Published by Autonomy](api_endpoints/autonomy_api.mdx#topics-published-by-autonomy): + The set of [ROS Topics](http://wiki.ros.org/Topics) published by + OutdoorNav Software, to be subscribed to by the UGV. + - [Topics Subscribed to by Autonomy](api_endpoints/autonomy_api.mdx#topics-subscribed-to-by-autonomy): + The set of [ROS Topics](http://wiki.ros.org/Topics) + subscribed to by OutdoorNav Software, typically published by the + client for directing OutdoorNav operation. + - [Services Exported by Autonomy](api_endpoints/autonomy_api.mdx#services-exported-by-autonomy): + The set of [ROS Services](http://wiki.ros.org/Services) provided + by OutdoorNav Software, for use by the client to modify/control + the behaviour of the Autonomy. + - [Actions Exported by Autonomy](api_endpoints/autonomy_api.mdx#actions-exported-by-autonomy): + The set of [ROS Actions](http://wiki.ros.org/actionlib) provided + by OutdoorNav Software, for use by the client to modify/control + the behaviour of the Autonomy. +- [Mission Manager API](api_endpoints/mission_manager_api.mdx): The set of [ROS + Services](http://wiki.ros.org/Services) that are used for creating, deleting, and modifying OutdoorNav missions +- [Definitions](api_endpoints/definitions.mdx): The set of custom + [ROS Message](http://wiki.ros.org/Messages), [ROS + Service](http://wiki.ros.org/Services), and [ROS + Action](http://wiki.ros.org/actionlib) definitions. +- API Examples: Example code to come. diff --git a/outdoornav_user_manual_versioned_docs/version-0.9.0/cpr_hardware.mdx b/outdoornav_user_manual_versioned_docs/version-0.9.0/cpr_hardware.mdx index f60527ff..2d1efdd0 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.9.0/cpr_hardware.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.9.0/cpr_hardware.mdx @@ -1,405 +1,405 @@ ---- -title: "Appendix B: CPR Hardware" -sidebar_label: "Appendix B: CPR Hardware" -sidebar_position: 13 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -When using a Clearpath Robotics UGV and Base Station, the following -hardware setup may be required. - -## Calibrating the IMU - -Although IMU magnetometers are calibrated at the factory to remove any -internal magnetic influences in the device, measurements are still -subject to influence from external magnetic anomalies when the sensor is -installed. These anomalies are divided into two classes: hard iron -offsets and soft iron distortions. Hard iron offsets are created by -objects that produce a magnetic field. Soft iron distortions are -considered deflections or alterations in the existing magnetic field. -Ideally, these influences are mitigated by installing the sensor away -from magnetic sources, such as coils, magnets, and ferrous metal -structures and mounting hardware. However, often these sources are hard -to avoid or are hidden. To mitigate this effect when using the IMU -magnetometer to aid in heading estimations, a field calibration of the -magnetometer after final installation is highly recommended. This means -that the IMU must be calibrated in the same environment that you use -your UGV for autonomous navigation. - -### Microstrain IMU - -If your UGV has a 3DM-GX5-25 Microstrain IMU, the complete instruction -on calibration of your IMU can be found in section 5.4 of the -[datasheet](https://www.microstrain.com/sites/default/files/3dm-gx5-25_user_manual_8500-0012.pdf). -Note that you need a computer with Windows system and the LORD Sensing -MIP Hard and Soft Iron Calibration software installed which can be found -at the Microstrain website. - -### UM6/7 IMU - -If you are using UM6 or UM7 IMUs, you will need the magnetometer display -package which is located at the following address on your UGV: -`~/catkin_ws/Drivers/src/imu_tools/magnetometer_display`. - -Follow these steps to calibrate the IMU on your machine: - -1. Create a catkin workspace on your local machine and copy the package - `magnetometer_display` into your src folder. Build this package with - the `catkin_make` command. - -2. Perform the following command to make the calibration script - executable: - - ``` bash - $ sudo chmod +x calibration.py - ``` - -3. Connect the IMU to your computer and launch the driver. Or if you - are on the same network as your UGV, make your UGV the ROS master - and ensure that you can echo the IMU topic on your computer. - -4. Open the `magnetometer.launch` file in the `magnetometer_display` - package and change the sections shown in the figure below. - Specifically, set `use_mag_field` to true when the IMU is outputting - magnetometer measurements with a `sensor_msgs/MagneticField` - message, otherwise set to false. Microstrain is the only IMU which - uses the MagneticField message type. - -
-
- -
Magnetometer calibration, general launch settings
-
-
- -5. Launch the calibration using the following command: - - ``` bash - $ roslaunch magnetometer_display magnetometer.launch - ``` - -6. Move the IMU around to get good coverage. RViz will display - magnetometer points (red) and will plot current ellipsoid fit - (green) as shown in the figure below. - -
-
- -
Magnetometer calibration, ellipsoid fit plot
-
-
- -7. Ellipsoid fit parameters are displayed in terminal as shown in the - figure below. - -
-
- -
Magnetometer calibration, ellipsoid fit - parameters
-
-
- -8. Once there are enough red points on your fitted ellipsoid, enter the - above calibrations in the IMU driver launch file. Open the - `sensor.launch` file in the `cpr_gps_localization` package and go to - the UM7 (or UM6) section of the launch file. The figure below shows - this section for the UM7. - -
-
- -
Magnetometer calibration, ellipsoid fit settings in launch file
-
-
- - You should enter the parameters generated in the Ellipsoid fit step - as follows (to account for the NED to ENU transform the driver - applies): - - - Launch file X = Terminal Y - - Launch file Y = Terminal X - - Launch file Z = -Terminal Z - -## RTK Positioning GPS Setup - -:::note - -Please skip this section if your robot does not have RTK GPS. - -::: - -The following configuration is for establishing communications between -the Base Station and the UGV using TCP/IP for the purpose of -transmitting RTK corrections. Before starting this procedure, make sure -that you have installed the [SwiftNav -console](https://support.swiftnav.com/support/solutions/articles/44001903699-installing-swift-console). - -### Base Station GPS Configuration - -- Connect the Swift Navigation device to a computer via USB or the USB - to Serial Adapter cable. - -- Open Swift Console and connect to the device. - -- Set the following options in the **ethernet** section as shown in - the figure below. - - 1. ip_config_mode: `Static` - 2. ip_address: `192.168.131.30` - 3. netmask: `255.255.255.0` - -
-
- -
Base Station Ethernet settings
-
-
- -- Set the following options in the **tcp_server1** section as show in - the figure below. - - 1. mode: `SBP` - 2. port: `55556` - 3. enabled_sbp_messages: `72,74,117,65535` - -
-
- -
Base Station TCP1 Server settings
-
-
- -- Set the following options in the **solution** section as shown in - the figure below. - - 1. soln_freq: `10` - 2. correction_age_max: `30` - 3. output_every_n_obs: `10` - 4. dgnss_solution_mode: `Low Latency` - -
-
- -
Base Station Solution settings
-
-
- -- Next the Base Station has to be surveyed. There are two ways of - doing this which are explained in [RTK Survey Positioning](#base-station-survey). -- Click Save to Flash. -- Close Swift Console. -- Disconnect the device from the computer. - -### UGV Position GPS Configuration {#ugv-position-gps-config} - -- Connect the Swift Navigation device to a computer via USB or the USB - to Serial Adapter cable. - -- Open Swift Console and connect to the device. - -- Set the following options in the **ethernet** section as shown in - the figure below. - - 1. ip_config_mode: `Static` - 2. ip_address: `192.168.131.31` - 3. netmask: `255.255.255.0` - -
-
- -
UGV GPS Ethernet settings
-
-
- -- Set the following options in the **tcp_client0** section as show in - the figure below. - - 1. mode: `SBP` - 2. port: `192.168.131.30:55556` - 3. enabled_sbp_messages: `0` - -
-
- -
UGV GPS TCP Client0 settings
-
-
- -- Set the following options in the **solution** section as show in the - figure below. - - 1. soln_freq: `10` - 2. correction_age_max: `30` - 3. output_every_n_obs: `10` - 4. dgnss_solution_mode: `Low Latency` - -
-
- -
UGV GPS Solution settings
-
-
- -- Click Save to Flash. - -- Close Swift Console. - -- Disconnect the device from the computer. - -Once you have entered these settings. Connect your computer to the Wi-Fi -network of the Base Station. Also make sure that the UGC (which is -connected to the UGV GPS unit) is also connected to the Base Station -Wifi. The you should be able to verify connectivity across the devices. -To check the Base Station, complete the following steps. - -- Open Swift Console on you computer -- Select **TCP/IP** -- For IP Address enter `192.168.131.30` -- For IP Port enter `55555` -- Click **OK** -- Select the **Observations** tab -- In the **Remote** section you should see observation data from your - UGV. - -To check the UGV, complete the following steps. - -- Open Swift Console -- Select **TCP/IP** -- For IP Address enter `192.168.131.31` -- For IP Port enter `55555` -- Click **OK** -- Select the **Observations** tab -- In the **Remote** section you should see observation data from your - Base Station. - -Further information on [RTK setup](https://swiftnav.freshdesk.com/support/solutions/articles/44001904334-piksi-multi-gnss-rtk-position-with-stationary-base%7D%7Bhttps://swiftnav.freshdesk.com/support/solutions/articles/44001904334-piksi-multi-gnss-rtk-position-with-stationary-base) -is available from SwiftNav. - -## RTK Survey Positioning {#base-station-survey} - -:::note - -Please skip this section if your UGV does not have RTK GPS. - -::: - -:::warning - -Once you have surveyed the location of the Base Station, you **cannot** -relocate the Base Station throughout your tests. Otherwise, this step -has to be repeated. - -::: - -There are three ways to survey the Base Station location: - -1. OutdoorNav Web User Interface (easiest/accurate), -2. Swiftnav console autosurvey (fastest/least accurate), -3. ROS launch file geodetic survey (for debug output display). - -Using the OutdoorNav Web UI is the easiest and most accurate way to do -this since it runs the ROS geodetic survey tool which uses more samples -to compute the final position of the Base Station than the Swiftnav -console. Using the geodetic ROS survey launch file directly would allow -the user to visualize the output log directly but requires preliminary -knowledge in ROS. - -### Base Station Survey: Web UI - -Using the OutdoorNav Web UI to survey the Base Station is very simple. -See [Survey Base Station](getting_started/system_setup.mdx#survey_base_station) for details. - -### Base Station Survey: Piksi Console - -Use the Piksi console connect the base station GPS. Go to "Settings -\> -surveyed position", click to any field in this section and then click -the button on the top right corner "Auto Survey". The figure below -shows these steps. The last 1000 GPS points will be used to compute the -position of the Base Station. - -
-
- -
Auto Survey
-
-
- -After that, make sure the four fields in "surveyed position" -(broadcast, surveyed lat, surveyed lon, surveyed alt) are consistent -with your location. - -### Base Station Survey: ROS Geodetic Survey - -The `ethz_piksi_ros` repository should be installed in the UGV's -`catkin_ws`. To run the surveying process simply connect your PC to the -Base Station network, `ssh` into the UGV's computer and run the -following: - -``` bash -roslaunch {robot_name}_gps_navigation geodetic_survey.launch -``` - -where `robot_name` is either `jackal`, `husky`, or `warthog` depending -on your UGV. The surveying will begin and you will see a running tally -of the collected data. - -## RTK Heading Setup - -For the rest of this section, it is assumed that a third Swiftnav Duro -device is available with IP address of 192.168.131.32. Note that in -order to change the IP address of a Swiftnav Duro, you need to use the -Swiftnav console and connect to the device with the serial port. - -:::note - -The instructions in this section will overwrite some of the settings set -in [UGV Position GPS Configuration](#ugv-position-gps-config) on the -Position/Reference Duro receiver. This is normal since the configuration -in [UGV Position GPS Configuration](#ugv-position-gps-config) is for a UGV -with only the position Duro receiver. If the heading receiver is -connected as well, please continue with the instructions below. - -::: - -The two Swiftnav Duro GPS device on the UGV are connected via serial -cable. They are also both connected via Ethernet cable to the computer -on the UGV. For computing the heading, on Duro (the one on the rear with -IP address 192.168.131.31) operates only to provide GNSS Observations to -the other Duro that computes an RTK derived heading (the Duro on the -front with IP address 192.168.131.32). For the purposes of this -document, we will call the Duro/Piksi that operates to provide the raw -GNSS observations only the "Reference Receiver" and the Duro/Piksi -producing heading measurements the "Attitude Receiver." - -Use the Swiftnav console to connect to the Reference Receiver (with IP -address of 192.168.131.31) and insert the settings shown in the figure -below. - -
-
- -
Reference Receiver settings
-
-
- -Next, connect to the Attitude Receiver (with IP address of -192.168.131.32) and change the configuration as shown in the figure -below. - -
-
- -
Attitude Receiver settings
-
-
- -For further information please refer to [these instructions](https://swiftnav.freshdesk.com/support/solutions/articles/44001907898-rtk-heading-gnss-compass-configuration%7D%7Bhttps://swiftnav.freshdesk.com/support/solutions/articles/44001907898-rtk-heading-gnss-compass-configuration). - -## Wireless Motion Stop - -Please refer to the hardware user manual of the motion stop device for proper -usage. A trained operator should be used to supervise navigation of the -UGV under autonomous control at all times. The Operator should be -familiar with the use of the wireless motion stop device. +--- +title: "Appendix B: CPR Hardware" +sidebar_label: "Appendix B: CPR Hardware" +sidebar_position: 13 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +When using a Clearpath Robotics UGV and Base Station, the following +hardware setup may be required. + +## Calibrating the IMU + +Although IMU magnetometers are calibrated at the factory to remove any +internal magnetic influences in the device, measurements are still +subject to influence from external magnetic anomalies when the sensor is +installed. These anomalies are divided into two classes: hard iron +offsets and soft iron distortions. Hard iron offsets are created by +objects that produce a magnetic field. Soft iron distortions are +considered deflections or alterations in the existing magnetic field. +Ideally, these influences are mitigated by installing the sensor away +from magnetic sources, such as coils, magnets, and ferrous metal +structures and mounting hardware. However, often these sources are hard +to avoid or are hidden. To mitigate this effect when using the IMU +magnetometer to aid in heading estimations, a field calibration of the +magnetometer after final installation is highly recommended. This means +that the IMU must be calibrated in the same environment that you use +your UGV for autonomous navigation. + +### Microstrain IMU + +If your UGV has a 3DM-GX5-25 Microstrain IMU, the complete instruction +on calibration of your IMU can be found in section 5.4 of the +[datasheet](https://www.microstrain.com/sites/default/files/3dm-gx5-25_user_manual_8500-0012.pdf). +Note that you need a computer with Windows system and the LORD Sensing +MIP Hard and Soft Iron Calibration software installed which can be found +at the Microstrain website. + +### UM6/7 IMU + +If you are using UM6 or UM7 IMUs, you will need the magnetometer display +package which is located at the following address on your UGV: +`~/catkin_ws/Drivers/src/imu_tools/magnetometer_display`. + +Follow these steps to calibrate the IMU on your machine: + +1. Create a catkin workspace on your local machine and copy the package + `magnetometer_display` into your src folder. Build this package with + the `catkin_make` command. + +2. Perform the following command to make the calibration script + executable: + + ``` bash + $ sudo chmod +x calibration.py + ``` + +3. Connect the IMU to your computer and launch the driver. Or if you + are on the same network as your UGV, make your UGV the ROS master + and ensure that you can echo the IMU topic on your computer. + +4. Open the `magnetometer.launch` file in the `magnetometer_display` + package and change the sections shown in the figure below. + Specifically, set `use_mag_field` to true when the IMU is outputting + magnetometer measurements with a `sensor_msgs/MagneticField` + message, otherwise set to false. Microstrain is the only IMU which + uses the MagneticField message type. + +
+
+ +
Magnetometer calibration, general launch settings
+
+
+ +5. Launch the calibration using the following command: + + ``` bash + $ roslaunch magnetometer_display magnetometer.launch + ``` + +6. Move the IMU around to get good coverage. RViz will display + magnetometer points (red) and will plot current ellipsoid fit + (green) as shown in the figure below. + +
+
+ +
Magnetometer calibration, ellipsoid fit plot
+
+
+ +7. Ellipsoid fit parameters are displayed in terminal as shown in the + figure below. + +
+
+ +
Magnetometer calibration, ellipsoid fit + parameters
+
+
+ +8. Once there are enough red points on your fitted ellipsoid, enter the + above calibrations in the IMU driver launch file. Open the + `sensor.launch` file in the `cpr_gps_localization` package and go to + the UM7 (or UM6) section of the launch file. The figure below shows + this section for the UM7. + +
+
+ +
Magnetometer calibration, ellipsoid fit settings in launch file
+
+
+ + You should enter the parameters generated in the Ellipsoid fit step + as follows (to account for the NED to ENU transform the driver + applies): + + - Launch file X = Terminal Y + - Launch file Y = Terminal X + - Launch file Z = -Terminal Z + +## RTK Positioning GPS Setup + +:::note + +Please skip this section if your robot does not have RTK GPS. + +::: + +The following configuration is for establishing communications between +the Base Station and the UGV using TCP/IP for the purpose of +transmitting RTK corrections. Before starting this procedure, make sure +that you have installed the [SwiftNav +console](https://support.swiftnav.com/support/solutions/articles/44001903699-installing-swift-console). + +### Base Station GPS Configuration + +- Connect the Swift Navigation device to a computer via USB or the USB + to Serial Adapter cable. + +- Open Swift Console and connect to the device. + +- Set the following options in the **ethernet** section as shown in + the figure below. + + 1. ip_config_mode: `Static` + 2. ip_address: `192.168.131.30` + 3. netmask: `255.255.255.0` + +
+
+ +
Base Station Ethernet settings
+
+
+ +- Set the following options in the **tcp_server1** section as show in + the figure below. + + 1. mode: `SBP` + 2. port: `55556` + 3. enabled_sbp_messages: `72,74,117,65535` + +
+
+ +
Base Station TCP1 Server settings
+
+
+ +- Set the following options in the **solution** section as shown in + the figure below. + + 1. soln_freq: `10` + 2. correction_age_max: `30` + 3. output_every_n_obs: `10` + 4. dgnss_solution_mode: `Low Latency` + +
+
+ +
Base Station Solution settings
+
+
+ +- Next the Base Station has to be surveyed. There are two ways of + doing this which are explained in [RTK Survey Positioning](#base-station-survey). +- Click Save to Flash. +- Close Swift Console. +- Disconnect the device from the computer. + +### UGV Position GPS Configuration {#ugv-position-gps-config} + +- Connect the Swift Navigation device to a computer via USB or the USB + to Serial Adapter cable. + +- Open Swift Console and connect to the device. + +- Set the following options in the **ethernet** section as shown in + the figure below. + + 1. ip_config_mode: `Static` + 2. ip_address: `192.168.131.31` + 3. netmask: `255.255.255.0` + +
+
+ +
UGV GPS Ethernet settings
+
+
+ +- Set the following options in the **tcp_client0** section as show in + the figure below. + + 1. mode: `SBP` + 2. port: `192.168.131.30:55556` + 3. enabled_sbp_messages: `0` + +
+
+ +
UGV GPS TCP Client0 settings
+
+
+ +- Set the following options in the **solution** section as show in the + figure below. + + 1. soln_freq: `10` + 2. correction_age_max: `30` + 3. output_every_n_obs: `10` + 4. dgnss_solution_mode: `Low Latency` + +
+
+ +
UGV GPS Solution settings
+
+
+ +- Click Save to Flash. + +- Close Swift Console. + +- Disconnect the device from the computer. + +Once you have entered these settings. Connect your computer to the Wi-Fi +network of the Base Station. Also make sure that the UGC (which is +connected to the UGV GPS unit) is also connected to the Base Station +Wifi. The you should be able to verify connectivity across the devices. +To check the Base Station, complete the following steps. + +- Open Swift Console on you computer +- Select **TCP/IP** +- For IP Address enter `192.168.131.30` +- For IP Port enter `55555` +- Click **OK** +- Select the **Observations** tab +- In the **Remote** section you should see observation data from your + UGV. + +To check the UGV, complete the following steps. + +- Open Swift Console +- Select **TCP/IP** +- For IP Address enter `192.168.131.31` +- For IP Port enter `55555` +- Click **OK** +- Select the **Observations** tab +- In the **Remote** section you should see observation data from your + Base Station. + +Further information on [RTK setup](https://swiftnav.freshdesk.com/support/solutions/articles/44001904334-piksi-multi-gnss-rtk-position-with-stationary-base%7D%7Bhttps://swiftnav.freshdesk.com/support/solutions/articles/44001904334-piksi-multi-gnss-rtk-position-with-stationary-base) +is available from SwiftNav. + +## RTK Survey Positioning {#base-station-survey} + +:::note + +Please skip this section if your UGV does not have RTK GPS. + +::: + +:::warning + +Once you have surveyed the location of the Base Station, you **cannot** +relocate the Base Station throughout your tests. Otherwise, this step +has to be repeated. + +::: + +There are three ways to survey the Base Station location: + +1. OutdoorNav Web User Interface (easiest/accurate), +2. Swiftnav console autosurvey (fastest/least accurate), +3. ROS launch file geodetic survey (for debug output display). + +Using the OutdoorNav Web UI is the easiest and most accurate way to do +this since it runs the ROS geodetic survey tool which uses more samples +to compute the final position of the Base Station than the Swiftnav +console. Using the geodetic ROS survey launch file directly would allow +the user to visualize the output log directly but requires preliminary +knowledge in ROS. + +### Base Station Survey: Web UI + +Using the OutdoorNav Web UI to survey the Base Station is very simple. +See [Survey Base Station](getting_started/system_setup.mdx#survey_base_station) for details. + +### Base Station Survey: Piksi Console + +Use the Piksi console connect the base station GPS. Go to "Settings -\> +surveyed position", click to any field in this section and then click +the button on the top right corner "Auto Survey". The figure below +shows these steps. The last 1000 GPS points will be used to compute the +position of the Base Station. + +
+
+ +
Auto Survey
+
+
+ +After that, make sure the four fields in "surveyed position" +(broadcast, surveyed lat, surveyed lon, surveyed alt) are consistent +with your location. + +### Base Station Survey: ROS Geodetic Survey + +The `ethz_piksi_ros` repository should be installed in the UGV's +`catkin_ws`. To run the surveying process simply connect your PC to the +Base Station network, `ssh` into the UGV's computer and run the +following: + +``` bash +roslaunch {robot_name}_gps_navigation geodetic_survey.launch +``` + +where `robot_name` is either `jackal`, `husky`, or `warthog` depending +on your UGV. The surveying will begin and you will see a running tally +of the collected data. + +## RTK Heading Setup + +For the rest of this section, it is assumed that a third Swiftnav Duro +device is available with IP address of 192.168.131.32. Note that in +order to change the IP address of a Swiftnav Duro, you need to use the +Swiftnav console and connect to the device with the serial port. + +:::note + +The instructions in this section will overwrite some of the settings set +in [UGV Position GPS Configuration](#ugv-position-gps-config) on the +Position/Reference Duro receiver. This is normal since the configuration +in [UGV Position GPS Configuration](#ugv-position-gps-config) is for a UGV +with only the position Duro receiver. If the heading receiver is +connected as well, please continue with the instructions below. + +::: + +The two Swiftnav Duro GPS device on the UGV are connected via serial +cable. They are also both connected via Ethernet cable to the computer +on the UGV. For computing the heading, on Duro (the one on the rear with +IP address 192.168.131.31) operates only to provide GNSS Observations to +the other Duro that computes an RTK derived heading (the Duro on the +front with IP address 192.168.131.32). For the purposes of this +document, we will call the Duro/Piksi that operates to provide the raw +GNSS observations only the "Reference Receiver" and the Duro/Piksi +producing heading measurements the "Attitude Receiver." + +Use the Swiftnav console to connect to the Reference Receiver (with IP +address of 192.168.131.31) and insert the settings shown in the figure +below. + +
+
+ +
Reference Receiver settings
+
+
+ +Next, connect to the Attitude Receiver (with IP address of +192.168.131.32) and change the configuration as shown in the figure +below. + +
+
+ +
Attitude Receiver settings
+
+
+ +For further information please refer to [these instructions](https://swiftnav.freshdesk.com/support/solutions/articles/44001907898-rtk-heading-gnss-compass-configuration%7D%7Bhttps://swiftnav.freshdesk.com/support/solutions/articles/44001907898-rtk-heading-gnss-compass-configuration). + +## Wireless Motion Stop + +Please refer to the hardware user manual of the motion stop device for proper +usage. A trained operator should be used to supervise navigation of the +UGV under autonomous control at all times. The Operator should be +familiar with the use of the wireless motion stop device. diff --git a/outdoornav_user_manual_versioned_docs/version-0.9.0/customized_tuning/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.9.0/customized_tuning/_category_.json index 4c27a4d9..d38b7f55 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.9.0/customized_tuning/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.9.0/customized_tuning/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Appendix C: Tuning & Customization", - "position": 14 +{ + "label": "Appendix C: Tuning & Customization", + "position": 14 } \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.9.0/customized_tuning/sensor_customization.mdx b/outdoornav_user_manual_versioned_docs/version-0.9.0/customized_tuning/sensor_customization.mdx index 9d9f115a..f2cce53a 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.9.0/customized_tuning/sensor_customization.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.9.0/customized_tuning/sensor_customization.mdx @@ -1,9 +1,9 @@ ---- -title: "Sensor Customization" -sidebar_label: "Sensor Customization" -sidebar_position: 4 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -Information incoming in a future release. Please contact Clearpath customer support at \ to discuss any related issue. +--- +title: "Sensor Customization" +sidebar_label: "Sensor Customization" +sidebar_position: 4 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +Information incoming in a future release. Please contact Clearpath customer support at \ to discuss any related issue. diff --git a/outdoornav_user_manual_versioned_docs/version-0.9.0/customized_tuning/tuning_instructions/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.9.0/customized_tuning/tuning_instructions/_category_.json index d62e291a..4b3e7b59 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.9.0/customized_tuning/tuning_instructions/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.9.0/customized_tuning/tuning_instructions/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Tuning Instructions", - "position": 2 -} +{ + "label": "Tuning Instructions", + "position": 2 +} diff --git a/outdoornav_user_manual_versioned_docs/version-0.9.0/customized_tuning/tuning_instructions/ackermann_drive_dynamics.mdx b/outdoornav_user_manual_versioned_docs/version-0.9.0/customized_tuning/tuning_instructions/ackermann_drive_dynamics.mdx index 51639337..0125d8dd 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.9.0/customized_tuning/tuning_instructions/ackermann_drive_dynamics.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.9.0/customized_tuning/tuning_instructions/ackermann_drive_dynamics.mdx @@ -1,9 +1,9 @@ ---- -title: "Ackermann Drive" -sidebar_label: "Ackermann Drive" -sidebar_position: 4 -toc_min_heading_level: 2 -toc_max_heading_level: 2 ---- - -Information incoming in release 0.10.0. Please contact Clearpath customer support at support@clearpathrobotics.com to discuss any related issue. +--- +title: "Ackermann Drive" +sidebar_label: "Ackermann Drive" +sidebar_position: 4 +toc_min_heading_level: 2 +toc_max_heading_level: 2 +--- + +Information incoming in release 0.10.0. Please contact Clearpath customer support at support@clearpathrobotics.com to discuss any related issue. diff --git a/outdoornav_user_manual_versioned_docs/version-0.9.0/customized_tuning/tuning_instructions/footprint_tuning.mdx b/outdoornav_user_manual_versioned_docs/version-0.9.0/customized_tuning/tuning_instructions/footprint_tuning.mdx index 4b90f600..6b105ecb 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.9.0/customized_tuning/tuning_instructions/footprint_tuning.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.9.0/customized_tuning/tuning_instructions/footprint_tuning.mdx @@ -1,9 +1,9 @@ ---- -title: "Footprint Tuning" -sidebar_label: "Footprint Tuning" -sidebar_position: 5 -toc_min_heading_level: 2 -toc_max_heading_level: 2 ---- - -Information incoming in release 0.9.0. Please contact Clearpath customer support at \ to discuss any related issue. +--- +title: "Footprint Tuning" +sidebar_label: "Footprint Tuning" +sidebar_position: 5 +toc_min_heading_level: 2 +toc_max_heading_level: 2 +--- + +Information incoming in release 0.9.0. Please contact Clearpath customer support at \ to discuss any related issue. diff --git a/outdoornav_user_manual_versioned_docs/version-0.9.0/customized_tuning/tuning_overview.mdx b/outdoornav_user_manual_versioned_docs/version-0.9.0/customized_tuning/tuning_overview.mdx index 851df29b..77fbabeb 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.9.0/customized_tuning/tuning_overview.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.9.0/customized_tuning/tuning_overview.mdx @@ -1,25 +1,25 @@ ---- -title: "Tuning Overview" -sidebar_label: "Tuning Overview" -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -The scope of Appendix C is to provide information on how to tune the various components of -OutdoorNav. - -Instructions for tuning specific platform types can be found here: - -- [Differential Drive (Skid-Steer) Dynamics](tuning_instructions/differential_drive_dynamics.mdx) -- [Ackermann Drive Dynamics](tuning_instructions/ackermann_drive_dynamics.mdx) - - -Lists of parameters related to each component of the autonomy can be found here: - -- [Localization Parameters](tuning_parameters/localization_parameters.mdx) -- [Navigation Parameters](tuning_parameters/navigation_parameters.mdx) -- [Collision Avoidance Parameters](tuning_parameters/collision_avoidance_parameters.mdx) - -In future releases, we will describe how the user can [Customize their UI](user_interface_customization.mdx) +--- +title: "Tuning Overview" +sidebar_label: "Tuning Overview" +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +The scope of Appendix C is to provide information on how to tune the various components of +OutdoorNav. + +Instructions for tuning specific platform types can be found here: + +- [Differential Drive (Skid-Steer) Dynamics](tuning_instructions/differential_drive_dynamics.mdx) +- [Ackermann Drive Dynamics](tuning_instructions/ackermann_drive_dynamics.mdx) + + +Lists of parameters related to each component of the autonomy can be found here: + +- [Localization Parameters](tuning_parameters/localization_parameters.mdx) +- [Navigation Parameters](tuning_parameters/navigation_parameters.mdx) +- [Collision Avoidance Parameters](tuning_parameters/collision_avoidance_parameters.mdx) + +In future releases, we will describe how the user can [Customize their UI](user_interface_customization.mdx) as well as how to [Customize which Sensors](sensor_customization.mdx) are input into OutdoorNav. \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.9.0/customized_tuning/tuning_parameters/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.9.0/customized_tuning/tuning_parameters/_category_.json index fb6592a9..0e2dc60a 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.9.0/customized_tuning/tuning_parameters/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.9.0/customized_tuning/tuning_parameters/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Tuning Parameters", - "position": 3 -} +{ + "label": "Tuning Parameters", + "position": 3 +} diff --git a/outdoornav_user_manual_versioned_docs/version-0.9.0/customized_tuning/tuning_parameters/navigation_parameters.mdx b/outdoornav_user_manual_versioned_docs/version-0.9.0/customized_tuning/tuning_parameters/navigation_parameters.mdx index 8c986090..7cd7b144 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.9.0/customized_tuning/tuning_parameters/navigation_parameters.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.9.0/customized_tuning/tuning_parameters/navigation_parameters.mdx @@ -1,167 +1,167 @@ ---- -title: "Navigation Parameters" -sidebar_label: "Navigation Parameters" -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 3 ---- - -import versions from "@site/static/versions.js" - -## Controllers {#controllers} - -### Determine the file location of the parameter {#file_location} - -The parameters related to the controller, can be found here: - -``` bash -~/cpr_outdoornav_launch/onav_robots/params//navigation/controls_general.yaml -``` - -If they are not listed in the above file, it is because they are using the default values and are not being overwritten. - -### MPC Controller {#controller} - -#### MBF Plugins - -Currently we have implemented a Move-Base Flex controller plugin named: **OnavMbfMpcController** - -Two instances of this plugin are loaded at runtime by our navigation node (as seen in the table below). The parameters are equivalent for each instance of the plugin but the values of certain of these parameters are different. - -| Controller name | Description | -|-----------------|-------------| -| **`mpc_controller`** | The controller used during normal navigation and applies to tracking the paths generated between all the mission waypoints. | -| **`mpc_dock_controller`** | The controller used during docking and applies only to tracking the dock and undock paths. | - -#### MPC State Machine - -The MPC controller operates as a state machine that contains the following states: - -| MPC State | Description | Condition | -|-----------|-------------|-----------| -| **`DEFAULT`** | Standard tracking behavior. | Will revert to this state if none of the other state conditions are met. | -| **`GOAL`** | Tracking behavior as the UGV approaches the goal. | Will enter GOAL mode when the `goal_horizon_threshold` parameter distance to the goal has been reached.| -| **`PRECISE`** | State when more precision is required in the tracking. | At the start of the path, we begin in Precise mode to ensure that we have a good start to tracking.| -| **`RESCUE`** | State to rescue the tracker when the UGV is stuck. | Will enter RESCUE mode when UGV is appraching a condition that make it stuck.| -| **`HYSTERESIS`** | State when you the UGV requires compensation for tire flexion. | Will enter HYSTERESIS mode when the UGV detects that it will begin oscillating due to tire deformation. | -| **`CORNER`** | State when there is a curve or a corner ahead. | Will enter CORNER mode when the UGV approaches, within a `corner_lookahead` parameter distance, to a corner with at least `corner_detection_threshold` of a curvature.| - -#### Default State Parameters {#default_state_params} - -The following list defines the default parameters that the MPC controller uses. -For the most part, they apply to all states of the MPC controller. - -| Parameter | Description | Namespace | SI Units | -|-----------|-------------|-----------|:--------:| -| `vehicle_length` | The length (longitudinally) of the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | -| `mpc_horizon` | The prediction horizon of the MPC. | [/navigation/*<controller>*/path_tracker](#file_location) | **s** | -| `max_lookahead` | Maximum distance along the path we seek to follow. Affects how far we do collision checks as well as the maximum velocity of the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | -| `min_lookahead` | Minimum distance along the path we seek to follow. Affects how far we do collision checks as well as the maximum velocity of the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | -| `lookahead_smoother` | Factor between 0 and 1 that determines the smoothness of the change in lookahead distance: 0 means only maximum velocity is used to determine the horizon (can be jumpy but speeds up the UGV faster); 1 means only averaged planned velocity is used to determine the horizon (smoother but speeds up the UGV slowly). | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `lookahead_factor` | How aggressively do we want to increase the lookahead from min_lookahead to max_lookahead | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `mpc_opt_maxiteration` | The maximum number of iterations that the solver will run. Increase this value for better performance, decrease for shorter computation time. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `discretization_steps` | Number of grid points along the MPC prediction; Lower: less accuracy, but faster | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `max_fwd_velocity` | The maximum allowable linear velocity that the MPC controller can compute. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | -| `min_fwd_velocity` | The minimum allowable linear velocity, in any mode, that the MPC controller can compute. This can be used to overcome the different deadbands that different UGVs may have. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | -| `max_rev_velocity` | The maximum allowable reverse linear velocity (ie. positive value), in any mode, that the MPC controller can compute. By default this is set to the `max_fwd_velocity`, so only needed if your maximum linear reverse velocity is different than the forward linear velocity.| [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | -| `max_ang_velocity` | The maximum allowable angular velocity, in any mode, that the MPC controller can compute. This parameter bounds both positive and negative angular velocities. | [/navigation/*<controller>*/path_tracker](#file_location) | **rad/s** | -| `max_accel` | The maximum allowable linear acceleration, in normal navigation mode, that the MPC controller can compute. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s/s** | -| `max_decel` | The maximum allowable linear deceleration (ie. negative value), in any mode, that the MPC controller can compute. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s/s** | -| `max_ang_accel` | The maximum allowable angular acceleration, in any mode, that the MPC controller can compute. This parameter bounds both positive and negative angular accelerations. | [/navigation/*<controller>*/path_tracker](#file_location) | **rad/s/s** | -| `max_lateral_accel` | The maximum allowable lateral acceleration, in any mode, that the MPC controller can compute. This parameter bounds both positive and negative lateral accelerations. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s/s** | -| `stiction_compensator_fwd` | The minimum linear velocity for movement of the UGV. This should typically be the minimum linear velocity that the UGV requires for it to move. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | -| `stiction_compensator_yaw` | The minimum angular velocity for movement of the UGV. This should typically be the minimum angular velocity that the UGV requires for it to move. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | -| `x_weight` | Weight for state x in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `y_weight` | Weight for state y in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `yaw_weight` | Weight for state yaw in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `fwd_v_weight` | Weight for state ẋ (forward velocity) in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `yaw_d_weight` | Weight for state (yaw velocity) in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `fwd_a_weight` | Weight for state ẍ (forward acceleration) in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `yaw_a_weight` | Weight for state (yaw acceleration) in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `horizon_percent_change` | The percentage factor used when shortening the MPC horizon. This will affect how quickly we want to speed up after a curvature slowdown. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `error_slowdown_multiplier` | The amount by which to increase the MPC horizon based on the crosstrack and/or heading error. This should be greater than 1.0 since increasing the MPC horizon will decrease the maximum MPC velocity. ** Less than 1.0 will result in the opposite behaviour which is not the expected behaviour for this parameter. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `crosstrackerror_slowdown` | Threshold on the amount of crosstrack error, above which to a slowdown the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `headingerror_slowdown` | Threshold on the amount of heading error, above which to a slowdown the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `curvature_slowdown` | Threshold on the path curvature, above which to a slowdown the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `endpoint_multiplier` | Weight multiplier of the very last point along the local plan segment in MPC state: DEFAULT. This value ensures convergence/stability of the optimizer by mimicking the MPCs infinite horizon by applying a terminal cost. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `shrinking_horizon_min` | The minimum horizon that will be used in the computation. This value will prevent the horizon from dropping below this value during all the horizon adjustments. | [/navigation/*<controller>*/path_tracker](#file_location) | **s** | -| `crosstrack_tolerance` | The amount of lateral error that the controller will handle before stopping the UGV and replanning a new path. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | -| `reference_trajectory_factor` | A factor that will skew the path parameter. This value should be between 0 and 1. Values closer to 0.0 will skew the path param closer to the UGV, decreasing speed but increasing the accuracy of the path tracking, and vice versa as you approach 1.0. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | - -#### Goal State Parameters {#goal_state_params} - -The following parameters can be modified to tune the controller as it approaches -the goal point as well as its behavior around the goal point. - -| Parameter | Description | Namespace | SI Units | -|-----------|-------------|-----------|:--------:| -| `goal_horizon_threshold` | The distance from the goal point which the MPC state will switch into state: GOAL , and begin reducing the horizon accordingly. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | -| `goal_slowdown_multiplier` | The multiplier by which to increase the MPC horizon during the MPCs GOAL state in order to slow the UGV down from its top speed. This value should be greater than 1.0. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `max_speed_at_goal` | The maximum allowable speed at the goal point for the controller to stop and consider the goal complete. On OEM UGVs, this value should be increased. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | -| `x_weight_goal` | Weight for state x in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `y_weight_goal` | Weight for state y in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `yaw_weight_goal` | Weight for state yaw in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `fwd_v_weight_goal` | Weight for state ẋ (forward velocity) in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `yaw_d_weight_goal` | Weight for state (yaw velocity) in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `fwd_a_weight_goal` | Weight for state ẍ (forward acceleration) in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `yaw_a_weight_goal` | Weight for state (yaw acceleration) in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `endpoint_multiplier_goal` | Weight multiplier of the very last point along the local plan segment in MPC state: GOAL. This value ensures convergence/stability of the optimizer by mimicking the MPCs infinite horizon by applying a terminal cost. | [/navigation/*<controller>*/path_tracker](#file_location) | | -| `goal_tolerance_xy_rtk` | The (x, y) tolerance value (ie. radius) assigned to a goal, when RTK is enabled, in order to determine whether or not to consider the goal complete. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | -| `goal_tolerance_yaw_rtk` | The yaw tolerance value (ie. heading) assigned to a goal, when RTK is enabled, in order to determine whether or not to consider the goal complete. | [/navigation/*<controller>*/path_tracker](#file_location) | **rad** | -| `goal_tolerance_xy_nortk` | The (x, y) tolerance value (ie. radius) assigned to a goal, when RTK is disabled, in order to determine whether or not to consider the goal complete. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | -| `goal_tolerance_yaw_nortk` | The yaw tolerance value (ie. heading) assigned to a goal, when RTK is disabled, in order to determine whether or not to consider the goal complete. | [/navigation/*<controller>*/path_tracker](#file_location) | **rad** | - -#### Corner State Parameters {#corner_state_params} - -The following parameters can be modified to tune the behavior of the controller during and as it -as it approaches corners. - -| Parameter | Description | Namespace | SI Units | -|-----------|-------------|-----------|:--------:| -| `corner_segment_slowdown` | Flag to enable/disable the slowdown behaviour in MPC state: CORNER | [/navigation/*<controller>*/path_tracker](#file_location)| **bool** | -| `corner_lookahead` | The distance on the reference path from the UGVs current location, along which to determine if a corner is present. If a corner is present the MPC state will switch to CORNER state and begin reducing the horizon accordingly. | [/navigation/*<controller>*/path_tracker](#file_location)| **m** | -| `corner_detection_threshold` | Threshold on the path curvature, between the UGVs current location and the end of the corner_lookahead distance, above which to switch the MPC in state: CORNER, and begin reducing the horizon accordingly. | [/navigation/*<controller>*/path_tracker](#file_location)| **rad** | -| `corner_slowdown_multiplier` | The multiplier by which to increase the MPC horizon during the MPCs CORNER state in order to slow the UGV down from its top speed. This value should be greater than 1.0. | [/navigation/*<controller>*/path_tracker](#file_location)| **--** | -| `endpoint_multiplier_corner` | Weight multiplier of the very last point along the local plan segment in MPC state: CORNER. This value ensures convergence/stability of the optimizer by mimicking the MPCs infinite horizon by applying a terminal cost. | [/navigation/*<controller>*/path_tracker](#file_location)| **--** | - -#### OEM Specific Parameters {#oem_tuning_params} - -When tuning the controller on a third-party OEM UGV, there are several other considerations -that we will not have taken into account during the tuning of our UGVs. Below, we define -parameters that may be modified to tune the controller for your third-party OEM UGV. - -##### UGV Dynamics {#platform_dynamics_params} - -The following parameters can be used to modify the dynamics model that the contrller uses to -compute command velocities. - -| Parameter | Description | Namespace | SI Units | -|-----------|-------------|-----------|:--------:| -| `no_turn_on_spot_motion` | Flag to enable/disable turn on spot motion. By default, the MPC motion model is represented by a differential drive kinematics. This parameter will modify the MPC motion model to remove turn in place motions and bias the motion in the forward direction. | [/navigation/*<controller>*/path_tracker](#file_location) | - | -| `min_fwd_turn` | | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | -| `pivot_point_offset_x` | The longitudinal offset that can be applied to the MPC model in order to account for a particular UGVs center of rotation | [/navigation/*<controller>*/path_tracker](#file_location) | - | -| `pivot_point_offset_y` | The lateral offset that can be applied to the MPC model in order to account for a particular UGVs center of rotation | [/navigation/*<controller>*/path_tracker](#file_location) | - | -| `min_fwd_turn` | | [/navigation/*<controller>*/path_tracker](#file_location) | **--**| - -##### Delay Compensation {#delay_compensation_params} - -The following parameters can be used to compensate for any delays that are present in the system. - -| Parameter | Description | Namespace | SI Units | -|-----------|-------------|-----------|:--------:| -| `enable_delay_compensation` | A boolean flag to enable/disable the delay compensation feature. The delay compensation feature is used to compensate for low-level dynamics delays that may be present in the UGV to be controlled. The user can apply an input controller delay and the feature will compute command velocities that compensate for such a delay. | [/navigation/*<controller>*/path_tracker](#file_location) | **bool** | -| `controller_delay` | The amount of controller delay that the delay compensation feature will attempt to compensate for, in ms. | [/navigation/*<controller>*/path_tracker](#file_location) | **ms** | - -##### Stop Distance {#stop_distance_params} - -The following parameters can be used to set a specific stop distance away from obstacles. - -| Parameter | Description | Namespace | SI Units | -|-----------|-------------|-----------|:--------:| -| `enable_stop_distance` | A flag to use enable/disable the stop distance feature. The stop distance feature forces the UGV to stop a specified distance in front of obstacles. | [/navigation/*<controller>*/path_tracker](#file_location) | **bool** | -| `obstacle_stop_distance` | The distance at which the UGV will stop in front of a detected obstacle. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | - - -## Path Planners {#path_planners} - -Information incoming in release 0.9. Please contact Clearpath customer support at \ to discuss the issue. +--- +title: "Navigation Parameters" +sidebar_label: "Navigation Parameters" +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 3 +--- + +import versions from "@site/static/versions.js" + +## Controllers {#controllers} + +### Determine the file location of the parameter {#file_location} + +The parameters related to the controller, can be found here: + +``` bash +~/cpr_outdoornav_launch/onav_robots/params//navigation/controls_general.yaml +``` + +If they are not listed in the above file, it is because they are using the default values and are not being overwritten. + +### MPC Controller {#controller} + +#### MBF Plugins + +Currently we have implemented a Move-Base Flex controller plugin named: **OnavMbfMpcController** + +Two instances of this plugin are loaded at runtime by our navigation node (as seen in the table below). The parameters are equivalent for each instance of the plugin but the values of certain of these parameters are different. + +| Controller name | Description | +|-----------------|-------------| +| **`mpc_controller`** | The controller used during normal navigation and applies to tracking the paths generated between all the mission waypoints. | +| **`mpc_dock_controller`** | The controller used during docking and applies only to tracking the dock and undock paths. | + +#### MPC State Machine + +The MPC controller operates as a state machine that contains the following states: + +| MPC State | Description | Condition | +|-----------|-------------|-----------| +| **`DEFAULT`** | Standard tracking behavior. | Will revert to this state if none of the other state conditions are met. | +| **`GOAL`** | Tracking behavior as the UGV approaches the goal. | Will enter GOAL mode when the `goal_horizon_threshold` parameter distance to the goal has been reached.| +| **`PRECISE`** | State when more precision is required in the tracking. | At the start of the path, we begin in Precise mode to ensure that we have a good start to tracking.| +| **`RESCUE`** | State to rescue the tracker when the UGV is stuck. | Will enter RESCUE mode when UGV is appraching a condition that make it stuck.| +| **`HYSTERESIS`** | State when you the UGV requires compensation for tire flexion. | Will enter HYSTERESIS mode when the UGV detects that it will begin oscillating due to tire deformation. | +| **`CORNER`** | State when there is a curve or a corner ahead. | Will enter CORNER mode when the UGV approaches, within a `corner_lookahead` parameter distance, to a corner with at least `corner_detection_threshold` of a curvature.| + +#### Default State Parameters {#default_state_params} + +The following list defines the default parameters that the MPC controller uses. +For the most part, they apply to all states of the MPC controller. + +| Parameter | Description | Namespace | SI Units | +|-----------|-------------|-----------|:--------:| +| `vehicle_length` | The length (longitudinally) of the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | +| `mpc_horizon` | The prediction horizon of the MPC. | [/navigation/*<controller>*/path_tracker](#file_location) | **s** | +| `max_lookahead` | Maximum distance along the path we seek to follow. Affects how far we do collision checks as well as the maximum velocity of the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | +| `min_lookahead` | Minimum distance along the path we seek to follow. Affects how far we do collision checks as well as the maximum velocity of the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | +| `lookahead_smoother` | Factor between 0 and 1 that determines the smoothness of the change in lookahead distance: 0 means only maximum velocity is used to determine the horizon (can be jumpy but speeds up the UGV faster); 1 means only averaged planned velocity is used to determine the horizon (smoother but speeds up the UGV slowly). | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `lookahead_factor` | How aggressively do we want to increase the lookahead from min_lookahead to max_lookahead | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `mpc_opt_maxiteration` | The maximum number of iterations that the solver will run. Increase this value for better performance, decrease for shorter computation time. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `discretization_steps` | Number of grid points along the MPC prediction; Lower: less accuracy, but faster | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `max_fwd_velocity` | The maximum allowable linear velocity that the MPC controller can compute. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | +| `min_fwd_velocity` | The minimum allowable linear velocity, in any mode, that the MPC controller can compute. This can be used to overcome the different deadbands that different UGVs may have. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | +| `max_rev_velocity` | The maximum allowable reverse linear velocity (ie. positive value), in any mode, that the MPC controller can compute. By default this is set to the `max_fwd_velocity`, so only needed if your maximum linear reverse velocity is different than the forward linear velocity.| [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | +| `max_ang_velocity` | The maximum allowable angular velocity, in any mode, that the MPC controller can compute. This parameter bounds both positive and negative angular velocities. | [/navigation/*<controller>*/path_tracker](#file_location) | **rad/s** | +| `max_accel` | The maximum allowable linear acceleration, in normal navigation mode, that the MPC controller can compute. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s/s** | +| `max_decel` | The maximum allowable linear deceleration (ie. negative value), in any mode, that the MPC controller can compute. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s/s** | +| `max_ang_accel` | The maximum allowable angular acceleration, in any mode, that the MPC controller can compute. This parameter bounds both positive and negative angular accelerations. | [/navigation/*<controller>*/path_tracker](#file_location) | **rad/s/s** | +| `max_lateral_accel` | The maximum allowable lateral acceleration, in any mode, that the MPC controller can compute. This parameter bounds both positive and negative lateral accelerations. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s/s** | +| `stiction_compensator_fwd` | The minimum linear velocity for movement of the UGV. This should typically be the minimum linear velocity that the UGV requires for it to move. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | +| `stiction_compensator_yaw` | The minimum angular velocity for movement of the UGV. This should typically be the minimum angular velocity that the UGV requires for it to move. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | +| `x_weight` | Weight for state x in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `y_weight` | Weight for state y in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `yaw_weight` | Weight for state yaw in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `fwd_v_weight` | Weight for state ẋ (forward velocity) in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `yaw_d_weight` | Weight for state (yaw velocity) in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `fwd_a_weight` | Weight for state ẍ (forward acceleration) in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `yaw_a_weight` | Weight for state (yaw acceleration) in MPC cost function, in the MPC state: DEFAULT. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `horizon_percent_change` | The percentage factor used when shortening the MPC horizon. This will affect how quickly we want to speed up after a curvature slowdown. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `error_slowdown_multiplier` | The amount by which to increase the MPC horizon based on the crosstrack and/or heading error. This should be greater than 1.0 since increasing the MPC horizon will decrease the maximum MPC velocity. ** Less than 1.0 will result in the opposite behaviour which is not the expected behaviour for this parameter. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `crosstrackerror_slowdown` | Threshold on the amount of crosstrack error, above which to a slowdown the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `headingerror_slowdown` | Threshold on the amount of heading error, above which to a slowdown the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `curvature_slowdown` | Threshold on the path curvature, above which to a slowdown the UGV. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `endpoint_multiplier` | Weight multiplier of the very last point along the local plan segment in MPC state: DEFAULT. This value ensures convergence/stability of the optimizer by mimicking the MPCs infinite horizon by applying a terminal cost. | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `shrinking_horizon_min` | The minimum horizon that will be used in the computation. This value will prevent the horizon from dropping below this value during all the horizon adjustments. | [/navigation/*<controller>*/path_tracker](#file_location) | **s** | +| `crosstrack_tolerance` | The amount of lateral error that the controller will handle before stopping the UGV and replanning a new path. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | +| `reference_trajectory_factor` | A factor that will skew the path parameter. This value should be between 0 and 1. Values closer to 0.0 will skew the path param closer to the UGV, decreasing speed but increasing the accuracy of the path tracking, and vice versa as you approach 1.0. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | + +#### Goal State Parameters {#goal_state_params} + +The following parameters can be modified to tune the controller as it approaches +the goal point as well as its behavior around the goal point. + +| Parameter | Description | Namespace | SI Units | +|-----------|-------------|-----------|:--------:| +| `goal_horizon_threshold` | The distance from the goal point which the MPC state will switch into state: GOAL , and begin reducing the horizon accordingly. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | +| `goal_slowdown_multiplier` | The multiplier by which to increase the MPC horizon during the MPCs GOAL state in order to slow the UGV down from its top speed. This value should be greater than 1.0. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `max_speed_at_goal` | The maximum allowable speed at the goal point for the controller to stop and consider the goal complete. On OEM UGVs, this value should be increased. | [/navigation/*<controller>*/path_tracker](#file_location) | **m/s** | +| `x_weight_goal` | Weight for state x in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `y_weight_goal` | Weight for state y in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `yaw_weight_goal` | Weight for state yaw in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `fwd_v_weight_goal` | Weight for state ẋ (forward velocity) in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `yaw_d_weight_goal` | Weight for state (yaw velocity) in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `fwd_a_weight_goal` | Weight for state ẍ (forward acceleration) in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `yaw_a_weight_goal` | Weight for state (yaw acceleration) in MPC cost function, in the MPC state: GOAL. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `endpoint_multiplier_goal` | Weight multiplier of the very last point along the local plan segment in MPC state: GOAL. This value ensures convergence/stability of the optimizer by mimicking the MPCs infinite horizon by applying a terminal cost. | [/navigation/*<controller>*/path_tracker](#file_location) | | +| `goal_tolerance_xy_rtk` | The (x, y) tolerance value (ie. radius) assigned to a goal, when RTK is enabled, in order to determine whether or not to consider the goal complete. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | +| `goal_tolerance_yaw_rtk` | The yaw tolerance value (ie. heading) assigned to a goal, when RTK is enabled, in order to determine whether or not to consider the goal complete. | [/navigation/*<controller>*/path_tracker](#file_location) | **rad** | +| `goal_tolerance_xy_nortk` | The (x, y) tolerance value (ie. radius) assigned to a goal, when RTK is disabled, in order to determine whether or not to consider the goal complete. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | +| `goal_tolerance_yaw_nortk` | The yaw tolerance value (ie. heading) assigned to a goal, when RTK is disabled, in order to determine whether or not to consider the goal complete. | [/navigation/*<controller>*/path_tracker](#file_location) | **rad** | + +#### Corner State Parameters {#corner_state_params} + +The following parameters can be modified to tune the behavior of the controller during and as it +as it approaches corners. + +| Parameter | Description | Namespace | SI Units | +|-----------|-------------|-----------|:--------:| +| `corner_segment_slowdown` | Flag to enable/disable the slowdown behaviour in MPC state: CORNER | [/navigation/*<controller>*/path_tracker](#file_location)| **bool** | +| `corner_lookahead` | The distance on the reference path from the UGVs current location, along which to determine if a corner is present. If a corner is present the MPC state will switch to CORNER state and begin reducing the horizon accordingly. | [/navigation/*<controller>*/path_tracker](#file_location)| **m** | +| `corner_detection_threshold` | Threshold on the path curvature, between the UGVs current location and the end of the corner_lookahead distance, above which to switch the MPC in state: CORNER, and begin reducing the horizon accordingly. | [/navigation/*<controller>*/path_tracker](#file_location)| **rad** | +| `corner_slowdown_multiplier` | The multiplier by which to increase the MPC horizon during the MPCs CORNER state in order to slow the UGV down from its top speed. This value should be greater than 1.0. | [/navigation/*<controller>*/path_tracker](#file_location)| **--** | +| `endpoint_multiplier_corner` | Weight multiplier of the very last point along the local plan segment in MPC state: CORNER. This value ensures convergence/stability of the optimizer by mimicking the MPCs infinite horizon by applying a terminal cost. | [/navigation/*<controller>*/path_tracker](#file_location)| **--** | + +#### OEM Specific Parameters {#oem_tuning_params} + +When tuning the controller on a third-party OEM UGV, there are several other considerations +that we will not have taken into account during the tuning of our UGVs. Below, we define +parameters that may be modified to tune the controller for your third-party OEM UGV. + +##### UGV Dynamics {#platform_dynamics_params} + +The following parameters can be used to modify the dynamics model that the contrller uses to +compute command velocities. + +| Parameter | Description | Namespace | SI Units | +|-----------|-------------|-----------|:--------:| +| `no_turn_on_spot_motion` | Flag to enable/disable turn on spot motion. By default, the MPC motion model is represented by a differential drive kinematics. This parameter will modify the MPC motion model to remove turn in place motions and bias the motion in the forward direction. | [/navigation/*<controller>*/path_tracker](#file_location) | - | +| `min_fwd_turn` | | [/navigation/*<controller>*/path_tracker](#file_location) | **--** | +| `pivot_point_offset_x` | The longitudinal offset that can be applied to the MPC model in order to account for a particular UGVs center of rotation | [/navigation/*<controller>*/path_tracker](#file_location) | - | +| `pivot_point_offset_y` | The lateral offset that can be applied to the MPC model in order to account for a particular UGVs center of rotation | [/navigation/*<controller>*/path_tracker](#file_location) | - | +| `min_fwd_turn` | | [/navigation/*<controller>*/path_tracker](#file_location) | **--**| + +##### Delay Compensation {#delay_compensation_params} + +The following parameters can be used to compensate for any delays that are present in the system. + +| Parameter | Description | Namespace | SI Units | +|-----------|-------------|-----------|:--------:| +| `enable_delay_compensation` | A boolean flag to enable/disable the delay compensation feature. The delay compensation feature is used to compensate for low-level dynamics delays that may be present in the UGV to be controlled. The user can apply an input controller delay and the feature will compute command velocities that compensate for such a delay. | [/navigation/*<controller>*/path_tracker](#file_location) | **bool** | +| `controller_delay` | The amount of controller delay that the delay compensation feature will attempt to compensate for, in ms. | [/navigation/*<controller>*/path_tracker](#file_location) | **ms** | + +##### Stop Distance {#stop_distance_params} + +The following parameters can be used to set a specific stop distance away from obstacles. + +| Parameter | Description | Namespace | SI Units | +|-----------|-------------|-----------|:--------:| +| `enable_stop_distance` | A flag to use enable/disable the stop distance feature. The stop distance feature forces the UGV to stop a specified distance in front of obstacles. | [/navigation/*<controller>*/path_tracker](#file_location) | **bool** | +| `obstacle_stop_distance` | The distance at which the UGV will stop in front of a detected obstacle. | [/navigation/*<controller>*/path_tracker](#file_location) | **m** | + + +## Path Planners {#path_planners} + +Information incoming in release 0.9. Please contact Clearpath customer support at \ to discuss the issue. diff --git a/outdoornav_user_manual_versioned_docs/version-0.9.0/customized_tuning/user_interface_customization.mdx b/outdoornav_user_manual_versioned_docs/version-0.9.0/customized_tuning/user_interface_customization.mdx index c67bca22..1e7d39c9 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.9.0/customized_tuning/user_interface_customization.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.9.0/customized_tuning/user_interface_customization.mdx @@ -1,9 +1,9 @@ ---- -title: "UI Customization" -sidebar_label: "UI Customization" -sidebar_position: 4 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -Information incoming in a future release. Please contact Clearpath customer support at \ to discuss any related issue. +--- +title: "UI Customization" +sidebar_label: "UI Customization" +sidebar_position: 4 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +Information incoming in a future release. Please contact Clearpath customer support at \ to discuss any related issue. diff --git a/outdoornav_user_manual_versioned_docs/version-0.9.0/faq.mdx b/outdoornav_user_manual_versioned_docs/version-0.9.0/faq.mdx index cc7d4c1a..5d206518 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.9.0/faq.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.9.0/faq.mdx @@ -1,194 +1,194 @@ ---- -title: Frequently Asked Questions -sidebar_label: Frequently Asked Questions -sidebar_position: 10 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -## General - -1. **How do I start, pause or stop a mission?** - - A mission can be started in a few different ways, i) through the web user interface (See [Mission Execution](web_user_interface/ui_autonomous_mode.mdx#mission-execution)) or, - ii) through the ROS API (See [API Examples](api/api_examples/api_examples.mdx)). - -2. **When I start a mission the UGV does not move. What could be the - problem?** - - There could be one of several reasons for why this is happening: - - 1. Check that none of the onboard Motion-Stop actuators are - activated. - 2. Check that none of the wireless Motion-Stops are engaged. This - can be checked via the UI (a red Status Indicator means - Motion-Stop is engaged) or the onboard UGV lights (will flash - when Motion-Stop is engaged). - 3. If OutdoorNav is running on a Clearpath Robotics Warthog UGV - that is programmed with a Futaba controller, then ensure that - the controller is turned off. If it is on then it will be - sending "no motion" commands that will be overriding the - autonomy commands. - 4. Check the task settings for each Waypoint in the Mission. - A missing task setting for a Move PTZ task will block the - execution of the Mission it is in. - -3. **What version of ROS is compatible with OutdoorNav?** - - Currently OutdoorNav is developed in ROS 1 (and is built in Docker containers on top of ROS 1 Noetic). - So, the recommended ROS version is ROS 1 Noetic. However, although not recommended, it is still - possible to use ROS 1 Melodic. Some issues may arise related to the mismatched message types. - Also, if trying to run any python scripts as Melodic targets Python2, whereas Noetic targets Python3. - - Finally, official ROS 2 compatibility is currently unsupported. In theory, if you only have ROS 2 installed - on your system, you can try to install ROS 1 Noetic as well and set up a ros1_to_ros2 bridge. Since the - OutdoorNav software is packaged in Dockers, it will communicate directly ROS 1 and then the data can be - redirected by the ros1_to_ros2 bridge to ROS 2. - -4. **How can I record ROS data?** - - There are two ways to record ROS data. The first is [through the UI](features/rosbag_recorder.mdx) and the - second is the more traditional method of accessing the command line of the UGV's computer and running - [rosbag record commands](http://wiki.ros.org/rosbag/Commandline). - -5. **Where do all the video/audio/images get saved from the mission tasks?** - - All of the data that gets saved (ROSbags, video recordings, audio recordings, and saved images) get stored on - UGV's computer at the following location: `~/clearpath_files/...` - -## Autonomy - -1. **Am I able to send the UGV on a repeated loop?** - - When generating a single mission on the UI or through the API, it is not possible for the - mission to start at the location of the robot and end at the location of the robot. This has to do with - the navigation thinking that the UGV has already arrived at its goal and will not generate a path through - the Waypoints. However, it is possible to split the mission into two missions (ie. one to go to a - location and the second to return to the starting point). With these two missions you will then either be - able to send each mission one after the other or you can use the [Mission Scheduler](features/mission_scheduler.mdx). - Add the two missions to the schedule and you will have the ability to also repeat this loop as many times as needed. - -2. **Why is surveying failing?** - - There are several checks that should be done: - - - Check that the base station is powered on, and that all the devices inside are powered on. - - From the UGV's computer, check that you can ping the base station. - -``` bash -ping 192.168.131.30 -``` - -  If all of these tests PASS, contact [Support](support.mdx). - -3. **Is it possible to increase the maximum velocity of the UGV?** - - The OutdoorNav software has been tune for specific maximum velocities depending on the platform, - 1.2 m/s, 1.0 m/s and 2.0 m/s for Jackal, Husky and Warthog UGVs, respectively. The Husky maximum velocity - is 1.0 m/s so increasing above this is not possible however if you would like to increase the maximum - velocity for either the Jackal or the Warthog, further tuning may be required. Consult the - [tuning guide](customized_tuning/tuning_instructions/differential_drive_dynamics.mdx) and contact - [Support](support.mdx) if required. - -4. **My robot it detecting too many obstacles and replanning too frequently. How can I resolve this?** - - Please consult the [Limitations](features/collision_avoidance.mdx#limitations) section of the collisison - avoidance feature. It will describe some limits to the obstaacle detection and can help you improve the - smoothness of the navigation. - -5. **I am getting a 'Robot too far off path warning'. What should I do?** - - These types of warnings appear on the UI under two conditions: - i) If the robot indicator (blue arrow on the UI) is not within 3.0 meters of the first Waypoint (the Green one on the UI). - ii) If the robot is outside of the allowable navigable space (defined by the path contraint, default: 3.0 meters around the reference path). - Enable the visualization of the [path contraint](web_user_interface/ui_autonomous_mode.mdx#constrained_path) and Teleop the robot back into the - navigable space. - -6. **How can I remove certain sensors from the collision avoidance pipeline?** - - If your robot is equipped with collision avoidance sensors (eg. Velodyne, Hokuyo, Sick LMS), it is - possible to enable/disable the throughput of each sensor data into the collision avoidance pipeline. - Consult the [Collision Avoidance](features/collision_avoidance.mdx) section for these instructions. - -7. **Can I use OutdoorNav without using the UI?** - - We empower customers to send mission via either the UI or our [ROS 1 API](api/api_overview.mdx). Through this - API, you are enabled to write either CPP code or Python scripts where you would generate your mission, survey the base station, - set the datum, assign [custom tasks](features/custom_tasks.mdx) to your mission. If using Python, we provide a set of libraries that - speed up the develpment process. See some of the [example codes](api/api_examples/api_examples.mdx) for an idea of how to generate these scripts. - -## Web User Interface - -1. **How do I delete a waypoint on the UI?** - - Make sure the **Edit Missions** toggle is enabled, then click the - **Waypoint Mode** button. Now you can click the Waypoint you wish to - delete. A drop down list will appear. Select **Delete**. - -2. **How do I add a Task to a Waypoint on the UI?** - - See [Add Task to Waypoint](web_user_interface/ui_autonomous_mode.mdx#add-task) for information on how - to add a Task to a Waypoint. - -3. **Why is the "Save Image" Task failing?** - - Check the Waypoints that have a **Save Image** task in the Waypoint panel. - If you see a red warning triangle beside the **Save Image** task it means - that the settings for this task were not properly set. Set them and rerun - the mission. - -4. **Are we able to make any changes to the UI?** - - Unfortunately, users are not currently enabled to make modifications to the user interface. - This feature will be available in a future release. Please direct any feature requests to [Support](support.mdx). - -5. **What to do if my custom task is not working?** - - Ensure that you have followed the [Custom Tasks](features/custom_tasks.mdx) instructions. When adding the - custom task to a Waypoint, it is important to double check that all the [fields](web_user_interface/ui_autonomous_mode.mdx#add-task) - for your custom task are correct. - -6. **Why are either of the GNSS Status indicator (POS and/or DIR) on the UI not Green?** - - i) If the **POS** indicator is YELLOW, and you are using an RTK base station: - - Check communication between the robot and the base station by pinging 192.168.131.30 (from the UGV's computer) - - Re-survey the base station - - Access the [Swift Console](https://support.swiftnav.com/support/solutions/articles/44001391679-swift-console) using - the both the base station IP (192.168.131.30) and the position unit IP (192.168.131.31) and ensure that certain - settings are set correctly: - On the base station unit: - 1) surveyed_position/broadcast = True - tcp_server1/mode = SBP - tcp_server1/enabled sbp messages = 72,74,117,65535,114 - tcp_server1/address = 55556 - On the position unit: - 2) tcp_client0/mode = SBP - tcp_client0/enabled sbp messages = 0 - tcp_client0/address = 192.168.131.30:55556 - ii) If the **POS** indicator is RED: - - Check communication between the robot and the position GNSS unit by pinging 192.168.131.31 (from the UGV's computer) - - Access the [Swift Console](https://support.swiftnav.com/support/solutions/articles/44001391679-swift-console) using - the position unit IP (192.168.131.31) and ensure that the unit is working by checking that satellites are being - tracked in the "Tracking" tab. - - iii) If the **DIR** indicator is YELLOW, - - Access the [Swift Console](https://support.swiftnav.com/support/solutions/articles/44001391679-swift-console) using - the position unit IP (192.168.131.31) and the heading unit IP (192.168.131.32), and ensure that certain - settings are set correctly: - On the position unit: - 1) tcp_server1/mode = SBP - tcp_server1/enabled sbp messages = 74,117 - tcp_server1/address = 55556 - On the heading unit: - 2) tcp_client0/mode = SBP - tcp_client0/enabled sbp messages = 0 - tcp_client0/address = 192.168.131.31:55556 - solution/dgnss_solution_mode = Time Matched - solution/heading offset = 0 - solution/send heading = True - solution/soln freq = 5 - solution/output ever n obs = 1 - - iv) If the **DIR** indicator is RED: - - Check communication between the robot and the position GNSS unit by pinging 192.168.131.31 (from the UGV's computer) - +--- +title: Frequently Asked Questions +sidebar_label: Frequently Asked Questions +sidebar_position: 10 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +## General + +1. **How do I start, pause or stop a mission?** + + A mission can be started in a few different ways, i) through the web user interface (See [Mission Execution](web_user_interface/ui_autonomous_mode.mdx#mission-execution)) or, + ii) through the ROS API (See [API Examples](api/api_examples/api_examples.mdx)). + +2. **When I start a mission the UGV does not move. What could be the + problem?** + + There could be one of several reasons for why this is happening: + + 1. Check that none of the onboard Motion-Stop actuators are + activated. + 2. Check that none of the wireless Motion-Stops are engaged. This + can be checked via the UI (a red Status Indicator means + Motion-Stop is engaged) or the onboard UGV lights (will flash + when Motion-Stop is engaged). + 3. If OutdoorNav is running on a Clearpath Robotics Warthog UGV + that is programmed with a Futaba controller, then ensure that + the controller is turned off. If it is on then it will be + sending "no motion" commands that will be overriding the + autonomy commands. + 4. Check the task settings for each Waypoint in the Mission. + A missing task setting for a Move PTZ task will block the + execution of the Mission it is in. + +3. **What version of ROS is compatible with OutdoorNav?** + + Currently OutdoorNav is developed in ROS 1 (and is built in Docker containers on top of ROS 1 Noetic). + So, the recommended ROS version is ROS 1 Noetic. However, although not recommended, it is still + possible to use ROS 1 Melodic. Some issues may arise related to the mismatched message types. + Also, if trying to run any python scripts as Melodic targets Python2, whereas Noetic targets Python3. + + Finally, official ROS 2 compatibility is currently unsupported. In theory, if you only have ROS 2 installed + on your system, you can try to install ROS 1 Noetic as well and set up a ros1_to_ros2 bridge. Since the + OutdoorNav software is packaged in Dockers, it will communicate directly ROS 1 and then the data can be + redirected by the ros1_to_ros2 bridge to ROS 2. + +4. **How can I record ROS data?** + + There are two ways to record ROS data. The first is [through the UI](features/rosbag_recorder.mdx) and the + second is the more traditional method of accessing the command line of the UGV's computer and running + [rosbag record commands](http://wiki.ros.org/rosbag/Commandline). + +5. **Where do all the video/audio/images get saved from the mission tasks?** + + All of the data that gets saved (ROSbags, video recordings, audio recordings, and saved images) get stored on + UGV's computer at the following location: `~/clearpath_files/...` + +## Autonomy + +1. **Am I able to send the UGV on a repeated loop?** + + When generating a single mission on the UI or through the API, it is not possible for the + mission to start at the location of the robot and end at the location of the robot. This has to do with + the navigation thinking that the UGV has already arrived at its goal and will not generate a path through + the Waypoints. However, it is possible to split the mission into two missions (ie. one to go to a + location and the second to return to the starting point). With these two missions you will then either be + able to send each mission one after the other or you can use the [Mission Scheduler](features/mission_scheduler.mdx). + Add the two missions to the schedule and you will have the ability to also repeat this loop as many times as needed. + +2. **Why is surveying failing?** + + There are several checks that should be done: + + - Check that the base station is powered on, and that all the devices inside are powered on. + - From the UGV's computer, check that you can ping the base station. + +``` bash +ping 192.168.131.30 +``` + +  If all of these tests PASS, contact [Support](support.mdx). + +3. **Is it possible to increase the maximum velocity of the UGV?** + + The OutdoorNav software has been tune for specific maximum velocities depending on the platform, + 1.2 m/s, 1.0 m/s and 2.0 m/s for Jackal, Husky and Warthog UGVs, respectively. The Husky maximum velocity + is 1.0 m/s so increasing above this is not possible however if you would like to increase the maximum + velocity for either the Jackal or the Warthog, further tuning may be required. Consult the + [tuning guide](customized_tuning/tuning_instructions/differential_drive_dynamics.mdx) and contact + [Support](support.mdx) if required. + +4. **My robot it detecting too many obstacles and replanning too frequently. How can I resolve this?** + + Please consult the [Limitations](features/collision_avoidance.mdx#limitations) section of the collisison + avoidance feature. It will describe some limits to the obstaacle detection and can help you improve the + smoothness of the navigation. + +5. **I am getting a 'Robot too far off path warning'. What should I do?** + + These types of warnings appear on the UI under two conditions: + i) If the robot indicator (blue arrow on the UI) is not within 3.0 meters of the first Waypoint (the Green one on the UI). + ii) If the robot is outside of the allowable navigable space (defined by the path contraint, default: 3.0 meters around the reference path). + Enable the visualization of the [path contraint](web_user_interface/ui_autonomous_mode.mdx#constrained_path) and Teleop the robot back into the + navigable space. + +6. **How can I remove certain sensors from the collision avoidance pipeline?** + + If your robot is equipped with collision avoidance sensors (eg. Velodyne, Hokuyo, Sick LMS), it is + possible to enable/disable the throughput of each sensor data into the collision avoidance pipeline. + Consult the [Collision Avoidance](features/collision_avoidance.mdx) section for these instructions. + +7. **Can I use OutdoorNav without using the UI?** + + We empower customers to send mission via either the UI or our [ROS 1 API](api/api_overview.mdx). Through this + API, you are enabled to write either CPP code or Python scripts where you would generate your mission, survey the base station, + set the datum, assign [custom tasks](features/custom_tasks.mdx) to your mission. If using Python, we provide a set of libraries that + speed up the develpment process. See some of the [example codes](api/api_examples/api_examples.mdx) for an idea of how to generate these scripts. + +## Web User Interface + +1. **How do I delete a waypoint on the UI?** + + Make sure the **Edit Missions** toggle is enabled, then click the + **Waypoint Mode** button. Now you can click the Waypoint you wish to + delete. A drop down list will appear. Select **Delete**. + +2. **How do I add a Task to a Waypoint on the UI?** + + See [Add Task to Waypoint](web_user_interface/ui_autonomous_mode.mdx#add-task) for information on how + to add a Task to a Waypoint. + +3. **Why is the "Save Image" Task failing?** + + Check the Waypoints that have a **Save Image** task in the Waypoint panel. + If you see a red warning triangle beside the **Save Image** task it means + that the settings for this task were not properly set. Set them and rerun + the mission. + +4. **Are we able to make any changes to the UI?** + + Unfortunately, users are not currently enabled to make modifications to the user interface. + This feature will be available in a future release. Please direct any feature requests to [Support](support.mdx). + +5. **What to do if my custom task is not working?** + + Ensure that you have followed the [Custom Tasks](features/custom_tasks.mdx) instructions. When adding the + custom task to a Waypoint, it is important to double check that all the [fields](web_user_interface/ui_autonomous_mode.mdx#add-task) + for your custom task are correct. + +6. **Why are either of the GNSS Status indicator (POS and/or DIR) on the UI not Green?** + + i) If the **POS** indicator is YELLOW, and you are using an RTK base station: + - Check communication between the robot and the base station by pinging 192.168.131.30 (from the UGV's computer) + - Re-survey the base station + - Access the [Swift Console](https://support.swiftnav.com/support/solutions/articles/44001391679-swift-console) using + the both the base station IP (192.168.131.30) and the position unit IP (192.168.131.31) and ensure that certain + settings are set correctly: + On the base station unit: + 1) surveyed_position/broadcast = True + tcp_server1/mode = SBP + tcp_server1/enabled sbp messages = 72,74,117,65535,114 + tcp_server1/address = 55556 + On the position unit: + 2) tcp_client0/mode = SBP + tcp_client0/enabled sbp messages = 0 + tcp_client0/address = 192.168.131.30:55556 + ii) If the **POS** indicator is RED: + - Check communication between the robot and the position GNSS unit by pinging 192.168.131.31 (from the UGV's computer) + - Access the [Swift Console](https://support.swiftnav.com/support/solutions/articles/44001391679-swift-console) using + the position unit IP (192.168.131.31) and ensure that the unit is working by checking that satellites are being + tracked in the "Tracking" tab. + + iii) If the **DIR** indicator is YELLOW, + - Access the [Swift Console](https://support.swiftnav.com/support/solutions/articles/44001391679-swift-console) using + the position unit IP (192.168.131.31) and the heading unit IP (192.168.131.32), and ensure that certain + settings are set correctly: + On the position unit: + 1) tcp_server1/mode = SBP + tcp_server1/enabled sbp messages = 74,117 + tcp_server1/address = 55556 + On the heading unit: + 2) tcp_client0/mode = SBP + tcp_client0/enabled sbp messages = 0 + tcp_client0/address = 192.168.131.31:55556 + solution/dgnss_solution_mode = Time Matched + solution/heading offset = 0 + solution/send heading = True + solution/soln freq = 5 + solution/output ever n obs = 1 + + iv) If the **DIR** indicator is RED: + - Check communication between the robot and the position GNSS unit by pinging 192.168.131.31 (from the UGV's computer) + diff --git a/outdoornav_user_manual_versioned_docs/version-0.9.0/features/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.9.0/features/_category_.json index 732c6cb7..3bf04f17 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.9.0/features/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.9.0/features/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "OutdoorNav Features", - "position": 8 -} +{ + "label": "OutdoorNav Features", + "position": 8 +} diff --git a/outdoornav_user_manual_versioned_docs/version-0.9.0/features/custom_tasks.mdx b/outdoornav_user_manual_versioned_docs/version-0.9.0/features/custom_tasks.mdx index 32c3115e..de2c855a 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.9.0/features/custom_tasks.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.9.0/features/custom_tasks.mdx @@ -1,203 +1,203 @@ ---- -title: Custom Tasks -sidebar_label: Custom Tasks -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -Users can create their custom tasks for their application following a specific template. When creating these tasks, the user should begin by creating a python file in the **~/cpr_outdoornav_launch/custom_tasks** directory. The file should be written following -the instructions provided below: - -1. Import the `custom_task_base` package. - -```python -#!/usr/bin/python3 - -from onav_tasks.custom_task_base import * -``` - -2. The user should then create a class name to replace `CustomTask` and initialize it with the -`CustomTaskBase`'s __init__ function and the action server name for the task. - -```python -class CustomTask(CustomTaskBase): - def __init__(self): - # The derived class must always call the super() and provide the action server name. - # This name will need to be unique among custom tasks and must match what is in the - # UI. - super().__init__("custom_task_name") -``` - -:::note - -The `CustomTaskBase` exposes a `SimpleActionServer` (see here -for further details) object as `_as`, a `UITaskFeedback` object as `_feedback` and a `UITaskResults` object as `_result` to be used as part of -the tasks functionality. - -::: - -3. The last requirement is that the `CustomTask` needs to have the `run_task(self, goal)` function be defined, -which takes in the UITaskGoal. - -```python - def run_task(self, goal): -``` - -:::note - -When running the task users may handle errors through the action servers `set_aborted()` function. When this function is called the entire mission -will be aborted. - -::: - -4. Restarting the UGV will trigger the system to load the custom task that was created, making it available for mission use. -If a custom task is not configured properly the custom task manager will ignore the task and proceed loading in the next task while logging an error with ROS. - - -## Sample Custom Tasks - -### Input Looper - -Below is a sample template file named "input_looper.py" which iterates throught the two data variables and publishes them to the feedback -topic. If neither of the variables have any data in them the task is aborted. - -```python -#!/usr/bin/python3 - -from onav_tasks.custom_task_base import * - -class InputLooperTask(CustomTaskBase): - def __init__(self): - # The derived class must always call the super() and provide the action server name. - # This name will need to be unique among custom tasks and must match what is in the - # UI. - super().__init__("input_looper") - - def run_task(self, goal): - if len(goal.strings) == 0 and len(goal.floats) == 0: - # Task and running mission will be aborted in this case - self._as.set_aborted() - return False - - # Loop through the strings and float values and publish them each to the /input_looper/feedback topic - for string in goal.strings: - self._feedback.state = string - self._as.publish_feedback(self._feedback) - - for num in goal.floats: - self._feedback.state = str(num) - self._as.publish_feedback(self._feedback) - - # Returning True or False will not currently impact the mission but will write the current state to the - # /task/result topic accordingly. - return True -``` - -### Record GNSS Data - -Below is a sample custom task file named "record_gnss.py" which outputs the current GNSS data to the console. - -```python -#!/usr/bin/python3 - -from onav_tasks.custom_task_base import * -from sensor_msgs.msg import NavSatFix -from threading import Lock -import rospy - -class RecorGNSSTask(CustomTaskBase): - def __init__(self): - super().__init__("record_gnss") - self._sub = rospy.Subscriber("/sensors/gps_0/fix", NavSatFix, self.gpsSubscriberCallback) - self.gps_lat = 0.0 - self.gps_lon = 0.0 - self._gps_coordinates_lock = Lock() - - def run_task(self, goal): - feedback = UITaskFeedback() - feedback.state = 'Recording GNSS lat/lon' - self._as.publish_feedback(feedback) - msg = "" - with self._gps_coordinates_lock: - msg = "ID: %f Name: %s Latitude: %f Longitude: %f" % ( - goal.floats[0], goal.strings[0], self.gps_lat, self.gps_lon) - rospy.loginfo(msg) - return True - - def gpsSubscriberCallback(self, msg): - with self._gps_coordinates_lock: - self.gps_lat = msg.latitude - self.gps_lon = msg.longitude -``` - - -### Move PTZ camera to a Lat/Lon - -Below is a more advanced custom task. The file is "move_ptz_lat_lon.py" which pans a PTZ camera to point to a specific lat/lon coordinate. - -```python -from onav_tasks.custom_task_base import * -import actionlib -from clearpath_localization_msgs.srv import * -from clearpath_navigation_msgs.msg import * -from nav_msgs.msg import Odometry -from ptz_action_server_msgs.msg import PtzAction -import ptz_action_server_msgs.msg -import math -from math import remainder, tau -import rospy -from sensor_msgs import * -from tf.transformations import euler_from_quaternion, quaternion_from_euler - - - -class MovePtzLatLon(CustomTaskBase): - def __init__(self): - super().__init__("move_ptz_lat_lon") - self.localization_subscriber_ = rospy.Subscriber("/localization/odom", Odometry, self.localizationCallback) - self.move_ptz_client_ = actionlib.SimpleActionClient('/sensors/camera_0/move_ptz', PtzAction) - self.service_ = rospy.ServiceProxy('/localization/lat_lon_to_xy', ConvertLatLonToCartesian) - self.current_pose = Odometry() - - def localizationCallback(self, odom_msg): - self.current_pose = odom_msg - - def run_task(self, goal): - if len(goal.strings) == 0 and len(goal.floats) == 0: - rospy.logwarn('Warning') - self._as.set_aborted() - return False - goal_latitude = goal.floats[0] - goal_longitude = goal.floats[1] - goal_zoom = goal.floats[2] - str2 = 'Received goal latitude: ' + str(goal_latitude) + ', goal longitude: ' + str(goal_longitude) + ', zoom: ' + str(goal_zoom) - feedback = UITaskFeedback() - feedback.state = 'Aiming camera at lat-lon (' + str(goal_latitude) + ', ' + str(goal_longitude)+')' - self._as.publish_feedback(feedback) - orientation_q = self.current_pose.pose.pose.orientation - orientation_list = [orientation_q.x, orientation_q.y, orientation_q.z, orientation_q.w] - (roll, pitch, yaw) = euler_from_quaternion (orientation_list) - - gps_msg = sensor_msgs.msg.NavSatFix() - gps_msg.latitude = goal_latitude - gps_msg.longitude = goal_longitude - goal_utm = self.service_(gps_msg) - - goal_x = goal_utm.pose.pose.position.x - goal_y = goal_utm.pose.pose.position.y - - goal_angle = math.atan2(goal_y - self.current_pose.pose.pose.position.y, goal_x - self.current_pose.pose.pose.position.x) - pan_angle = math.remainder(goal_angle - yaw, math.tau) - print(pan_angle) - - self.move_ptz_client_.wait_for_server() - goal = ptz_action_server_msgs.msg.PtzGoal() - goal.pan=pan_angle - goal.tilt=0 - goal.zoom=goal_zoom - self.move_ptz_client_.send_goal(goal) - self.move_ptz_client_.wait_for_result() - print(self.move_ptz_client_.get_result()) - return True -``` +--- +title: Custom Tasks +sidebar_label: Custom Tasks +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +Users can create their custom tasks for their application following a specific template. When creating these tasks, the user should begin by creating a python file in the **~/cpr_outdoornav_launch/custom_tasks** directory. The file should be written following +the instructions provided below: + +1. Import the `custom_task_base` package. + +```python +#!/usr/bin/python3 + +from onav_tasks.custom_task_base import * +``` + +2. The user should then create a class name to replace `CustomTask` and initialize it with the +`CustomTaskBase`'s __init__ function and the action server name for the task. + +```python +class CustomTask(CustomTaskBase): + def __init__(self): + # The derived class must always call the super() and provide the action server name. + # This name will need to be unique among custom tasks and must match what is in the + # UI. + super().__init__("custom_task_name") +``` + +:::note + +The `CustomTaskBase` exposes a `SimpleActionServer` (see here +for further details) object as `_as`, a `UITaskFeedback` object as `_feedback` and a `UITaskResults` object as `_result` to be used as part of +the tasks functionality. + +::: + +3. The last requirement is that the `CustomTask` needs to have the `run_task(self, goal)` function be defined, +which takes in the UITaskGoal. + +```python + def run_task(self, goal): +``` + +:::note + +When running the task users may handle errors through the action servers `set_aborted()` function. When this function is called the entire mission +will be aborted. + +::: + +4. Restarting the UGV will trigger the system to load the custom task that was created, making it available for mission use. +If a custom task is not configured properly the custom task manager will ignore the task and proceed loading in the next task while logging an error with ROS. + + +## Sample Custom Tasks + +### Input Looper + +Below is a sample template file named "input_looper.py" which iterates throught the two data variables and publishes them to the feedback +topic. If neither of the variables have any data in them the task is aborted. + +```python +#!/usr/bin/python3 + +from onav_tasks.custom_task_base import * + +class InputLooperTask(CustomTaskBase): + def __init__(self): + # The derived class must always call the super() and provide the action server name. + # This name will need to be unique among custom tasks and must match what is in the + # UI. + super().__init__("input_looper") + + def run_task(self, goal): + if len(goal.strings) == 0 and len(goal.floats) == 0: + # Task and running mission will be aborted in this case + self._as.set_aborted() + return False + + # Loop through the strings and float values and publish them each to the /input_looper/feedback topic + for string in goal.strings: + self._feedback.state = string + self._as.publish_feedback(self._feedback) + + for num in goal.floats: + self._feedback.state = str(num) + self._as.publish_feedback(self._feedback) + + # Returning True or False will not currently impact the mission but will write the current state to the + # /task/result topic accordingly. + return True +``` + +### Record GNSS Data + +Below is a sample custom task file named "record_gnss.py" which outputs the current GNSS data to the console. + +```python +#!/usr/bin/python3 + +from onav_tasks.custom_task_base import * +from sensor_msgs.msg import NavSatFix +from threading import Lock +import rospy + +class RecorGNSSTask(CustomTaskBase): + def __init__(self): + super().__init__("record_gnss") + self._sub = rospy.Subscriber("/sensors/gps_0/fix", NavSatFix, self.gpsSubscriberCallback) + self.gps_lat = 0.0 + self.gps_lon = 0.0 + self._gps_coordinates_lock = Lock() + + def run_task(self, goal): + feedback = UITaskFeedback() + feedback.state = 'Recording GNSS lat/lon' + self._as.publish_feedback(feedback) + msg = "" + with self._gps_coordinates_lock: + msg = "ID: %f Name: %s Latitude: %f Longitude: %f" % ( + goal.floats[0], goal.strings[0], self.gps_lat, self.gps_lon) + rospy.loginfo(msg) + return True + + def gpsSubscriberCallback(self, msg): + with self._gps_coordinates_lock: + self.gps_lat = msg.latitude + self.gps_lon = msg.longitude +``` + + +### Move PTZ camera to a Lat/Lon + +Below is a more advanced custom task. The file is "move_ptz_lat_lon.py" which pans a PTZ camera to point to a specific lat/lon coordinate. + +```python +from onav_tasks.custom_task_base import * +import actionlib +from clearpath_localization_msgs.srv import * +from clearpath_navigation_msgs.msg import * +from nav_msgs.msg import Odometry +from ptz_action_server_msgs.msg import PtzAction +import ptz_action_server_msgs.msg +import math +from math import remainder, tau +import rospy +from sensor_msgs import * +from tf.transformations import euler_from_quaternion, quaternion_from_euler + + + +class MovePtzLatLon(CustomTaskBase): + def __init__(self): + super().__init__("move_ptz_lat_lon") + self.localization_subscriber_ = rospy.Subscriber("/localization/odom", Odometry, self.localizationCallback) + self.move_ptz_client_ = actionlib.SimpleActionClient('/sensors/camera_0/move_ptz', PtzAction) + self.service_ = rospy.ServiceProxy('/localization/lat_lon_to_xy', ConvertLatLonToCartesian) + self.current_pose = Odometry() + + def localizationCallback(self, odom_msg): + self.current_pose = odom_msg + + def run_task(self, goal): + if len(goal.strings) == 0 and len(goal.floats) == 0: + rospy.logwarn('Warning') + self._as.set_aborted() + return False + goal_latitude = goal.floats[0] + goal_longitude = goal.floats[1] + goal_zoom = goal.floats[2] + str2 = 'Received goal latitude: ' + str(goal_latitude) + ', goal longitude: ' + str(goal_longitude) + ', zoom: ' + str(goal_zoom) + feedback = UITaskFeedback() + feedback.state = 'Aiming camera at lat-lon (' + str(goal_latitude) + ', ' + str(goal_longitude)+')' + self._as.publish_feedback(feedback) + orientation_q = self.current_pose.pose.pose.orientation + orientation_list = [orientation_q.x, orientation_q.y, orientation_q.z, orientation_q.w] + (roll, pitch, yaw) = euler_from_quaternion (orientation_list) + + gps_msg = sensor_msgs.msg.NavSatFix() + gps_msg.latitude = goal_latitude + gps_msg.longitude = goal_longitude + goal_utm = self.service_(gps_msg) + + goal_x = goal_utm.pose.pose.position.x + goal_y = goal_utm.pose.pose.position.y + + goal_angle = math.atan2(goal_y - self.current_pose.pose.pose.position.y, goal_x - self.current_pose.pose.pose.position.x) + pan_angle = math.remainder(goal_angle - yaw, math.tau) + print(pan_angle) + + self.move_ptz_client_.wait_for_server() + goal = ptz_action_server_msgs.msg.PtzGoal() + goal.pan=pan_angle + goal.tilt=0 + goal.zoom=goal_zoom + self.move_ptz_client_.send_goal(goal) + self.move_ptz_client_.wait_for_result() + print(self.move_ptz_client_.get_result()) + return True +``` diff --git a/outdoornav_user_manual_versioned_docs/version-0.9.0/features/mission_scheduler.mdx b/outdoornav_user_manual_versioned_docs/version-0.9.0/features/mission_scheduler.mdx index 95c87061..0afdfcaf 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.9.0/features/mission_scheduler.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.9.0/features/mission_scheduler.mdx @@ -1,43 +1,43 @@ ---- -title: Mission Scheduler -sidebar_label: Mission Scheduler -sidebar_position: 4 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -### Scheduling missions - -By selecting the "SCHEDULER" option from the upper left hand menu, the user can open the Mission Scheduler interface. This interface -allows users to schedule groups of missions to run at a later time. These schedules can be set to run only once or to be looped over a period of time. -For example, a user could create a schedule that will run 3 missions starting at 9 AM and run every hour 8 times. Once the last iteration is run, the -schedule will disable itself and can be re-enabled to run again later. The view itself can be found in the image below and is elaborated further afterwards. - -
-
- -
Mission Scheduler View
-
-
- -#### Adding/Updating a Schedule - -The user can either create a new schedule by filling in the appropriate fields or edit a schedule by selecting the pencil icon for that schedule -in the bottom table. The input fields are outlined as follows: - -- Name: The name of the schedule. -- Start Time: The browser's local time that the schedule will start. This is stored as UTC time on the robot. -- Enabled: Enables/Disables the schedule. When schedules are completed they will disable themselves. -- Missions: The list of missions that will run. The schedule will run the missions in the order that they are added. -- Schedule Mode: Sets the kind of schedule mode to be either "Run Once" or "Looped". If it is set to run once, the next 2 inputs will be disabled. -- Loops: The number of iterations the schedule should run for. If for example it is set to Loop 5 times then the schedule will run 5 times (instead of run once and then re-runs 5 times). -- Loop Interval: The amount of time between the start of successive loop iterations. This is independent of the mission duration. -- Minimum Battery Charge: The minimum battery percentage that the UGV should be at to run the schedule. -- Timeout: The maximum amount of time to spend on running a single loop of the schedule. If a loop exceeds this timeout value the schedule is assumed to have failed and alerts the user - accordingly. This can be set to 0 to disable the timeout feature. - -#### Schedule Table - -Schedules found in the database are displayed in a simple table at the bottom of the screen. Schedules can be enabled, edited or deleted from this table through the -icons on the right hand side. The schedules can also be sorted by name or start time in ascending/descending order. The next schedule to run (if one is available) will have +--- +title: Mission Scheduler +sidebar_label: Mission Scheduler +sidebar_position: 4 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +### Scheduling missions + +By selecting the "SCHEDULER" option from the upper left hand menu, the user can open the Mission Scheduler interface. This interface +allows users to schedule groups of missions to run at a later time. These schedules can be set to run only once or to be looped over a period of time. +For example, a user could create a schedule that will run 3 missions starting at 9 AM and run every hour 8 times. Once the last iteration is run, the +schedule will disable itself and can be re-enabled to run again later. The view itself can be found in the image below and is elaborated further afterwards. + +
+
+ +
Mission Scheduler View
+
+
+ +#### Adding/Updating a Schedule + +The user can either create a new schedule by filling in the appropriate fields or edit a schedule by selecting the pencil icon for that schedule +in the bottom table. The input fields are outlined as follows: + +- Name: The name of the schedule. +- Start Time: The browser's local time that the schedule will start. This is stored as UTC time on the robot. +- Enabled: Enables/Disables the schedule. When schedules are completed they will disable themselves. +- Missions: The list of missions that will run. The schedule will run the missions in the order that they are added. +- Schedule Mode: Sets the kind of schedule mode to be either "Run Once" or "Looped". If it is set to run once, the next 2 inputs will be disabled. +- Loops: The number of iterations the schedule should run for. If for example it is set to Loop 5 times then the schedule will run 5 times (instead of run once and then re-runs 5 times). +- Loop Interval: The amount of time between the start of successive loop iterations. This is independent of the mission duration. +- Minimum Battery Charge: The minimum battery percentage that the UGV should be at to run the schedule. +- Timeout: The maximum amount of time to spend on running a single loop of the schedule. If a loop exceeds this timeout value the schedule is assumed to have failed and alerts the user + accordingly. This can be set to 0 to disable the timeout feature. + +#### Schedule Table + +Schedules found in the database are displayed in a simple table at the bottom of the screen. Schedules can be enabled, edited or deleted from this table through the +icons on the right hand side. The schedules can also be sorted by name or start time in ascending/descending order. The next schedule to run (if one is available) will have a small information icon next to it's name and will also be reported at the top of the screen. \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.9.0/features/navigation.mdx b/outdoornav_user_manual_versioned_docs/version-0.9.0/features/navigation.mdx index e4c0b864..a5548250 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.9.0/features/navigation.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.9.0/features/navigation.mdx @@ -1,38 +1,38 @@ ---- -title: Navigation Features -sidebar_label: Navigation Features -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -:::danger SAFETY WARNING - -Making changes to any of the following variables may decrease system safety. It is recommended that users -only modify these parameters in consultation with Clearpath Robotics Support. - -::: - -:::note - -Changes to any of the following variables will only take effect after power cycling the UGV. - -::: - -The OutdoorNav Software contains a set of features that can be enabled -or disabled according to your required application requirements. These -features can be enabled or disabled through the use of environment -variables, which should be added to the -`~/cpr_outdoornav_launch/env/autonomy_customization.env` file. The -following table describes the available features, their default state -and any additional parameters that we expose that may also be included -to tune the feature. - -| Feature | Description | -|-----------------------------|----------------------------------------| -| **Collision Avoidance** | Collision avoidance is the UGV's ability to detect obstacles and stop/maneuver around the obstacle without any collisions. If `true`, the UGV will detect obstacles and if `false` no obstacles will be detected. Setting to `false` is not recommended and may cause harm to property or to individuals.

Environment Variable: `ENABLE_COLLISION_AVOIDANCE` (Default: `true`). | -| **Constrained Planning** | The constrained replanning feature, which is always enabled, restricts the area in which the UGV can plan paths. For example, if the default `PATH_CONSTRAINT` of 3.0 m is used, the UGV will not be allowed to 1) produce paths that drives it more than 3.0 meters from the initial path, and 2) fail to compute paths if the UGV is further than 3.0 meters from the any of the Waypoints. This allowable planning/navigation area can be shown on the map over the connecting lines between Waypoints. See [Constrained Replanning](../web_user_interface/ui_autonomous_mode.mdx#constrained_path) for further details.

Use the `PATH_CONSTRAINT` environment variable to modify the path constraint (in meters). | -| **Path Smoothing** | Generate paths according to a specified turning radius.

Environment Variable: `ENABLE_DUBINS_PATH_SMOOTHER` (Default: `false`).

Use the `TURN_RADIUS` environment variable to modify the radius of the planned paths (in meters). | -| **Stop Distance** | The stop distance feature allows the UGV to stop a predefined distance away from obstacles. This is useful if a UGV cannot drive in reverse and needs the required room in front of it to replan around an obstacle.

Environment Variable: `ENABLE_STOP_DISTANCE` (Default: `false`)

Use the `STOP_DISTANCE` environment variable to modify the stop distance (in meters). Note that if the stop distance is larger than 4.5 meters for the Clearpath Robotics Jackal and Husky UGVs, or 10.0 meters for the Clearpath Robotics Warthog UGV, the computational load will increase and may cause a decrease in performance in the navigation. | -| **Delay Compensation** | The delay compensation feature is able to compensate for mechanical delay on UGVs where either the accelerator introduces delay into the linear velocity or the steering introduces delay in the angular velocity. This feature is not required for Clearpath Robotics UGVs as negligible delay is present in our system.

Environment Variable: `ENABLE_DELAY_COMPENSATION` (Default: `false`)

Use the `CONTROLLER_DELAY` environment variable to modify the amount of delay to be compensated (in milliseconds). | -| **Docking** | If purchased, autonomous docking will allow the user to autonomously dock/undock their UGV. If not purchased, enabling this environment variable will do nothing.

Environment Variable: `OUTDORRNAV_ENABLE_DOCKING` (Default: `false`).| +--- +title: Navigation Features +sidebar_label: Navigation Features +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +:::danger SAFETY WARNING + +Making changes to any of the following variables may decrease system safety. It is recommended that users +only modify these parameters in consultation with Clearpath Robotics Support. + +::: + +:::note + +Changes to any of the following variables will only take effect after power cycling the UGV. + +::: + +The OutdoorNav Software contains a set of features that can be enabled +or disabled according to your required application requirements. These +features can be enabled or disabled through the use of environment +variables, which should be added to the +`~/cpr_outdoornav_launch/env/autonomy_customization.env` file. The +following table describes the available features, their default state +and any additional parameters that we expose that may also be included +to tune the feature. + +| Feature | Description | +|-----------------------------|----------------------------------------| +| **Collision Avoidance** | Collision avoidance is the UGV's ability to detect obstacles and stop/maneuver around the obstacle without any collisions. If `true`, the UGV will detect obstacles and if `false` no obstacles will be detected. Setting to `false` is not recommended and may cause harm to property or to individuals.

Environment Variable: `ENABLE_COLLISION_AVOIDANCE` (Default: `true`). | +| **Constrained Planning** | The constrained replanning feature, which is always enabled, restricts the area in which the UGV can plan paths. For example, if the default `PATH_CONSTRAINT` of 3.0 m is used, the UGV will not be allowed to 1) produce paths that drives it more than 3.0 meters from the initial path, and 2) fail to compute paths if the UGV is further than 3.0 meters from the any of the Waypoints. This allowable planning/navigation area can be shown on the map over the connecting lines between Waypoints. See [Constrained Replanning](../web_user_interface/ui_autonomous_mode.mdx#constrained_path) for further details.

Use the `PATH_CONSTRAINT` environment variable to modify the path constraint (in meters). | +| **Path Smoothing** | Generate paths according to a specified turning radius.

Environment Variable: `ENABLE_DUBINS_PATH_SMOOTHER` (Default: `false`).

Use the `TURN_RADIUS` environment variable to modify the radius of the planned paths (in meters). | +| **Stop Distance** | The stop distance feature allows the UGV to stop a predefined distance away from obstacles. This is useful if a UGV cannot drive in reverse and needs the required room in front of it to replan around an obstacle.

Environment Variable: `ENABLE_STOP_DISTANCE` (Default: `false`)

Use the `STOP_DISTANCE` environment variable to modify the stop distance (in meters). Note that if the stop distance is larger than 4.5 meters for the Clearpath Robotics Jackal and Husky UGVs, or 10.0 meters for the Clearpath Robotics Warthog UGV, the computational load will increase and may cause a decrease in performance in the navigation. | +| **Delay Compensation** | The delay compensation feature is able to compensate for mechanical delay on UGVs where either the accelerator introduces delay into the linear velocity or the steering introduces delay in the angular velocity. This feature is not required for Clearpath Robotics UGVs as negligible delay is present in our system.

Environment Variable: `ENABLE_DELAY_COMPENSATION` (Default: `false`)

Use the `CONTROLLER_DELAY` environment variable to modify the amount of delay to be compensated (in milliseconds). | +| **Docking** | If purchased, autonomous docking will allow the user to autonomously dock/undock their UGV. If not purchased, enabling this environment variable will do nothing.

Environment Variable: `OUTDORRNAV_ENABLE_DOCKING` (Default: `false`).| diff --git a/outdoornav_user_manual_versioned_docs/version-0.9.0/features/rosbag_recorder.mdx b/outdoornav_user_manual_versioned_docs/version-0.9.0/features/rosbag_recorder.mdx index 503d94ae..f102726e 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.9.0/features/rosbag_recorder.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.9.0/features/rosbag_recorder.mdx @@ -1,34 +1,34 @@ ---- -title: ROSbag Recorder -sidebar_label: ROSbag Recorder -sidebar_position: 5 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -If you need to perform a quick rosbag recording from the UI you can do -so by navigating to the Settings dropdown in the upper left hand menu and -select **Start rosbag recording**. This will record a rosbag of the -following topics (or all the topics in the namespace if followed by a -`/*`): - -- '/rosout(.*)' -- '/twist_marker_server/(.*)' -- '/dock/(.*)' -- '/laser_target_tracker/(.*)' -- '/localization/(.*)' -- '/localization_core/(.*)' -- '/localization_helper/(.*)' -- '/mission/(.*)' -- '/navigation/(.*)' -- '/onboard_systems/(.*)' -- '/platform/(.*)' -- '/swiftnav/(.*)' -- '/sensors/gps(.*)' -- '/sensors/imu(.*)' -- '/target/(.*)' -- '/tf(.*)' - -To stop the recording navigate to the Settings drop down and select -**Stop rosbag recording**. This will save the rosbag with the date and -time as its file name in the `~/clearpath_files/rosbag_data` folder. +--- +title: ROSbag Recorder +sidebar_label: ROSbag Recorder +sidebar_position: 5 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +If you need to perform a quick rosbag recording from the UI you can do +so by navigating to the Settings dropdown in the upper left hand menu and +select **Start rosbag recording**. This will record a rosbag of the +following topics (or all the topics in the namespace if followed by a +`/*`): + +- '/rosout(.*)' +- '/twist_marker_server/(.*)' +- '/dock/(.*)' +- '/laser_target_tracker/(.*)' +- '/localization/(.*)' +- '/localization_core/(.*)' +- '/localization_helper/(.*)' +- '/mission/(.*)' +- '/navigation/(.*)' +- '/onboard_systems/(.*)' +- '/platform/(.*)' +- '/swiftnav/(.*)' +- '/sensors/gps(.*)' +- '/sensors/imu(.*)' +- '/target/(.*)' +- '/tf(.*)' + +To stop the recording navigate to the Settings drop down and select +**Stop rosbag recording**. This will save the rosbag with the date and +time as its file name in the `~/clearpath_files/rosbag_data` folder. diff --git a/outdoornav_user_manual_versioned_docs/version-0.9.0/getting_started/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.9.0/getting_started/_category_.json index 8b4a486d..9a9747ef 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.9.0/getting_started/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.9.0/getting_started/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Getting Started", - "position": 5 -} +{ + "label": "Getting Started", + "position": 5 +} diff --git a/outdoornav_user_manual_versioned_docs/version-0.9.0/getting_started/first_time_checklist.mdx b/outdoornav_user_manual_versioned_docs/version-0.9.0/getting_started/first_time_checklist.mdx index 124a76e4..92d068e8 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.9.0/getting_started/first_time_checklist.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.9.0/getting_started/first_time_checklist.mdx @@ -1,114 +1,114 @@ ---- -title: First Time Use Checklist -sidebar_label: First Time Use Checklist -sidebar_position: 2 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -## Hardware Setup - -### ☐ Has the Base Station been set up? - -Ensure that the Base Station has been set up approximately 5 meters -away from any buildings and is currently powered on. See -[System Startup](./system_setup.mdx) for further -instructions related to setting up the Base Station. - -### ☐ Is the UGV connected to the Base Station? - -Check to see that the UGV can be pinged from the Base Station network. -See [Connecting to Web UI](./system_setup.mdx#connecting_to_web_ui) for further -details. - -## Software Setup - -### ☐ Is ROS running on the UGV? - -SSH into the UGV and run `rostopic list` to generate a list of the -rostopics that are currently available. The list is generally fairly -long so if you are looking for any specific topic please refer to -[API Endpoints](../api/api_endpoints/api_endpoints.mdx). You can also check the -ROS status through the OutdoorNAV UI by referring to the diagnostics section -on the Status page. - -### ☐ Is the OutdoorNAV software running? - -Check to see if the relevant dockers are running (ssh into the UGV and -run `docker ps` which should show at least 5 separate docker containers -running). - -### ☐ Is the computer using the UI connected to the Base Station network? - -This can be confirmed by following the steps found in -[Connecting to Web UI](./system_setup.mdx#connecting_to_web_ui). - -### ☐ Have you surveyed the Base Station? - -See [RTK Survey Positioning](../cpr_hardware.mdx#base-station-survey) for -information on how and when to survey the Base station. - -### ☐ Do you have a strong GPS signal? - -After surveying the Base Station check the upper right hand corner of -the UI to confirm that you have a strong GPS signal (the POS and DIR -icons should be green). If either of these icons are not green refer -to [Checking GPS RTK Fix](../cpr_hardware.mdx#base-station-survey) for further -troubleshooting information. - -### ☐ Is the map loading correctly? - -Currently the map requires internet access to load. Refer to -[Loading Map Tiles](./system_setup.mdx#loading_map_tiles) for more details -related to setting up the map. - -### ☐ Has the Datum been set? - -See [Set Datum](./system_setup.mdx#set-datum) for information on how -to set the Datum variables. - -### ☐ If docking is enabled has the location been set? - -If the Clearpath Robotics autonomous docking package was purchased the -docking location will need to be set. See -[Set Dock Location](./system_setup.mdx#set-dock-location) for information on -how to set the docking location. - -### ☐ Is the Navbar status icon functioning? - -To check if the Navbar icon is functioning, trigger the UGV's motion stop -and check to see if it has turned to a red icon. Clicking the icon -will bring up the status information as well as any recent messages -(see below). - -![](/img/outdoornav_images/ugvStatusMessages.png) - -## Using the UI - -The following items are general checks to ensure that the UI is working -properly. - -### ☐ Can the virtual joystick drive the UGV? - -See [Web UI Manual Mode](../web_user_interface/ui_manual_mode.mdx) for further details -related to this. - -### ☐ Can you create a new mission? - -Select the mission list and then click on `Add Mission` to create a -new mission. To add new waypoints for the mission refer to -[Mission Creation](../web_user_interface/ui_autonomous_mode.mdx#mission-creation). - -### ☐ After creating a new mission, can you execute the mission? - -To execute a mission refer to [Mission Execution](../web_user_interface/ui_autonomous_mode.mdx#mission-execution). - -### ☐ Are the cameras (if present) active in the view bar section when running the mission? - -For more information related to camera views see -[Camera Views](../web_user_interface/ui_overview.mdx#camera-views). - -### ☐ Can you select a camera and save an image after it loads on the main screen? - -See [Pan-Tilt-Zoom (PTZ) View ](../web_user_interface/ui_overview.mdx#ptz-view) for more details related +--- +title: First Time Use Checklist +sidebar_label: First Time Use Checklist +sidebar_position: 2 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +## Hardware Setup + +### ☐ Has the Base Station been set up? + +Ensure that the Base Station has been set up approximately 5 meters +away from any buildings and is currently powered on. See +[System Startup](./system_setup.mdx) for further +instructions related to setting up the Base Station. + +### ☐ Is the UGV connected to the Base Station? + +Check to see that the UGV can be pinged from the Base Station network. +See [Connecting to Web UI](./system_setup.mdx#connecting_to_web_ui) for further +details. + +## Software Setup + +### ☐ Is ROS running on the UGV? + +SSH into the UGV and run `rostopic list` to generate a list of the +rostopics that are currently available. The list is generally fairly +long so if you are looking for any specific topic please refer to +[API Endpoints](../api/api_endpoints/api_endpoints.mdx). You can also check the +ROS status through the OutdoorNAV UI by referring to the diagnostics section +on the Status page. + +### ☐ Is the OutdoorNAV software running? + +Check to see if the relevant dockers are running (ssh into the UGV and +run `docker ps` which should show at least 5 separate docker containers +running). + +### ☐ Is the computer using the UI connected to the Base Station network? + +This can be confirmed by following the steps found in +[Connecting to Web UI](./system_setup.mdx#connecting_to_web_ui). + +### ☐ Have you surveyed the Base Station? + +See [RTK Survey Positioning](../cpr_hardware.mdx#base-station-survey) for +information on how and when to survey the Base station. + +### ☐ Do you have a strong GPS signal? + +After surveying the Base Station check the upper right hand corner of +the UI to confirm that you have a strong GPS signal (the POS and DIR +icons should be green). If either of these icons are not green refer +to [Checking GPS RTK Fix](../cpr_hardware.mdx#base-station-survey) for further +troubleshooting information. + +### ☐ Is the map loading correctly? + +Currently the map requires internet access to load. Refer to +[Loading Map Tiles](./system_setup.mdx#loading_map_tiles) for more details +related to setting up the map. + +### ☐ Has the Datum been set? + +See [Set Datum](./system_setup.mdx#set-datum) for information on how +to set the Datum variables. + +### ☐ If docking is enabled has the location been set? + +If the Clearpath Robotics autonomous docking package was purchased the +docking location will need to be set. See +[Set Dock Location](./system_setup.mdx#set-dock-location) for information on +how to set the docking location. + +### ☐ Is the Navbar status icon functioning? + +To check if the Navbar icon is functioning, trigger the UGV's motion stop +and check to see if it has turned to a red icon. Clicking the icon +will bring up the status information as well as any recent messages +(see below). + +![](/img/outdoornav_images/ugvStatusMessages.png) + +## Using the UI + +The following items are general checks to ensure that the UI is working +properly. + +### ☐ Can the virtual joystick drive the UGV? + +See [Web UI Manual Mode](../web_user_interface/ui_manual_mode.mdx) for further details +related to this. + +### ☐ Can you create a new mission? + +Select the mission list and then click on `Add Mission` to create a +new mission. To add new waypoints for the mission refer to +[Mission Creation](../web_user_interface/ui_autonomous_mode.mdx#mission-creation). + +### ☐ After creating a new mission, can you execute the mission? + +To execute a mission refer to [Mission Execution](../web_user_interface/ui_autonomous_mode.mdx#mission-execution). + +### ☐ Are the cameras (if present) active in the view bar section when running the mission? + +For more information related to camera views see +[Camera Views](../web_user_interface/ui_overview.mdx#camera-views). + +### ☐ Can you select a camera and save an image after it loads on the main screen? + +See [Pan-Tilt-Zoom (PTZ) View ](../web_user_interface/ui_overview.mdx#ptz-view) for more details related to saving images. \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.9.0/getting_started/system_setup.mdx b/outdoornav_user_manual_versioned_docs/version-0.9.0/getting_started/system_setup.mdx index e5062958..79397185 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.9.0/getting_started/system_setup.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.9.0/getting_started/system_setup.mdx @@ -1,236 +1,236 @@ ---- -title: System Setup -sidebar_label: System Setup -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -This section outlines how to set up your OutdoorNav system for some -preliminary testing with the OutdoorNav Software on a UGV. For details -on simulation, refer to [Simulation](../simulation.mdx). - -These instructions assume that the UGV is already powered ON. - - - -## Connecting to Web UI {#connecting_to_web_ui} - -The web server for the UI typically runs on a computer on the UGV. As -such, it is necessary for the networking setup on the UGV to be complete -and for all related hardware to be powered on. - -:::note - -In the case of Clearpath Robotics OutdoorNav Hardware, ensure that the -Base Station is powered ON. - -::: - -Follow the steps below to connect to the Web UI. - -1. Connect your computer to the same network as the UGV. - - :::note - - For Clearpath Robotics OutdoorNav Hardware, use the Base Station - network. Enter the network list and find the wireless network - related for your UGV. The SSID of the network is located in the - Robosmith manual that was shipped with your UGV. - - ::: - -2. Open an Internet browser (preferably Chrome) on your computer. - -3. Enter the UGV's IP address followed by a forward slash in the - search bar. A bookmark of this page can also be created for future - sessions. - - :::note - - For Clearpath Robotics OutdoorNav Hardware, this will be - **192.168.131.1/** for normal use cases and **192.168.131.5/** for - systems with a separate OutdoorNav computer (including the - OutdoorNav Starter Kit and the OutdoorNav Backpack. - - ::: - -The above steps will open the Web UI, which will allow the user to -operate the UGV in Manual Mode (teleoperation) or in Autonomous Mode -(missions). - -## Loading Map Tiles {#loading_map_tiles} - -The Web UI does not cache map tiles on the browser; therefore, the user -will need to ensure their computer has a connection to an Internet -source to load the map tiles. There are a several options to achieve -this: - -1. If the system includes a Base Station that is connected to the - Internet, you will be able to access the Internet and therefore map - tiles over the base station network without needing any further - updates. -2. Connect your phone via USB to your computer (or tablet) and enable - USB tethering on your phone to share the Internet from your phone. -3. Switch your computer (or tablet) to a network that is connected to - the Internet, zoom in/out of the map to load the tiles then switch - back to the original network. - -## Survey Base Station {#survey_base_station} - -If your system includes a Base Station, it must be surveyed using the -steps below to be able to to operate the UGV autonomously. - -1. Access the Menu → Settings → Map. -2. In the **Survey Base Station** section, click the **Start** button - begin the surveying process. - -During surveying, the Status Indicator will turn orange -and return to its green default state when surveying is -done . -Only then should the UGV be sent on autonomous missions. -The entire surveying will take approximately 5 minutes. A feedback bar -will also be displayed showing the current progress of the surveying. Do -not refresh the page or you will lose the feedback bar. - -:::warning - -For an accurate survey, do NOT move the Base Station during this -process. After the surveying has completed, the Base Station should not -be moved unless required. If you need to move the Base Station or it has -been moved accidentally, the surveying process needs to be run again. - -::: - -## Set Datum - -Before operating the UGV autonomously, the user will need to set the -datum, which is the reference point in the world coordinate frame. - -1. Access the Menu → Settings → Map. - -2. In the **Change Datum** section, enter the latitude and longitude of - a location close to the test site (within 10km). Decimal lat/lon are - expected. Use a minimum of 6 decimal places. - -3. Click **Set Datum** button to set the new datum. - - The user should see the blue dot (datum) and the blue arrow (UGV) - move to the test site. If the GPS status indicators are green, the - UGV should be at its correct position on the map as well as facing - in the correct direction. - -## Set Dock Location - -:::note - -If the Clearpath Robotics autonomous docking package has been purchased, -follow these instructions to set up the dock location. Otherwise, this -section can be skipped. - -::: - -:::warning - -Keep the area around the dock free of objects and people. There is no -obstacle detection between the pre-docking point and the dock; -similarly, there is no obstacle detection during the undocking -operation. - -::: - -
-
- -
Autocharge Dock
-
-
- -Before being able to dock the UGV autonomously, set up the dock -location. Follow these steps to position the UGV in its correct position -and orientation. - -1. Power ON the UGV and computer and wait for the system to finish - booting. For example, on the Clearpath Robotics Husky, booting is - complete when the COMM indicator turns green. - -2. Start by manually driving the UGV to the dock target and align it as - straight and centered as possible so that it begins charging. The - Wibotic receiver on the UGV should be centered longitudinally and - laterally with the circle on the Wibotic transmitter (TR-300). - -3. Let the UGV sit in this position for 2 minutes to acquire an RTK GPS - fix. The POS (position) and DIR (heading) GPS status indicators on - the UI should read as follows: . - - **If the GPS status indicators are yellow or red, the selected - location of the dock is NOT appropriate. Please change the dock - location such that the GPS antennas have a clearer visibility.** - -4. On the UI, access the drop down menu on the top-left of the page, - select **Settings** and click the **Add New Dock Location** button. The - dock location will be stored in 5 - 10 seconds as data is collected. - -If the Base Station has been moved (and therefore been resurveyed), or -if the dock has been moved to a new location, the user will need to -reset the location of the dock. This is done in the following manner: - -1. Repeat the previous set of instructions from step 1 to 4. - -2. While in **Edit Mode** select the dock on the UI. A drop down should appear - with the option to reset the dock location. Select that option. - -3. After approximately 5 - 10 seconds the dock location should be updated and the UI will - reflect the change accordingly. - -## Checking GPS RTK Fix {#checking-gpt-rtk-fix} - -Each time the UGV has been powered up (or moved from a GPS-denied -environment to a GPS-available environment), let the UGV sit in this -position for 2 minutes to acquire an RTK GPS fix. The POS (position) and -DIR (heading) GPS status indicators on the UI should be green: . - -**If the GPS status indicators are yellow or red, the selected location -does not have an adequate GPS signal. Move the UGV such that the GPS -antennas have a clearer visibility.** - -If using Switft Navigation Duros and/or a Clearpath Robotics Base -Station, each of these will have a solid blue LED on all of them when -the RTK GPS fix is acquired. - -## Recording a Rosbag - -See the [ROSbag Recorder](../features/rosbag_recorder.mdx) section for details on recording ROS data either. - -## Subsequent Sections - -The following sections of this manual will outline the instructions for -different tasks that can be accomplished while operating the UGV. - -1. **Web User Interface:** - - Overview of the Web UI components as well as the available views - and icons/buttons associated with them. - - - Overview of the buttons required to operate the UGV in Manual - Mode (teleoperation). - - - Instructions to send the UGV on autonomous navigation missions, - including: - - > - Adding Waypoints to the map - > - Creating missions - > - Viewing and updating missions - > - Adding task to missions, such as **Move PTZ** camera, - > **Save Image**, **Dock/Undock** UGV, **Wait**, etc.... - > - Start/Stop/Pause missions - - - Description of the docking procedures allowing the user to dock - and undock the UGV autonomously. Recovery instructions are also - described. -2. **Application Programming Interface:** Details on how to control the - UGV programmatically. -3. **OutdoorNav Features** Details on the features available as part of the - navigation software. -4. **Simulation:** Details on how to simulate autonomous operation of - the UGV. -5. **FAQs:** A list of frequently asked questions. +--- +title: System Setup +sidebar_label: System Setup +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +This section outlines how to set up your OutdoorNav system for some +preliminary testing with the OutdoorNav Software on a UGV. For details +on simulation, refer to [Simulation](../simulation.mdx). + +These instructions assume that the UGV is already powered ON. + + + +## Connecting to Web UI {#connecting_to_web_ui} + +The web server for the UI typically runs on a computer on the UGV. As +such, it is necessary for the networking setup on the UGV to be complete +and for all related hardware to be powered on. + +:::note + +In the case of Clearpath Robotics OutdoorNav Hardware, ensure that the +Base Station is powered ON. + +::: + +Follow the steps below to connect to the Web UI. + +1. Connect your computer to the same network as the UGV. + + :::note + + For Clearpath Robotics OutdoorNav Hardware, use the Base Station + network. Enter the network list and find the wireless network + related for your UGV. The SSID of the network is located in the + Robosmith manual that was shipped with your UGV. + + ::: + +2. Open an Internet browser (preferably Chrome) on your computer. + +3. Enter the UGV's IP address followed by a forward slash in the + search bar. A bookmark of this page can also be created for future + sessions. + + :::note + + For Clearpath Robotics OutdoorNav Hardware, this will be + **192.168.131.1/** for normal use cases and **192.168.131.5/** for + systems with a separate OutdoorNav computer (including the + OutdoorNav Starter Kit and the OutdoorNav Backpack. + + ::: + +The above steps will open the Web UI, which will allow the user to +operate the UGV in Manual Mode (teleoperation) or in Autonomous Mode +(missions). + +## Loading Map Tiles {#loading_map_tiles} + +The Web UI does not cache map tiles on the browser; therefore, the user +will need to ensure their computer has a connection to an Internet +source to load the map tiles. There are a several options to achieve +this: + +1. If the system includes a Base Station that is connected to the + Internet, you will be able to access the Internet and therefore map + tiles over the base station network without needing any further + updates. +2. Connect your phone via USB to your computer (or tablet) and enable + USB tethering on your phone to share the Internet from your phone. +3. Switch your computer (or tablet) to a network that is connected to + the Internet, zoom in/out of the map to load the tiles then switch + back to the original network. + +## Survey Base Station {#survey_base_station} + +If your system includes a Base Station, it must be surveyed using the +steps below to be able to to operate the UGV autonomously. + +1. Access the Menu → Settings → Map. +2. In the **Survey Base Station** section, click the **Start** button + begin the surveying process. + +During surveying, the Status Indicator will turn orange +and return to its green default state when surveying is +done . +Only then should the UGV be sent on autonomous missions. +The entire surveying will take approximately 5 minutes. A feedback bar +will also be displayed showing the current progress of the surveying. Do +not refresh the page or you will lose the feedback bar. + +:::warning + +For an accurate survey, do NOT move the Base Station during this +process. After the surveying has completed, the Base Station should not +be moved unless required. If you need to move the Base Station or it has +been moved accidentally, the surveying process needs to be run again. + +::: + +## Set Datum + +Before operating the UGV autonomously, the user will need to set the +datum, which is the reference point in the world coordinate frame. + +1. Access the Menu → Settings → Map. + +2. In the **Change Datum** section, enter the latitude and longitude of + a location close to the test site (within 10km). Decimal lat/lon are + expected. Use a minimum of 6 decimal places. + +3. Click **Set Datum** button to set the new datum. + + The user should see the blue dot (datum) and the blue arrow (UGV) + move to the test site. If the GPS status indicators are green, the + UGV should be at its correct position on the map as well as facing + in the correct direction. + +## Set Dock Location + +:::note + +If the Clearpath Robotics autonomous docking package has been purchased, +follow these instructions to set up the dock location. Otherwise, this +section can be skipped. + +::: + +:::warning + +Keep the area around the dock free of objects and people. There is no +obstacle detection between the pre-docking point and the dock; +similarly, there is no obstacle detection during the undocking +operation. + +::: + +
+
+ +
Autocharge Dock
+
+
+ +Before being able to dock the UGV autonomously, set up the dock +location. Follow these steps to position the UGV in its correct position +and orientation. + +1. Power ON the UGV and computer and wait for the system to finish + booting. For example, on the Clearpath Robotics Husky, booting is + complete when the COMM indicator turns green. + +2. Start by manually driving the UGV to the dock target and align it as + straight and centered as possible so that it begins charging. The + Wibotic receiver on the UGV should be centered longitudinally and + laterally with the circle on the Wibotic transmitter (TR-300). + +3. Let the UGV sit in this position for 2 minutes to acquire an RTK GPS + fix. The POS (position) and DIR (heading) GPS status indicators on + the UI should read as follows: . + + **If the GPS status indicators are yellow or red, the selected + location of the dock is NOT appropriate. Please change the dock + location such that the GPS antennas have a clearer visibility.** + +4. On the UI, access the drop down menu on the top-left of the page, + select **Settings** and click the **Add New Dock Location** button. The + dock location will be stored in 5 - 10 seconds as data is collected. + +If the Base Station has been moved (and therefore been resurveyed), or +if the dock has been moved to a new location, the user will need to +reset the location of the dock. This is done in the following manner: + +1. Repeat the previous set of instructions from step 1 to 4. + +2. While in **Edit Mode** select the dock on the UI. A drop down should appear + with the option to reset the dock location. Select that option. + +3. After approximately 5 - 10 seconds the dock location should be updated and the UI will + reflect the change accordingly. + +## Checking GPS RTK Fix {#checking-gpt-rtk-fix} + +Each time the UGV has been powered up (or moved from a GPS-denied +environment to a GPS-available environment), let the UGV sit in this +position for 2 minutes to acquire an RTK GPS fix. The POS (position) and +DIR (heading) GPS status indicators on the UI should be green: . + +**If the GPS status indicators are yellow or red, the selected location +does not have an adequate GPS signal. Move the UGV such that the GPS +antennas have a clearer visibility.** + +If using Switft Navigation Duros and/or a Clearpath Robotics Base +Station, each of these will have a solid blue LED on all of them when +the RTK GPS fix is acquired. + +## Recording a Rosbag + +See the [ROSbag Recorder](../features/rosbag_recorder.mdx) section for details on recording ROS data either. + +## Subsequent Sections + +The following sections of this manual will outline the instructions for +different tasks that can be accomplished while operating the UGV. + +1. **Web User Interface:** + - Overview of the Web UI components as well as the available views + and icons/buttons associated with them. + + - Overview of the buttons required to operate the UGV in Manual + Mode (teleoperation). + + - Instructions to send the UGV on autonomous navigation missions, + including: + + > - Adding Waypoints to the map + > - Creating missions + > - Viewing and updating missions + > - Adding task to missions, such as **Move PTZ** camera, + > **Save Image**, **Dock/Undock** UGV, **Wait**, etc.... + > - Start/Stop/Pause missions + + - Description of the docking procedures allowing the user to dock + and undock the UGV autonomously. Recovery instructions are also + described. +2. **Application Programming Interface:** Details on how to control the + UGV programmatically. +3. **OutdoorNav Features** Details on the features available as part of the + navigation software. +4. **Simulation:** Details on how to simulate autonomous operation of + the UGV. +5. **FAQs:** A list of frequently asked questions. diff --git a/outdoornav_user_manual_versioned_docs/version-0.9.0/getting_started/terminal_interface.mdx b/outdoornav_user_manual_versioned_docs/version-0.9.0/getting_started/terminal_interface.mdx index 43e9dedc..76de4f41 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.9.0/getting_started/terminal_interface.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.9.0/getting_started/terminal_interface.mdx @@ -1,141 +1,141 @@ ---- -title: Terminal Interface -sidebar_label: Terminal Interface -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -## Command Line Operation - -By default the OutdoorNav Software, including the Navigation component, -begins automatically when the system is powered on. This section -outlines the commands that can be used by developers who are debugging -the system or who want more precise control for managing the Navigation -component. - -### Connecting to the OutdoorNav Computer {#connecting-to-outdoornav-computer} - -To connect to your UGV, consult its corresponding user manual. - -If you are using a Clearpath Robotics UGV with a seperate OutdoorNav computer, -first `ssh` to the UGV using the details provided in the UGV user -manual. If you have a wired connection to the Clearpath Robotics UGV, -use the following command. If using wifi, you can replace the IP address -with the wifi-assigned IP address or the hostname of the UGV. - -``` bash -ssh administrator@192.168.131.1 -``` - -Then, connect to the OutdoorNav Computer: - -``` bash -ssh administrator@192.168.131.5 -``` - -### Starting the Navigation Software {#starting-outdoornav} - -Begin by connecting to the OutdoorNav Computer as outlined above. - -On UGV startup, all the sensors, the user interface, as well as the -Navigation software are set to start automatically through a Docker -container. You can check the Docker container's status by running -`docker ps` and checking for: - -- onav-web (Docker image containing the web interface) -- onav-web-ros (Docker image containing the ROS web bridge nodes) -- onav-sensors (Docker image that launches the ROS sensor drivers) -- onav-power (Docker image that launches the ROS nodes related to - the power system of the UGV) -- onav-autonomy (Docker image that launches the ROS nodes related - to the autonomy) - -The docker compose file located at `~/cpr_outdoornav_launch/docker-compose.yml` -provides the description for each the docker images that are being generated -on startup. In here, you can find that there are profiles set up as part of the -docker compose structure. They are: - -- ui: starts the onav-web and onav-web-ros containers -- sensors: starts the onav-sensors container -- power: starts the onav-power container -- autonomy: starts the onav-autonomy container -- outdoornav: starts all of the containers -- teleop: start only the ui and sensor related containers (no autonomy) - -If the Docker containers are not running, they can all be started with: - -``` bash -cd ~/cpr_outdoornav_launch/ # directory with docker-compose.yaml -docker compose --profile outdoornav up -d -``` - -### Stopping/Restarting all of OutdoorNav - -Each individual profile can also be brought down. For example to use the UGV without -the OutdoorNav software. The following command brings down OutdoorNav and is persistent -accross reboots/power cylces. - -``` bash -cd ~/cpr_outdoornav_launch/ # directory with docker-compose.yaml -docker compose --profile outdoornav down -``` - -If the OutdoorNav software has been brought down, it can be restarted by running: - -``` bash -cd ~/cpr_outdoornav_launch/ # directory with docker-compose.yaml -docker compose --profile outdoornav up -d -``` - -### Stopping/Restarting the Autonomy - -To use the UGV without the autonomy core of OutdoorNav, use these -commands to stop the nodes and prevent them from automatic startup: - -``` bash -cd ~/cpr_outdoornav_launch/ # directory with docker-compose.yaml -docker compose --profile autonomy down -``` - -The autonomy core can be restarted by running: - -``` bash -cd ~/cpr_outdoornav_launch/ # directory with docker-compose.yaml -docker compose --profile autonomy up -d -``` - -### Stopping/Restarting the Sensors - -To use the UGV without the sensors, use these commands to disable the -nodes and prevent them from automatic startup: - -``` bash -cd ~/cpr_outdoornav_launch/ # directory with docker-compose.yaml -docker compose --profile sensors down -``` - -::: note - -This command will only disable the drivers for the sensors that are started -by the OutdoorNv software. This includes the GNSS units, the Microstrain IMU, -and any LiDAR/Stereo detection sources (not limited to Velodyne LiDARs, Realsense -cameras, 2D Lidars) - -::: - -### Accessing the Navigation Software Logs - -To check the logs of the Navigation software: - -``` bash -cd ~/cpr_outdoornav_launch/ # The directory with docker-compose.yaml -docker compose logs -f -``` - -Optionally, specify the specific container you would like to view logs for: - -``` bash -cd ~/cpr_outdoornav_launch/ # The directory with docker-compose.yaml -docker compose logs -f onav-autonomy +--- +title: Terminal Interface +sidebar_label: Terminal Interface +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +## Command Line Operation + +By default the OutdoorNav Software, including the Navigation component, +begins automatically when the system is powered on. This section +outlines the commands that can be used by developers who are debugging +the system or who want more precise control for managing the Navigation +component. + +### Connecting to the OutdoorNav Computer {#connecting-to-outdoornav-computer} + +To connect to your UGV, consult its corresponding user manual. + +If you are using a Clearpath Robotics UGV with a seperate OutdoorNav computer, +first `ssh` to the UGV using the details provided in the UGV user +manual. If you have a wired connection to the Clearpath Robotics UGV, +use the following command. If using wifi, you can replace the IP address +with the wifi-assigned IP address or the hostname of the UGV. + +``` bash +ssh administrator@192.168.131.1 +``` + +Then, connect to the OutdoorNav Computer: + +``` bash +ssh administrator@192.168.131.5 +``` + +### Starting the Navigation Software {#starting-outdoornav} + +Begin by connecting to the OutdoorNav Computer as outlined above. + +On UGV startup, all the sensors, the user interface, as well as the +Navigation software are set to start automatically through a Docker +container. You can check the Docker container's status by running +`docker ps` and checking for: + +- onav-web (Docker image containing the web interface) +- onav-web-ros (Docker image containing the ROS web bridge nodes) +- onav-sensors (Docker image that launches the ROS sensor drivers) +- onav-power (Docker image that launches the ROS nodes related to + the power system of the UGV) +- onav-autonomy (Docker image that launches the ROS nodes related + to the autonomy) + +The docker compose file located at `~/cpr_outdoornav_launch/docker-compose.yml` +provides the description for each the docker images that are being generated +on startup. In here, you can find that there are profiles set up as part of the +docker compose structure. They are: + +- ui: starts the onav-web and onav-web-ros containers +- sensors: starts the onav-sensors container +- power: starts the onav-power container +- autonomy: starts the onav-autonomy container +- outdoornav: starts all of the containers +- teleop: start only the ui and sensor related containers (no autonomy) + +If the Docker containers are not running, they can all be started with: + +``` bash +cd ~/cpr_outdoornav_launch/ # directory with docker-compose.yaml +docker compose --profile outdoornav up -d +``` + +### Stopping/Restarting all of OutdoorNav + +Each individual profile can also be brought down. For example to use the UGV without +the OutdoorNav software. The following command brings down OutdoorNav and is persistent +accross reboots/power cylces. + +``` bash +cd ~/cpr_outdoornav_launch/ # directory with docker-compose.yaml +docker compose --profile outdoornav down +``` + +If the OutdoorNav software has been brought down, it can be restarted by running: + +``` bash +cd ~/cpr_outdoornav_launch/ # directory with docker-compose.yaml +docker compose --profile outdoornav up -d +``` + +### Stopping/Restarting the Autonomy + +To use the UGV without the autonomy core of OutdoorNav, use these +commands to stop the nodes and prevent them from automatic startup: + +``` bash +cd ~/cpr_outdoornav_launch/ # directory with docker-compose.yaml +docker compose --profile autonomy down +``` + +The autonomy core can be restarted by running: + +``` bash +cd ~/cpr_outdoornav_launch/ # directory with docker-compose.yaml +docker compose --profile autonomy up -d +``` + +### Stopping/Restarting the Sensors + +To use the UGV without the sensors, use these commands to disable the +nodes and prevent them from automatic startup: + +``` bash +cd ~/cpr_outdoornav_launch/ # directory with docker-compose.yaml +docker compose --profile sensors down +``` + +::: note + +This command will only disable the drivers for the sensors that are started +by the OutdoorNv software. This includes the GNSS units, the Microstrain IMU, +and any LiDAR/Stereo detection sources (not limited to Velodyne LiDARs, Realsense +cameras, 2D Lidars) + +::: + +### Accessing the Navigation Software Logs + +To check the logs of the Navigation software: + +``` bash +cd ~/cpr_outdoornav_launch/ # The directory with docker-compose.yaml +docker compose logs -f +``` + +Optionally, specify the specific container you would like to view logs for: + +``` bash +cd ~/cpr_outdoornav_launch/ # The directory with docker-compose.yaml +docker compose logs -f onav-autonomy ``` \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.9.0/getting_started/tf_validation.mdx b/outdoornav_user_manual_versioned_docs/version-0.9.0/getting_started/tf_validation.mdx index 72327dbc..ab05b15f 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.9.0/getting_started/tf_validation.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.9.0/getting_started/tf_validation.mdx @@ -1,80 +1,80 @@ ---- -title: TF Validation -sidebar_label: TF Validation -sidebar_position: 4 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -:::note - -Sensor transform (TF) validation should only be required if the performance -is noticeably poor, such as when the UGV drifts off of the planned path or -oscillations occur around the path). - -::: - -The coordinate transformation of the two GPS antennas, the IMU, the 2D -and 3D Lidars to the base_link of the UGV should have already been set -prior to receiving the UGV. However, ensure that they are set correctly. - -The ROS coordinate frame base_link, shown in the figure below, is -located at the center of the bottom plate of the UGV. The environment -variables below should be taken with respect to this coordinate frame. -The X axis is in red (and pointing towards the front of the UGV), Y in -green (pointing towards the left of the UGV) and Z in blue (pointing -towards the sky). - -You can check the current value of the environment variables by running -the following on the robot (host) computer (and setting \ -to the names listed in the table below). - -``` bash -printenv | grep -``` - -The environment variables for the position and orientation of each -sensor are provided in the table below. - -_OutdoorNav sensor position and orientation environment variables_ - -| Environment Variable | Function | -|----------------------|---------------------------------------| -| POSITION_GPS_XYZ | [X,Y,Z] position, in meters, of the position GNSS antenna with respect to the base_link coordinate frame. | -| POSITION_GPS_RPY | [Roll,Pitch,Yaw], in radians, of the position GNSS antenna with respect to the base_link coordinate frame. | -| HEADING_GPS_XYZ | [X,Y,Z] position, in meters, of the heading GNSS antenna with respect to the base_link coordinate frame. | -| HEADING_GPS_RPY | [Roll,Pitch,Yaw], in radians, of the heading GNSS antenna with respect to the base_link coordinate frame. | -| MICROSTRAIN_XYZ | [X,Y,Z] position, in meters, of the IMU with respect to the base_link coordinate frame. | -| MICROSTRAIN_RPY | [Roll,Pitch,Yaw], in radians, of the IMU with respect to the base_link coordinate frame. | -| VLP_XYZ | [X,Y,Z] position, in meters, of the 3D Lidar with respect to the base_link coordinate frame. | -| VLP_RPY | [Roll,Pitch,Yaw], in radians, of the 3D Lidar with respect to the base_link coordinate frame. | -| LMS1XX_XYZ | [X,Y,Z] position, in meters, of the 2D Lidar with respect to the base_link coordinate frame. | -| LMS1XX_RPY | [Roll,Pitch,Yaw], in radians, of the 2D Lidar with respect to the base_link coordinate frame. | -| HOKUYO_XYZ | [X,Y,Z] position, in meters, of the 2D Lidar with respect to the base_link coordinate frame. | -| HOKUYO_RPY | [Roll,Pitch,Yaw], in radians, of the 2D Lidar with respect to the base_link coordinate frame. | -| D435_XYZ | [X,Y,Z] position, in meters, of the 2D Lidar with respect to the base_link coordinate frame. | -| D435_RPY | [Roll,Pitch,Yaw], in radians, of the 2D Lidar with respect to the base_link coordinate frame. | - -There may also be 2 of each of these detection sensors. The corresponding environment -variable is prefixed with `REAR_`. - -:::note - -When the printed Y axis on the IMU is pointing towards the front of the -robot (i.e., aligned to X axis of base_link), MICROSTRAIN_RPY = [0, 0, 0]. - -::: - -:::warning - -If you decide to move any of these sensors, you must modify these -variables accordingly in the `/opt/onav/outdoornav_host_setup.sh` file (on the host). - -
-
- -
base_link coordinate frame
-
-
- -::: +--- +title: TF Validation +sidebar_label: TF Validation +sidebar_position: 4 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +:::note + +Sensor transform (TF) validation should only be required if the performance +is noticeably poor, such as when the UGV drifts off of the planned path or +oscillations occur around the path). + +::: + +The coordinate transformation of the two GPS antennas, the IMU, the 2D +and 3D Lidars to the base_link of the UGV should have already been set +prior to receiving the UGV. However, ensure that they are set correctly. + +The ROS coordinate frame base_link, shown in the figure below, is +located at the center of the bottom plate of the UGV. The environment +variables below should be taken with respect to this coordinate frame. +The X axis is in red (and pointing towards the front of the UGV), Y in +green (pointing towards the left of the UGV) and Z in blue (pointing +towards the sky). + +You can check the current value of the environment variables by running +the following on the robot (host) computer (and setting \ +to the names listed in the table below). + +``` bash +printenv | grep +``` + +The environment variables for the position and orientation of each +sensor are provided in the table below. + +_OutdoorNav sensor position and orientation environment variables_ + +| Environment Variable | Function | +|----------------------|---------------------------------------| +| POSITION_GPS_XYZ | [X,Y,Z] position, in meters, of the position GNSS antenna with respect to the base_link coordinate frame. | +| POSITION_GPS_RPY | [Roll,Pitch,Yaw], in radians, of the position GNSS antenna with respect to the base_link coordinate frame. | +| HEADING_GPS_XYZ | [X,Y,Z] position, in meters, of the heading GNSS antenna with respect to the base_link coordinate frame. | +| HEADING_GPS_RPY | [Roll,Pitch,Yaw], in radians, of the heading GNSS antenna with respect to the base_link coordinate frame. | +| MICROSTRAIN_XYZ | [X,Y,Z] position, in meters, of the IMU with respect to the base_link coordinate frame. | +| MICROSTRAIN_RPY | [Roll,Pitch,Yaw], in radians, of the IMU with respect to the base_link coordinate frame. | +| VLP_XYZ | [X,Y,Z] position, in meters, of the 3D Lidar with respect to the base_link coordinate frame. | +| VLP_RPY | [Roll,Pitch,Yaw], in radians, of the 3D Lidar with respect to the base_link coordinate frame. | +| LMS1XX_XYZ | [X,Y,Z] position, in meters, of the 2D Lidar with respect to the base_link coordinate frame. | +| LMS1XX_RPY | [Roll,Pitch,Yaw], in radians, of the 2D Lidar with respect to the base_link coordinate frame. | +| HOKUYO_XYZ | [X,Y,Z] position, in meters, of the 2D Lidar with respect to the base_link coordinate frame. | +| HOKUYO_RPY | [Roll,Pitch,Yaw], in radians, of the 2D Lidar with respect to the base_link coordinate frame. | +| D435_XYZ | [X,Y,Z] position, in meters, of the 2D Lidar with respect to the base_link coordinate frame. | +| D435_RPY | [Roll,Pitch,Yaw], in radians, of the 2D Lidar with respect to the base_link coordinate frame. | + +There may also be 2 of each of these detection sensors. The corresponding environment +variable is prefixed with `REAR_`. + +:::note + +When the printed Y axis on the IMU is pointing towards the front of the +robot (i.e., aligned to X axis of base_link), MICROSTRAIN_RPY = [0, 0, 0]. + +::: + +:::warning + +If you decide to move any of these sensors, you must modify these +variables accordingly in the `/opt/onav/outdoornav_host_setup.sh` file (on the host). + +
+
+ +
base_link coordinate frame
+
+
+ +::: diff --git a/outdoornav_user_manual_versioned_docs/version-0.9.0/index.mdx b/outdoornav_user_manual_versioned_docs/version-0.9.0/index.mdx index 09a63a7f..3d1655b9 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.9.0/index.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.9.0/index.mdx @@ -1,18 +1,18 @@ ---- -title: OutdoorNav User Manual -sidebar_label: OutdoorNav User Manual -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -
-
- -
-
- -OutdoorNav is an outdoor autonomy software platform designed for vehicle developers, -OEMs and robotics researchers. Compatible with Clearpath outdoor mobile platforms -and third-party vehicles, OutdoorNav provides reliable, industry-leading GPS-based +--- +title: OutdoorNav User Manual +sidebar_label: OutdoorNav User Manual +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +
+
+ +
+
+ +OutdoorNav is an outdoor autonomy software platform designed for vehicle developers, +OEMs and robotics researchers. Compatible with Clearpath outdoor mobile platforms +and third-party vehicles, OutdoorNav provides reliable, industry-leading GPS-based navigation for faster, more efficient autonomous vehicle development. \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.9.0/integration_requirements/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.9.0/integration_requirements/_category_.json index e9e0ff1d..adbe22cb 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.9.0/integration_requirements/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.9.0/integration_requirements/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Appendix A: UGV Integration Requirements", - "position": 12 +{ + "label": "Appendix A: UGV Integration Requirements", + "position": 12 } \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.9.0/integration_requirements/hardware_integration_requirements/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.9.0/integration_requirements/hardware_integration_requirements/_category_.json index 75ebaf1b..7950de6b 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.9.0/integration_requirements/hardware_integration_requirements/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.9.0/integration_requirements/hardware_integration_requirements/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Hardware Kit Installation", - "position": 2 -} +{ + "label": "Hardware Kit Installation", + "position": 2 +} diff --git a/outdoornav_user_manual_versioned_docs/version-0.9.0/integration_requirements/integration_overview.mdx b/outdoornav_user_manual_versioned_docs/version-0.9.0/integration_requirements/integration_overview.mdx index 00cf8a07..72d78ae3 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.9.0/integration_requirements/integration_overview.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.9.0/integration_requirements/integration_overview.mdx @@ -1,34 +1,34 @@ ---- -title: "Integration Overview" -sidebar_label: "Integration Overview" -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -The scope of work to transform a non-autonomous UGV into an autonomous -one will vary depending on the exact hardware capabilities and software -interfaces of the UGV. Development work will be required by Clearpath -Robotics, the end user, or a third party developer to bring the UGV into -compliance with the requirements listed in the table below. This may -involve implementing encoders and controllers to provide velocity -control of the UGV and implementing a CAN bus to ROS interface with -kinematic control. The table below provides a general outline of the -requirements; the detailed requirements are covered in the following -sections. - -_Navigation hardware and software general integration scope of work_ - -| \# | Task | Note | -|-----|----------------------------------|---------------------------------| -| 1 | **Convert UGV to drive by wire** | If required; can be a significant electromechanical integration | -| 1.1 | Implement actuated steering and throttle control if necessary | | -| 1.2 | Implement the encoder and controller hardware to provide wheel velocity control and odometry feedback | May require electronic power steering position feedback and controller | -| 2 | **Create a ROS interface** | | -| 2.1 | Commission an OutdoorNav computer running Ubuntu 20.04 and ROS Noetic | | -| 2.2 | Create a ROS interface to the UGV Often interfacing via CAN bus motor controllers and UGV controller | | -| 2.3 | Create a ROS driver including UGV kinematics with ROS-control | Accepts velocity input, commands motor controllers, provides other status feedback | -| 3 | **Install and configure OutdoorNav Hardware and Software** | | -| 3.1 | Install OutdoorNav computer and sensors on the UGV | Provide mechanical mounting, power and ethernet communication to UGV computer | -| 3.2 | Install, update and configure OutdoorNav Software on computer | Configure for sensor mounting locations, UGV kinematics and data topics. Can be done remotely with assistance from Clearpath Robotics Engineering. Approximately 1-2 days. | -| 3.3 | Tune the path planning and following controllers for new UGV | Can be done at a Clearpath Robotics facility. Can often be done at end user facility via remote login from Clearpath Robotics Engineering. Approximately 2-5 days. | +--- +title: "Integration Overview" +sidebar_label: "Integration Overview" +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +The scope of work to transform a non-autonomous UGV into an autonomous +one will vary depending on the exact hardware capabilities and software +interfaces of the UGV. Development work will be required by Clearpath +Robotics, the end user, or a third party developer to bring the UGV into +compliance with the requirements listed in the table below. This may +involve implementing encoders and controllers to provide velocity +control of the UGV and implementing a CAN bus to ROS interface with +kinematic control. The table below provides a general outline of the +requirements; the detailed requirements are covered in the following +sections. + +_Navigation hardware and software general integration scope of work_ + +| \# | Task | Note | +|-----|----------------------------------|---------------------------------| +| 1 | **Convert UGV to drive by wire** | If required; can be a significant electromechanical integration | +| 1.1 | Implement actuated steering and throttle control if necessary | | +| 1.2 | Implement the encoder and controller hardware to provide wheel velocity control and odometry feedback | May require electronic power steering position feedback and controller | +| 2 | **Create a ROS interface** | | +| 2.1 | Commission an OutdoorNav computer running Ubuntu 20.04 and ROS Noetic | | +| 2.2 | Create a ROS interface to the UGV Often interfacing via CAN bus motor controllers and UGV controller | | +| 2.3 | Create a ROS driver including UGV kinematics with ROS-control | Accepts velocity input, commands motor controllers, provides other status feedback | +| 3 | **Install and configure OutdoorNav Hardware and Software** | | +| 3.1 | Install OutdoorNav computer and sensors on the UGV | Provide mechanical mounting, power and ethernet communication to UGV computer | +| 3.2 | Install, update and configure OutdoorNav Software on computer | Configure for sensor mounting locations, UGV kinematics and data topics. Can be done remotely with assistance from Clearpath Robotics Engineering. Approximately 1-2 days. | +| 3.3 | Tune the path planning and following controllers for new UGV | Can be done at a Clearpath Robotics facility. Can often be done at end user facility via remote login from Clearpath Robotics Engineering. Approximately 2-5 days. | diff --git a/outdoornav_user_manual_versioned_docs/version-0.9.0/integration_requirements/interface_control_requirements.mdx b/outdoornav_user_manual_versioned_docs/version-0.9.0/integration_requirements/interface_control_requirements.mdx index a603485b..d9906ed6 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.9.0/integration_requirements/interface_control_requirements.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.9.0/integration_requirements/interface_control_requirements.mdx @@ -1,119 +1,119 @@ ---- -title: "ROS Interface Control Requirements" -sidebar_label: "ROS Interface Control Requirements" -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -## ROS Interface Control Checklist - -Prior to the installation and tuning of Clearpath Robotics (CPR) -OutdoorNav software on your platform (robot computer), CPR requires that the platform's -ROS interface satisfies the conditions listed below. Ensure that all of the requirements -are satisfied for a smooth installation and tuning process. - -![](/img/outdoornav_images/onav_interface_control.png) - -| | Requirement | -|------|------------------------------------------------------------------| -| | The platform computer is on the 192.168.131.xxx subnet (ideally in the range 1-4). | -| | The platform computer has an installation of [ROS 1 Noetic](http://wiki.ros.org/noetic/Installation). | -| | A URDF is supplied to CPR by the customer, in which the `base_link` coordinate frame is defined according to the [REP-105 base-link](https://www.ros.org/reps/rep-0105.html#base-link) ROS standard. | -| | The platform outputs [tf2_msgs/TFMessage](http://docs.ros.org/en/jade/api/tf2_msgs/html/msg/TFMessage.html) messages on the ROS standard `/tf` topic, at a minimum rate of **30 Hz**. | -| | The platform outputs a latched [tf2_msgs/TFMessage](http://docs.ros.org/en/jade/api/tf2_msgs/html/msg/TFMessage.html) message on the ROS standard `/tf_static` topic. This should include any fixed frames of ROS enabled devices/sensors that are available on your platform. | -| | The platform computer has a velocity controller that accepts, as input, [geometry_msgs/Twist](http://docs.ros.org/en/melodic/api/geometry_msgs/html/msg/Twist.html) messages on the ROS standard `/cmd_vel` topic, at a minimum rate of **10 Hz**. | -| | The platform computer has a velocity controller that tracks the input velocity and outputs the resulting platform velocity on the `/platform/cmd_vel` topic. | -| | The platform outputs [nav_msgs/Odometry](http://docs.ros.org/en/noetic/api/nav_msgs/html/msg/Odometry.html) messages on the `/platform/odom` topic, at a minimum rate of **10 Hz**. | -| | The `/platform/odom` topic publishes its data with the header.frame_id = `odom` and the child_frame_id = `base_link`, as per the [REP-105 odom](https://www.ros.org/reps/rep-0105.html#odom) ROS standard. **IMPORTANT**: The platform should however not broadcast the `odom` --> `base_link` transformation since the OutdoorNav software will do so. | -| | If available, the platform odometry output has less than ±5% linear position error. | -| | If available, the platform odometry output has less than ±5% orientation error. | -| | The platform outputs [std_msgs/Bool](http://docs.ros.org/en/noetic/api/std_msgs/html/msg/Bool.html) messages on the `/platform/emergency_stop` topic, at a minimum rate of **5 Hz**, indicating whether or not the platform is in a stopped state. | -| | Perform the validation tests described in [Interface Control Validation Test](#interface-control-validation) section and [record a rosbag](http://wiki.ros.org/rosbag/Commandline#rosbag_record) of all of your topics. The linear and angular velocities of the three trial runs recorded should be noted here:

Trial #1: Linear x: , Angular z:
Trial #2: Linear x: , Angular z:
Trial #3: Linear x: , Angular z:
| - -:::note - -Consult the [Platform API](../api/api_endpoints/platform_api.mdx#topics-published-by-platform) for -detailed information on the published/subscribed platform topics. - -::: - -If the platform is an Ackermann (or double Ackermann) drive vehicle: - -| | Requirement | -|------|------------------------------------------------------------------| -| | A conversion from [geometry_msgs/Twist](http://docs.ros.org/en/melodic/api/geometry_msgs/html/msg/Twist.html) messages to Ackermann inputs is provided. | - -:::note - -Ackermann drive platforms require both steering and throttle inputs to -drive the platform. It is required that our OutdoorNav output `/cmd_vel` -be converted into a message suitable to your platform. An example of an -Ackermann message type can be found -[here](http://wiki.ros.org/teb_local_planner/Tutorials/Planning%20for%20car-like%20robots). -This may satisfy your particular platform, and is only a starting point -on how to do this conversion. - -::: - -If the platform computer is running a version of ROS 2: - -| | Requirement | -|------|------------------------------------------------------------------| -| | The platform computer has a [ROS 2 to ROS 1 bridge](https://github.com/ros2/ros1_bridge) is installed to enable the exchange of messages between the two ROS versions. | - -Signature: Date: - -## Interface Control Validation Test {#interface-control-validation} - -The following test is designed to validate the platforms velocity -controller. It will be required that you command the robot to drive in -three circles, of varying radii, by applying the following command to -the platform. - -``` bash -rostopic pub -r 10 /cmd_vel geometry_msgs/Twist "linear: -x: ___ -y: 0.0 -z: 0.0 -angular: -x: 0.0 -y: 0.0 -z: ___" -``` - -The three trials that we request will vary between platforms depending -on the its maximum linear $(v_\{max\})$ and angular velocities -$(\omega_\{max\})$, minimum linear $(v_\{min\})$ and angular velocities -$(\omega_\{min\})$, as well as limitations due to the minimum allowable -turning radius $(r_\{min\})$. Of these three trials, we would like to see -data within three linear velocity bands, as seen in the table below, -resulting in three different turning radii. For the purpose of these -tests, the following formula can be used when determining the required -linear and angular velocities to apply: $r = v/\omega$. - -| Trial \# | Linear X Bands \[m/s\] | Example Linear X Band \[m/s\] | -| ---------|--------------------------------------------|-------------------------------------| -| 1 | $v_\{min\} \cdot [1.0, 1.5]$ | $[0.5, 0.75]$ | -| 2 | $((v_\{max\} - v_\{min\})/2) \cdot [0.9, 1.1]$ | $[2.025, 2.475]$ | -| 3 | $v_\{max\} \cdot [0.9, 1.0]$ | $[4.5, 5.0]$ | - -As an example, a platform with specs $v \in [0.5, 5.0]$, $r_\{min\} = 3$ -would have linear x velocity bands as listed in the table above. The -trials could then be as outlined in the table below. - -| Trial \# | Linear X \[m/s\] | Angular Z \[rad/s\] |Turn Radius \[m\] | -|-----------|--------------------|---------------------|------------------| -| 1 | 0.75 | 0.25 | 3 | -| 2 | 2.25 | 0.5 | 4.5 | -| 3 | 4.5 | 0.75 | 6 | - -Finally, the test data in the collected ROSbag should include the -following: - -1. `/tf` and `/tf_static` -2. `/platform/cmd_vel` -3. `/platform/odom` -4. `/cmd_vel` -5. `/platform/emergency_stop` (if available) -6. raw NavSatFix data from a GPS unit (if possible). +--- +title: "ROS Interface Control Requirements" +sidebar_label: "ROS Interface Control Requirements" +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +## ROS Interface Control Checklist + +Prior to the installation and tuning of Clearpath Robotics (CPR) +OutdoorNav software on your platform (robot computer), CPR requires that the platform's +ROS interface satisfies the conditions listed below. Ensure that all of the requirements +are satisfied for a smooth installation and tuning process. + +![](/img/outdoornav_images/onav_interface_control.png) + +| | Requirement | +|------|------------------------------------------------------------------| +| | The platform computer is on the 192.168.131.xxx subnet (ideally in the range 1-4). | +| | The platform computer has an installation of [ROS 1 Noetic](http://wiki.ros.org/noetic/Installation). | +| | A URDF is supplied to CPR by the customer, in which the `base_link` coordinate frame is defined according to the [REP-105 base-link](https://www.ros.org/reps/rep-0105.html#base-link) ROS standard. | +| | The platform outputs [tf2_msgs/TFMessage](http://docs.ros.org/en/jade/api/tf2_msgs/html/msg/TFMessage.html) messages on the ROS standard `/tf` topic, at a minimum rate of **30 Hz**. | +| | The platform outputs a latched [tf2_msgs/TFMessage](http://docs.ros.org/en/jade/api/tf2_msgs/html/msg/TFMessage.html) message on the ROS standard `/tf_static` topic. This should include any fixed frames of ROS enabled devices/sensors that are available on your platform. | +| | The platform computer has a velocity controller that accepts, as input, [geometry_msgs/Twist](http://docs.ros.org/en/melodic/api/geometry_msgs/html/msg/Twist.html) messages on the ROS standard `/cmd_vel` topic, at a minimum rate of **10 Hz**. | +| | The platform computer has a velocity controller that tracks the input velocity and outputs the resulting platform velocity on the `/platform/cmd_vel` topic. | +| | The platform outputs [nav_msgs/Odometry](http://docs.ros.org/en/noetic/api/nav_msgs/html/msg/Odometry.html) messages on the `/platform/odom` topic, at a minimum rate of **10 Hz**. | +| | The `/platform/odom` topic publishes its data with the header.frame_id = `odom` and the child_frame_id = `base_link`, as per the [REP-105 odom](https://www.ros.org/reps/rep-0105.html#odom) ROS standard. **IMPORTANT**: The platform should however not broadcast the `odom` --> `base_link` transformation since the OutdoorNav software will do so. | +| | If available, the platform odometry output has less than ±5% linear position error. | +| | If available, the platform odometry output has less than ±5% orientation error. | +| | The platform outputs [std_msgs/Bool](http://docs.ros.org/en/noetic/api/std_msgs/html/msg/Bool.html) messages on the `/platform/emergency_stop` topic, at a minimum rate of **5 Hz**, indicating whether or not the platform is in a stopped state. | +| | Perform the validation tests described in [Interface Control Validation Test](#interface-control-validation) section and [record a rosbag](http://wiki.ros.org/rosbag/Commandline#rosbag_record) of all of your topics. The linear and angular velocities of the three trial runs recorded should be noted here:

Trial #1: Linear x: , Angular z:
Trial #2: Linear x: , Angular z:
Trial #3: Linear x: , Angular z:
| + +:::note + +Consult the [Platform API](../api/api_endpoints/platform_api.mdx#topics-published-by-platform) for +detailed information on the published/subscribed platform topics. + +::: + +If the platform is an Ackermann (or double Ackermann) drive vehicle: + +| | Requirement | +|------|------------------------------------------------------------------| +| | A conversion from [geometry_msgs/Twist](http://docs.ros.org/en/melodic/api/geometry_msgs/html/msg/Twist.html) messages to Ackermann inputs is provided. | + +:::note + +Ackermann drive platforms require both steering and throttle inputs to +drive the platform. It is required that our OutdoorNav output `/cmd_vel` +be converted into a message suitable to your platform. An example of an +Ackermann message type can be found +[here](http://wiki.ros.org/teb_local_planner/Tutorials/Planning%20for%20car-like%20robots). +This may satisfy your particular platform, and is only a starting point +on how to do this conversion. + +::: + +If the platform computer is running a version of ROS 2: + +| | Requirement | +|------|------------------------------------------------------------------| +| | The platform computer has a [ROS 2 to ROS 1 bridge](https://github.com/ros2/ros1_bridge) is installed to enable the exchange of messages between the two ROS versions. | + +Signature: Date: + +## Interface Control Validation Test {#interface-control-validation} + +The following test is designed to validate the platforms velocity +controller. It will be required that you command the robot to drive in +three circles, of varying radii, by applying the following command to +the platform. + +``` bash +rostopic pub -r 10 /cmd_vel geometry_msgs/Twist "linear: +x: ___ +y: 0.0 +z: 0.0 +angular: +x: 0.0 +y: 0.0 +z: ___" +``` + +The three trials that we request will vary between platforms depending +on the its maximum linear $(v_\{max\})$ and angular velocities +$(\omega_\{max\})$, minimum linear $(v_\{min\})$ and angular velocities +$(\omega_\{min\})$, as well as limitations due to the minimum allowable +turning radius $(r_\{min\})$. Of these three trials, we would like to see +data within three linear velocity bands, as seen in the table below, +resulting in three different turning radii. For the purpose of these +tests, the following formula can be used when determining the required +linear and angular velocities to apply: $r = v/\omega$. + +| Trial \# | Linear X Bands \[m/s\] | Example Linear X Band \[m/s\] | +| ---------|--------------------------------------------|-------------------------------------| +| 1 | $v_\{min\} \cdot [1.0, 1.5]$ | $[0.5, 0.75]$ | +| 2 | $((v_\{max\} - v_\{min\})/2) \cdot [0.9, 1.1]$ | $[2.025, 2.475]$ | +| 3 | $v_\{max\} \cdot [0.9, 1.0]$ | $[4.5, 5.0]$ | + +As an example, a platform with specs $v \in [0.5, 5.0]$, $r_\{min\} = 3$ +would have linear x velocity bands as listed in the table above. The +trials could then be as outlined in the table below. + +| Trial \# | Linear X \[m/s\] | Angular Z \[rad/s\] |Turn Radius \[m\] | +|-----------|--------------------|---------------------|------------------| +| 1 | 0.75 | 0.25 | 3 | +| 2 | 2.25 | 0.5 | 4.5 | +| 3 | 4.5 | 0.75 | 6 | + +Finally, the test data in the collected ROSbag should include the +following: + +1. `/tf` and `/tf_static` +2. `/platform/cmd_vel` +3. `/platform/odom` +4. `/cmd_vel` +5. `/platform/emergency_stop` (if available) +6. raw NavSatFix data from a GPS unit (if possible). diff --git a/outdoornav_user_manual_versioned_docs/version-0.9.0/integration_requirements/software_integration_instructions.mdx b/outdoornav_user_manual_versioned_docs/version-0.9.0/integration_requirements/software_integration_instructions.mdx index 41efff44..454f93c9 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.9.0/integration_requirements/software_integration_instructions.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.9.0/integration_requirements/software_integration_instructions.mdx @@ -1,145 +1,145 @@ ---- -title: "Software Integration Instructions" -sidebar_label: "Software Integration Instructions" -sidebar_position: 4 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -import versions from "@site/static/versions.js" - -Prior to installing the OutdoorNav software, ensure that you have completed the relevant [Hardware Kit Checklist](hardware_integration_requirements/hardware_integration_requirements.mdx). If installing on a secondary/backpack/Starter Kit computer, ensure to have also completed the: -- [Interface Control Checklist](interface_control_requirements.mdx) - -All the following instructions, unless otherwise specified, are to be run on the OutdoorNav computer. - -### Clone OutdoorNav Repository {#clone-install-repo} - -The following repository is required to run the instructions in the subsequent sections. - - -{` -cd ~/ -git clone -b ${versions.outdoornav} https://gitlab.clearpathrobotics.com/cpr-outdoornav/cpr_outdoornav_launch.git -`} - - -For remote installations, please contact Clearpath Robotics customer support in order to obtain the relevant information required to proceed. - -### Install Docker {#install-docker} - -``` bash -cd ~/cpr_outdoornav_launch/scripts/ -./install_docker.sh -``` - -### Configure OutdoorNav Sensors {#configure-outdoornav-sensors} - -Prior to configuring the sensors, ensure that you have measured the position (XYZ) and orientation (RPY) of each of your sensors with respect to the `base_link`. See your results from the [Integration Requirements](hardware_integration_requirements/hardware_integration_requirements.mdx). - -``` bash -cd ~/cpr_outdoornav_launch/scripts/ -./configure_outdoornav.sh -``` - -### Finalize Setup {#final-setup} - -The script in the sections below will reboot the computer it is run on. - -##### UGV Computer - -For installations of the OutdoorNav software on the UGV computer (not a secondary or Starter Kit computer), run the following: - -``` bash -cd ~/cpr_outdoornav_launch/scripts -sudo ./setup_computers.sh -``` -##### Secondary or Starter Kit Computer - -Prior to running the script on the secondary or Starter Kit computer, ensure that you have the user and IP of the UGV computer that the secondary/starter kit computer is connected to. Run the following: - -``` bash -cd ~/cpr_outdoornav_launch/scripts -sudo ./setup_computers.sh -b -``` - -### Install OutdoorNav Software {#install-outdoornav} - -``` bash -cd ~/cpr_outdoornav_launch/scripts/ -docker compose --profile outdoornav pull -``` - -:::note -If you are installing the OutdoorNav software on a secondary or Starter Kit computer, you must also complete the [UGV Computer Checklist](platform_computer_checklist.mdx) -::: - -### Configure UGV Footprint {#configure-platform-footprint} - -If the UGV has sensors and/or parts that protrude outside of the UGV body, then a few environment variables will need to be modified to adjust the footprint of the robot. Things that could be extending past the footprint could include but are not limited to: - -- GPS antennae, -- Charging receivers, -- Arms, -- etc... - -Change the environment variables from the Table below, in the following file: - -``` -cd ~/cpr_outdoornav_launch -nano outdoornav_tuning.env -``` - -| Environment Variable | Description | Default | -|-----------------------------|----------------------------------------|---------| -| **FOOTPRINT_OFFSET_POS_X** | Distance from base_link to the furthest edge of any part/sensor at the front of the robot | 0.5 | -| **FOOTPRINT_OFFSET_NEG_X** | Distance from base_link to the furthest edge of any part/sensor at the rear of the robot | -0.5 | -| **FOOTPRINT_OFFSET_POS_Y** | Distance from base_link to the furthest edge of any part/sensor at the left of the robot | 0.35 | -| **FOOTPRINT_OFFSET_NEG_Y** | Distance from base_link to the furthest edge of any part/sensor at the right of the robot | -0.35 | - - - -### Start OutdoorNav - -``` bash -cd ~/cpr_outdoornav_launch/ # directory with docker-compose.yaml -docker compose --profile outdoornav up -d --build -``` - -### Test OutdoorNav Installation - -1. Ping all of the network sensors to ensure proper communication with the UGV or secondary computer. - -2. Check the following topics and make sure there is data being published to them: - -``` bash -rostopic echo -n 1 /platform/odom -rostopic echo -n 1 /platform/cmd_vel - -# IMU 1 (if included) -rostopic echo -n 1 /sensors/imu_0/data - -rostopic echo -n 1 /localization/odom - -# Velodyne/Ouster/LMS1XX/Hokuyo/OutdoorScan (if included) -rostopic echo /sensors/lidar_/pointcloud -rostopic echo /sensors/lidar_/scan - -# Realsense D435 Front (if included) -rostopic echo -n 1 /sensors/stereo_0/pointcloud -rostopic echo -n 1 /sensors/stereo_0/depth/image_rect_raw - -# Realsense D435 Rear (if included) -rostopic echo -n 1 /sensors/stereo_1/pointcloud -rostopic echo -n 1 /sensors/stereo_1/depth/image_rect_raw -``` - -\ will be the number of the sensor as it was loaded into the software. Eg. If you have a VLP and an LMS1XX, then the VLP will be lidar_0, and the LMS1XX will be lidar_1. If we only have an LMS1XX, then it would be lidar_0. Ie. the 3D lidars have a higher "priority" and therefore will be loaded first. - -:::note - -The 2D LiDARs (LMS1XX, Hokuyo) will not have a pointcloud topic. - -::: - -Once installation is complete, you can proceed to [Getting Started](../getting_started/system_setup.mdx) to start using the software. +--- +title: "Software Integration Instructions" +sidebar_label: "Software Integration Instructions" +sidebar_position: 4 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +import versions from "@site/static/versions.js" + +Prior to installing the OutdoorNav software, ensure that you have completed the relevant [Hardware Kit Checklist](hardware_integration_requirements/hardware_integration_requirements.mdx). If installing on a secondary/backpack/Starter Kit computer, ensure to have also completed the: +- [Interface Control Checklist](interface_control_requirements.mdx) + +All the following instructions, unless otherwise specified, are to be run on the OutdoorNav computer. + +### Clone OutdoorNav Repository {#clone-install-repo} + +The following repository is required to run the instructions in the subsequent sections. + + +{` +cd ~/ +git clone -b ${versions.outdoornav} https://gitlab.clearpathrobotics.com/cpr-outdoornav/cpr_outdoornav_launch.git +`} + + +For remote installations, please contact Clearpath Robotics customer support in order to obtain the relevant information required to proceed. + +### Install Docker {#install-docker} + +``` bash +cd ~/cpr_outdoornav_launch/scripts/ +./install_docker.sh +``` + +### Configure OutdoorNav Sensors {#configure-outdoornav-sensors} + +Prior to configuring the sensors, ensure that you have measured the position (XYZ) and orientation (RPY) of each of your sensors with respect to the `base_link`. See your results from the [Integration Requirements](hardware_integration_requirements/hardware_integration_requirements.mdx). + +``` bash +cd ~/cpr_outdoornav_launch/scripts/ +./configure_outdoornav.sh +``` + +### Finalize Setup {#final-setup} + +The script in the sections below will reboot the computer it is run on. + +##### UGV Computer + +For installations of the OutdoorNav software on the UGV computer (not a secondary or Starter Kit computer), run the following: + +``` bash +cd ~/cpr_outdoornav_launch/scripts +sudo ./setup_computers.sh +``` +##### Secondary or Starter Kit Computer + +Prior to running the script on the secondary or Starter Kit computer, ensure that you have the user and IP of the UGV computer that the secondary/starter kit computer is connected to. Run the following: + +``` bash +cd ~/cpr_outdoornav_launch/scripts +sudo ./setup_computers.sh -b +``` + +### Install OutdoorNav Software {#install-outdoornav} + +``` bash +cd ~/cpr_outdoornav_launch/scripts/ +docker compose --profile outdoornav pull +``` + +:::note +If you are installing the OutdoorNav software on a secondary or Starter Kit computer, you must also complete the [UGV Computer Checklist](platform_computer_checklist.mdx) +::: + +### Configure UGV Footprint {#configure-platform-footprint} + +If the UGV has sensors and/or parts that protrude outside of the UGV body, then a few environment variables will need to be modified to adjust the footprint of the robot. Things that could be extending past the footprint could include but are not limited to: + +- GPS antennae, +- Charging receivers, +- Arms, +- etc... + +Change the environment variables from the Table below, in the following file: + +``` +cd ~/cpr_outdoornav_launch +nano outdoornav_tuning.env +``` + +| Environment Variable | Description | Default | +|-----------------------------|----------------------------------------|---------| +| **FOOTPRINT_OFFSET_POS_X** | Distance from base_link to the furthest edge of any part/sensor at the front of the robot | 0.5 | +| **FOOTPRINT_OFFSET_NEG_X** | Distance from base_link to the furthest edge of any part/sensor at the rear of the robot | -0.5 | +| **FOOTPRINT_OFFSET_POS_Y** | Distance from base_link to the furthest edge of any part/sensor at the left of the robot | 0.35 | +| **FOOTPRINT_OFFSET_NEG_Y** | Distance from base_link to the furthest edge of any part/sensor at the right of the robot | -0.35 | + + + +### Start OutdoorNav + +``` bash +cd ~/cpr_outdoornav_launch/ # directory with docker-compose.yaml +docker compose --profile outdoornav up -d --build +``` + +### Test OutdoorNav Installation + +1. Ping all of the network sensors to ensure proper communication with the UGV or secondary computer. + +2. Check the following topics and make sure there is data being published to them: + +``` bash +rostopic echo -n 1 /platform/odom +rostopic echo -n 1 /platform/cmd_vel + +# IMU 1 (if included) +rostopic echo -n 1 /sensors/imu_0/data + +rostopic echo -n 1 /localization/odom + +# Velodyne/Ouster/LMS1XX/Hokuyo/OutdoorScan (if included) +rostopic echo /sensors/lidar_/pointcloud +rostopic echo /sensors/lidar_/scan + +# Realsense D435 Front (if included) +rostopic echo -n 1 /sensors/stereo_0/pointcloud +rostopic echo -n 1 /sensors/stereo_0/depth/image_rect_raw + +# Realsense D435 Rear (if included) +rostopic echo -n 1 /sensors/stereo_1/pointcloud +rostopic echo -n 1 /sensors/stereo_1/depth/image_rect_raw +``` + +\ will be the number of the sensor as it was loaded into the software. Eg. If you have a VLP and an LMS1XX, then the VLP will be lidar_0, and the LMS1XX will be lidar_1. If we only have an LMS1XX, then it would be lidar_0. Ie. the 3D lidars have a higher "priority" and therefore will be loaded first. + +:::note + +The 2D LiDARs (LMS1XX, Hokuyo) will not have a pointcloud topic. + +::: + +Once installation is complete, you can proceed to [Getting Started](../getting_started/system_setup.mdx) to start using the software. diff --git a/outdoornav_user_manual_versioned_docs/version-0.9.0/overview/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.9.0/overview/_category_.json index 663e4088..8414dc7f 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.9.0/overview/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.9.0/overview/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Overview", - "position": 4 -} +{ + "label": "Overview", + "position": 4 +} diff --git a/outdoornav_user_manual_versioned_docs/version-0.9.0/overview/overview_hardware_requirements.mdx b/outdoornav_user_manual_versioned_docs/version-0.9.0/overview/overview_hardware_requirements.mdx index b6abe65e..0883eba8 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.9.0/overview/overview_hardware_requirements.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.9.0/overview/overview_hardware_requirements.mdx @@ -1,44 +1,44 @@ ---- -title: Hardware Requirements -sidebar_label: Hardware Requirements -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -OutdoorNav Software works with compatible UGVs, either from Clearpath -Robotics or third parties. High level requirements for compatible UGVs -are outlined below. Detailed qualification requirements are outlined in -[UGV Integration Requirements](../integration_requirements/integration_overview.mdx). - -## Requirements - -OutdoorNav software does not communicate directly with the UGV motors. -Rather, it publishes target linear and angular velocities packaged in -the [ROS Twist message](http://docs.ros.org/en/noetic/api/geometry_msgs/html/msg/Twist.html) -format and relies on the low level velocity controller of the vehicle to -translate these velocities into correct motor control commands. -Therefore, OutdoorNav Software requires that the UGV must accept the -control commands sent in the [ROS Twist message](http://docs.ros.org/en/noetic/api/geometry_msgs/html/msg/Twist.html) -format. More detailed requirements are outlined in the following table. - -| # | Requirement | Notes | -| - | --------------------------------- | ----------------------------------- | -| 1 | The UGV must be a differential drive or Ackermann drive configuration | Ackerman drive is currently available as a custom implementation; standard in 2023 | -| 2 | The UGV must have velocity control of the wheels and provide kinematic control of the platform | | -| 3 | The UGV shall provide odometry feedback of the wheel direction and velocities and/or steering position | Recommended encoder resolution of 500 ticks per revolution or greater | -| 4 | The UGV should have an emergency stop system with status feedback | | -| 5 | The UGV must accept ROS 1 Twist Commands on the `/cmd_vel` topic | See [API Endpoints](../api/api_endpoints/api_endpoints.mdx); ROS 2 interface available in future release | -| 6 | The UGV must provide odometry and status feedback through ROS topics | See [API Endpoints](../api/api_endpoints/api_endpoints.mdx) | - -## Typical Hardware - -While a variety of different sensors and equipment can be used with -OutdoorNav Software, the following are used most commonly: - -- Clearpath Robotics UGV: Jackal, Husky or Warthog -- GPS System: Dual DURO RTK system or NovAtel Terrastar -- IMU: Microstrain 3DM-GX5-25 -- 3D Laser Sensor: Velodyne VLP-16 -- Tablet Computer: Getac F110 -- Clearpath Long Range Network Station with RTK corrections ("Base Station") +--- +title: Hardware Requirements +sidebar_label: Hardware Requirements +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +OutdoorNav Software works with compatible UGVs, either from Clearpath +Robotics or third parties. High level requirements for compatible UGVs +are outlined below. Detailed qualification requirements are outlined in +[UGV Integration Requirements](../integration_requirements/integration_overview.mdx). + +## Requirements + +OutdoorNav software does not communicate directly with the UGV motors. +Rather, it publishes target linear and angular velocities packaged in +the [ROS Twist message](http://docs.ros.org/en/noetic/api/geometry_msgs/html/msg/Twist.html) +format and relies on the low level velocity controller of the vehicle to +translate these velocities into correct motor control commands. +Therefore, OutdoorNav Software requires that the UGV must accept the +control commands sent in the [ROS Twist message](http://docs.ros.org/en/noetic/api/geometry_msgs/html/msg/Twist.html) +format. More detailed requirements are outlined in the following table. + +| # | Requirement | Notes | +| - | --------------------------------- | ----------------------------------- | +| 1 | The UGV must be a differential drive or Ackermann drive configuration | Ackerman drive is currently available as a custom implementation; standard in 2023 | +| 2 | The UGV must have velocity control of the wheels and provide kinematic control of the platform | | +| 3 | The UGV shall provide odometry feedback of the wheel direction and velocities and/or steering position | Recommended encoder resolution of 500 ticks per revolution or greater | +| 4 | The UGV should have an emergency stop system with status feedback | | +| 5 | The UGV must accept ROS 1 Twist Commands on the `/cmd_vel` topic | See [API Endpoints](../api/api_endpoints/api_endpoints.mdx); ROS 2 interface available in future release | +| 6 | The UGV must provide odometry and status feedback through ROS topics | See [API Endpoints](../api/api_endpoints/api_endpoints.mdx) | + +## Typical Hardware + +While a variety of different sensors and equipment can be used with +OutdoorNav Software, the following are used most commonly: + +- Clearpath Robotics UGV: Jackal, Husky or Warthog +- GPS System: Dual DURO RTK system or NovAtel Terrastar +- IMU: Microstrain 3DM-GX5-25 +- 3D Laser Sensor: Velodyne VLP-16 +- Tablet Computer: Getac F110 +- Clearpath Long Range Network Station with RTK corrections ("Base Station") diff --git a/outdoornav_user_manual_versioned_docs/version-0.9.0/overview/overview_introduction.mdx b/outdoornav_user_manual_versioned_docs/version-0.9.0/overview/overview_introduction.mdx index 83bfa1d6..4f3f1bf7 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.9.0/overview/overview_introduction.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.9.0/overview/overview_introduction.mdx @@ -1,93 +1,93 @@ ---- -title: Introduction -sidebar_label: Introduction -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -## Summary - -OutdoorNav Software is a software package developed by Clearpath -Robotics for autonomous and manual navigation of Unmanned Ground -Vehicles (UGVs) in outdoor environments. - -
-
- -
Web UI Mission Planning View
-
-
- -
-
- -
Web UI Front Camera View
-
-
- -## Compatible Platforms - -While it has been optimized for use with OutdoorNav Hardware from -Clearpath Robotics -([Husky](https://clearpathrobotics.com/husky-unmanned-ground-vehicle-robot/), -[Jackal](https://clearpathrobotics.com/jackal-small-unmanned-ground-vehicle/), -and -[Warthog](https://clearpathrobotics.com/warthog-unmanned-ground-vehicle-robot/)), -it has been designed so that it can be added easily to third-party UGVs. - -
-
- -
Clearpath Robotics Warthog UGV with navigation equipment and operator control unit
-
-
- -## Key Features - -Key features of OutdoorNav Software include: - -- Mission Planning and Autonomous Navigation - - - Robust GPS-based localization with sensor fusion of IMU, LiDAR - and platform odometry - - Autonomous path following via waypoints - - Obstacle Detection and Avoidance: Stop and wait or - autonomously plan a collision-free path around obstacles - without the need to stop - -- Teleoperation - - - Operate the robot remotely using an on-screen or physical - joystick - - Visualize what the robot sees by displaying its network - cameras and LiDAR data - -- Web User Interface (Web UI) - - - Build missions containing sets of paths, with optional task - execution on each path; tasks can be standard tasks (eg. save - camera image) or user provided functions - - View the robot's live position and attitude on the map - - Display robot data such as velocity, signal strength, status - of the motion stop, status of navigation system, and battery charge - - Save and export Missions - -- Application Programming Interface (API) - - - Build your own application and UI by accessing the navigation - API to control the UGV through software or implement fleet - management by accessing the mission API - -- Simulation - - - Begin development of your application prior to purchasing - licenses or commissioning hardware with OutdoorNav software and - the ROS Gazebo simulator - -- Third Party Integration - - - The Web UI and API can be accessed through a network connection; - cloud-based services are available from third parties to - facilitate remote connections and networking to robot hardware - such as Formant.io and Freedom Robotics +--- +title: Introduction +sidebar_label: Introduction +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +## Summary + +OutdoorNav Software is a software package developed by Clearpath +Robotics for autonomous and manual navigation of Unmanned Ground +Vehicles (UGVs) in outdoor environments. + +
+
+ +
Web UI Mission Planning View
+
+
+ +
+
+ +
Web UI Front Camera View
+
+
+ +## Compatible Platforms + +While it has been optimized for use with OutdoorNav Hardware from +Clearpath Robotics +([Husky](https://clearpathrobotics.com/husky-unmanned-ground-vehicle-robot/), +[Jackal](https://clearpathrobotics.com/jackal-small-unmanned-ground-vehicle/), +and +[Warthog](https://clearpathrobotics.com/warthog-unmanned-ground-vehicle-robot/)), +it has been designed so that it can be added easily to third-party UGVs. + +
+
+ +
Clearpath Robotics Warthog UGV with navigation equipment and operator control unit
+
+
+ +## Key Features + +Key features of OutdoorNav Software include: + +- Mission Planning and Autonomous Navigation + + - Robust GPS-based localization with sensor fusion of IMU, LiDAR + and platform odometry + - Autonomous path following via waypoints + - Obstacle Detection and Avoidance: Stop and wait or + autonomously plan a collision-free path around obstacles + without the need to stop + +- Teleoperation + + - Operate the robot remotely using an on-screen or physical + joystick + - Visualize what the robot sees by displaying its network + cameras and LiDAR data + +- Web User Interface (Web UI) + + - Build missions containing sets of paths, with optional task + execution on each path; tasks can be standard tasks (eg. save + camera image) or user provided functions + - View the robot's live position and attitude on the map + - Display robot data such as velocity, signal strength, status + of the motion stop, status of navigation system, and battery charge + - Save and export Missions + +- Application Programming Interface (API) + + - Build your own application and UI by accessing the navigation + API to control the UGV through software or implement fleet + management by accessing the mission API + +- Simulation + + - Begin development of your application prior to purchasing + licenses or commissioning hardware with OutdoorNav software and + the ROS Gazebo simulator + +- Third Party Integration + + - The Web UI and API can be accessed through a network connection; + cloud-based services are available from third parties to + facilitate remote connections and networking to robot hardware + such as Formant.io and Freedom Robotics diff --git a/outdoornav_user_manual_versioned_docs/version-0.9.0/overview/overview_operating_conditions.mdx b/outdoornav_user_manual_versioned_docs/version-0.9.0/overview/overview_operating_conditions.mdx index c02228aa..6e0b17a5 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.9.0/overview/overview_operating_conditions.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.9.0/overview/overview_operating_conditions.mdx @@ -1,177 +1,177 @@ ---- -title: Operating Conditions -sidebar_label: Operating Conditions -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -OutdoorNav Software is designed and tested for use in rugged outdoor -environments. - -## Operating Conditions - -### Terrain - -OutdoorNav Software is compatible with terrains in which the UGV can be -driven manually without excessive slipping. The performance limits will -be a function of the base UGV traction. - -Using Clearpath Robotics Husky, Jackal, and Warthog as a the base UGV, -OutdoorNav Software is suitable for use in the following terrains: - -- asphalt -- concrete -- grass -- snow - -:::note - -Grass should not exceed 30 cm in height if collision avoidance is -enabled. - -::: - -:::note - -Winter/studded tires may be required for proper traction on snow. - -::: - -OutdoorNav Software is currently **not** suitable in the following -terrains: - -- ice -- loose gravel - -:::note - -Support for loose gravel environments is currently being tested and is -expected to be available in late 2023. - -::: - -The terrain capabilities of third-party UGVs will be dependent on a -variety of factors including the vehicle mass, the tire treading, and -motor power. - -### Environment - -OutdoorNav Software is suitable for use in the following environmental -conditions: - -- light rainfall (drizzle) -- light snowfall (powdery snow) - -:::note - -If erratic behavior, such as frequent replanning, is perceived in these -light precipitation conditions, disabling the "continuous planning" -feature may help. - -::: - -OutdoorNav Software is **not** suitable for use in the following -environmental conditions: - -- heavy rainfall -- heavy snowfall - -:::note - -If navigation is required in heavy rain or snow, disabling the collision -avoidance feature will allow the UGV to navigate properly. This should -be done with caution. - -![](/img/outdoornav_images/gps_danger.png) - -::: - -## Performance - -The performance of the system is highly dependent on both the base UGV, -the sensors, the system integration details, and the environment. The -following table provides typical performance metrics for Clearpath -Robotics Jackal and Husky UGVs. - -_System Performance for Husky/Jackal with Typical Sensors_ - -| | Starter Sensor Kit | Standard Sensor Kit (No RTK) | Standard Sensor Kit (RTK) | -|----------------------------------------|-----------------------------------|----------------------------------|----------------------------------| -| GPS sensors | UBlox F9P | 2x SwiftNav Duro | 2x SwiftNav Duro | -| Location accuracy (position & heading) | Less than 60 cm
Less than 10° | Less than 30 cm
Less than 5° | Less than 5 cm
Less than 2° | -| Path tracking accuracy (approximate) | 20 cm | 15 cm | 10 cm | - -## Limitations - -While OutdoorNav Software operates effectively in a range of rugged -outdoor environments, the operator should be aware of the following -limitations and plan accordingly. - -_OutdoorNav System Limitations_ - -| Limitation | Details | -|--------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| RTK accuracy | Localization accuracy for the Standard (RTK) configuration assumes the base station location has been accurately surveyed. | -| Localization accuracy | Localization accuracy is influenced by the quality of GNSS data that is available. Navigating in GNSS denied areas (e.g., under bridges, near tall buildings, etc.) will cause degradation in localization performance. | -| Negative obstacle detection not present | Outdoor Navigation Software does not have negative obstacle detection capability. Your UGV will not detect stairs, cliffs, potholes, depressions or edges and may drive into these obstacles causing harm to people or property. | -| Limited obstacle detection in vertical dimension | The small vertical field of view of 3D LiDARs limits the vertical obstacle detection capability of the OutdoorNav Software. See [Obstacle Detection Limitations](#obstacle-detection-limitations) for details. | -| Low traction may cause UGV to get stuck | Your UGV may navigate itself into a situation where wheels slip or do not make contact with the ground. | -| Rain and snow may affect obstacle detection | Adverse weather conditions may obscure obstacle detection and avoidance data from the VLP-16 LiDAR. Obstacle detection and avoidance may not function in all weather conditions and must be disabled to navigate in heavy snow or rain. | -| Maximum distance between two Viapoints | Distance between any two consecutive Viapoints of a Mission should be less than 20 meters. This will ensure that the global planner can find a valid path to the next Viapoint for the UGV in case there is an obstacle on the path of the UGV. | -| WiFi range limits | The current configurations of the OutdoorNav Software will continue navigation if the WiFi disconnects or goes out of range. The Web UI will reconnect once the WiFi has reconnected but certain functions of the UI may be limited such as the ability to issue a pause/stop commands or sending new missions to the UGV. | -| Wireless motion stop range limits | The UGV will motion stop if the UGV is driven out of range of the wireless motion stop device. | -| RTK GPS limited by WiFi range | If WiFi goes out of range, your UGV will not receive RTK corrections from the Base Station. This can potentially decrease the accuracy of the GPS signal which can subsequently degrade path following performance of your system. | -| Obstacle detection may cause UGV to become stuck | The UGV may stop and become stuck if obstacles are detected and not cleared from its path. If obstacle avoidance is enabled, it may not be able to calculate an acceptable path to the next Viapoint or Goal Point under all circumstances. This will result in the UGV becoming stuck and failing its Mission. | -| Failure to set Datum causes undefined behavior | If the Datum is not set or is not synchronized with the navigation module, the UGV's driven path is undefined and will move unpredictably if Missions are sent in this state. | -| Zones are not currently supported | It is not possible to define “keep-out” or “unsafe” zones that the UGV needs to avoid. Rather, careful use of Waypoint placement by the operator can be used to keep the UGV at a safe distance from unsafe zones. | -| No collision avoidance during teleoperation mode | When operating in Manual Mode (Teleoperation), no collision avoidance is enabled. The operator is responsible for avoiding collisions. | - -### Obstacle Detection Limitations {#obstacle-detection-limitations} - -The maximum collision avoidance range for the OutdoorNav Software is -UGV-dependent and is related to the maximum speed of the UGV. These -ranges for Clearpath Robotics UGVs are: - -- Jackal UGV: 4.5 meters -- Husky UGV: 4.5 meters -- Warthog UGV: 15.0 meters - -While the sensors are able to detect objects at further distances, the -OutdoorNav Software only considers obstacles detected within these -distances for collision avoidance. That is, the UGV will only begin to -decelerate as it detects obstacles within this range. - -The detection itself is also related to the horizontal size -(width/diameter) of the obstacle. The limitations in detecting objects -with small horizontal size are described in the table below. - -_Maximum Reliable Obstacle Detection Distance from UGV, according to Obstacle Horizontal Size_ - -| Object Size (Horizontal) | Starter Sensor Kit | Standard Sensor Kit | -|--------------------------|----------------------------------------------------------------|----------------------------------------------------------------| -| Less than 0.6 cm | No reliable detection | No reliable detection | -| 0.6 to 1.0 cm | 0.8 m | No reliable detection | -| 1.0 to 3.0 cm | 2.0 m | 1.75 m | -| Greater than 3.0 cm | Maximum collision avoidance distance (UGV-specific; see above) | Maximum collision avoidance distance (UGV-specific; see above) | - -Finally, the OutdoorNav Software bounds the obstacle detection to -prevent ground hits and to remove detections above the UGV body. The -following bounds are relative to the ground, assuming a flat surface. -Obstacles that are entirely below the lower bound or entirely above the -upper bound are not considered obstacles and will not be avoided. - -_Obstacle Detection Vertical Bounds_ - -| Vertical Bound | Jackal UGV | Husky UGV | Warthog UGV | -|-----------------------|------------|-----------|-------------| -| Lower Detection Bound | 0.3 m | 0.3 m | 0.3 m | -| Upper Detection Bound | 0.8 m | 1.3 m | 1.8 m | - -:::note - -The vertical detection bounds above are for the Standard Sensor Kit or a -custom sensor configuration that includes a Velodyne. The vertical -detection bounds for the Starter Sensor Kit have yet to be determined. - +--- +title: Operating Conditions +sidebar_label: Operating Conditions +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +OutdoorNav Software is designed and tested for use in rugged outdoor +environments. + +## Operating Conditions + +### Terrain + +OutdoorNav Software is compatible with terrains in which the UGV can be +driven manually without excessive slipping. The performance limits will +be a function of the base UGV traction. + +Using Clearpath Robotics Husky, Jackal, and Warthog as a the base UGV, +OutdoorNav Software is suitable for use in the following terrains: + +- asphalt +- concrete +- grass +- snow + +:::note + +Grass should not exceed 30 cm in height if collision avoidance is +enabled. + +::: + +:::note + +Winter/studded tires may be required for proper traction on snow. + +::: + +OutdoorNav Software is currently **not** suitable in the following +terrains: + +- ice +- loose gravel + +:::note + +Support for loose gravel environments is currently being tested and is +expected to be available in late 2023. + +::: + +The terrain capabilities of third-party UGVs will be dependent on a +variety of factors including the vehicle mass, the tire treading, and +motor power. + +### Environment + +OutdoorNav Software is suitable for use in the following environmental +conditions: + +- light rainfall (drizzle) +- light snowfall (powdery snow) + +:::note + +If erratic behavior, such as frequent replanning, is perceived in these +light precipitation conditions, disabling the "continuous planning" +feature may help. + +::: + +OutdoorNav Software is **not** suitable for use in the following +environmental conditions: + +- heavy rainfall +- heavy snowfall + +:::note + +If navigation is required in heavy rain or snow, disabling the collision +avoidance feature will allow the UGV to navigate properly. This should +be done with caution. + +![](/img/outdoornav_images/gps_danger.png) + +::: + +## Performance + +The performance of the system is highly dependent on both the base UGV, +the sensors, the system integration details, and the environment. The +following table provides typical performance metrics for Clearpath +Robotics Jackal and Husky UGVs. + +_System Performance for Husky/Jackal with Typical Sensors_ + +| | Starter Sensor Kit | Standard Sensor Kit (No RTK) | Standard Sensor Kit (RTK) | +|----------------------------------------|-----------------------------------|----------------------------------|----------------------------------| +| GPS sensors | UBlox F9P | 2x SwiftNav Duro | 2x SwiftNav Duro | +| Location accuracy (position & heading) | Less than 60 cm
Less than 10° | Less than 30 cm
Less than 5° | Less than 5 cm
Less than 2° | +| Path tracking accuracy (approximate) | 20 cm | 15 cm | 10 cm | + +## Limitations + +While OutdoorNav Software operates effectively in a range of rugged +outdoor environments, the operator should be aware of the following +limitations and plan accordingly. + +_OutdoorNav System Limitations_ + +| Limitation | Details | +|--------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| RTK accuracy | Localization accuracy for the Standard (RTK) configuration assumes the base station location has been accurately surveyed. | +| Localization accuracy | Localization accuracy is influenced by the quality of GNSS data that is available. Navigating in GNSS denied areas (e.g., under bridges, near tall buildings, etc.) will cause degradation in localization performance. | +| Negative obstacle detection not present | Outdoor Navigation Software does not have negative obstacle detection capability. Your UGV will not detect stairs, cliffs, potholes, depressions or edges and may drive into these obstacles causing harm to people or property. | +| Limited obstacle detection in vertical dimension | The small vertical field of view of 3D LiDARs limits the vertical obstacle detection capability of the OutdoorNav Software. See [Obstacle Detection Limitations](#obstacle-detection-limitations) for details. | +| Low traction may cause UGV to get stuck | Your UGV may navigate itself into a situation where wheels slip or do not make contact with the ground. | +| Rain and snow may affect obstacle detection | Adverse weather conditions may obscure obstacle detection and avoidance data from the VLP-16 LiDAR. Obstacle detection and avoidance may not function in all weather conditions and must be disabled to navigate in heavy snow or rain. | +| Maximum distance between two Viapoints | Distance between any two consecutive Viapoints of a Mission should be less than 20 meters. This will ensure that the global planner can find a valid path to the next Viapoint for the UGV in case there is an obstacle on the path of the UGV. | +| WiFi range limits | The current configurations of the OutdoorNav Software will continue navigation if the WiFi disconnects or goes out of range. The Web UI will reconnect once the WiFi has reconnected but certain functions of the UI may be limited such as the ability to issue a pause/stop commands or sending new missions to the UGV. | +| Wireless motion stop range limits | The UGV will motion stop if the UGV is driven out of range of the wireless motion stop device. | +| RTK GPS limited by WiFi range | If WiFi goes out of range, your UGV will not receive RTK corrections from the Base Station. This can potentially decrease the accuracy of the GPS signal which can subsequently degrade path following performance of your system. | +| Obstacle detection may cause UGV to become stuck | The UGV may stop and become stuck if obstacles are detected and not cleared from its path. If obstacle avoidance is enabled, it may not be able to calculate an acceptable path to the next Viapoint or Goal Point under all circumstances. This will result in the UGV becoming stuck and failing its Mission. | +| Failure to set Datum causes undefined behavior | If the Datum is not set or is not synchronized with the navigation module, the UGV's driven path is undefined and will move unpredictably if Missions are sent in this state. | +| Zones are not currently supported | It is not possible to define “keep-out” or “unsafe” zones that the UGV needs to avoid. Rather, careful use of Waypoint placement by the operator can be used to keep the UGV at a safe distance from unsafe zones. | +| No collision avoidance during teleoperation mode | When operating in Manual Mode (Teleoperation), no collision avoidance is enabled. The operator is responsible for avoiding collisions. | + +### Obstacle Detection Limitations {#obstacle-detection-limitations} + +The maximum collision avoidance range for the OutdoorNav Software is +UGV-dependent and is related to the maximum speed of the UGV. These +ranges for Clearpath Robotics UGVs are: + +- Jackal UGV: 4.5 meters +- Husky UGV: 4.5 meters +- Warthog UGV: 15.0 meters + +While the sensors are able to detect objects at further distances, the +OutdoorNav Software only considers obstacles detected within these +distances for collision avoidance. That is, the UGV will only begin to +decelerate as it detects obstacles within this range. + +The detection itself is also related to the horizontal size +(width/diameter) of the obstacle. The limitations in detecting objects +with small horizontal size are described in the table below. + +_Maximum Reliable Obstacle Detection Distance from UGV, according to Obstacle Horizontal Size_ + +| Object Size (Horizontal) | Starter Sensor Kit | Standard Sensor Kit | +|--------------------------|----------------------------------------------------------------|----------------------------------------------------------------| +| Less than 0.6 cm | No reliable detection | No reliable detection | +| 0.6 to 1.0 cm | 0.8 m | No reliable detection | +| 1.0 to 3.0 cm | 2.0 m | 1.75 m | +| Greater than 3.0 cm | Maximum collision avoidance distance (UGV-specific; see above) | Maximum collision avoidance distance (UGV-specific; see above) | + +Finally, the OutdoorNav Software bounds the obstacle detection to +prevent ground hits and to remove detections above the UGV body. The +following bounds are relative to the ground, assuming a flat surface. +Obstacles that are entirely below the lower bound or entirely above the +upper bound are not considered obstacles and will not be avoided. + +_Obstacle Detection Vertical Bounds_ + +| Vertical Bound | Jackal UGV | Husky UGV | Warthog UGV | +|-----------------------|------------|-----------|-------------| +| Lower Detection Bound | 0.3 m | 0.3 m | 0.3 m | +| Upper Detection Bound | 0.8 m | 1.3 m | 1.8 m | + +:::note + +The vertical detection bounds above are for the Standard Sensor Kit or a +custom sensor configuration that includes a Velodyne. The vertical +detection bounds for the Starter Sensor Kit have yet to be determined. + ::: \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.9.0/overview/overview_scope.mdx b/outdoornav_user_manual_versioned_docs/version-0.9.0/overview/overview_scope.mdx index ba0092f1..f1a32607 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.9.0/overview/overview_scope.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.9.0/overview/overview_scope.mdx @@ -1,15 +1,15 @@ ---- -title: Scope -sidebar_label: Scope -sidebar_position: 2 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -This documentation focuses on the OutdoorNav Software itself, including -hardware dependencies and integration, but not the specifics of UGV -hardware. For details on compatible Clearpath Robotics UGVs and custom -hardware integrations, contact \ or check -out our [YouTube channel](https://www.youtube.com/channel/UCNPP3C-ZK3mwpG2x89VE-2Q). - - +--- +title: Scope +sidebar_label: Scope +sidebar_position: 2 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +This documentation focuses on the OutdoorNav Software itself, including +hardware dependencies and integration, but not the specifics of UGV +hardware. For details on compatible Clearpath Robotics UGVs and custom +hardware integrations, contact \ or check +out our [YouTube channel](https://www.youtube.com/channel/UCNPP3C-ZK3mwpG2x89VE-2Q). + + diff --git a/outdoornav_user_manual_versioned_docs/version-0.9.0/release_notes.mdx b/outdoornav_user_manual_versioned_docs/version-0.9.0/release_notes.mdx index b0dc295a..877c6585 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.9.0/release_notes.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.9.0/release_notes.mdx @@ -1,222 +1,222 @@ ---- -title: Release Notes -sidebar_label: Release Notes -sidebar_position: 2 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -import Style from '/assets/css/changelog.css'; - -
- -## 0.9.0 - -### New Features - -- Operators can now Schedule Missions to run at specific times (see [Mission Scheduler](features/mission_scheduler.mdx)) -- Added in support for BulletCat12 Microhard WiFi and Cellular connections -- Allow Audio recording as both tasks and manual operations if UGV has Microphones -- Create custom tasks that can be run during missions (see [Custom Tasks](features/custom_tasks.mdx)) -- If installed with PDU, UGV can be set to Low Power mode to better conserve power -- New navigation topics added to ROS Autonomy API (see [API Endpoints](api/api_endpoints/autonomy_api.mdx)): - - /navigation/progress - - /navigation/motion_state - - /navigation/metrics -- Improved precision of docking -- Improved autonomy feedback when something goes wrong in the mission to increase the diagnosability of the error -- Updated Navigation features available to the customer: - - Continuous Replanning renamed to Continuous Planning and is always enabled. - - Constrained Planning is always enabled. Environment Variable to update the path constraint has been modified - (see [Navigation](features/navigation.mdx)) - - Removed Obstacle Avoidance Mode. The UGV will always attempt to avoid obstacles. - - Removed Path Smoothing. This is always enabled. - - Docking feature added for customers who have purchased a dock. - -### Bug Fixes - -- 1324: Allow single Waypoint missions and/or tasks on first waypoint (required for undocking through tasks). -- 1340: Undocking not working through tasks -- 1607: Fixed MovePTZ task failures - -### Known Issues - -- 131: Software upgrade process not documented fully. -- 609: Realsense D435 collision avoidance not fully tuned. -- 751: Wireless icon in UI doesn't work for Ubiquity hardware. -- 1396: Robot gets temporarily stuck at start of mission when near a Waypoint. -- 1546: Robot cannot start mission part-way through if a task is assigned on any Waypoint prior to its location. - -## 0.8.0 - -### New Features - -- Inertial Measurement Units (IMUs) integrated into localization. -- Added localization status topic (see [API Endpoints](api/api_endpoints/autonomy_api.mdx#localizationstatus)). -- Added re-localization service (see [API Endpoints](api/api_endpoints/definitions.mdx#srv-reset-localization)). -- Additional diagnostic information in the status view. -- Docking improvements including: multiple docks, visual representation of docks on map, - local docking/undocking through teleop view. Docking only functional with 2D LiDARs. -- Customization & Tuning Appendix C added. Lists of tuning parameters for navigation - and collision avoidance are now available. As well as, instructions/process on how to - tune UGVs with differential drive dynamics. Instructions for UGVs with Ackermann dynamics - are on their way. - -### Bug Fixes - -- 1134: Display/Hide Datum Point not working. -- 1139: Issues with non-husky platforms. -- 1137: Refreshing page re-enables edit button while mission running. -- 1276: Feedback added for incorrect first Waypoint placement. - -### Known Issues - -- 131: Software upgrade process not documented fully. -- 609: Realsense D435 collision avoidance not fully tuned. -- 751: Wireless icon in UI doesn't work for Ubiquity hardware. -- 1138: Issues with greying out Waypoints in edge cases. -- 1324: Allow single Waypoint missions and/or tasks on first waypoint (required for undocking through tasks). -- 1340: Undocking not working through tasks. - -## 0.7.0 - -### New Features - -- Goal terminology has been removed from the mission generation nomenclature (see - [Definitions](web_user_interface/ui_autonomous_mode.mdx#definitions)) - Users can now add tasks, apply final headings, and set navigation tolerances - to any Waypoint in a Mission. -- Drag and Drop of Waypoints now available in Edit Mode. -- New Waypoints can be inserted between existing Waypoints in a Mission. -- Mission API now available to create/edit/load missions, waypoints and tasks. -- Mission execution via mission ID is now available. -- The base station location is now displayed in the UI after carrying out an automated survey. -- New coloring scheme for GNSS status icons to provide more accurate information. - -### Bug Fixes - -- 996: Axis camera missing ptz_state - -### Known Issues - -- 131: Software upgrade process not documented fully. -- 609: Realsense D435 collision avoidance not fully tuned. -- 751: Wireless icon in UI doesn't work for Ubiquity hardware. -- 1134: Display/Hide Datum point not working. -- 1137: Refreshing page re-enables edit button while mission running. -- 1138: Issues with greying out Waypoints in edge cases. - -## 0.6.0 - -### New Features - -- OutdoorNav ROS API updated. API now divided into Platform and - Autonomy sections. See [API Overview](api/api_overview.mdx) - for more details. -- Simulation environment created with charge dock, base station and - camera plugins. -- Added deviation path visualization to UI when constrained replanning - is enabled. -- Modified goalpoint icons to reflect tasks assigned to them. -- Added the ability to record rosbags from UI. -- Added GPS signal strength to status page. -- Added improvements to PTZ controls (cosmetic changes, ability to - disable zoom, added a reset mark). -- User can set map source from OpenStreet, MapBox, Bing Maps, or - custom map tiles through UI. - -### Bug Fixes - -- 632: Prevent users from changing mission while a mission is running. -- 661: Removed map view when no map is provided in default-state.json. - file. -- 712: Fixed front end hanging when user opens menu from any view - other than main view. -- 716: Removed connecting lines from disabled goals. - -### Known Issues - -- 131: Software upgrade process not documented fully. -- 609: Realsense D435 collision avoidance not fully tuned. -- 751: Wireless icon in UI doesn't work for Ubiquity hardware. -- 756: Waypoints stop turning grey when they are hit if a waypoint is - skipped. - -## 0.5.0 - -### New Features - -- Sensor Kit Options: Starter, Standard, Backpack. -- New localization module. -- Added support for UBlox F9K and F9P GNSS receivers in the - localization module. -- Added support for either single or dual Swiftnav Duro/Piksi GNSS - receiver(s) in the localization module. -- Added support for Realsense D435 camera in collision avoidance - module. -- New/updated user modifiable environment variables for sensor and - navigation tuning. -- Added a Virtual Guided tour of the application for first time users. -- Added StreetView and Bing map tiles (to existing MapBox tile). -- Allow users to specify custom map tile source. -- Added cosmetic changes to traversed waypoints as well as a robot. - status icon with ROS topic health information. - -### Bug Fixes - -- 253: Replace default camera image for camera views when stream is - unavailable. -- 281: Fixed navigation latched in a PAUSE state. -- 574: Fixed map settings page to not rerender when robots position - changes. - -### Known Issues - -- 131: Software upgrade process not documented fully. -- 609: Realsense D435 collision avoidance not fully tuned. - -## 0.4.0 - -### New Features - -- Improved wireless charger docking workflow and added ROS Noetic - docking support. -- Added option to record videos from cameras. -- Improved Docker setup to allow concurrent installation with - IndoorNav. -- Added initial support for integration with - [Formant](https://formant.io/). -- Added Docker installation support for Jackal and Warthog robots. - -### Bug Fixes - -- 480: Added rate limiter for continuous planner. -- 490: Fixed base station survey pop up to better reflect survey time. - -### Known Issues - -- 131: Software upgrade process not documented fully. - -## 0.3.0 - -### New Features - -- Upgraded from ROS Melodic to ROS Noetic. -- Published initial performance metrics. -- Updated system architecture to work in Docker containers. - -### Bug Fixes - -- 266: Allowed map offsets to be set more than once without needing to - reset them back to zero. -- 365: Updated costmap to handle large stop distances properly. -- 377: Fixed handling of goal tolerances of 0.02m or less. -- 389: Fixed issue with goal being skipped in some cases where final - heading was specified. - -### Known Issues - -- 131: Software upgrade process not documented fully. -- 150: Docking not yet implemented in Noetic. - +--- +title: Release Notes +sidebar_label: Release Notes +sidebar_position: 2 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +import Style from '/assets/css/changelog.css'; + +
+ +## 0.9.0 + +### New Features + +- Operators can now Schedule Missions to run at specific times (see [Mission Scheduler](features/mission_scheduler.mdx)) +- Added in support for BulletCat12 Microhard WiFi and Cellular connections +- Allow Audio recording as both tasks and manual operations if UGV has Microphones +- Create custom tasks that can be run during missions (see [Custom Tasks](features/custom_tasks.mdx)) +- If installed with PDU, UGV can be set to Low Power mode to better conserve power +- New navigation topics added to ROS Autonomy API (see [API Endpoints](api/api_endpoints/autonomy_api.mdx)): + - /navigation/progress + - /navigation/motion_state + - /navigation/metrics +- Improved precision of docking +- Improved autonomy feedback when something goes wrong in the mission to increase the diagnosability of the error +- Updated Navigation features available to the customer: + - Continuous Replanning renamed to Continuous Planning and is always enabled. + - Constrained Planning is always enabled. Environment Variable to update the path constraint has been modified + (see [Navigation](features/navigation.mdx)) + - Removed Obstacle Avoidance Mode. The UGV will always attempt to avoid obstacles. + - Removed Path Smoothing. This is always enabled. + - Docking feature added for customers who have purchased a dock. + +### Bug Fixes + +- 1324: Allow single Waypoint missions and/or tasks on first waypoint (required for undocking through tasks). +- 1340: Undocking not working through tasks +- 1607: Fixed MovePTZ task failures + +### Known Issues + +- 131: Software upgrade process not documented fully. +- 609: Realsense D435 collision avoidance not fully tuned. +- 751: Wireless icon in UI doesn't work for Ubiquity hardware. +- 1396: Robot gets temporarily stuck at start of mission when near a Waypoint. +- 1546: Robot cannot start mission part-way through if a task is assigned on any Waypoint prior to its location. + +## 0.8.0 + +### New Features + +- Inertial Measurement Units (IMUs) integrated into localization. +- Added localization status topic (see [API Endpoints](api/api_endpoints/autonomy_api.mdx#localizationstatus)). +- Added re-localization service (see [API Endpoints](api/api_endpoints/definitions.mdx#srv-reset-localization)). +- Additional diagnostic information in the status view. +- Docking improvements including: multiple docks, visual representation of docks on map, + local docking/undocking through teleop view. Docking only functional with 2D LiDARs. +- Customization & Tuning Appendix C added. Lists of tuning parameters for navigation + and collision avoidance are now available. As well as, instructions/process on how to + tune UGVs with differential drive dynamics. Instructions for UGVs with Ackermann dynamics + are on their way. + +### Bug Fixes + +- 1134: Display/Hide Datum Point not working. +- 1139: Issues with non-husky platforms. +- 1137: Refreshing page re-enables edit button while mission running. +- 1276: Feedback added for incorrect first Waypoint placement. + +### Known Issues + +- 131: Software upgrade process not documented fully. +- 609: Realsense D435 collision avoidance not fully tuned. +- 751: Wireless icon in UI doesn't work for Ubiquity hardware. +- 1138: Issues with greying out Waypoints in edge cases. +- 1324: Allow single Waypoint missions and/or tasks on first waypoint (required for undocking through tasks). +- 1340: Undocking not working through tasks. + +## 0.7.0 + +### New Features + +- Goal terminology has been removed from the mission generation nomenclature (see + [Definitions](web_user_interface/ui_autonomous_mode.mdx#definitions)) + Users can now add tasks, apply final headings, and set navigation tolerances + to any Waypoint in a Mission. +- Drag and Drop of Waypoints now available in Edit Mode. +- New Waypoints can be inserted between existing Waypoints in a Mission. +- Mission API now available to create/edit/load missions, waypoints and tasks. +- Mission execution via mission ID is now available. +- The base station location is now displayed in the UI after carrying out an automated survey. +- New coloring scheme for GNSS status icons to provide more accurate information. + +### Bug Fixes + +- 996: Axis camera missing ptz_state + +### Known Issues + +- 131: Software upgrade process not documented fully. +- 609: Realsense D435 collision avoidance not fully tuned. +- 751: Wireless icon in UI doesn't work for Ubiquity hardware. +- 1134: Display/Hide Datum point not working. +- 1137: Refreshing page re-enables edit button while mission running. +- 1138: Issues with greying out Waypoints in edge cases. + +## 0.6.0 + +### New Features + +- OutdoorNav ROS API updated. API now divided into Platform and + Autonomy sections. See [API Overview](api/api_overview.mdx) + for more details. +- Simulation environment created with charge dock, base station and + camera plugins. +- Added deviation path visualization to UI when constrained replanning + is enabled. +- Modified goalpoint icons to reflect tasks assigned to them. +- Added the ability to record rosbags from UI. +- Added GPS signal strength to status page. +- Added improvements to PTZ controls (cosmetic changes, ability to + disable zoom, added a reset mark). +- User can set map source from OpenStreet, MapBox, Bing Maps, or + custom map tiles through UI. + +### Bug Fixes + +- 632: Prevent users from changing mission while a mission is running. +- 661: Removed map view when no map is provided in default-state.json. + file. +- 712: Fixed front end hanging when user opens menu from any view + other than main view. +- 716: Removed connecting lines from disabled goals. + +### Known Issues + +- 131: Software upgrade process not documented fully. +- 609: Realsense D435 collision avoidance not fully tuned. +- 751: Wireless icon in UI doesn't work for Ubiquity hardware. +- 756: Waypoints stop turning grey when they are hit if a waypoint is + skipped. + +## 0.5.0 + +### New Features + +- Sensor Kit Options: Starter, Standard, Backpack. +- New localization module. +- Added support for UBlox F9K and F9P GNSS receivers in the + localization module. +- Added support for either single or dual Swiftnav Duro/Piksi GNSS + receiver(s) in the localization module. +- Added support for Realsense D435 camera in collision avoidance + module. +- New/updated user modifiable environment variables for sensor and + navigation tuning. +- Added a Virtual Guided tour of the application for first time users. +- Added StreetView and Bing map tiles (to existing MapBox tile). +- Allow users to specify custom map tile source. +- Added cosmetic changes to traversed waypoints as well as a robot. + status icon with ROS topic health information. + +### Bug Fixes + +- 253: Replace default camera image for camera views when stream is + unavailable. +- 281: Fixed navigation latched in a PAUSE state. +- 574: Fixed map settings page to not rerender when robots position + changes. + +### Known Issues + +- 131: Software upgrade process not documented fully. +- 609: Realsense D435 collision avoidance not fully tuned. + +## 0.4.0 + +### New Features + +- Improved wireless charger docking workflow and added ROS Noetic + docking support. +- Added option to record videos from cameras. +- Improved Docker setup to allow concurrent installation with + IndoorNav. +- Added initial support for integration with + [Formant](https://formant.io/). +- Added Docker installation support for Jackal and Warthog robots. + +### Bug Fixes + +- 480: Added rate limiter for continuous planner. +- 490: Fixed base station survey pop up to better reflect survey time. + +### Known Issues + +- 131: Software upgrade process not documented fully. + +## 0.3.0 + +### New Features + +- Upgraded from ROS Melodic to ROS Noetic. +- Published initial performance metrics. +- Updated system architecture to work in Docker containers. + +### Bug Fixes + +- 266: Allowed map offsets to be set more than once without needing to + reset them back to zero. +- 365: Updated costmap to handle large stop distances properly. +- 377: Fixed handling of goal tolerances of 0.02m or less. +- 389: Fixed issue with goal being skipped in some cases where final + heading was specified. + +### Known Issues + +- 131: Software upgrade process not documented fully. +- 150: Docking not yet implemented in Noetic. +
\ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.9.0/safety.mdx b/outdoornav_user_manual_versioned_docs/version-0.9.0/safety.mdx index ea70a51b..ba0e8ddf 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.9.0/safety.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.9.0/safety.mdx @@ -1,144 +1,144 @@ ---- -title: Safety -sidebar_label: Safety -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -## Important Safety Information - -The use of Unmanned Ground Vehicles (UGVs) can result in unexpected and -dangerous behavior. Although Clearpath Robotics endeavors to create safe -and reliable software and systems, autonomous outdoor UGVs should not be -considered safe for unsupervised use around humans or other obstacles. -No level of safety and reliability of software and non-safety rated -hardware components is guaranteed. - -Clearpath strongly recommends that users carry out a risk assessment -related to their application and deployment of autonomous UGVs. The -ISO-12100 standard [Risk assessment and risk reduction](https://www.iso.org/standard/51528.html) provides guidance on -performing risk assessments. - -Functional safety in robotics is often achieved through the use of -safety related parts and control systems to minimize risks such as -safety LiDARs for obstacle detection. These hardware components must be -designed into the UGV hardware and can be tightly integrated with -navigation software. Clearpath Robotics recommends that this process be -undertaken after the product or process has been fully defined. It can -be a significant design effort. - -## Safety Notice Levels - -For Clearpath Robotics hardware and software, the risk level is captured -using the following types of labels. - -![](/img/outdoornav_images/safety_information.png) - -## General Hazard Labels - -Review the following to learn more about the labels that may be used on -Clearpath Robotics products. Hazards can also apply to attachments and -accessories used in conjunction with a Clearpath Robotics product. UGVs -from other providers may present additional hazards and risks. - -_General Hazards_ - -| Label | Label Title | Label Description | -|--------------------------------------------------------------------------------------|----------------------|------------------------------------------| -|
| Automatic Motion Hazard | Clearpath Robotics UGVs may begin moving suddenly, either autonomously or when being driven manually. Always be aware of Clearpath Robotics products and their potential for movement. | -|
| Crushing Risk | Objects or personnel can be crushed between the Clearpath Robotics UGV and another object. Keep hands and other objects clear of crush points at all times. Keep clear of all docking Clearpath Robotics UGVs. | -|
| Electrical Shock Risk | Clearpath Robotics UGVs contain circuitry and batteries that may cause electrical shock if not properly insulated. | -|
| Entanglement Risk | Clearpath Robotics UGVs as well as their cameras can lead to entanglement of hair or dangling materials during their rotation. Keep hair and dangling materials away from Clearpath Robotics UGVs during motion. | -|
| Environmental Hazard | Clearpath Robotics UGVs contain batteries and materials that may require special disposal methods. Consult local regulations. | -|
| Falling Object Risk | Beware of objects that may have shifted in any Clearpath Robotics UGV crate as they pose a risk of falling when opened. | -|
| High Surface Temperature Risk | UGV computer heat sinks and UGV motors can become extremely hot during operation. | -|
| Impact Risk | Clearpath Robotics UGVs travelling through a facility can potentially impact objects and personnel. Keep clear of all docking Clearpath Robotics UGVs. | -|
| Laser Radiation Risk | Clearpath Robotics UGVs may use Class 1 laser products. These provide no hazard during normal use, however it is not recommended to stare directly into the beam(s). | -|
| Material Hazard - Lithium | Lithium UGV batteries contain harmful material. Always use proper handling procedures when handling UGV batteries. | -|
| Manual Load Lifting Risk | Always use ergonomic techniques when manually lifting loads. | -|
| Pinching Risk | Keep hands and other objects clear of pinch points at all times. Keep clear of all docking Clearpath Robotics UGVs. | -|
| Radio Frequency Risk | Clearpath Robotics UGVs and/or accessories may use radio frequency (RF) radiating antennas. These provide no hazard during normal use, however prolonged exposure around the antenna is not recommended. | -|
| Tripping Hazard | Clearpath Robotics products may pose a tripping hazard. | - -## Safety Awareness - -Personnel present during the operation of an Unmanned Ground Vehicle -(UGV) need to be made aware or be accompanied by personnel who are -familiar with the specific risks and hazards associated with autonomous -mobile robots (AMR). The following checklist identifies basic topics -that should be addressed by site-specific worker and visitor safety -orientation training. - -
- -
- -- Proper PPE must be worn, including safety footwear (ie. steel toe). -- Crossing into the path of a moving UGV should be avoided, as well as - placing or throwing obstacles into the path of a moving UGV. - -
- -
- -- Be aware that a UGV can be anywhere in the operating area of the - facility at any time, and may pose a tripping hazard even when not - in motion. -- Personnel need to be aware of the UGV docking and charging areas, - where detection fields are reduced. -- Personnel should be aware that Clearpath Robotics UGVs LiDAR safety - scanners use a class 1 laser and high intensity LED. -- Personnel should keep all loose clothing and body parts away from - UGVs, accessories, attachments, and payloads, while they are in - autonomous operation. Using an Emergency Stop button is the only - acceptable manner of interacting with a Clearpath Robotics UGV or - attachment while it is being operated autonomously. - -In addition to the preceding basic items for all workers and visitors, -the following should be considered for facility personnel, including -drivers of other UGVs: - -- When required to move a product manually, personnel must ensure it - is in an Emergency Stop state or shut down completely and should not - push manually for prolonged periods. -- Alert personnel that while operating a Clearpath Robotics UGV - outside of the Autonomy State, they are solely responsible for - obstacle and collision avoidance. -- Maintenance of a Clearpath UGV not outlined in either this document - or the operations and maintenance manual can only be performed by a - Clearpath Robotics Authorized Personnel. - -To reduce the risk of harming people or damaging properties, a trained -operator must monitor the behavior of the UGV under autonomous -navigation mode at all times. The operator should use the wireless -emergency stop device to immediately avert any possible damaging or -dangerous behavior from the UGV. Failure in proper use of the software -might result in collision of the UGV into objects. - -- The minimum height for detecting obstacles under ideal operation - conditions (flat ground, no snow/rain/fog, normal operation of the - LiDAR, etc) when using the standard Clearpath Robotics OutdoorNav - Hardware package on a Husky is typically 0.2 meters high at 2.3 - meters distance away from the UGV. Your UGV may differ. Ensure that - low-height obstacles are removed from the potential path of the UGV - prior to operation. -- OutdoorNav Software does not have negative obstacle detection - capability. This means that your UGV will not detect stairs, cliffs - or edges and may drive off these obstacles causing harm to people or - properties as well as potentially damage the UGV. -- Adverse weather conditions may obscure obstacle detection and - avoidance data from the VLP-16 LiDAR. Obstacle detection and - avoidance may not function properly in snow, rain or fog. -- The current configurations of the OutdoorNav Software will continue - navigation if the WiFi disconnects or goes out of range. The Web UI - will reconnect once the WiFi has reconnected but certain functions - of the Web UI may be limited such as the ability to issue a stop - command or send new missions to the UGV. -- If connection of the UGV to the base station is lost (e.g., WiFi - goes out of range, low battery level, etc), UGV will not receive RTK - corrections from the base station. This can potentially decrease the - accuracy of the GPS signal which can subsequently degrade path - following performance of your system. -- Obstacle detection and avoidance is disabled during the docking and - undocking operations. Keep this area clear of people and objects. +--- +title: Safety +sidebar_label: Safety +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +## Important Safety Information + +The use of Unmanned Ground Vehicles (UGVs) can result in unexpected and +dangerous behavior. Although Clearpath Robotics endeavors to create safe +and reliable software and systems, autonomous outdoor UGVs should not be +considered safe for unsupervised use around humans or other obstacles. +No level of safety and reliability of software and non-safety rated +hardware components is guaranteed. + +Clearpath strongly recommends that users carry out a risk assessment +related to their application and deployment of autonomous UGVs. The +ISO-12100 standard [Risk assessment and risk reduction](https://www.iso.org/standard/51528.html) provides guidance on +performing risk assessments. + +Functional safety in robotics is often achieved through the use of +safety related parts and control systems to minimize risks such as +safety LiDARs for obstacle detection. These hardware components must be +designed into the UGV hardware and can be tightly integrated with +navigation software. Clearpath Robotics recommends that this process be +undertaken after the product or process has been fully defined. It can +be a significant design effort. + +## Safety Notice Levels + +For Clearpath Robotics hardware and software, the risk level is captured +using the following types of labels. + +![](/img/outdoornav_images/safety_information.png) + +## General Hazard Labels + +Review the following to learn more about the labels that may be used on +Clearpath Robotics products. Hazards can also apply to attachments and +accessories used in conjunction with a Clearpath Robotics product. UGVs +from other providers may present additional hazards and risks. + +_General Hazards_ + +| Label | Label Title | Label Description | +|--------------------------------------------------------------------------------------|----------------------|------------------------------------------| +|
| Automatic Motion Hazard | Clearpath Robotics UGVs may begin moving suddenly, either autonomously or when being driven manually. Always be aware of Clearpath Robotics products and their potential for movement. | +|
| Crushing Risk | Objects or personnel can be crushed between the Clearpath Robotics UGV and another object. Keep hands and other objects clear of crush points at all times. Keep clear of all docking Clearpath Robotics UGVs. | +|
| Electrical Shock Risk | Clearpath Robotics UGVs contain circuitry and batteries that may cause electrical shock if not properly insulated. | +|
| Entanglement Risk | Clearpath Robotics UGVs as well as their cameras can lead to entanglement of hair or dangling materials during their rotation. Keep hair and dangling materials away from Clearpath Robotics UGVs during motion. | +|
| Environmental Hazard | Clearpath Robotics UGVs contain batteries and materials that may require special disposal methods. Consult local regulations. | +|
| Falling Object Risk | Beware of objects that may have shifted in any Clearpath Robotics UGV crate as they pose a risk of falling when opened. | +|
| High Surface Temperature Risk | UGV computer heat sinks and UGV motors can become extremely hot during operation. | +|
| Impact Risk | Clearpath Robotics UGVs travelling through a facility can potentially impact objects and personnel. Keep clear of all docking Clearpath Robotics UGVs. | +|
| Laser Radiation Risk | Clearpath Robotics UGVs may use Class 1 laser products. These provide no hazard during normal use, however it is not recommended to stare directly into the beam(s). | +|
| Material Hazard - Lithium | Lithium UGV batteries contain harmful material. Always use proper handling procedures when handling UGV batteries. | +|
| Manual Load Lifting Risk | Always use ergonomic techniques when manually lifting loads. | +|
| Pinching Risk | Keep hands and other objects clear of pinch points at all times. Keep clear of all docking Clearpath Robotics UGVs. | +|
| Radio Frequency Risk | Clearpath Robotics UGVs and/or accessories may use radio frequency (RF) radiating antennas. These provide no hazard during normal use, however prolonged exposure around the antenna is not recommended. | +|
| Tripping Hazard | Clearpath Robotics products may pose a tripping hazard. | + +## Safety Awareness + +Personnel present during the operation of an Unmanned Ground Vehicle +(UGV) need to be made aware or be accompanied by personnel who are +familiar with the specific risks and hazards associated with autonomous +mobile robots (AMR). The following checklist identifies basic topics +that should be addressed by site-specific worker and visitor safety +orientation training. + +
+ +
+ +- Proper PPE must be worn, including safety footwear (ie. steel toe). +- Crossing into the path of a moving UGV should be avoided, as well as + placing or throwing obstacles into the path of a moving UGV. + +
+ +
+ +- Be aware that a UGV can be anywhere in the operating area of the + facility at any time, and may pose a tripping hazard even when not + in motion. +- Personnel need to be aware of the UGV docking and charging areas, + where detection fields are reduced. +- Personnel should be aware that Clearpath Robotics UGVs LiDAR safety + scanners use a class 1 laser and high intensity LED. +- Personnel should keep all loose clothing and body parts away from + UGVs, accessories, attachments, and payloads, while they are in + autonomous operation. Using an Emergency Stop button is the only + acceptable manner of interacting with a Clearpath Robotics UGV or + attachment while it is being operated autonomously. + +In addition to the preceding basic items for all workers and visitors, +the following should be considered for facility personnel, including +drivers of other UGVs: + +- When required to move a product manually, personnel must ensure it + is in an Emergency Stop state or shut down completely and should not + push manually for prolonged periods. +- Alert personnel that while operating a Clearpath Robotics UGV + outside of the Autonomy State, they are solely responsible for + obstacle and collision avoidance. +- Maintenance of a Clearpath UGV not outlined in either this document + or the operations and maintenance manual can only be performed by a + Clearpath Robotics Authorized Personnel. + +To reduce the risk of harming people or damaging properties, a trained +operator must monitor the behavior of the UGV under autonomous +navigation mode at all times. The operator should use the wireless +emergency stop device to immediately avert any possible damaging or +dangerous behavior from the UGV. Failure in proper use of the software +might result in collision of the UGV into objects. + +- The minimum height for detecting obstacles under ideal operation + conditions (flat ground, no snow/rain/fog, normal operation of the + LiDAR, etc) when using the standard Clearpath Robotics OutdoorNav + Hardware package on a Husky is typically 0.2 meters high at 2.3 + meters distance away from the UGV. Your UGV may differ. Ensure that + low-height obstacles are removed from the potential path of the UGV + prior to operation. +- OutdoorNav Software does not have negative obstacle detection + capability. This means that your UGV will not detect stairs, cliffs + or edges and may drive off these obstacles causing harm to people or + properties as well as potentially damage the UGV. +- Adverse weather conditions may obscure obstacle detection and + avoidance data from the VLP-16 LiDAR. Obstacle detection and + avoidance may not function properly in snow, rain or fog. +- The current configurations of the OutdoorNav Software will continue + navigation if the WiFi disconnects or goes out of range. The Web UI + will reconnect once the WiFi has reconnected but certain functions + of the Web UI may be limited such as the ability to issue a stop + command or send new missions to the UGV. +- If connection of the UGV to the base station is lost (e.g., WiFi + goes out of range, low battery level, etc), UGV will not receive RTK + corrections from the base station. This can potentially decrease the + accuracy of the GPS signal which can subsequently degrade path + following performance of your system. +- Obstacle detection and avoidance is disabled during the docking and + undocking operations. Keep this area clear of people and objects. diff --git a/outdoornav_user_manual_versioned_docs/version-0.9.0/simulation.mdx b/outdoornav_user_manual_versioned_docs/version-0.9.0/simulation.mdx index 44cff5f7..86043ef7 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.9.0/simulation.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.9.0/simulation.mdx @@ -1,20 +1,20 @@ ---- -title: Simulation -sidebar_label: Simulation -sidebar_position: 9 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -Simulation with OutdoorNav Software can be useful in several ways. - -- It provides an easy (and low cost!) way of evaluating the main - features in OutdoorNav Software prior to purchasing. -- It allows missions to be planned, executed, and refined in a - repeatable way prior to deployment on UGV hardware. This can be - particularly helpful when integrating OutdoorNav into a larger - software solution, such as a fleet manager. - -At present, OutdoorNav Software simulation is restricted to internal -Clearpath Robotics development and select partners, but is planned for +--- +title: Simulation +sidebar_label: Simulation +sidebar_position: 9 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +Simulation with OutdoorNav Software can be useful in several ways. + +- It provides an easy (and low cost!) way of evaluating the main + features in OutdoorNav Software prior to purchasing. +- It allows missions to be planned, executed, and refined in a + repeatable way prior to deployment on UGV hardware. This can be + particularly helpful when integrating OutdoorNav into a larger + software solution, such as a fleet manager. + +At present, OutdoorNav Software simulation is restricted to internal +Clearpath Robotics development and select partners, but is planned for full deployment. Check back soon for further details. \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.9.0/support.mdx b/outdoornav_user_manual_versioned_docs/version-0.9.0/support.mdx index 9212d99f..4da40f82 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.9.0/support.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.9.0/support.mdx @@ -1,11 +1,11 @@ ---- -title: Support -sidebar_label: Support -sidebar_position: 11 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -import OutdoorNavSupport from "/components/support_outdoornav.mdx"; - +--- +title: Support +sidebar_label: Support +sidebar_position: 11 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +import OutdoorNavSupport from "/components/support_outdoornav.mdx"; + \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.9.0/web_user_interface/_category_.json b/outdoornav_user_manual_versioned_docs/version-0.9.0/web_user_interface/_category_.json index a07ca158..31b78035 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.9.0/web_user_interface/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-0.9.0/web_user_interface/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Web User Interface", - "position": 6 -} +{ + "label": "Web User Interface", + "position": 6 +} diff --git a/outdoornav_user_manual_versioned_docs/version-0.9.0/web_user_interface/ui_autonomous_mode.mdx b/outdoornav_user_manual_versioned_docs/version-0.9.0/web_user_interface/ui_autonomous_mode.mdx index 4b169d54..43cce7f2 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.9.0/web_user_interface/ui_autonomous_mode.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.9.0/web_user_interface/ui_autonomous_mode.mdx @@ -1,369 +1,369 @@ ---- -title: Web UI Autonomous Mode -sidebar_label: Web UI Autonomous Mode -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -![](/img/outdoornav_images/gps_danger.png) - -Ensure that the [Safety](../safety.mdx) document has been -read and the user is aware of possible hazards when using this product as well as the safety -methods that can be used to stop the moving UGV. - -The Autonomous Mode of OutdoorNav Software is a set of robotic -navigation modules that enables robotics developers to define and then -autonomously execute missions on UGVs, getting work done without -requiring direct operator action. This software is composed of four main -modules: localization, navigation, safety monitoring and user control -unit. This a combination of Clearpath's proprietary packages and custom -configured open-source packages from ROS community. Please see the -software architecture section for more information. - -## Definitions {#definitions} - -The list below defines what a "Mission" is as well as its components. -These components are referred to throughout this manual. - -- **Mission** A Mission is a set of one or more Waypoints. -- **Path** The list of Waypoints that will determine the path - for the specific Mission. -- **Waypoint** A Waypoint is any geographical point referenced by its - position relative to the datum in meters. -- **Task** A Task is an automated activity or wait time implemented as - a ROS action at a specific Waypoint. Tasks are called in the order they are - added to a Waypoint. -- **Ghost Waypoint** A transparent waypoint that is not part of the mission. This - Waypoint appears between two other waypoints when in edit mode. The user can - drag and drop this ghost waypoint to add a new waypoint to the mission between - the other two waypoints. - -## Map Settings - -
-
- -
Map settings
-
-
- -To access the Map Settings: Menu → Settings → Map: - -1. **Map Offset:** The map tiles used in this software are not - perfectly aligned with the real world. Therefore, the user may need - to apply an offset to the map so that the UGV's position in the - real world matches its position on the map. -2. **Change Datum:** The datum is represented by a blue marker on the - map and should be set to a location within 10km of the test site. - The user can change this value in the Map Settings page. Enter the - new values and click the "Set Datum" button. - -## Mission Creation - -To create a new Mission first ensure that the UI is in "Edit Mode" ( -select the pencil icon in the bottom bar). Then open the drop down menu in the bottom -bar and select the "Add Mission" option. This will allow the user to create a new mission -which can then be defined with Waypoints. - -### Waypoint Mode - -To add new Waypoints to a mission while edit mode is enabled select the -"Waypoint Mode" button. This will allow the user to place Waypoints at -locations where the user clicks on the map. These will appear as red -Waypoints with the exception of the first waypoint (green) and the last waypoint (yellow). - -:::note - -**The first Waypoint in the mission must be within 3.0 meters of the UGV's current position.** - -::: - -As Waypoints are placed, a "ghost waypoint" will appear between each pair of real -Waypoints and can be dragged to a new spot to insert a real Waypoint -between them. Waypoints can also be dragged and dropped on the map to -modify their positions. - -### Waypoint Panel - -
-
- -
Waypoint Panel
-
-
- -Enable the "Waypoint Panel" toggle to open the list of available Waypoints -within the selected Mission as shown in the figure above. The user can -now rearrange the list, rename Waypoints, add Tasks to the Waypoints, -and modify the final heading and/or tolerance of each Waypoint. - -### Rearrange List of Waypoints - -Waypoints can be rearranged in order of operation in the list. To do this, -enable the "Waypoints Panel" toggle to access the list of Waypoints. Here, the -user will be able to drag and drop the Waypoints to reorder them. - -### Rename Waypoint - -By default, once Waypoints are created they are assigned a default name -which is the word "Waypoint" followed by a numeric value representing the -the number of Waypoints that have been created plus one. The user has the -option to rename these Waypoints in order for them to have more descriptive -meaning. - -To rename a Waypoint follow these steps: - -1. Enable the "Waypoint Panel" toggle. See [Waypoint Panel](#waypoint-panel) - for further details. -2. Click the name of the Waypoint which the user wants to rename. -3. Erase the current name and type the new name. - -### Add Task to Waypoint {#add-task} - -
-
- -
Add Task to Waypoint
-
-
- -To add a Task to the end of a Mission: - -1. Click the "+" icon (beside the Gear icon) in the Waypoint Row the Task is - to be added to. - -2. Click the "Add Task" Button that has appeared. - -3. Select the Task from the dropdown list. Standard waypoint icons will be - replaced accordingly depending on the task selected (waypoint icons will keep the colours - assigned to them based on placement). - - - Dock UGV: - Will dock the UGV to begin charging the UGV's - battery. See [Autonomous Docking](#autonomous-docking) - for more information on the autonomous docking feature. - - - Move PTZ: - Will move the PTZ camera to the position selected - in the task settings. - - Settings: Select the camera position. See - [Pan-Tilt-Zoom (PTZ) View](ui_overview.mdx#ptz-view) for details on how to - save camera positions. - - - Save Image: - Will save an image using one of the UGV camera(s) - to the **~/clearpath_files** folder and can be retrieved using a tool - such as Filezilla. - - Settings: Select which camera the image will be saved from. - - - Start/Stop Video Recording: - Will start/stop recording video using one of the - UGV camera(s) to the **~/clearpath_files** folder and can be retrieved - using a tool such as Filezilla. - - Settings: Select which camera the recording will come from. - - - Undock UGV: - Will undock the UGV from the autocharge dock. Once - completed, the UGV can be sent on autonomous missions. It is - often recommended to place the undock task first in the list of Waypoints; - that way, the UGV will automatically continue towards its next - Waypoint once undocked. - - - Wait: - Will pause and wait for the specified number of - seconds at the end of the Waypoint. - - Settings: Enter the amount of time to wait, in seconds. - - - New Custom Task: - Creates a new custom task that is defined by the user. -
-
- -
Custom Task Settings Dialog
-
-
- - - Task Name: Task name that will show up in the list of available tasks on the UI. - - Action Server Name: The namespace of the custom task action server. - - Float CSV: A list of comma seperated float values that consist of the numerical inputs to the custom task. - - String CSV: A list of comma seperated string values that consist of the semantic inputs to the custom task. - - See the [Custom Tasks](../features/custom_tasks.mdx) section - for details on how to develop custom tasks for your application. - -4. Click the Gear icon next to the selected Task to add the required - Settings. - - :::note - - If a waypoint has more than one task assigned to it, the icon will - be replaced with - - ::: - -### Advanced Settings - - - -#### Waypoint Heading - -When creating a Waypoint, the user has the option of setting a final heading -for the Waypoint. For example, when creating a Waypoint at an inspection point, -the user may want the UGV to navigate and stop facing a certain -direction. In [Waypoint Panel](#waypoint-panel), the list of -Waypoints can be seen and the advanced settings of each Waypoint can be accessed -by clicking the "Gear" icon. - -To set the Waypoint's final heading, the user will need to check the -"Final Heading Enabled" checkbox and enter the heading value in -degrees. The heading indicator on the top bar can be used to help set -this value. See the figure below showing the advanced settings. - -
-
- -
Waypoint Advanced Settings
-
-
- -The heading that has been entered will only be applied to the Waypoint -(ie. the robot will only align itself with the correct heading at the -Waypoint). If the robot is required to be at specific headings at -other Waypoints the user will need to enter these in for each specific Waypoint. - -#### Waypoint Tolerance - -When creating a Mission, the user has the option of setting a specific -tolerance for each Waypoint. By default, the Waypoint position and orientation -tolerances are 0.3 meters and 180°, respectively. If a specific Waypoint -requires that the tolerances be either increased or decreased, these -values can be modified in the advanced settings. For example, if it's -required that the position and/or orientation at a Waypoint be very accurate, -such as 0.1 meters position and 5° orientation, or looser at 1.0 meter -position, this can be done within these settings. - -In [Waypoint Panel](#waypoint-panel), the list of waypoints can be -seen and the advanced settings of each Waypoint can be accessed by clicking -the "Gear" icon. To set the Waypoint's tolerance, the user will need to -check the "Waypoint Tolerance Enabled" checkbox and enter the position and -orientation values, in meters and degrees, respectively. - -### Constrained Replanning {#constrained_path} - -To enable the visualization of the contrained area of traversal (defined by -the path contraint around the reference path), navigate to the General settings -in the hamburger menu. Enable/disable the visualization of the path ui_route_deviation -distance using the switch button (see image below). - -
-
- -
General settings
-
-
- -Once enabled the area of possible deviation will show -over the planned route as can be seen in the following figure. - -
-
- -
Route with maximum path deviation
-
-
- -:::note - -If the UGV is manually driven outside of the constrained replanning area -while a Mission is running, the Mission will not be able to be resumed until the -UGV is returned within the navigable area defined by the path contraint. - -::: - -## Mission Execution - -### Start Mission - -At the bottom of the UI, the user has the ability to start the currently -selected Mission by clicking the "Play" button . When the -Mission has been started this button will turn green. - -### Pause Mission - -At the bottom of the UI, the user has the ability to pause the currently -running mission by clicking the "Pause" button . When the -mission has been paused this button will turn yellow. Pausing a mission -allows the user to take time to look around with the camera or to -teleoperate the UGV to a nearby location to perform an inspection. For -ease of operation, the user must PAUSE the active mission if the user -wants to teleoperate the UGV. - -### Cancel Mission/Task - -At the bottom of the UI, the user has the ability to stop the currently -running mission or task by clicking the "Stop" button . When the -mission/task has been cancelled this button will turn red. The name of -the mission/task will be shown to be cancelled in the feedback bar. - -## Autonomous Docking - -
-
- -
Dock Icon
-
-
- -### Docking The UGV - -To dock the UGV autonomously, the user should follow these steps: - -- Enable the "Edit Mission" toggle. -- Create a Mission whose Waypoints approach the dock from the front and - whose final Waypoint is within the maximum predock distance which is shown as a circle around the dock. -- Enable the Waypoints Panel toggle to view the list of Waypoints, rename the last - Waypoint to "Dock Waypoint" or something descriptive and add the "Dock - UGV" Task to this Waypoint. If there is more than one dock in the system the user will - have to open the task options and select the dock name from the list. -- Run the Mission. - -### Undocking The UGV - -To undock the UGV autonomously, the user should follow these steps: - -- Enable the "Edit Mission" toggle. Select the "Waypoint Mode" - button. -- Select the Waypoint icon on the bottom bar to create a Waypoint at the - current location of the UGV. This step should either be it's own mission - or it should be the starting point of a mission. -- Enable the Waypoints Panel toggle to view the list of Waypoints, rename this - Waypoint to "Undock Waypoint" or something descriptive and add the - "Undock UGV" task to the Waypoint that was just created. -- Run the Mission. - -### Compatibility with a Doghouse - -In order for the autonomous docking feature to be compatible with a doghouse, the -doghouse must conform to a few specifications: - -- Must be installed on a flat surface, and have no elevation change between the - charge-deck and the outdoor surface (ie. no ramp into the doghouse). -- Must be greater than 1.2 m wide. -- Must be between 1.5 and 2.5 m long. -- Dock target should be installed centered along the back of the doghouse. - -### Recover from Failed Docking or Undocking - -If for any reason, the docking or undocking tasks fail, the user can: - -- Manually drive the UGV towards the dock target, aligning the - charging unit with the receiver on the UGV. -- Manually drive the UGV in reverse away from the dock target. It is - suggested that the user reverse roughly 2-3 meters away from the target, - then wait 1-2 minutes before starting any autonomous navigation - missions. +--- +title: Web UI Autonomous Mode +sidebar_label: Web UI Autonomous Mode +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +![](/img/outdoornav_images/gps_danger.png) + +Ensure that the [Safety](../safety.mdx) document has been +read and the user is aware of possible hazards when using this product as well as the safety +methods that can be used to stop the moving UGV. + +The Autonomous Mode of OutdoorNav Software is a set of robotic +navigation modules that enables robotics developers to define and then +autonomously execute missions on UGVs, getting work done without +requiring direct operator action. This software is composed of four main +modules: localization, navigation, safety monitoring and user control +unit. This a combination of Clearpath's proprietary packages and custom +configured open-source packages from ROS community. Please see the +software architecture section for more information. + +## Definitions {#definitions} + +The list below defines what a "Mission" is as well as its components. +These components are referred to throughout this manual. + +- **Mission** A Mission is a set of one or more Waypoints. +- **Path** The list of Waypoints that will determine the path + for the specific Mission. +- **Waypoint** A Waypoint is any geographical point referenced by its + position relative to the datum in meters. +- **Task** A Task is an automated activity or wait time implemented as + a ROS action at a specific Waypoint. Tasks are called in the order they are + added to a Waypoint. +- **Ghost Waypoint** A transparent waypoint that is not part of the mission. This + Waypoint appears between two other waypoints when in edit mode. The user can + drag and drop this ghost waypoint to add a new waypoint to the mission between + the other two waypoints. + +## Map Settings + +
+
+ +
Map settings
+
+
+ +To access the Map Settings: Menu → Settings → Map: + +1. **Map Offset:** The map tiles used in this software are not + perfectly aligned with the real world. Therefore, the user may need + to apply an offset to the map so that the UGV's position in the + real world matches its position on the map. +2. **Change Datum:** The datum is represented by a blue marker on the + map and should be set to a location within 10km of the test site. + The user can change this value in the Map Settings page. Enter the + new values and click the "Set Datum" button. + +## Mission Creation + +To create a new Mission first ensure that the UI is in "Edit Mode" ( +select the pencil icon in the bottom bar). Then open the drop down menu in the bottom +bar and select the "Add Mission" option. This will allow the user to create a new mission +which can then be defined with Waypoints. + +### Waypoint Mode + +To add new Waypoints to a mission while edit mode is enabled select the +"Waypoint Mode" button. This will allow the user to place Waypoints at +locations where the user clicks on the map. These will appear as red +Waypoints with the exception of the first waypoint (green) and the last waypoint (yellow). + +:::note + +**The first Waypoint in the mission must be within 3.0 meters of the UGV's current position.** + +::: + +As Waypoints are placed, a "ghost waypoint" will appear between each pair of real +Waypoints and can be dragged to a new spot to insert a real Waypoint +between them. Waypoints can also be dragged and dropped on the map to +modify their positions. + +### Waypoint Panel + +
+
+ +
Waypoint Panel
+
+
+ +Enable the "Waypoint Panel" toggle to open the list of available Waypoints +within the selected Mission as shown in the figure above. The user can +now rearrange the list, rename Waypoints, add Tasks to the Waypoints, +and modify the final heading and/or tolerance of each Waypoint. + +### Rearrange List of Waypoints + +Waypoints can be rearranged in order of operation in the list. To do this, +enable the "Waypoints Panel" toggle to access the list of Waypoints. Here, the +user will be able to drag and drop the Waypoints to reorder them. + +### Rename Waypoint + +By default, once Waypoints are created they are assigned a default name +which is the word "Waypoint" followed by a numeric value representing the +the number of Waypoints that have been created plus one. The user has the +option to rename these Waypoints in order for them to have more descriptive +meaning. + +To rename a Waypoint follow these steps: + +1. Enable the "Waypoint Panel" toggle. See [Waypoint Panel](#waypoint-panel) + for further details. +2. Click the name of the Waypoint which the user wants to rename. +3. Erase the current name and type the new name. + +### Add Task to Waypoint {#add-task} + +
+
+ +
Add Task to Waypoint
+
+
+ +To add a Task to the end of a Mission: + +1. Click the "+" icon (beside the Gear icon) in the Waypoint Row the Task is + to be added to. + +2. Click the "Add Task" Button that has appeared. + +3. Select the Task from the dropdown list. Standard waypoint icons will be + replaced accordingly depending on the task selected (waypoint icons will keep the colours + assigned to them based on placement). + + - Dock UGV: + Will dock the UGV to begin charging the UGV's + battery. See [Autonomous Docking](#autonomous-docking) + for more information on the autonomous docking feature. + + - Move PTZ: + Will move the PTZ camera to the position selected + in the task settings. + + Settings: Select the camera position. See + [Pan-Tilt-Zoom (PTZ) View](ui_overview.mdx#ptz-view) for details on how to + save camera positions. + + - Save Image: + Will save an image using one of the UGV camera(s) + to the **~/clearpath_files** folder and can be retrieved using a tool + such as Filezilla. + + Settings: Select which camera the image will be saved from. + + - Start/Stop Video Recording: + Will start/stop recording video using one of the + UGV camera(s) to the **~/clearpath_files** folder and can be retrieved + using a tool such as Filezilla. + + Settings: Select which camera the recording will come from. + + - Undock UGV: + Will undock the UGV from the autocharge dock. Once + completed, the UGV can be sent on autonomous missions. It is + often recommended to place the undock task first in the list of Waypoints; + that way, the UGV will automatically continue towards its next + Waypoint once undocked. + + - Wait: + Will pause and wait for the specified number of + seconds at the end of the Waypoint. + + Settings: Enter the amount of time to wait, in seconds. + + - New Custom Task: + Creates a new custom task that is defined by the user. +
+
+ +
Custom Task Settings Dialog
+
+
+ + - Task Name: Task name that will show up in the list of available tasks on the UI. + - Action Server Name: The namespace of the custom task action server. + - Float CSV: A list of comma seperated float values that consist of the numerical inputs to the custom task. + - String CSV: A list of comma seperated string values that consist of the semantic inputs to the custom task. + + See the [Custom Tasks](../features/custom_tasks.mdx) section + for details on how to develop custom tasks for your application. + +4. Click the Gear icon next to the selected Task to add the required + Settings. + + :::note + + If a waypoint has more than one task assigned to it, the icon will + be replaced with + + ::: + +### Advanced Settings + + + +#### Waypoint Heading + +When creating a Waypoint, the user has the option of setting a final heading +for the Waypoint. For example, when creating a Waypoint at an inspection point, +the user may want the UGV to navigate and stop facing a certain +direction. In [Waypoint Panel](#waypoint-panel), the list of +Waypoints can be seen and the advanced settings of each Waypoint can be accessed +by clicking the "Gear" icon. + +To set the Waypoint's final heading, the user will need to check the +"Final Heading Enabled" checkbox and enter the heading value in +degrees. The heading indicator on the top bar can be used to help set +this value. See the figure below showing the advanced settings. + +
+
+ +
Waypoint Advanced Settings
+
+
+ +The heading that has been entered will only be applied to the Waypoint +(ie. the robot will only align itself with the correct heading at the +Waypoint). If the robot is required to be at specific headings at +other Waypoints the user will need to enter these in for each specific Waypoint. + +#### Waypoint Tolerance + +When creating a Mission, the user has the option of setting a specific +tolerance for each Waypoint. By default, the Waypoint position and orientation +tolerances are 0.3 meters and 180°, respectively. If a specific Waypoint +requires that the tolerances be either increased or decreased, these +values can be modified in the advanced settings. For example, if it's +required that the position and/or orientation at a Waypoint be very accurate, +such as 0.1 meters position and 5° orientation, or looser at 1.0 meter +position, this can be done within these settings. + +In [Waypoint Panel](#waypoint-panel), the list of waypoints can be +seen and the advanced settings of each Waypoint can be accessed by clicking +the "Gear" icon. To set the Waypoint's tolerance, the user will need to +check the "Waypoint Tolerance Enabled" checkbox and enter the position and +orientation values, in meters and degrees, respectively. + +### Constrained Replanning {#constrained_path} + +To enable the visualization of the contrained area of traversal (defined by +the path contraint around the reference path), navigate to the General settings +in the hamburger menu. Enable/disable the visualization of the path ui_route_deviation +distance using the switch button (see image below). + +
+
+ +
General settings
+
+
+ +Once enabled the area of possible deviation will show +over the planned route as can be seen in the following figure. + +
+
+ +
Route with maximum path deviation
+
+
+ +:::note + +If the UGV is manually driven outside of the constrained replanning area +while a Mission is running, the Mission will not be able to be resumed until the +UGV is returned within the navigable area defined by the path contraint. + +::: + +## Mission Execution + +### Start Mission + +At the bottom of the UI, the user has the ability to start the currently +selected Mission by clicking the "Play" button . When the +Mission has been started this button will turn green. + +### Pause Mission + +At the bottom of the UI, the user has the ability to pause the currently +running mission by clicking the "Pause" button . When the +mission has been paused this button will turn yellow. Pausing a mission +allows the user to take time to look around with the camera or to +teleoperate the UGV to a nearby location to perform an inspection. For +ease of operation, the user must PAUSE the active mission if the user +wants to teleoperate the UGV. + +### Cancel Mission/Task + +At the bottom of the UI, the user has the ability to stop the currently +running mission or task by clicking the "Stop" button . When the +mission/task has been cancelled this button will turn red. The name of +the mission/task will be shown to be cancelled in the feedback bar. + +## Autonomous Docking + +
+
+ +
Dock Icon
+
+
+ +### Docking The UGV + +To dock the UGV autonomously, the user should follow these steps: + +- Enable the "Edit Mission" toggle. +- Create a Mission whose Waypoints approach the dock from the front and + whose final Waypoint is within the maximum predock distance which is shown as a circle around the dock. +- Enable the Waypoints Panel toggle to view the list of Waypoints, rename the last + Waypoint to "Dock Waypoint" or something descriptive and add the "Dock + UGV" Task to this Waypoint. If there is more than one dock in the system the user will + have to open the task options and select the dock name from the list. +- Run the Mission. + +### Undocking The UGV + +To undock the UGV autonomously, the user should follow these steps: + +- Enable the "Edit Mission" toggle. Select the "Waypoint Mode" + button. +- Select the Waypoint icon on the bottom bar to create a Waypoint at the + current location of the UGV. This step should either be it's own mission + or it should be the starting point of a mission. +- Enable the Waypoints Panel toggle to view the list of Waypoints, rename this + Waypoint to "Undock Waypoint" or something descriptive and add the + "Undock UGV" task to the Waypoint that was just created. +- Run the Mission. + +### Compatibility with a Doghouse + +In order for the autonomous docking feature to be compatible with a doghouse, the +doghouse must conform to a few specifications: + +- Must be installed on a flat surface, and have no elevation change between the + charge-deck and the outdoor surface (ie. no ramp into the doghouse). +- Must be greater than 1.2 m wide. +- Must be between 1.5 and 2.5 m long. +- Dock target should be installed centered along the back of the doghouse. + +### Recover from Failed Docking or Undocking + +If for any reason, the docking or undocking tasks fail, the user can: + +- Manually drive the UGV towards the dock target, aligning the + charging unit with the receiver on the UGV. +- Manually drive the UGV in reverse away from the dock target. It is + suggested that the user reverse roughly 2-3 meters away from the target, + then wait 1-2 minutes before starting any autonomous navigation + missions. diff --git a/outdoornav_user_manual_versioned_docs/version-0.9.0/web_user_interface/ui_manual_mode.mdx b/outdoornav_user_manual_versioned_docs/version-0.9.0/web_user_interface/ui_manual_mode.mdx index 05588284..7c049a0a 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.9.0/web_user_interface/ui_manual_mode.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.9.0/web_user_interface/ui_manual_mode.mdx @@ -1,49 +1,49 @@ ---- -title: Web UI Manual Mode (Teleoperation) -sidebar_label: Web UI Manual Mode (Teleoperation) -sidebar_position: 2 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -The Manual Mode in the Web UI allows the user to operate the UGV -remotely (teleoperate) by using sensors on the UGV to visualize the -environment and by using a joystick to control the motion of the UGV. - -![](/img/outdoornav_images/teleop_danger.png) - -Ensure that you have read [Safety](../safety.mdx) and are -aware of possible hazards when using this product as well as the safety -methods that can be used to stop the moving UGV. - -
-
- -
Teleoperation Components
-
-
- -1. **Speedometer:** An indicator of the UGV's current forward speed. -2. **Joystick:** The joystick will allow the user to move the UGV - manually from the UI. Motion can be sent to the UGV in 360° - directions and the speed can be controlled by the distance of the - joystick from its neutral position. -3. **Sensitivity Scale:** A UGV-specific scale that controls the - maximum allowable UGV velocities at each level. The maximum linear - velocity is 1.0 meters per second and the maximum angular velocity - is 0.5 radians per second. The scale levels are 100%, 80%, 50% and - 20%, with the default set to 80%. -4. **Local Docking Buttons:** The local docking/undocking buttons used - to dock/undock the UGV through the teleop view. To dock, the UGV - must be within the predock distance and facing the dock before the - button is selected. - -## Monitor Wireless Strength - -While teleoperating the UGV, the user will notice that the delay between -the time a command is sent and the time it is executed (and/or visible -on the UI camera views) will increase as the distance increases. This -effect will be further amplified by any obstacles between the UGV and -the base (eg. walls, vehicles, mounds, etc.). It is important to monitor -this delay an be cautious when driving the UGV with larger delay for +--- +title: Web UI Manual Mode (Teleoperation) +sidebar_label: Web UI Manual Mode (Teleoperation) +sidebar_position: 2 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +The Manual Mode in the Web UI allows the user to operate the UGV +remotely (teleoperate) by using sensors on the UGV to visualize the +environment and by using a joystick to control the motion of the UGV. + +![](/img/outdoornav_images/teleop_danger.png) + +Ensure that you have read [Safety](../safety.mdx) and are +aware of possible hazards when using this product as well as the safety +methods that can be used to stop the moving UGV. + +
+
+ +
Teleoperation Components
+
+
+ +1. **Speedometer:** An indicator of the UGV's current forward speed. +2. **Joystick:** The joystick will allow the user to move the UGV + manually from the UI. Motion can be sent to the UGV in 360° + directions and the speed can be controlled by the distance of the + joystick from its neutral position. +3. **Sensitivity Scale:** A UGV-specific scale that controls the + maximum allowable UGV velocities at each level. The maximum linear + velocity is 1.0 meters per second and the maximum angular velocity + is 0.5 radians per second. The scale levels are 100%, 80%, 50% and + 20%, with the default set to 80%. +4. **Local Docking Buttons:** The local docking/undocking buttons used + to dock/undock the UGV through the teleop view. To dock, the UGV + must be within the predock distance and facing the dock before the + button is selected. + +## Monitor Wireless Strength + +While teleoperating the UGV, the user will notice that the delay between +the time a command is sent and the time it is executed (and/or visible +on the UI camera views) will increase as the distance increases. This +effect will be further amplified by any obstacles between the UGV and +the base (eg. walls, vehicles, mounds, etc.). It is important to monitor +this delay an be cautious when driving the UGV with larger delay for risk of crashing into obstacles. \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-0.9.0/web_user_interface/ui_overview.mdx b/outdoornav_user_manual_versioned_docs/version-0.9.0/web_user_interface/ui_overview.mdx index 17f6d824..ed1b57dd 100644 --- a/outdoornav_user_manual_versioned_docs/version-0.9.0/web_user_interface/ui_overview.mdx +++ b/outdoornav_user_manual_versioned_docs/version-0.9.0/web_user_interface/ui_overview.mdx @@ -1,422 +1,422 @@ ---- -title: Web UI Overview -sidebar_label: Web UI Overview -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -The Web User Interface (Web UI) provides a easy, graphical, means to -control both manual and autonomous operation of your UGV. The following -sections outline: the components and views of the UI, the details of -operating in manual mode, and the details of operating in autonomous -mode. - -## Main Components - -
-
- -
UI Main Components
-
-
- -1. **Menu:** A dropdown menu allowing the user to access the Dashboard - (ie. Home), Settings, Status, Scheduler and Help pages. The Operator - can also run the UI Virtual Tour from this menu. - -2. **Feedback Bar:** The feedback bar will display information - regarding the execution state of the navigation and of any Tasks - being executed. - -3. **Path Progress Meter:** A meter indicating the percentage complete - of a Mission. - -4. **UGV Position:** The UGV's X and Y position in the world frame - relative to the Datum. Can also be shown in Lat/Lon coordinates - -5. **UGV Heading:** The UGV's heading in the world frame. 0 degrees is North, 90 degrees is East, 180 degrees is South and 270 degrees is West. - -6. **Status Indicator:** The status indicator will display information - regarding various UGV status monitors such as the Emergency Stop, - Surveying, etc. When the UGV is fully operational, the indicator - will be green. Operators can click on the status indicator to see more details - pertaining to the current state as well as past messages. - -7. **GPS Status Indicator:** The GPS status indicators will display GPS - signal accuracy for position (POS indicator) and heading (DIR - indicator). Green indicators represent RTK accuracy and are - currently required for accurate autonomous navigation. Yellow and orange - indicators represent SBAS and SPP accuracy respectively and noticeable - oscillations may occur in such cases. Red indicators mean no GPS signal - and autonomous navigation missions should not be started. - -8. **Battery Life Indicator:** The UGV's battery life indicator. - - :::note - - If the indicator is stuck at 50%, that means that your UGV does not - have a supported battery management system and this indicator is not - active. - - ::: - -9. **Wireless Connection Indicator:** The wireless connection indicator - represents the signal strength between the wifi access point - (typically the Base Station) and the UGV. If the system can support - cellular connections a cellular indicator will appear next to the - wifi icon with the currently active connection being highlighted in green. - -10. **Views List:** A dropdown list of available views, detailed later - in this section. Some of the available views are Map, Camera and 3D - views, etc. - -11. **Record Audio:** If the UGV is equipped with a microphone the user - can start/stop recording manually by clicking this icon. - -12. **Mission List:** View the list of Missions that Operator(s) have - created. - -13. **Edit Mission Toggle:** This toggle allows the Operator to start - creating Waypoints for the current Mission. The Operator will also be able to - drag and drop Waypoints in this mode. Once this button is enabled, - the Waypoint Mode will be available for selection. When a Mission is - started this toggle will be disabled (ie. the Operator will not be able - to modify/add Waypoints). - - :::note - - If the toggle is enabled while an autonomous Mission is running, it - will cancel the current Mission. - - ::: - -14. **Waypoint Panel Toggle:** View list of Waypoints in the current Mission. - -15. **Waypoint Drop Button:** The Waypoint indicator marker on the - bottom bar allows the Operator to place a Waypoint at the location of the UGV. - -16. **Start Button:** Start the current Mission. - -17. **Pause Button:** Pause the current Mission. Pressing the start button - while paused will continue the current Mission. - -18. **Stop Button:** Cancel the Mission or Task that is currently being - executed. Pressing the start button while when stopped will restart - the list of steps in the current Mission. - - -By opening the dropdown list "Views", on the right side of the UI, the -Operator can access the following views: - -- Map View -- PTZ Camera View (if available) -- Front/Back Camera View (if available) -- 3D View - -## Map View - -
-
- -
Map View
-
-
- -1. **Zoom Buttons:** These buttons allow the user to zoom in/out of the - map levels. -2. **Zoom-to-Fit Button:** This button will zoom the map to where there - is activity (ie. where the datum is set or where Waypoints have been - set on the map. -3. **Pointer Mode Button:** This button allows the user to move the map - and select point on the map to see their coordinate (lat/lon or - x/y). -4. **Waypoint Mode Button:** This button allows the user to place - Waypoints on the map. Users can also select existing Waypoints to - modify/delete them. -5. **UGV:** The blue arrow represents the UGV. Its location is its - position in the world frame and its orientation is the heading in - the world frame. -6. **Base Station:** The yellow antenna icon is the last known location of - the base station based on the last survey performed. By clicking it the - user will be presented with the base station's coordinates, when it was - surveyed, and how many samples were taken during the survey. - -7. **Datum:** The blue Waypoint marker on the map view represents the - location of the reference point (ie. (x,y)=(0,0)) of the world - coordinate system. The world (ie. map) coordinate system is in the - ENU convention. -8. **Scale:** The scale representing the ratio of a distance on the map - to the corresponding distance on the ground. - -## Camera Views - -:::note - -If PTZ and/or Front/Back camera(s) are included on the UGV, their feeds -can be viewed through the UI and the PTZ can be controlled through the -UI. If not, there will not be any PTZ, Front/Back view(s) in the list of -available views. - -::: - -### Pan-Tilt-Zoom (PTZ) View {#ptz-view} - -
-
- -
PTZ Camera View
-
-
- -1. **Tilt Slider:** The left slider can be used to tilt the camera in a - vertical motion, (ie. upwards or downwards motion). By default, the - slider is at its neutral ("zero") position. -2. **Pan Slider:** The bottom slider can be used to pan/rotate the - camera, (ie. rotational motion). By default, the slider is at its - neutral ("zero") position. -3. **Zoom Slider:** The right slider can be used to zoom the camera - feed. By default, the slider is at its neutral ("zero") position. -4. **Save Image:** Depending on the current camera view selected, this - button will save an image to the computer/tablet running the UI. - Images will be saved to the location in which your browser saves - files. -5. **Camera Positions List:** Display the list of available camera - positions that have been saved. These camera positions can be - deleted from this list by clicking the "garbage can" icon beside - the corresponding position. -6. **Save Camera Position:** This button will save the camera position - to be used in the "Move PTZ" task. An example use case would be: - 1. Switch to the PTZ camera view. - 2. Teleoperate the UGV to a location at which the user can inspect - something. - 3. Move the camera sliders to orient the camera such that it is - looking at the inspection point. - 4. Click the "Save Camera Position". - 5. When creating an autonomous mission to this inspection point, - add the "Move PTZ" task to a Waypoint. - 6. Click the settings button beside the task and add the camera - position related to the inspection point. - -### Front and Back Views - -
-
- -
Front View
-
-
- -
-
- -
Back View
-
-
- -## 3D View - -The 3D view allows the user to visualize the pointcloud data being -acquired by the VLP-16 LiDAR. - -
-
- -
3D View
-
-
- -## System Configuration - -### General Settings - -The General settings section can be found in through the upper left hand menu and allows the Operator to modify -general features of the UGV. - -
-
- -
General Settings Page
-
-
- -#### Coordinates - -The Operator can change the coordinate space from X/Y relative to the Datum to Latitude/Longitude. - -#### Save Image Location - -The Operator can choose to store images saved manually to the robot directly or to download them onto their computer. This -feature only affects the manual save image option found on each relevant camera view. - -#### Robot Internet Connection Type - -If the UGV is equipped with SIM card and can switch between Cellular and WiFi connections, the Operator can manually trigger this -change through the general settings page. This switchover will take approximately 30 seconds and will require a refresh on the UI. - -#### Show Path Deviation Distance - -When a mission is running the UGV will have a maximum path deviation distance that it shouldn't cross if it needs to replan. If this -toggle is set to true, while in edit mode this buffer is shown over top of the path as the Operator creates/edits the mission. This -toggle does not disable the path deviation distance feature. - -#### Low Power Mode - -If the UGV is equipped with a Low Power Module this toggle allows the user to switch the UGV into a low power state that will drastically -limit functionality but help conserve power. This mode is best used to help better facilitate charging while the UGV is not in use. - -### Map Source Configuration - -The Web UI ships with access to free -[OpenStreetMap](https://www.openstreetmap.org/) maps. Aerial view -requires access to third-party aerial maps or your own aerial maps. - -The Web UI is pre-configured to work with -[MapBox](https://www.mapbox.com/) and [Bing -Maps](https://www.bingmapsportal.com/) once a suitable map key has been -acquired. Both services offer a free tier that will be sufficient in -almost all cases. - -#### Using OpenStreetMap Maps - -As no key is required to use -[OpenStreetMap](https://www.openstreetmap.org/) maps, the process to -select these maps in the Web UI is simple. - -1. In the Web UI, from the menu, select **Settings→Map** to bring up - the **Map Settings** page. -2. Select **OpenStreetMap** -3. Click **Ok**. - -
-
- -
Using Map Settings to select OpenStreetMap
-
-
- -#### Using MapBox Maps - -Using [MapBox](https://www.mapbox.com/) maps requires a key, which can -then be used by the Web UI. The steps to set up MapBox are outlined -below. - -1. Acquire a MapBox key from the [MapBox - website](https://account.mapbox.com/auth/signup/). Review the - license terms and select the appropriate plan. In most cases, the - free tier will be sufficient. -2. Back in the Web UI, from the menu, select **Settings→Map** to bring - up the **Map Settings** page. -3. Select **MapBox**. -4. Copy the MapBox key from Step 1 into the **Map Key** field. -5. Click **Ok**. - -
-
- -
Using Map Settings to select MapBox
-
-
- -#### Using Bing Maps - -Using [Bing Maps](https://www.bingmapsportal.com/) requires a key, which -can then be used by the Web UI. The steps to set up Bing Maps are -outlined below. - -1. Acquire a Bing Maps key from the [Bing - website](https://www.microsoft.com/en-us/maps/create-a-bing-maps-key). - Review the license terms and select the appropriate plan. In most - cases, the free tier will be sufficient. -2. Back in the Web UI, from the menu, select **Settings→Map** to bring - up the **Map Settings** page. -3. Select **Bing Maps**. -4. Copy the Bing Maps key from Step 1 into the **Map Key** field. -5. Click **Ok**. - -
-
- -
Using Map Settings to select Bing Maps
-
-
- -#### Using Custom Maps {#using_custom_maps} - -Custom Maps allow you to use another set of maps in XYZ format, either -from a third-party map provider or from maps that you have generated on -your own, such as from drone aerial images. Custom maps can be selected -by using the steps below. - -1. Ensure that the maps are accessible on an internal network or on the - Internet by the device that is being used to display the Web UI, - such as a laptop, tablet, or desktop computer. -2. Ensure that the directory structure for the individual tiles is well - defined. See the section below for details on - [Preparing Custom Map Tiles from Drone Aerial Images](#preparing_custom_map_tiles). -3. In the Web UI, from the menu, select **Settings→Map** to bring up - the **Map Settings** page. -4. Select **Custom**. -5. Enter the network path for the maps into the **Custom URL** field. - If hosting the maps on your local computer, this will be similar to - \. Note how the - URL is parameterized with `{z}`, `{x}`, and `{-y}` values. This will - need to be adapted to match the directory structure of your map tile - images. -6. Click **Ok**. - -
-
- -
Using Map Settings to select Custom maps
-
-
- -#### Preparing Custom Map Tiles from Drone Aerial Images {#preparing_custom_map_tiles} - -In some cases, it is desirable to create your own maps rather than using -third party maps which might be outdated. One way to do this is to use a -drone to capture aerial images and convert those images into map tiles. -While there are many ways to accomplish this, one approach is outlined -below. - -1. Use a drone to collect top-down photos covering the area of - interest. It is highly recommended to use a drone control app that - allows you to specify the area of interest and desired image overlap - (recommended \~75%) and takes care of coverage planning, drone - control, and image acquisition. - -2. Perform ortho-mosaicing/ortho-rectification to stitch the collected - images together into a single orthographic image. [Open Drone - Map](https://www.opendronemap.org/) is a popular open source project - that Clearpath has used for stitching, but there are also paid - services that automate the process. - -3. Georeference the orthographic image. One way to do this is to define - the locations of well-defined features (sewer grates, utility holes, - etc.) based on their known positions, such as their position data - from an existing mapping service (e.g., Google Maps). Open source - tools, such as [QGIS](https://www.qgis.org/en/site/) can help with - this process. - -4. Generate the map tiles. Using Ubuntu, this can be accomplished with - the following commands, where `GEOREFERENCED_IMG.tif` is the output - of the previous step. - - ``` - sudo apt install gdal-bin - gdal2tiles.py - ``` - -5. Use a web server to host the tiles locally. Using Ubuntu, one way to - accomplish this is to use the commands below, which will make the - tiles available at: http://localhost:8000/. - - ``` - cd /base/directory/of/tiles - python3 -m http.server - ``` - -Once your map tiles are available on the network, you can follow the -steps in [Using Custom Maps](#using_custom_maps) to have the -Web UI use your custom tiles. +--- +title: Web UI Overview +sidebar_label: Web UI Overview +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +The Web User Interface (Web UI) provides a easy, graphical, means to +control both manual and autonomous operation of your UGV. The following +sections outline: the components and views of the UI, the details of +operating in manual mode, and the details of operating in autonomous +mode. + +## Main Components + +
+
+ +
UI Main Components
+
+
+ +1. **Menu:** A dropdown menu allowing the user to access the Dashboard + (ie. Home), Settings, Status, Scheduler and Help pages. The Operator + can also run the UI Virtual Tour from this menu. + +2. **Feedback Bar:** The feedback bar will display information + regarding the execution state of the navigation and of any Tasks + being executed. + +3. **Path Progress Meter:** A meter indicating the percentage complete + of a Mission. + +4. **UGV Position:** The UGV's X and Y position in the world frame + relative to the Datum. Can also be shown in Lat/Lon coordinates + +5. **UGV Heading:** The UGV's heading in the world frame. 0 degrees is North, 90 degrees is East, 180 degrees is South and 270 degrees is West. + +6. **Status Indicator:** The status indicator will display information + regarding various UGV status monitors such as the Emergency Stop, + Surveying, etc. When the UGV is fully operational, the indicator + will be green. Operators can click on the status indicator to see more details + pertaining to the current state as well as past messages. + +7. **GPS Status Indicator:** The GPS status indicators will display GPS + signal accuracy for position (POS indicator) and heading (DIR + indicator). Green indicators represent RTK accuracy and are + currently required for accurate autonomous navigation. Yellow and orange + indicators represent SBAS and SPP accuracy respectively and noticeable + oscillations may occur in such cases. Red indicators mean no GPS signal + and autonomous navigation missions should not be started. + +8. **Battery Life Indicator:** The UGV's battery life indicator. + + :::note + + If the indicator is stuck at 50%, that means that your UGV does not + have a supported battery management system and this indicator is not + active. + + ::: + +9. **Wireless Connection Indicator:** The wireless connection indicator + represents the signal strength between the wifi access point + (typically the Base Station) and the UGV. If the system can support + cellular connections a cellular indicator will appear next to the + wifi icon with the currently active connection being highlighted in green. + +10. **Views List:** A dropdown list of available views, detailed later + in this section. Some of the available views are Map, Camera and 3D + views, etc. + +11. **Record Audio:** If the UGV is equipped with a microphone the user + can start/stop recording manually by clicking this icon. + +12. **Mission List:** View the list of Missions that Operator(s) have + created. + +13. **Edit Mission Toggle:** This toggle allows the Operator to start + creating Waypoints for the current Mission. The Operator will also be able to + drag and drop Waypoints in this mode. Once this button is enabled, + the Waypoint Mode will be available for selection. When a Mission is + started this toggle will be disabled (ie. the Operator will not be able + to modify/add Waypoints). + + :::note + + If the toggle is enabled while an autonomous Mission is running, it + will cancel the current Mission. + + ::: + +14. **Waypoint Panel Toggle:** View list of Waypoints in the current Mission. + +15. **Waypoint Drop Button:** The Waypoint indicator marker on the + bottom bar allows the Operator to place a Waypoint at the location of the UGV. + +16. **Start Button:** Start the current Mission. + +17. **Pause Button:** Pause the current Mission. Pressing the start button + while paused will continue the current Mission. + +18. **Stop Button:** Cancel the Mission or Task that is currently being + executed. Pressing the start button while when stopped will restart + the list of steps in the current Mission. + + +By opening the dropdown list "Views", on the right side of the UI, the +Operator can access the following views: + +- Map View +- PTZ Camera View (if available) +- Front/Back Camera View (if available) +- 3D View + +## Map View + +
+
+ +
Map View
+
+
+ +1. **Zoom Buttons:** These buttons allow the user to zoom in/out of the + map levels. +2. **Zoom-to-Fit Button:** This button will zoom the map to where there + is activity (ie. where the datum is set or where Waypoints have been + set on the map. +3. **Pointer Mode Button:** This button allows the user to move the map + and select point on the map to see their coordinate (lat/lon or + x/y). +4. **Waypoint Mode Button:** This button allows the user to place + Waypoints on the map. Users can also select existing Waypoints to + modify/delete them. +5. **UGV:** The blue arrow represents the UGV. Its location is its + position in the world frame and its orientation is the heading in + the world frame. +6. **Base Station:** The yellow antenna icon is the last known location of + the base station based on the last survey performed. By clicking it the + user will be presented with the base station's coordinates, when it was + surveyed, and how many samples were taken during the survey. + +7. **Datum:** The blue Waypoint marker on the map view represents the + location of the reference point (ie. (x,y)=(0,0)) of the world + coordinate system. The world (ie. map) coordinate system is in the + ENU convention. +8. **Scale:** The scale representing the ratio of a distance on the map + to the corresponding distance on the ground. + +## Camera Views + +:::note + +If PTZ and/or Front/Back camera(s) are included on the UGV, their feeds +can be viewed through the UI and the PTZ can be controlled through the +UI. If not, there will not be any PTZ, Front/Back view(s) in the list of +available views. + +::: + +### Pan-Tilt-Zoom (PTZ) View {#ptz-view} + +
+
+ +
PTZ Camera View
+
+
+ +1. **Tilt Slider:** The left slider can be used to tilt the camera in a + vertical motion, (ie. upwards or downwards motion). By default, the + slider is at its neutral ("zero") position. +2. **Pan Slider:** The bottom slider can be used to pan/rotate the + camera, (ie. rotational motion). By default, the slider is at its + neutral ("zero") position. +3. **Zoom Slider:** The right slider can be used to zoom the camera + feed. By default, the slider is at its neutral ("zero") position. +4. **Save Image:** Depending on the current camera view selected, this + button will save an image to the computer/tablet running the UI. + Images will be saved to the location in which your browser saves + files. +5. **Camera Positions List:** Display the list of available camera + positions that have been saved. These camera positions can be + deleted from this list by clicking the "garbage can" icon beside + the corresponding position. +6. **Save Camera Position:** This button will save the camera position + to be used in the "Move PTZ" task. An example use case would be: + 1. Switch to the PTZ camera view. + 2. Teleoperate the UGV to a location at which the user can inspect + something. + 3. Move the camera sliders to orient the camera such that it is + looking at the inspection point. + 4. Click the "Save Camera Position". + 5. When creating an autonomous mission to this inspection point, + add the "Move PTZ" task to a Waypoint. + 6. Click the settings button beside the task and add the camera + position related to the inspection point. + +### Front and Back Views + +
+
+ +
Front View
+
+
+ +
+
+ +
Back View
+
+
+ +## 3D View + +The 3D view allows the user to visualize the pointcloud data being +acquired by the VLP-16 LiDAR. + +
+
+ +
3D View
+
+
+ +## System Configuration + +### General Settings + +The General settings section can be found in through the upper left hand menu and allows the Operator to modify +general features of the UGV. + +
+
+ +
General Settings Page
+
+
+ +#### Coordinates + +The Operator can change the coordinate space from X/Y relative to the Datum to Latitude/Longitude. + +#### Save Image Location + +The Operator can choose to store images saved manually to the robot directly or to download them onto their computer. This +feature only affects the manual save image option found on each relevant camera view. + +#### Robot Internet Connection Type + +If the UGV is equipped with SIM card and can switch between Cellular and WiFi connections, the Operator can manually trigger this +change through the general settings page. This switchover will take approximately 30 seconds and will require a refresh on the UI. + +#### Show Path Deviation Distance + +When a mission is running the UGV will have a maximum path deviation distance that it shouldn't cross if it needs to replan. If this +toggle is set to true, while in edit mode this buffer is shown over top of the path as the Operator creates/edits the mission. This +toggle does not disable the path deviation distance feature. + +#### Low Power Mode + +If the UGV is equipped with a Low Power Module this toggle allows the user to switch the UGV into a low power state that will drastically +limit functionality but help conserve power. This mode is best used to help better facilitate charging while the UGV is not in use. + +### Map Source Configuration + +The Web UI ships with access to free +[OpenStreetMap](https://www.openstreetmap.org/) maps. Aerial view +requires access to third-party aerial maps or your own aerial maps. + +The Web UI is pre-configured to work with +[MapBox](https://www.mapbox.com/) and [Bing +Maps](https://www.bingmapsportal.com/) once a suitable map key has been +acquired. Both services offer a free tier that will be sufficient in +almost all cases. + +#### Using OpenStreetMap Maps + +As no key is required to use +[OpenStreetMap](https://www.openstreetmap.org/) maps, the process to +select these maps in the Web UI is simple. + +1. In the Web UI, from the menu, select **Settings→Map** to bring up + the **Map Settings** page. +2. Select **OpenStreetMap** +3. Click **Ok**. + +
+
+ +
Using Map Settings to select OpenStreetMap
+
+
+ +#### Using MapBox Maps + +Using [MapBox](https://www.mapbox.com/) maps requires a key, which can +then be used by the Web UI. The steps to set up MapBox are outlined +below. + +1. Acquire a MapBox key from the [MapBox + website](https://account.mapbox.com/auth/signup/). Review the + license terms and select the appropriate plan. In most cases, the + free tier will be sufficient. +2. Back in the Web UI, from the menu, select **Settings→Map** to bring + up the **Map Settings** page. +3. Select **MapBox**. +4. Copy the MapBox key from Step 1 into the **Map Key** field. +5. Click **Ok**. + +
+
+ +
Using Map Settings to select MapBox
+
+
+ +#### Using Bing Maps + +Using [Bing Maps](https://www.bingmapsportal.com/) requires a key, which +can then be used by the Web UI. The steps to set up Bing Maps are +outlined below. + +1. Acquire a Bing Maps key from the [Bing + website](https://www.microsoft.com/en-us/maps/create-a-bing-maps-key). + Review the license terms and select the appropriate plan. In most + cases, the free tier will be sufficient. +2. Back in the Web UI, from the menu, select **Settings→Map** to bring + up the **Map Settings** page. +3. Select **Bing Maps**. +4. Copy the Bing Maps key from Step 1 into the **Map Key** field. +5. Click **Ok**. + +
+
+ +
Using Map Settings to select Bing Maps
+
+
+ +#### Using Custom Maps {#using_custom_maps} + +Custom Maps allow you to use another set of maps in XYZ format, either +from a third-party map provider or from maps that you have generated on +your own, such as from drone aerial images. Custom maps can be selected +by using the steps below. + +1. Ensure that the maps are accessible on an internal network or on the + Internet by the device that is being used to display the Web UI, + such as a laptop, tablet, or desktop computer. +2. Ensure that the directory structure for the individual tiles is well + defined. See the section below for details on + [Preparing Custom Map Tiles from Drone Aerial Images](#preparing_custom_map_tiles). +3. In the Web UI, from the menu, select **Settings→Map** to bring up + the **Map Settings** page. +4. Select **Custom**. +5. Enter the network path for the maps into the **Custom URL** field. + If hosting the maps on your local computer, this will be similar to + \. Note how the + URL is parameterized with `{z}`, `{x}`, and `{-y}` values. This will + need to be adapted to match the directory structure of your map tile + images. +6. Click **Ok**. + +
+
+ +
Using Map Settings to select Custom maps
+
+
+ +#### Preparing Custom Map Tiles from Drone Aerial Images {#preparing_custom_map_tiles} + +In some cases, it is desirable to create your own maps rather than using +third party maps which might be outdated. One way to do this is to use a +drone to capture aerial images and convert those images into map tiles. +While there are many ways to accomplish this, one approach is outlined +below. + +1. Use a drone to collect top-down photos covering the area of + interest. It is highly recommended to use a drone control app that + allows you to specify the area of interest and desired image overlap + (recommended \~75%) and takes care of coverage planning, drone + control, and image acquisition. + +2. Perform ortho-mosaicing/ortho-rectification to stitch the collected + images together into a single orthographic image. [Open Drone + Map](https://www.opendronemap.org/) is a popular open source project + that Clearpath has used for stitching, but there are also paid + services that automate the process. + +3. Georeference the orthographic image. One way to do this is to define + the locations of well-defined features (sewer grates, utility holes, + etc.) based on their known positions, such as their position data + from an existing mapping service (e.g., Google Maps). Open source + tools, such as [QGIS](https://www.qgis.org/en/site/) can help with + this process. + +4. Generate the map tiles. Using Ubuntu, this can be accomplished with + the following commands, where `GEOREFERENCED_IMG.tif` is the output + of the previous step. + + ``` + sudo apt install gdal-bin + gdal2tiles.py + ``` + +5. Use a web server to host the tiles locally. Using Ubuntu, one way to + accomplish this is to use the commands below, which will make the + tiles available at: http://localhost:8000/. + + ``` + cd /base/directory/of/tiles + python3 -m http.server + ``` + +Once your map tiles are available on the network, you can follow the +steps in [Using Custom Maps](#using_custom_maps) to have the +Web UI use your custom tiles. diff --git a/outdoornav_user_manual_versioned_docs/version-2.0.0/_category_.json b/outdoornav_user_manual_versioned_docs/version-2.0.0/_category_.json index c123e1bc..f5966a95 100644 --- a/outdoornav_user_manual_versioned_docs/version-2.0.0/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-2.0.0/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "OutdoorNav User Manual", - "position": 1 -} +{ + "label": "OutdoorNav User Manual", + "position": 1 +} diff --git a/outdoornav_user_manual_versioned_docs/version-2.0.0/api/_category_.json b/outdoornav_user_manual_versioned_docs/version-2.0.0/api/_category_.json index a6e53920..79c71658 100644 --- a/outdoornav_user_manual_versioned_docs/version-2.0.0/api/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-2.0.0/api/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Application Programming Interface", - "position": 7 -} +{ + "label": "Application Programming Interface", + "position": 7 +} diff --git a/outdoornav_user_manual_versioned_docs/version-2.0.0/api/api_overview.mdx b/outdoornav_user_manual_versioned_docs/version-2.0.0/api/api_overview.mdx index 4a56435b..3c6055d6 100644 --- a/outdoornav_user_manual_versioned_docs/version-2.0.0/api/api_overview.mdx +++ b/outdoornav_user_manual_versioned_docs/version-2.0.0/api/api_overview.mdx @@ -1,26 +1,26 @@ ---- -title: API Overview -sidebar_label: API Overview -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -While the Web User Interface provides a great way to get started quickly -with OutdoorNav Software, some users will want programmatic control or -may wish to develop their own graphical user interfaces \-- for those -users, the Application Programming Interface (API) provides the -flexibility to do so. This is illustrated in the figure below. - -
-
- -
Interconnection between OutdoorNav Software and UGV Controller
-
-
- -The API is, at present, a [ROS 2 Jazzy](https://docs.ros.org/en/jazzy/index.html) API. -The message and services types for the API are defined at: -https://github.com/clearpathrobotics/clearpath_msgs/tree/onav-ros2/clearpath_outdoornav_msgs - +--- +title: API Overview +sidebar_label: API Overview +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +While the Web User Interface provides a great way to get started quickly +with OutdoorNav Software, some users will want programmatic control or +may wish to develop their own graphical user interfaces \-- for those +users, the Application Programming Interface (API) provides the +flexibility to do so. This is illustrated in the figure below. + +
+
+ +
Interconnection between OutdoorNav Software and UGV Controller
+
+
+ +The API is, at present, a [ROS 2 Jazzy](https://docs.ros.org/en/jazzy/index.html) API. +The message and services types for the API are defined at: +https://github.com/clearpathrobotics/clearpath_msgs/tree/onav-ros2/clearpath_outdoornav_msgs + More details on the API will be provided in a future release of the documentation. \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-2.0.0/index.mdx b/outdoornav_user_manual_versioned_docs/version-2.0.0/index.mdx index 09a63a7f..3d1655b9 100644 --- a/outdoornav_user_manual_versioned_docs/version-2.0.0/index.mdx +++ b/outdoornav_user_manual_versioned_docs/version-2.0.0/index.mdx @@ -1,18 +1,18 @@ ---- -title: OutdoorNav User Manual -sidebar_label: OutdoorNav User Manual -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -
-
- -
-
- -OutdoorNav is an outdoor autonomy software platform designed for vehicle developers, -OEMs and robotics researchers. Compatible with Clearpath outdoor mobile platforms -and third-party vehicles, OutdoorNav provides reliable, industry-leading GPS-based +--- +title: OutdoorNav User Manual +sidebar_label: OutdoorNav User Manual +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +
+
+ +
+
+ +OutdoorNav is an outdoor autonomy software platform designed for vehicle developers, +OEMs and robotics researchers. Compatible with Clearpath outdoor mobile platforms +and third-party vehicles, OutdoorNav provides reliable, industry-leading GPS-based navigation for faster, more efficient autonomous vehicle development. \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-2.0.0/overview/_category_.json b/outdoornav_user_manual_versioned_docs/version-2.0.0/overview/_category_.json index 663e4088..8414dc7f 100644 --- a/outdoornav_user_manual_versioned_docs/version-2.0.0/overview/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-2.0.0/overview/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Overview", - "position": 4 -} +{ + "label": "Overview", + "position": 4 +} diff --git a/outdoornav_user_manual_versioned_docs/version-2.0.0/overview/overview_introduction.mdx b/outdoornav_user_manual_versioned_docs/version-2.0.0/overview/overview_introduction.mdx index 95c7e2f4..21a17e20 100644 --- a/outdoornav_user_manual_versioned_docs/version-2.0.0/overview/overview_introduction.mdx +++ b/outdoornav_user_manual_versioned_docs/version-2.0.0/overview/overview_introduction.mdx @@ -1,79 +1,79 @@ ---- -title: Introduction -sidebar_label: Introduction -sidebar_position: 1 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -## Summary - -OutdoorNav Software is a software package developed by Clearpath -Robotics for autonomous and manual navigation of Unmanned Ground -Vehicles (UGVs) in outdoor environments. - -
-
- -
Web UI Mission Planning View
-
-
- -
-
- -
Web UI Front Camera View
-
-
- -## Compatible Platforms - -While it has been optimized for use with OutdoorNav Hardware from -Clearpath Robotics -([Husky](https://clearpathrobotics.com/husky-unmanned-ground-vehicle-robot/), -[Jackal](https://clearpathrobotics.com/jackal-small-unmanned-ground-vehicle/), -and -[Warthog](https://clearpathrobotics.com/warthog-unmanned-ground-vehicle-robot/)), -it has been designed so that it can be added easily to third-party UGVs. - -## Key Features - -Key features of OutdoorNav Software include: - -- Mission Planning and Autonomous Navigation - - - Robust GPS-based localization with sensor fusion of camera, IMU, LiDAR - and platform odometry - - Autonomous path following through a network of paths - - Obstacle Detection and Avoidance: Stop and wait or - autonomously plan a collision-free path around obstacles - without the need to stop - -- Teleoperation - - - Operate the robot remotely using an on-screen or physical - joystick - - Visualize what the robot sees by displaying its network - cameras - -- Web User Interface (Web UI) - - - Build missions containing sets of paths, with optional task - execution on each path; tasks can be standard tasks (eg. save - camera image) or user provided functions - - View the robot's live position and attitude on the map - - Display robot data such as velocity, signal strength, status - of the motion stop, status of navigation system, and battery charge - - Save and export Missions - -- Application Programming Interface (API) - - - Build your own application and UI by accessing the navigation - API to control the UGV through software or implement fleet - management by accessing the autonomy API - -- Third Party Integration - - - The Web UI and API can be accessed through a network connection; - cloud-based services are available from third parties to - facilitate remote connections and networking to robot hardware +--- +title: Introduction +sidebar_label: Introduction +sidebar_position: 1 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +## Summary + +OutdoorNav Software is a software package developed by Clearpath +Robotics for autonomous and manual navigation of Unmanned Ground +Vehicles (UGVs) in outdoor environments. + +
+
+ +
Web UI Mission Planning View
+
+
+ +
+
+ +
Web UI Front Camera View
+
+
+ +## Compatible Platforms + +While it has been optimized for use with OutdoorNav Hardware from +Clearpath Robotics +([Husky](https://clearpathrobotics.com/husky-unmanned-ground-vehicle-robot/), +[Jackal](https://clearpathrobotics.com/jackal-small-unmanned-ground-vehicle/), +and +[Warthog](https://clearpathrobotics.com/warthog-unmanned-ground-vehicle-robot/)), +it has been designed so that it can be added easily to third-party UGVs. + +## Key Features + +Key features of OutdoorNav Software include: + +- Mission Planning and Autonomous Navigation + + - Robust GPS-based localization with sensor fusion of camera, IMU, LiDAR + and platform odometry + - Autonomous path following through a network of paths + - Obstacle Detection and Avoidance: Stop and wait or + autonomously plan a collision-free path around obstacles + without the need to stop + +- Teleoperation + + - Operate the robot remotely using an on-screen or physical + joystick + - Visualize what the robot sees by displaying its network + cameras + +- Web User Interface (Web UI) + + - Build missions containing sets of paths, with optional task + execution on each path; tasks can be standard tasks (eg. save + camera image) or user provided functions + - View the robot's live position and attitude on the map + - Display robot data such as velocity, signal strength, status + of the motion stop, status of navigation system, and battery charge + - Save and export Missions + +- Application Programming Interface (API) + + - Build your own application and UI by accessing the navigation + API to control the UGV through software or implement fleet + management by accessing the autonomy API + +- Third Party Integration + + - The Web UI and API can be accessed through a network connection; + cloud-based services are available from third parties to + facilitate remote connections and networking to robot hardware diff --git a/outdoornav_user_manual_versioned_docs/version-2.0.0/overview/overview_operating_conditions.mdx b/outdoornav_user_manual_versioned_docs/version-2.0.0/overview/overview_operating_conditions.mdx index 134fadcc..072e3180 100644 --- a/outdoornav_user_manual_versioned_docs/version-2.0.0/overview/overview_operating_conditions.mdx +++ b/outdoornav_user_manual_versioned_docs/version-2.0.0/overview/overview_operating_conditions.mdx @@ -1,113 +1,113 @@ ---- -title: Operating Conditions -sidebar_label: Operating Conditions -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -OutdoorNav Software is designed and tested for use in rugged outdoor -environments. - -## Operating Conditions - -### Terrain - -OutdoorNav Software is compatible with terrains in which the UGV can be -driven manually without excessive slipping. The performance limits will -be a function of the base UGV traction. - -Using Clearpath Robotics Husky, Jackal, and Warthog as a the base UGV, -OutdoorNav Software is suitable for use in the following terrains: - -- asphalt -- concrete -- grass -- snow - -:::note - -Grass should not exceed 30 cm in height if collision avoidance is -enabled. - -::: - -:::note - -Winter/studded tires may be required for proper traction on snow. - -::: - -OutdoorNav Software is currently **not** suitable in the following -terrains: - -- ice -- loose gravel - -The terrain capabilities of third-party UGVs will be dependent on a -variety of factors including the vehicle mass, the tire treading, and -motor power. - -### Environment - -OutdoorNav Software is suitable for use in the following environmental -conditions: - -- light rainfall (drizzle) -- light snowfall (powdery snow) - -:::note - -If erratic behavior, such as frequent replanning, is perceived in these -light precipitation conditions, disabling the "continuous planning" -feature may help. - -::: - -OutdoorNav Software is **not** suitable for use in the following -environmental conditions: - -- heavy rainfall -- heavy snowfall - -:::note - -If navigation is required in heavy rain or snow, disabling the collision -avoidance feature will allow the UGV to navigate properly. This should -be done with caution. - -![](/img/outdoornav_images/gps_danger.png) - -::: - -## Performance - -The performance of the system is highly dependent on both the base UGV, -the sensors, the system integration details, and the environment. With -standard sensors: - -- Location accuracy (position & heading): Less than 5 cm and less than 2° -- Path tracking accuracy (approximate): 10 cm - -## Limitations - -While OutdoorNav Software operates effectively in a range of rugged -outdoor environments, the operator should be aware of the following -limitations and plan accordingly. - -_OutdoorNav System Limitations_ - -| Limitation | Details | -|--------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| RTK accuracy | Localization accuracy for the Standard (RTK) configuration assumes the base station location has been accurately surveyed. | -| Localization accuracy | Localization accuracy is influenced by the quality of GNSS data that is available. Navigating in GNSS denied areas (e.g., under bridges, near tall buildings, etc.) will cause degradation in localization performance. | -| Negative obstacle detection not present | Outdoor Navigation Software does not have negative obstacle detection capability. Your UGV will not detect stairs, cliffs, potholes, depressions or edges and may drive into these obstacles causing harm to people or property. | -| Limited obstacle detection in vertical dimension | The small vertical field of view of 3D LiDARs limits the vertical obstacle detection capability of the OutdoorNav Software. | -| Low traction may cause UGV to get stuck | Your UGV may navigate itself into a situation where wheels slip or do not make contact with the ground. | -| Rain and snow may affect obstacle detection | Adverse weather conditions may obscure obstacle detection and avoidance data from 3D LiDARs. Obstacle detection and avoidance may not function in all weather conditions and must be disabled to navigate in heavy snow or rain. | -| WiFi range limits | The current configurations of the OutdoorNav Software will continue navigation if the WiFi disconnects or goes out of range. The Web UI will reconnect once the WiFi has reconnected but certain functions of the UI may be limited such as the ability to issue a pause/stop commands or sending new missions to the UGV. | -| Wireless motion stop range limits | The UGV will motion stop if the UGV is driven out of range of the wireless motion stop device. | -| RTK GPS limited by WiFi range | If WiFi goes out of range, your UGV will not receive RTK corrections from the Base Station. This can potentially decrease the accuracy of the GPS signal which can subsequently degrade path following performance of your system. | -| Obstacle detection may cause UGV to become stuck | The UGV may stop and become stuck if obstacles are detected and not cleared from its path. If obstacle avoidance is enabled, it may not be able to calculate an acceptable path to the next Viapoint or Goal Point under all circumstances. This will result in the UGV becoming stuck and failing its Mission. | -| Zones are not currently supported | It is not possible to define “keep-out” or “unsafe” zones that the UGV needs to avoid. Rather, careful use of Waypoint placement by the operator can be used to keep the UGV at a safe distance from unsafe zones. | -| No collision avoidance during teleoperation mode | When operating in Manual Mode (Teleoperation), no collision avoidance is enabled. The operator is responsible for avoiding collisions. | +--- +title: Operating Conditions +sidebar_label: Operating Conditions +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +OutdoorNav Software is designed and tested for use in rugged outdoor +environments. + +## Operating Conditions + +### Terrain + +OutdoorNav Software is compatible with terrains in which the UGV can be +driven manually without excessive slipping. The performance limits will +be a function of the base UGV traction. + +Using Clearpath Robotics Husky, Jackal, and Warthog as a the base UGV, +OutdoorNav Software is suitable for use in the following terrains: + +- asphalt +- concrete +- grass +- snow + +:::note + +Grass should not exceed 30 cm in height if collision avoidance is +enabled. + +::: + +:::note + +Winter/studded tires may be required for proper traction on snow. + +::: + +OutdoorNav Software is currently **not** suitable in the following +terrains: + +- ice +- loose gravel + +The terrain capabilities of third-party UGVs will be dependent on a +variety of factors including the vehicle mass, the tire treading, and +motor power. + +### Environment + +OutdoorNav Software is suitable for use in the following environmental +conditions: + +- light rainfall (drizzle) +- light snowfall (powdery snow) + +:::note + +If erratic behavior, such as frequent replanning, is perceived in these +light precipitation conditions, disabling the "continuous planning" +feature may help. + +::: + +OutdoorNav Software is **not** suitable for use in the following +environmental conditions: + +- heavy rainfall +- heavy snowfall + +:::note + +If navigation is required in heavy rain or snow, disabling the collision +avoidance feature will allow the UGV to navigate properly. This should +be done with caution. + +![](/img/outdoornav_images/gps_danger.png) + +::: + +## Performance + +The performance of the system is highly dependent on both the base UGV, +the sensors, the system integration details, and the environment. With +standard sensors: + +- Location accuracy (position & heading): Less than 5 cm and less than 2° +- Path tracking accuracy (approximate): 10 cm + +## Limitations + +While OutdoorNav Software operates effectively in a range of rugged +outdoor environments, the operator should be aware of the following +limitations and plan accordingly. + +_OutdoorNav System Limitations_ + +| Limitation | Details | +|--------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| RTK accuracy | Localization accuracy for the Standard (RTK) configuration assumes the base station location has been accurately surveyed. | +| Localization accuracy | Localization accuracy is influenced by the quality of GNSS data that is available. Navigating in GNSS denied areas (e.g., under bridges, near tall buildings, etc.) will cause degradation in localization performance. | +| Negative obstacle detection not present | Outdoor Navigation Software does not have negative obstacle detection capability. Your UGV will not detect stairs, cliffs, potholes, depressions or edges and may drive into these obstacles causing harm to people or property. | +| Limited obstacle detection in vertical dimension | The small vertical field of view of 3D LiDARs limits the vertical obstacle detection capability of the OutdoorNav Software. | +| Low traction may cause UGV to get stuck | Your UGV may navigate itself into a situation where wheels slip or do not make contact with the ground. | +| Rain and snow may affect obstacle detection | Adverse weather conditions may obscure obstacle detection and avoidance data from 3D LiDARs. Obstacle detection and avoidance may not function in all weather conditions and must be disabled to navigate in heavy snow or rain. | +| WiFi range limits | The current configurations of the OutdoorNav Software will continue navigation if the WiFi disconnects or goes out of range. The Web UI will reconnect once the WiFi has reconnected but certain functions of the UI may be limited such as the ability to issue a pause/stop commands or sending new missions to the UGV. | +| Wireless motion stop range limits | The UGV will motion stop if the UGV is driven out of range of the wireless motion stop device. | +| RTK GPS limited by WiFi range | If WiFi goes out of range, your UGV will not receive RTK corrections from the Base Station. This can potentially decrease the accuracy of the GPS signal which can subsequently degrade path following performance of your system. | +| Obstacle detection may cause UGV to become stuck | The UGV may stop and become stuck if obstacles are detected and not cleared from its path. If obstacle avoidance is enabled, it may not be able to calculate an acceptable path to the next Viapoint or Goal Point under all circumstances. This will result in the UGV becoming stuck and failing its Mission. | +| Zones are not currently supported | It is not possible to define “keep-out” or “unsafe” zones that the UGV needs to avoid. Rather, careful use of Waypoint placement by the operator can be used to keep the UGV at a safe distance from unsafe zones. | +| No collision avoidance during teleoperation mode | When operating in Manual Mode (Teleoperation), no collision avoidance is enabled. The operator is responsible for avoiding collisions. | diff --git a/outdoornav_user_manual_versioned_docs/version-2.0.0/overview/overview_scope.mdx b/outdoornav_user_manual_versioned_docs/version-2.0.0/overview/overview_scope.mdx index baf0b9f2..5b741ff5 100644 --- a/outdoornav_user_manual_versioned_docs/version-2.0.0/overview/overview_scope.mdx +++ b/outdoornav_user_manual_versioned_docs/version-2.0.0/overview/overview_scope.mdx @@ -1,13 +1,13 @@ ---- -title: Scope -sidebar_label: Scope -sidebar_position: 2 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -This documentation focuses on the OutdoorNav software itself, including -hardware dependencies and integration, but not the specifics of UGV -hardware. For details on compatible Clearpath Robotics UGVs and custom -hardware integrations, contact \ or check +--- +title: Scope +sidebar_label: Scope +sidebar_position: 2 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +This documentation focuses on the OutdoorNav software itself, including +hardware dependencies and integration, but not the specifics of UGV +hardware. For details on compatible Clearpath Robotics UGVs and custom +hardware integrations, contact \ or check out our [YouTube channel](https://www.youtube.com/channel/UCNPP3C-ZK3mwpG2x89VE-2Q). \ No newline at end of file diff --git a/outdoornav_user_manual_versioned_docs/version-2.0.0/quick_start/_category_.json b/outdoornav_user_manual_versioned_docs/version-2.0.0/quick_start/_category_.json index f92c8e91..6a14af93 100644 --- a/outdoornav_user_manual_versioned_docs/version-2.0.0/quick_start/_category_.json +++ b/outdoornav_user_manual_versioned_docs/version-2.0.0/quick_start/_category_.json @@ -1,4 +1,4 @@ -{ - "label": "Quick Start", - "position": 5 -} +{ + "label": "Quick Start", + "position": 5 +} diff --git a/outdoornav_user_manual_versioned_docs/version-2.0.0/safety.mdx b/outdoornav_user_manual_versioned_docs/version-2.0.0/safety.mdx index 1de70c90..3f2d6645 100644 --- a/outdoornav_user_manual_versioned_docs/version-2.0.0/safety.mdx +++ b/outdoornav_user_manual_versioned_docs/version-2.0.0/safety.mdx @@ -1,139 +1,139 @@ ---- -title: Safety -sidebar_label: Safety -sidebar_position: 3 -toc_min_heading_level: 2 -toc_max_heading_level: 4 ---- - -## Important Safety Information - -The use of Unmanned Ground Vehicles (UGVs) can result in unexpected and -dangerous behavior. Although Clearpath Robotics endeavors to create safe -and reliable software and systems, autonomous outdoor UGVs should not be -considered safe for unsupervised use around humans or other obstacles. -No level of safety and reliability of software and non-safety rated -hardware components is guaranteed. - -Clearpath strongly recommends that users carry out a risk assessment -related to their application and deployment of autonomous UGVs. The -ISO-12100 standard [Risk assessment and risk reduction](https://www.iso.org/standard/51528.html) provides guidance on -performing risk assessments. - -Functional safety in robotics is often achieved through the use of -safety related parts and control systems to minimize risks such as -safety LiDARs for obstacle detection. These hardware components must be -designed into the UGV hardware and can be tightly integrated with -navigation software. Clearpath Robotics recommends that this process be -undertaken after the product or process has been fully defined. It can -be a significant design effort. - -## Safety Notice Levels - -For Clearpath Robotics hardware and software, the risk level is captured -using the following types of labels. - -![](/img/outdoornav_images/safety_information.png) - -## General Hazard Labels - -Review the following to learn more about the labels that may be used on -Clearpath Robotics products. Hazards can also apply to attachments and -accessories used in conjunction with a Clearpath Robotics product. UGVs -from other providers may present additional hazards and risks. - -_General Hazards_ - -| Label | Label Title | Label Description | -|--------------------------------------------------------------------------------------|----------------------|------------------------------------------| -|
| Automatic Motion Hazard | Clearpath Robotics UGVs may begin moving suddenly, either autonomously or when being driven manually. Always be aware of Clearpath Robotics products and their potential for movement. | -|
| Crushing Risk | Objects or personnel can be crushed between the Clearpath Robotics UGV and another object. Keep hands and other objects clear of crush points at all times. Keep clear of all docking Clearpath Robotics UGVs. | -|
| Electrical Shock Risk | Clearpath Robotics UGVs contain circuitry and batteries that may cause electrical shock if not properly insulated. | -|
| Entanglement Risk | Clearpath Robotics UGVs as well as their cameras can lead to entanglement of hair or dangling materials during their rotation. Keep hair and dangling materials away from Clearpath Robotics UGVs during motion. | -|
| Environmental Hazard | Clearpath Robotics UGVs contain batteries and materials that may require special disposal methods. Consult local regulations. | -|
| Falling Object Risk | Beware of objects that may have shifted in any Clearpath Robotics UGV crate as they pose a risk of falling when opened. | -|
| High Surface Temperature Risk | UGV computer heat sinks and UGV motors can become extremely hot during operation. | -|
| Impact Risk | Clearpath Robotics UGVs travelling through a facility can potentially impact objects and personnel. Keep clear of all docking Clearpath Robotics UGVs. | -|
| Laser Radiation Risk | Clearpath Robotics UGVs may use Class 1 laser products. These provide no hazard during normal use, however it is not recommended to stare directly into the beam(s). | -|
| Material Hazard - Lithium | Lithium UGV batteries contain harmful material. Always use proper handling procedures when handling UGV batteries. | -|
| Manual Load Lifting Risk | Always use ergonomic techniques when manually lifting loads. | -|
| Pinching Risk | Keep hands and other objects clear of pinch points at all times. Keep clear of all docking Clearpath Robotics UGVs. | -|
| Radio Frequency Risk | Clearpath Robotics UGVs and/or accessories may use radio frequency (RF) radiating antennas. These provide no hazard during normal use, however prolonged exposure around the antenna is not recommended. | -|
| Tripping Hazard | Clearpath Robotics products may pose a tripping hazard. | - -## Safety Awareness - -Personnel present during the operation of an Unmanned Ground Vehicle -(UGV) need to be made aware or be accompanied by personnel who are -familiar with the specific risks and hazards associated with autonomous -mobile robots (AMR). The following checklist identifies basic topics -that should be addressed by site-specific worker and visitor safety -orientation training. - -
- -
- -- Proper PPE must be worn, including safety footwear (ie. steel toe). -- Crossing into the path of a moving UGV should be avoided, as well as - placing or throwing obstacles into the path of a moving UGV. - -
- -
- -- Be aware that a UGV can be anywhere in the operating area of the - facility at any time, and may pose a tripping hazard even when not - in motion. -- Personnel need to be aware of the UGV docking and charging areas, - where detection fields are reduced. -- Personnel should be aware that Clearpath Robotics UGVs LiDAR safety - scanners use a class 1 laser and high intensity LED. -- Personnel should keep all loose clothing and body parts away from - UGVs, accessories, attachments, and payloads, while they are in - autonomous operation. Using an Emergency Stop button is the only - acceptable manner of interacting with a Clearpath Robotics UGV or - attachment while it is being operated autonomously. - -In addition to the preceding basic items for all workers and visitors, -the following should be considered for facility personnel, including -drivers of other UGVs: - -- When required to move a product manually, personnel must ensure it - is in an Emergency Stop state or shut down completely and should not - push manually for prolonged periods. -- Alert personnel that while operating a Clearpath Robotics UGV - outside of the Autonomy State, they are solely responsible for - obstacle and collision avoidance. -- Maintenance of a Clearpath UGV not outlined in either this document - or the operations and maintenance manual can only be performed by a - Clearpath Robotics Authorized Personnel. - -To reduce the risk of harming people or damaging properties, a trained -operator must monitor the behavior of the UGV under autonomous -navigation mode at all times. The operator should use the wireless -emergency stop device to immediately avert any possible damaging or -dangerous behavior from the UGV. Failure in proper use of the software -might result in collision of the UGV into objects. - -- Ensure that low-height obstacles are removed from the potential path - of the UGV prior to operation. -- OutdoorNav Software does not have negative obstacle detection - capability. This means that your UGV will not detect stairs, cliffs - or edges and may drive off these obstacles causing harm to people or - properties as well as potentially damage the UGV. -- Adverse weather conditions may obscure obstacle detection and - avoidance data from the VLP-16 LiDAR. Obstacle detection and - avoidance may not function properly in snow, rain or fog. -- The current configurations of the OutdoorNav Software will continue - navigation if the WiFi disconnects or goes out of range. The Web UI - will reconnect once the WiFi has reconnected but certain functions - of the Web UI may be limited such as the ability to issue a stop - command or send new missions to the UGV. -- If connection of the UGV to the base station is lost (e.g., WiFi - goes out of range, low battery level, etc), UGV will not receive RTK - corrections from the base station. This can potentially decrease the - accuracy of the GPS signal which can subsequently degrade path - following performance of your system. -- Obstacle detection and avoidance is disabled during the docking and - undocking operations. Keep this area clear of people and objects. +--- +title: Safety +sidebar_label: Safety +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +## Important Safety Information + +The use of Unmanned Ground Vehicles (UGVs) can result in unexpected and +dangerous behavior. Although Clearpath Robotics endeavors to create safe +and reliable software and systems, autonomous outdoor UGVs should not be +considered safe for unsupervised use around humans or other obstacles. +No level of safety and reliability of software and non-safety rated +hardware components is guaranteed. + +Clearpath strongly recommends that users carry out a risk assessment +related to their application and deployment of autonomous UGVs. The +ISO-12100 standard [Risk assessment and risk reduction](https://www.iso.org/standard/51528.html) provides guidance on +performing risk assessments. + +Functional safety in robotics is often achieved through the use of +safety related parts and control systems to minimize risks such as +safety LiDARs for obstacle detection. These hardware components must be +designed into the UGV hardware and can be tightly integrated with +navigation software. Clearpath Robotics recommends that this process be +undertaken after the product or process has been fully defined. It can +be a significant design effort. + +## Safety Notice Levels + +For Clearpath Robotics hardware and software, the risk level is captured +using the following types of labels. + +![](/img/outdoornav_images/safety_information.png) + +## General Hazard Labels + +Review the following to learn more about the labels that may be used on +Clearpath Robotics products. Hazards can also apply to attachments and +accessories used in conjunction with a Clearpath Robotics product. UGVs +from other providers may present additional hazards and risks. + +_General Hazards_ + +| Label | Label Title | Label Description | +|--------------------------------------------------------------------------------------|----------------------|------------------------------------------| +|
| Automatic Motion Hazard | Clearpath Robotics UGVs may begin moving suddenly, either autonomously or when being driven manually. Always be aware of Clearpath Robotics products and their potential for movement. | +|
| Crushing Risk | Objects or personnel can be crushed between the Clearpath Robotics UGV and another object. Keep hands and other objects clear of crush points at all times. Keep clear of all docking Clearpath Robotics UGVs. | +|
| Electrical Shock Risk | Clearpath Robotics UGVs contain circuitry and batteries that may cause electrical shock if not properly insulated. | +|
| Entanglement Risk | Clearpath Robotics UGVs as well as their cameras can lead to entanglement of hair or dangling materials during their rotation. Keep hair and dangling materials away from Clearpath Robotics UGVs during motion. | +|
| Environmental Hazard | Clearpath Robotics UGVs contain batteries and materials that may require special disposal methods. Consult local regulations. | +|
| Falling Object Risk | Beware of objects that may have shifted in any Clearpath Robotics UGV crate as they pose a risk of falling when opened. | +|
| High Surface Temperature Risk | UGV computer heat sinks and UGV motors can become extremely hot during operation. | +|
| Impact Risk | Clearpath Robotics UGVs travelling through a facility can potentially impact objects and personnel. Keep clear of all docking Clearpath Robotics UGVs. | +|
| Laser Radiation Risk | Clearpath Robotics UGVs may use Class 1 laser products. These provide no hazard during normal use, however it is not recommended to stare directly into the beam(s). | +|
| Material Hazard - Lithium | Lithium UGV batteries contain harmful material. Always use proper handling procedures when handling UGV batteries. | +|
| Manual Load Lifting Risk | Always use ergonomic techniques when manually lifting loads. | +|
| Pinching Risk | Keep hands and other objects clear of pinch points at all times. Keep clear of all docking Clearpath Robotics UGVs. | +|
| Radio Frequency Risk | Clearpath Robotics UGVs and/or accessories may use radio frequency (RF) radiating antennas. These provide no hazard during normal use, however prolonged exposure around the antenna is not recommended. | +|
| Tripping Hazard | Clearpath Robotics products may pose a tripping hazard. | + +## Safety Awareness + +Personnel present during the operation of an Unmanned Ground Vehicle +(UGV) need to be made aware or be accompanied by personnel who are +familiar with the specific risks and hazards associated with autonomous +mobile robots (AMR). The following checklist identifies basic topics +that should be addressed by site-specific worker and visitor safety +orientation training. + +
+ +
+ +- Proper PPE must be worn, including safety footwear (ie. steel toe). +- Crossing into the path of a moving UGV should be avoided, as well as + placing or throwing obstacles into the path of a moving UGV. + +
+ +
+ +- Be aware that a UGV can be anywhere in the operating area of the + facility at any time, and may pose a tripping hazard even when not + in motion. +- Personnel need to be aware of the UGV docking and charging areas, + where detection fields are reduced. +- Personnel should be aware that Clearpath Robotics UGVs LiDAR safety + scanners use a class 1 laser and high intensity LED. +- Personnel should keep all loose clothing and body parts away from + UGVs, accessories, attachments, and payloads, while they are in + autonomous operation. Using an Emergency Stop button is the only + acceptable manner of interacting with a Clearpath Robotics UGV or + attachment while it is being operated autonomously. + +In addition to the preceding basic items for all workers and visitors, +the following should be considered for facility personnel, including +drivers of other UGVs: + +- When required to move a product manually, personnel must ensure it + is in an Emergency Stop state or shut down completely and should not + push manually for prolonged periods. +- Alert personnel that while operating a Clearpath Robotics UGV + outside of the Autonomy State, they are solely responsible for + obstacle and collision avoidance. +- Maintenance of a Clearpath UGV not outlined in either this document + or the operations and maintenance manual can only be performed by a + Clearpath Robotics Authorized Personnel. + +To reduce the risk of harming people or damaging properties, a trained +operator must monitor the behavior of the UGV under autonomous +navigation mode at all times. The operator should use the wireless +emergency stop device to immediately avert any possible damaging or +dangerous behavior from the UGV. Failure in proper use of the software +might result in collision of the UGV into objects. + +- Ensure that low-height obstacles are removed from the potential path + of the UGV prior to operation. +- OutdoorNav Software does not have negative obstacle detection + capability. This means that your UGV will not detect stairs, cliffs + or edges and may drive off these obstacles causing harm to people or + properties as well as potentially damage the UGV. +- Adverse weather conditions may obscure obstacle detection and + avoidance data from the VLP-16 LiDAR. Obstacle detection and + avoidance may not function properly in snow, rain or fog. +- The current configurations of the OutdoorNav Software will continue + navigation if the WiFi disconnects or goes out of range. The Web UI + will reconnect once the WiFi has reconnected but certain functions + of the Web UI may be limited such as the ability to issue a stop + command or send new missions to the UGV. +- If connection of the UGV to the base station is lost (e.g., WiFi + goes out of range, low battery level, etc), UGV will not receive RTK + corrections from the base station. This can potentially decrease the + accuracy of the GPS signal which can subsequently degrade path + following performance of your system. +- Obstacle detection and avoidance is disabled during the docking and + undocking operations. Keep this area clear of people and objects. diff --git a/static/reference_pages/reference_sensor.mdx b/static/reference_pages/reference_sensor.mdx index a0731947..1d5319b2 100644 --- a/static/reference_pages/reference_sensor.mdx +++ b/static/reference_pages/reference_sensor.mdx @@ -1,82 +1,82 @@ ---- -title: TODO -sidebar_position: 1 ---- - -import SoftwareBringup from "/components/_software_sensor_iso_supported.mdx"; -import Support from "/components/support.mdx"; - -TODO: update with a path to the sensor's image - -
- -
- ---- - -## Item Numbers - -| Description | CPR item | -| :-------------------- | :----------------------------------------------------: | -| TODO sensor | [TODO](/assets/pdf/clearpath_robotics_011703-TDS2.pdf) | -| TODO sensor, PACS™ kit | TODO | - ---- - -## Specifications - -### Overview - -| Description | Value | -| :-------------------------- | :---- | -| Mass | | -| Voltage, Minimum | | -| Voltage, Maximum | | -| Voltage, Sensor | | -| Power, Average | | -| Data | | -| Range, Minimum | | -| Range, Maximum | | -| Range, Accuracy | | -| View, Horizontal | | -| View, Vertical | | -| Resolution, Horizontal | | -| Resolution, Vertical | | -| Ingress Protection, Solids | | -| Ingress Protection, Liquids | | -| Operating Temperature, Min | | -| Operating Temperature, Max | | - ---- - -## Software Bringup - - - ---- - -## Troubleshooting - -**Sensor is not turning on** - -1. Turn the robot off -2. Check that connectors are fully seated -3. Turn on the robot and see if the sensor is turning on -4. If it does not turn on, unplug the rectangular power connector -5. With a multimeter, measure the voltage across positions 2 and 6 on the robot's connector -6. If the measurement is 12 V, then there is likely an issue with the sensor, and you should contact Clearpath Robotics -7. If the measurement is 0 V, then the 12 V fuse on your robot has likely failed. Shut off the robot, replace the fuse, and then replace the sensor's rectangular connector. - -### If the issue persists - - - ---- - -## Further Reading - -1. [Clearpath Robotics Store](https://store.clearpathrobotics.com) -2. [ROS webpage](http://wiki.ros.org) +--- +title: TODO +sidebar_position: 1 +--- + +import SoftwareBringup from "/components/_software_sensor_iso_supported.mdx"; +import Support from "/components/support.mdx"; + +TODO: update with a path to the sensor's image + +
+ +
+ +--- + +## Item Numbers + +| Description | CPR item | +| :-------------------- | :----------------------------------------------------: | +| TODO sensor | [TODO](/assets/pdf/clearpath_robotics_011703-TDS2.pdf) | +| TODO sensor, PACS™ kit | TODO | + +--- + +## Specifications + +### Overview + +| Description | Value | +| :-------------------------- | :---- | +| Mass | | +| Voltage, Minimum | | +| Voltage, Maximum | | +| Voltage, Sensor | | +| Power, Average | | +| Data | | +| Range, Minimum | | +| Range, Maximum | | +| Range, Accuracy | | +| View, Horizontal | | +| View, Vertical | | +| Resolution, Horizontal | | +| Resolution, Vertical | | +| Ingress Protection, Solids | | +| Ingress Protection, Liquids | | +| Operating Temperature, Min | | +| Operating Temperature, Max | | + +--- + +## Software Bringup + + + +--- + +## Troubleshooting + +**Sensor is not turning on** + +1. Turn the robot off +2. Check that connectors are fully seated +3. Turn on the robot and see if the sensor is turning on +4. If it does not turn on, unplug the rectangular power connector +5. With a multimeter, measure the voltage across positions 2 and 6 on the robot's connector +6. If the measurement is 12 V, then there is likely an issue with the sensor, and you should contact Clearpath Robotics +7. If the measurement is 0 V, then the 12 V fuse on your robot has likely failed. Shut off the robot, replace the fuse, and then replace the sensor's rectangular connector. + +### If the issue persists + + + +--- + +## Further Reading + +1. [Clearpath Robotics Store](https://store.clearpathrobotics.com) +2. [ROS webpage](http://wiki.ros.org) From de800357477d2fb93c94582efade0b911875f760 Mon Sep 17 00:00:00 2001 From: Roni Kreinin Date: Wed, 23 Jul 2025 17:17:33 -0400 Subject: [PATCH 22/25] Added Drivetrain section Updated controllers section to show how to change button mappings --- .../yaml/platform/attachments/_category_.json | 2 +- .../ros/config/yaml/platform/battery.mdx | 2 +- .../ros/config/yaml/platform/can.mdx | 2 +- .../ros/config/yaml/platform/controller.mdx | 53 +++++++++- .../ros/config/yaml/platform/drivetrain.mdx | 99 +++++++++++++++++++ .../ros/config/yaml/platform/ekf.mdx | 2 +- .../ros/config/yaml/platform/extras.mdx | 2 +- .../config/yaml/platform/foxglove_bridge.mdx | 2 +- .../config/yaml/platform/wireless_watcher.mdx | 2 +- 9 files changed, 156 insertions(+), 10 deletions(-) create mode 100644 docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/drivetrain.mdx diff --git a/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/attachments/_category_.json b/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/attachments/_category_.json index 2687e472..ae5aadaf 100644 --- a/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/attachments/_category_.json +++ b/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/attachments/_category_.json @@ -1,4 +1,4 @@ { "label": "Attachments", - "position": 2 + "position": 3 } diff --git a/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/battery.mdx b/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/battery.mdx index f5f0fc85..b4599d84 100644 --- a/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/battery.mdx +++ b/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/battery.mdx @@ -1,7 +1,7 @@ --- title: Battery sidebar_label: Battery -sidebar_position: 3 +sidebar_position: 4 toc_min_heading_level: 2 toc_max_heading_level: 5 --- diff --git a/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/can.mdx b/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/can.mdx index 83a4bc5e..ffe1e152 100644 --- a/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/can.mdx +++ b/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/can.mdx @@ -1,7 +1,7 @@ --- title: CAN Adapters sidebar_label: CAN Adapters -sidebar_position: 8 +sidebar_position: 9 toc_min_heading_level: 2 toc_max_heading_level: 5 --- diff --git a/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/controller.mdx b/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/controller.mdx index cdfe96c7..5f8c24c9 100644 --- a/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/controller.mdx +++ b/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/controller.mdx @@ -1,10 +1,12 @@ --- title: Controller sidebar_label: Controller -sidebar_position: 4 +sidebar_position: 5 toc_min_heading_level: 2 toc_max_heading_level: 5 --- +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; We support the following types of controllers on all platforms: - **ps4**: standard Playstation4 controller (bluetooth). @@ -18,6 +20,51 @@ Switching between each is done by setting the `controller` parameter under the ` controller: ps4 # one of ps4, ps5, logitech, xbox ``` +## Default Button Mappings + +By default, Clearpath platforms use the left and right triggers (typically buttons L1, R1) as the normal deadman and turbo deadman buttons respectively. The vertical axis of the left joystick will control linear speed in the X direction, and the horizontal axis controls angular speed. For omnidirectional robots, +the horizontal axis of the right joystick will control linear speed in the Y direction. + +### Changing Button Mappings + +If you wish to change the default button mappings, this can be modified by using the +[`extras.ros_parameters`](extras) field in `robot.yaml`. First, find the [default configuration](https://github.com/clearpathrobotics/clearpath_common/tree/jazzy/clearpath_control/config/generic) file for your controller. +The comments at the top of the file will describe the axis mappings relative to the controller buttons. This varies between controllers. + +Next, modify the `teleop_twist_joy_node` parameters with your updated button mappings. Here are some examples: + + + +```yaml +extras: + ros_parameters: + teleop_twist_joy_node: + axis_linear.x: 4 + axis_angular.yaw: 3 + enable_button: 5 + enable_turbo_button: 4 +``` + + +```yaml +extras: + ros_parameters: + teleop_twist_joy_node: + axis_linear.y: 0 + axis_angular.yaw: 3 +``` + + +```yaml +extras: + ros_parameters: + teleop_twist_joy_node: + enable_button: 6 + enable_turbo_button: 7 +``` + + + ## Teleop Speeds By default, holding the left trigger button of the controller enables driving at "normal" speeds @@ -52,12 +99,12 @@ extras: **Normal speed parameters** - `scale_linear.x` sets the maximum forward/reverse velocity -- `scale_linear.y` sets the maximum left/right velocity (Dingo-O and Ridgeback only) +- `scale_linear.y` sets the maximum left/right velocity (Omnidirectional control only) - `scale_angular.z` sets the maximum angular velocity **Turbo speed parameters** - `scale_linear_turbo.x` sets the maximum forward/reverse velocity -- `scale_linear_turbo.y` sets the maximum left/right velocity (Dingo-O and Ridgeback only) +- `scale_linear_turbo.y` sets the maximum left/right velocity (Omnidirectional control only) - `scale_angular_turbo.z` sets the maximum angular velocity :::warning diff --git a/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/drivetrain.mdx b/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/drivetrain.mdx new file mode 100644 index 00000000..5dab9e49 --- /dev/null +++ b/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/drivetrain.mdx @@ -0,0 +1,99 @@ +--- +title: Drivetrain +sidebar_label: Drivetrain +sidebar_position: 2 +toc_min_heading_level: 2 +toc_max_heading_level: 5 +--- +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; + +Each platform comes with a default drivetrain controller and set of wheels. Some platforms support different controllers, and some support multiple wheel types. The `drivetrain` section determines which velocity controller to load, and which wheels to define in the robot description. + +The following drivetrain controllers are supported: +- `diff_4wd`: Differential four-wheel drive +- `diff_fwd`: Differential front-wheel drive +- `diff_rwd`: Differential rear-wheel drive +- `omni_4wd`: Omnidirectional four-wheel drive + +:::note + +The control type is determined by which wheels are controlled, not how many motors a platform has. An A200 has one motor per side which control two motors each, so it can only be `diff_4wd`. + +::: + +The following wheel types are supported: +- `outdoor`: Rugged outdoor wheels +- `indoor`: Smooth indoor wheels +- `mecanum`: Roller wheels for omnidirectional control +- `tracks`: Continuous track system +- `caster`: Uncontrolled caster wheels + +The `drivetrain` section defines the keys `control` and `wheels` to set these parameters. Under `wheel`, the `front` and `rear` wheels are set separately. Some example configurations are shown below. + + + +``` +drivetrain: + control: diff_4wd + wheels: + front: outdoor + rear: outdoor +``` + + + +``` +drivetrain: + control: omni_4wd + wheels: + front: mecanum + rear: meceanum +``` + + +``` +drivetrain: + control: diff_fwd + wheels: + front: indoor + rear: caster +``` + + +``` +drivetrain: + control: diff_rwd + wheels: + front: caster + rear: outdoor +``` + + + +:::note + +Not all configurations are valid. For example, an `omni_4wd` controller must be matched with four `mecanum` wheels. Also, `caster` wheels cannot be attached to wheels which are controlled. + +::: + + +## Supported controllers and wheels + +| Platform | Control | Front Wheels | Rear Wheels | +| :------: | :-------------------------------------------------------------: | :----------------------------------------: | :----------------------------------------: | +| A200 | [`diff_4wd`] | [`outdoor`]
`indoor` | [`outdoor`]
`indoor` | +| A300 | [`diff_4wd`]
`diff_fwd`
`diff_rwd`
`omni_4wd` | [`outdoor`]
`mecanum`
`caster` | [`outdoor`]
`mecanum`
`caster` | +| J100 | [`diff_4wd`] | [`outdoor`] | [`outdoor`] | +| W200 | [`diff_4wd`] | [`outdoor`]
`tracks` | [`outdoor`]
`tracks` | +| DD100 | [`diff_fwd`] | [`indoor`] | [`caster`] | +| DO100 | [`omni_4wd`]
`diff_4wd` | [`mecanum`] | [`mecanum`] | +| DD150 | [`diff_fwd`] | [`indoor`] | [`caster`] | +| DO150 | [`omni_4wd`]
`diff_4wd` | [`mecanum`] | [`mecanum`] | +| R100 | [`omni_4wd`]
`diff_4wd` | [`mecanum`] | [`mecanum`] | + +:::note + +Default configurations are noted with square brackets. + +::: \ No newline at end of file diff --git a/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/ekf.mdx b/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/ekf.mdx index 38f6ab11..ccacb4f9 100644 --- a/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/ekf.mdx +++ b/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/ekf.mdx @@ -1,7 +1,7 @@ --- title: Enable/Disable EKF sidebar_label: Enable EKF -sidebar_position: 5 +sidebar_position: 6 toc_min_heading_level: 2 toc_max_heading_level: 5 --- diff --git a/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/extras.mdx b/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/extras.mdx index 0726a93f..b57d619d 100644 --- a/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/extras.mdx +++ b/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/extras.mdx @@ -1,7 +1,7 @@ --- title: Extras sidebar_label: Extras -sidebar_position: 9 +sidebar_position: 10 toc_min_heading_level: 2 toc_max_heading_level: 5 --- diff --git a/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/foxglove_bridge.mdx b/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/foxglove_bridge.mdx index 790956ec..59c7cfef 100644 --- a/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/foxglove_bridge.mdx +++ b/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/foxglove_bridge.mdx @@ -1,7 +1,7 @@ --- title: Enable/Disable Foxglove Bridge sidebar_label: Enable Foxglove Bridge -sidebar_position: 7 +sidebar_position: 8 toc_min_heading_level: 2 toc_max_heading_level: 5 --- diff --git a/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/wireless_watcher.mdx b/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/wireless_watcher.mdx index 0408e288..f595a1ad 100644 --- a/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/wireless_watcher.mdx +++ b/docs_versioned_docs/version-ros2jazzy/ros/config/yaml/platform/wireless_watcher.mdx @@ -1,7 +1,7 @@ --- title: Enable/Disable Wireless Watcher sidebar_label: Enable Wireless Watcher -sidebar_position: 6 +sidebar_position: 7 toc_min_heading_level: 2 toc_max_heading_level: 5 --- From d965923532a637c21df0a507f280105390e57352 Mon Sep 17 00:00:00 2001 From: jhiggins-cpr <60929523+jhiggins-cpr@users.noreply.github.com> Date: Fri, 25 Jul 2025 08:35:36 -0400 Subject: [PATCH 23/25] Updated image of A300 label to match new format (#447) --- .../husky_a300_nameplate.png | Bin 104601 -> 79284 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/static/img/robot_images/husky_a300_images/husky_a300_nameplate.png b/static/img/robot_images/husky_a300_images/husky_a300_nameplate.png index b86eb04e0097b87ecf93094ac4523c4a4a3da099..6b6e5170e74675f6cc5a1a1b162de6628ebdf66e 100644 GIT binary patch literal 79284 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 Date: Fri, 25 Jul 2025 17:25:25 -0400 Subject: [PATCH 24/25] Add documentation for ROS 2 Humble on Nvidia Jetson boards (#424) * Add new pages for Nvidia installation w/ screenshots, update page ordering * Add a new section about firmware updates * Fix code tags * Start filling in the section describing the new setup script we're developing * Add instructions for building the additional kernel modules * Consistent caps for headers * Fix up the architecture at the top of the page * Fix code tag * Expand the list of what the setup script does * Add link to jetson setup script readme, expand table of known missing rosdeps * Rename page to Nvidia Jetson Installation * Rename Jazzy jetson page too * Typo * Remove `x86_64` mention * Add a note about supported platforms * Remove other x86_64 & x64 mentions * Note that bluetooth is required for teleop * Rename branch to `jetson-setup` * `source` support for humble + arm64 in supported platforms table --- components/supported_platforms.mdx | 12 +- .../ros/installation/controller.mdx | 2 +- .../ros/installation/img/jetpack_create.png | Bin 0 -> 26712 bytes .../ros/installation/img/jetpack_details.png | Bin 0 -> 278376 bytes .../installation/img/jetpack_detect_board.png | Bin 0 -> 392127 bytes .../ros/installation/img/jetpack_flash.png | Bin 0 -> 251104 bytes .../ros/installation/img/jetpack_progress.png | Bin 0 -> 295038 bytes .../ros/installation/nvidia.mdx | 264 ++++++++++++++++++ .../ros/installation/offboard_pc.mdx | 2 +- .../ros/installation/robot.mdx | 5 +- .../ros/installation/controller.mdx | 2 +- .../ros/installation/nvidia.mdx | 17 ++ .../ros/installation/offboard_pc.mdx | 2 +- .../ros/installation/updates.mdx | 2 +- .../ros/installation/upgrading.mdx | 2 +- 15 files changed, 297 insertions(+), 13 deletions(-) create mode 100644 docs_versioned_docs/version-ros2humble/ros/installation/img/jetpack_create.png create mode 100644 docs_versioned_docs/version-ros2humble/ros/installation/img/jetpack_details.png create mode 100644 docs_versioned_docs/version-ros2humble/ros/installation/img/jetpack_detect_board.png create mode 100644 docs_versioned_docs/version-ros2humble/ros/installation/img/jetpack_flash.png create mode 100644 docs_versioned_docs/version-ros2humble/ros/installation/img/jetpack_progress.png create mode 100644 docs_versioned_docs/version-ros2humble/ros/installation/nvidia.mdx create mode 100644 docs_versioned_docs/version-ros2jazzy/ros/installation/nvidia.mdx diff --git a/components/supported_platforms.mdx b/components/supported_platforms.mdx index edaab207..06d647aa 100644 --- a/components/supported_platforms.mdx +++ b/components/supported_platforms.mdx @@ -4,13 +4,13 @@ |:--------- |:------------- |:---------------- |:---------------- |:--------------- |:--------------- | | Husky | A200 | Yes (as of 0.1) | No | Yes (as of 2.0) | Coming Soon | | | A300 | No | No | Yes (as of 2.0) | Coming Soon | -| Jackal | J100 | Yes (as of 0.1) | No | Yes (as of 2.3) | Coming Soon | +| Jackal | J100 | Yes (as of 0.1) | Source | Yes (as of 2.3) | Coming Soon | | Warthog | W200 | Yes (as of 0.2) | No | Yes (as of 2.6) | Coming Soon | -| Dingo | DD100 | Yes (as of 0.3) | No | Yes (as of 2.3) | Coming Soon | -| | DO100 | Yes (as of 1.0) | No | Yes (as of 2.3) | Coming Soon | -| | DD150 | Yes (as of 0.3) | No | Yes (as of 2.3) | Coming Soon | -| | DO150 | Yes (as of 1.0) | No | Yes (as of 2.3) | Coming Soon | -| Ridgeback | R100 | Yes (as of 0.3) | No | Yes (as of 2.3) | Coming Soon | +| Dingo | DD100 | Yes (as of 0.3) | Source | Yes (as of 2.3) | Coming Soon | +| | DO100 | Yes (as of 1.0) | Source | Yes (as of 2.3) | Coming Soon | +| | DD150 | Yes (as of 0.3) | Source | Yes (as of 2.3) | Coming Soon | +| | DO150 | Yes (as of 1.0) | Source | Yes (as of 2.3) | Coming Soon | +| Ridgeback | R100 | Yes (as of 0.3) | Source | Yes (as of 2.3) | Coming Soon | | Boxer | B250 | No | No | No | No | ## Supported ROS 2 Middleware {#supported-middleware} diff --git a/docs_versioned_docs/version-ros2humble/ros/installation/controller.mdx b/docs_versioned_docs/version-ros2humble/ros/installation/controller.mdx index 685e99e6..e028de17 100644 --- a/docs_versioned_docs/version-ros2humble/ros/installation/controller.mdx +++ b/docs_versioned_docs/version-ros2humble/ros/installation/controller.mdx @@ -1,7 +1,7 @@ --- title: Joystick Controller Pairing sidebar_label: Joystick Controller -sidebar_position: 4 +sidebar_position: 5 toc_min_heading_level: 2 toc_max_heading_level: 4 --- diff --git a/docs_versioned_docs/version-ros2humble/ros/installation/img/jetpack_create.png b/docs_versioned_docs/version-ros2humble/ros/installation/img/jetpack_create.png new file mode 100644 index 0000000000000000000000000000000000000000..45bb35669f751cde8ece6ff0a7330a8a7f5b80d2 GIT binary patch literal 26712 zcmeFZby$^ayFH4cf`X!;ASfwnZLJJV%ne8o&ejGb22Li1C@4-t7Bbz}1xV3P9Nz`K zeCa#=i!TP@6{K}rbIaV-ukor2nMt`;CnBc0%}-p>giL#);dt{fXU2!O=H&ANUcr)rm_}^f2VVI*IA^ z+quBB|3YzV#+L^L<-!{i0Rb6N0fB!#4?IPzdkC*c?UVcUT51Jkcb;O1*)++-(fGdO z=zo0s^Rv`Ds`d;eI|9Z%?~{r-u4P|F42AE@u(pa&;yhz3BDjY=z+T`@IMu3rX z!m-`XW9QHde6Kh<5Vd5Ql<{NV5go^MI!YgIPuWc|deMoTG}#Z%vUfc9IptwC*YB~b z)6xC>tHJhO{)f-l(zk@~C?>jj_8WL_;~EvH8??J_;l14&+QJ?%x$(g7GR?C$DENxz zpD-~PRaxaEl1%s~CxbaWLe!Z`*s7ZtgRd!w1QDNLc{rNkQc#X0$y{7;%Uun=MN*8x zVp@3WZay4{L$ZOXZbIvse51|ngQl5D_k&MX_lk=xO}2=vOHeU+7eA14%DwzrC4(~7 zxe#MpT}|7SzqHps(zuBF{&Th*dvy&dgKE+WYp|nZ(f;0gl%Xeoho5b$%CvYe%sVF& zm|rTA5?p##7IZrLR=NgsP8QZM@la5B_?@hE^vnzpB)SGhCYHQp>t$7BBqsX2WXi0P z43gFY2F4~LF17~pE>a45E@pb1`egik*La+`-~tu~2ptk93v)|5E+<~H-`C}Wzmad# zlac&B1YyQYrXndrB4A}}K*B=DLdQV++{wg&iHz?W36HJ5A(xz>&|jB;SG;7#2!u5k zJ-wr&Bb_5Not3Q-JtHS4Cp`lbJrffx96@X6Y>CiuqP4VpfV{+?YX}DiiCBTTF; zNs!mn(Y3Ni@RE_i=Oq7XpM|xgLZY=-)*tegz`w2XQz9JDN~YzDNPtn6&G1_qo4 zoGiNftSn6W|G1Q>r5!@YQqKT+DY!VD30y~?QD2XRjh&sAliiS=mW9!fk(R@Nk&Twq zfPt04fPtNfS@)lpkhV2}S*c_G&sHHXr4N_VW8~z}Wq~#@F>x@_vgot1(dw}3u+XwG z=yEV~Fzf5-80h_OjlLe2kd>{44h*M>g^rN{y|ty$?+=h2&h=DAl$VT&j^W?$$e8OO z4B-S`G6@q)d#8VYpkQKQAdk>N_9i1cD+4DR6B9cJ{9ZPaQGgDkWniQIuN_AJ*8|fdW5&Opn1}wq^a;=J1O5?Y z;JiQYLGXfDNdI>*{HxEPz5geF{u+z_leZut`QMxTkNWq2yX$|u>wnY(|D%KdcXs`6 zcm0og;D2=R|IV)e-@5DCzv+~LC7>WjAWOGAx{y@=imte@Aj&!NzfTn@q43UCYmpar zC@2^>$p0^(M91ERH_;HHlF!i=uMlA0rMTGHgn@!Wf+8yTRKaOzWzln< zWOL;&Plk^ZpZqFTulA>vP3Yu|pQdwlG%}i7<8w505Z1G>un1x<~{P9wdNAL`L)tOQU9iloXU5h zp*Y>$-5_~4ri_24 zhRnP}Hj2od#CBuiskw!P^WLCQZb8Avk>AG&Bf~QYjC3dE+qf=-x*}q-5^z?KLzv z`w95m&|$b6wtIGV_G@r3BsMm4$f~B2mWJkFIj4$&Adtc&KQE7rf#JPck)_SnjA+_* zWK&V~J7N?iH8LeOmkWdhWMx)y6Dex{Xmp#Kd$Pg9z^i z3c*LO0s{lF)m2ngFTM{At?h{878Mn}P~F#e2MY`91~FeijrJ25n1Rkm9CKXV{Np||HReWnt_Un>iL-X zdc>YiT$oVeB>(v#R*~f>85>*p_wOvwk!i{~M0|XF3K>d)&<`kwUi$2oBasOtS>dLA z>D@3ZqS>uF=&Me2x5AYJg#<)I(BtFdV|koE@SmUL*L}Zq>5}!@2&ZC(@5hgKpd}Q; zLxY2plasHqvS?qtctQT~q0RB0g#kbOJu^2am#h1HYimnHN{WJ)cQmsTm4l0GYHsc= zoLgiyE|l1r#HyFB#W z#0$=4XGgwu5f$}Cl?U(O;NZc*fy`G4d>R@W5lPAVj*g(}>L-QfgFik}E3X|n!)>Bj zOkR6?U*?LFTKrIIzlQ0XlEIVw`t?iO zz`$EGXTB|p`S(&SwkmU2z4*yxcPU*vi3FX~buTloT@T0iF6I?%9GuO)y|3=adn3g* zUI77^*_stCv#k;9M~APoaiRD6j&NyJWlC%fvNg&a21t@V71a0lEA>5=>msmS9b$!r zp^$}dVq&r~RuQwagW%!eG49XA@5@l0U+7MJ;xW)Y*B%4iU(??o9--;t_wpqQo7I^5 z)Vy>o2Xa=Iz!Sx=S&&gvW5Bb%_VW5TeSCO0xw6t$>3+=Ne#BB(Sje+KV#i|s>wSXf z*$b2A!7@jBqmI}Rt00IyKDYtKEYUthZ+Lz_Nt#Ha(cti1WF zWDKlb+P!?}LX!(6^7ZfTl(_6Z{`gq&i%=keV+HB*u1gRxzf_`7;KttG+{$3Sm|0U0 zAvgN9YjTB>Fwv-~{b43gE-v~723|+m+uLhli;9YBDgFp?tEab@N;!K(gMWQu;w4PN z#$aMfYHD$lscV>+3LUv}$zssSG_tuo!o}G#khc ziH=s)C77C?PSYr3vtRm2%E^iE>FEi>mwxHCW1$H0u<~*qXy3=R#Me&?Uz(N+Km8+mcfzH|Ds<>fFz>pIS$?J~iWf*aI24-R%z-Gm`RMj;-6Bj74h{}v=zzQU z1qUljEkOK3c~~hn29uu4ehK9fsw#$hvGoP7nri4Tr%7)-5<#(1Obs8BOKF%Uak&3&xHNQutRauTb zqHky@mnQcRPEN_RLm;j)YJt)L)T?BnBK!^5HP-^;8xeSmqow>~Znu?_m! zaK0nXu;3jBH@Dqv%bn2v_pif!-rb>wHTAOFSm9c=`a}0KXbAE-rKP1|C`HA^Yez>l zOcqg)^Ai@_cavTr{BLUTfXKxI$IjmSGqj|R4vjo3+JdfC>({7)q*A7f#yuX8kf6YZ zlCG5X4)zXO+Q8G}{ZQB;%+(+YBwtRN@HRZ&UsqPW@eUgM1SaXm=H_I}N9u<`aSV4c z?{hl@Gz8wm8-DoR^V|dZ+*MWlFt6(B1Yza1@y(aHd%)HJgO9w4x`qaFeK|Wjw{R;U zmjbj68LbP<1{$;(tT(6X%lP7Hko#@`Nm6l&Nt=OGfXN4=a}jpB#xOCRbM_`_dKt2_s!{=vm5A*fZYw+_OPIh{wzncw6*$V$YjP2%y zV%ynkXgBV^{{s^MPM{zgT=D>UVNZ%bu;~8{Iju!3-C5si%Ki;L9-7?x2afvBNB9eH zk^XtgzW|q$HVZVeVd~6St3%Tk_NzBH_sN+bY_GlYEhwc7JoaOz5ohsB)iq%d@|S2?-)aNObw|(C!{RYt~>C zRkqshSYa+_KE{MUBkl*3n+N&}Y{;LUK12`SswTHhgC1xhNx|0}scwUw(;+iFqUGiWz8f zL30bgavwb4Cp3W|zqf~2`6ZkE;~CHF_u!+K?y9Pz1>AF{szeyNbn{l{Zi+mQ2XA}g z(3;p7WFK zH{RYMp`nSH#2m&X1KAp`d^++zKq0hV2vyS1yLcaXVrY6Q6elS6Gg6 z>FVmXja9; z`JBmJCPe`Rw}2=W{y+yIH;9P$@#P&9^o&nP9Z^Gfga`?Z|$4v9}0oJzp9{2m`0l@LQDlMf{yf%Qzq_1Cl z09?PlLD&L)E~%;Mv78tYffxFKV%s67sJX2z322Byj%HkHYHC^kF+GLbE7&6yGn8hR zFKeNGgYBa-dixH2fu~!+*JgZ-U(wzFcT`wIYT z>qbZ8obBejb08O)z>oE$E(u-N!(ZnI9uA7Nt*x%u&)b$?$MgX%Qygc?C10!k;nSVr zNT01$l|4dU>bNeYub-4R+U4lOWYZ&KPU?B#_j8zLKUpY;O{ zr4-7<{Cs1QU+BW2gS4Ey{8dcMnb2Tfc9y`w}Ub%5MHL0k2cX?oOG=)8< zVvk^LZA~JEE$f#X_Oo}XRI=v7;Z>D}fzg6OLQHOT)*Z2&dU^bIz1o)ed+P%UvWdbrhg-99 zA7|r^_7?pU5{O|sQ7|*(WGS_N+t4{UIvVROsf1NQMj`w@Ha0*gQAg!~;Vss^j^fQj zy|`ehiG|A9pDlhc8?WSrq3bQu(gJAG*+IyS z&!mqoD=Q0#W^?eM^DevPeE^-w+55!qC%5S6=-Of#L&w~IPCM?cjtjTU-Y((7*bI|- ze&sp=%O|ZW4?z)AINy`>Wv#pmN%4? zlwj8zN9D5ufG}l+w>{-gk6Y3S`z11rs0UzJVtZSuXDH_=*~esRRzw5#>@JqoLxIR} zxLPzG_5_85jxNYzxTw4Qg&m2f_8I`_k0h70ccc3#o{E@6*{yWMaWR|i(L6*!Q7Q5u z1b9-GqF0Dv(Flwp>>hLVB6G@%Z`v2)xb5k-nCFr{vltw-4rzsvB(WGc11jWVJj>r~ zX;)3@Wi(j24S02JQC&IbMb>vY{6Hb(6sA=xEMG4jFECR!Y>WL&fcM>DRdr=`)yBr= zg7#W@$Fsf?l>-NOO5T5}u zxec*{W7(gaDM?94;)B9d!Lzx!sRJ8Mx<%%9rC2_@(k6Ezeveo{FNU4b?UN6DN`QJ% z1|={IR;G3)@Yxe!Nn<&zj(Mk~P?FY=Uh=t=fyz*pCpIxTJ6rD;id8w%##!j&gO(zV zXLF-|rghZG)fLZ~j#4^)=A*JE)nC2fWK<+?(vtTwG4Vl3NeRU?1rS-ls%0s5wCciE zqov-!3SscXBAP40H(?UaEdD(HmY-i+X?_+f513Gz@AS>(ZM^qkVM&OZ5$OuNXXv3% z$f>CO-oJnEgYA1VJUcfVoymL`)41yq-jo*_*4EhZdQ^opp!si;wbpiaK!^ww?9v+E zlL{cIrIy6WkCW4d>okFyEm-^~GAnE@wYB(3#vQrD#n=R$*Hkmto}09M(;lh!qH8_o z92gnVU0QH2)LpvnA{30Tp&v02*D@IKfSdcCtE=mGRg2u3PJvcx(mEVi>Qg<*;z-b+ zZ`h9J@l8DKt&am)iX0{uZ~li5A2znPsX!d zuQWWLErKN}>L-dqPVrDK#UTzm*bX!WP;rP3oMY@(>XPcnf>+gg_v3@209DhTt5PhV zo}P+wL|Av46b~@bNWQ>D((j=m0!m6s`<9CK!_Vv*2E8N@aex!^TsIv_0~&5Zig=513ou>BlpGolV7tESFSbq z|$8o*a(Qf?d1j3FpN})Kz4I&HMO;gO`R+zJ#X-}I%F#JTR_0c zQW6J7mX~c7ku9dhQ++R|>gnbAYb&D>{1+VoL9>9!0@VD`Fh~u#8!_H0s&kIw?&qWX zm`+A0nwpv|Z1j}}WW=63o9=N%oQ*+2L59`bs2e*w3WX+kLsIs&w5yB)&z>2Nl^>4R zs0K#wEcW^sw1(d~#JB6QrZ-R-%A<+>+MOsw%|8CRCf)JIMtOuC>wvdE-p2lR)v|+l zVnk1l6~E%BN$=O|dJO@x;ru5X0{th&Z(;weJe<1+dXw>J=`QblAJ7e8iC%oR1ZHL0unb1TaA80asiQqh4d`*gk_4H&A1{}6K=%`mPWeS^{nn+gS7=HM?W!A1n!E`~z$H$j=7nx*k2Rku^RCH5Hf=Bdt zPENDcLqA{N;v74+`CkD1wOf8t1>EDl!OhLRZ%W?^EGQ`G3G4dw z6!rf7`@hPanL&EnN1#$MR$IR$_6aLlc0lXU$7Y$LM{yADPkeg)xXj~gZN#9um@5y4 z&S~jxdG}@@8L`)GB=uGn4jwr*_*l=z4&oW##w86guL4irgChIvQ}O*@S4iQQy55zL zPS$)9wqPZX@Lv%O;{h4@tkb0~kIv~u4TC~1=Q_)M_(KyM9jUH2oW_a^HcnCIWi08p z3tJV(6ja&p&-3kNk$zr%mP~OCD9Pg&Cpc(J+moxpTsDxYy?SqZUV9BA@FscUy1-GMFEgC>=LGg{eU6W(xX>f?u`r@qC z)waale1=G*0!a_IM7%HgY_zkF^TeB25&R&|^-S%*bM`O_ zNRq09y*=&bx`BCL7LB)&A1w_lZ9!d?np&C`UrJwk#=z>x@RF89wq^S4kI;@gl}~x) zwNB0Ek9L>SXZg>XIuk&fbyypEp{r`oMY!Cb^?;o{0v)gYZ^#H9>z`M2U{yx{8 z*POdBFJCnYOwY{;0VD?nTPAD0rv&5k=g%rCDxU_HqnI6Ua66v4=jIg@%*K6lG{*jU zNkj9jm$x;7eturdL#YrSdK{$8FBZdvPQ|X;R#wuW;xij|kg%|X1z91G1O?s99+zLO79 z71FSkb2Kkk*VlV*e4Z>WD@$ZwXl`lK?O%CupU>^?%Yv%RWZ_Pt7RjFt4R70H*m{A^ z7(C+)6sjH4>hDRjqXfzzz#3ti^fej#Xnbl}RmV{r?TNJv14zI1EiKo?#l`8=i=WiZ zpwFtKM6;Vot@Bmn7UVw98OV1(b_o5{)!68x1F!(3Rb!S9adGX+c9m1W&+9#W8iI+X zB_uFuRliqv4q%y?nE|kCm}zQ;Fd=syb%c4B;brCNQF>4x(3m0b!s%&gKBY=-5Y#Vk z89gK7F=n`akByw0GA3XL^Q&aS*CRKd8-z#^6wt3&sSqadQ&4Q5h7wy#C-B8R5Dp4c zp&wg2Wb5SJzYm)N1_s97+Gs1ZMvmfSXKRbh&6p!QJA0(kJtqIE(Yk8ReL})0HhTiK zLQ5SWQ%}y+<-D$7>DF!B3ZvG#VMc9+ORHJ;_WHfMJWkLK7UU?w1_psx#Kom_(0+7; zrSj}(8L`lHA>dO%PagEeTt}R^rY2Di!s)UWzZQjLbdvdam6oSze`d4qzR;uPF{jh( z=_N{fu(%y*kEf8z^|v#fU*WmW&C+H8981KpDJp7}A=aLi;SJBGC}tRR#`CsCa-zmb zrMMOS7y8(oyQWk*rFGl)wnxvDD6$V7RutH&_=k^PC}pdQ?h}nN5(L70V76N0Ioe%M zVd;}T(Iumtmg)gS3|kh^O+krw)jd5QSoyPM_xj3|t&rPHu3lr8X@Q_rkp9ZAT>bHu zugdG13%f3_U%y5MmSwB*pc?J!nwnRsO^<|v2%7zHC{X~1>Gjl!?zojvrllRy-efiV zIkPp}DyP=|soU6iBjJkM+2OpQCj}oL5j{OUXrb@^Nv{eeo6nn?MBWD9?TBJFf-r&8 zS?CddhguosP<|{WIk`JeQT*Xeq%Ol@zjPZP|4@1lLdjbI58)~UYx+`LkZM@y&PQAK z+^F0V>^94(XjqU<#Ak7OZ#zlMg?J=T>+`q~kPVXYJz7MIyw4bAGu=ofO;=J}ym98b zZa33(%b;-NOQnF$Y3+e+Lxh+|k!4>rm8`r|es9cu9>jZimg&XCv{Fv{g|1f%3tt*< z02#~!qO9pTZ4VGbN=nLYtC>}DDg9_+wYd6(V#U?Ei5!;M&%!@E; z{t*_3<^I5iKmr_GTp>e43e~Le8m}wNE<472r#td&7Gr`5eD1!!zSYKUp1w@vU9>l2XSh(e>N-122>$aWT|1= zm;F3PvjP$+&ola%Tz(pZ#M1EPx&PL7p0pO=?1j;kB3nKH#FNX*8TXehXQ_z@?Q}8y z?dCgVN2(|v-!vHtARKm#WWk_U|1NX5^$!Z_@vyYGn8B#y{;Y0ncz8o(t{!BLd`z{< z9M|W5}VcAVDa`P*M(SK*Z!n?>Ez%$hGZ-i`y%AAsMtMU_8Lj$Yu8-la$Lf! zZio#0ZZa%%=$a9pG?KpOKG9SP#)vlI))~YEI<1!2D=`c<$l^9KYl0#v*xH4 zyaTEE5&PO-1~NO&AD*2POe;N-NOW=Y+vrYEruz`cd&ulmpBf* z78oc2KYx|(@^jGOIc=scIXfS2D#p(f(7)Jy`gRnP{WV-%PkvXMqOCi@ zQlgAPHB~8J%o-pGK}<{>L?qAO={E0O^h8YT-4?lbQBjd7o@mYUQn$k`;{w%(Tm1G* zVWu(2tXNoB9b^zB`vI;4y9oFf0Z+9OGFWZ-@c#XVBMEj-n6EGTQh!#)kmYuGd-^Q5 z)f*I(=B0>iKy;(zT5Adi75BXx-)D}08=HBiQcV4MqhxHcYfm73)^=}Jj3)umS9#50=cD6?T{A54+h@Y?ic!XcWS0Nw0x_D8s$Fd1Y&onCue2^O-&y| zqE6?;XnGO!UP$oHL0;z)8XB`*zeGN4$a6`FpJvI)IW8qE@fDYrA~Rr+Ue7HmqNJt0 z4(WWU1U`$rgxBFQ7m-3UM1_2#bs{=)Es`^H9?#R=2yEZ5BW{H>CJ-x5j+S!(z8Uss zzF0tTX?iRgcpM$3kaZ5$*4C11pcr+=({54`!k!N)BnhCya67O`JPRaXwMHOl3No#vGRO756_Y8e%>xEShS@AQoi<27 zz|l8bQ39rKJX}aSTxgYOpV5D^cWjmX`1s4xPTZ@uIQyaDVKsZgtESj*d{WRXvn>_U z)kRBiIk~t##Kf5OJWlRiRJhPF+M;|?#&ZWUK_DFSW1Xd)v^;(vV>F~}%y75slWeqI z`^OadP84$%0?Gb6ne@MMo?2;}?8v$7t)w083pKKDq$&A zHnCwGFBkjWNykyX^R}UCk)w{PF3t6o@(C@5gvo^Mal@p=ol(AzBX$KP7Jxwkf)(c<-EcM38e z2uO%P)r)xa{kKZV^DlTDq_-p!wPCRj#l7`ODW^Bc=A# z?a{2LpA7uN>lzx6d)%4)IlnOr0iZ;^o@nc$JodDnhd-NNBY4h7wj~bSE`ks)8N;@D z_@)z|(^fxidE1Ld3ji}}_jeQdPznP(2(!45f9}PQE-+0>Nx>V$QYG*c_4}Eoky2*? zsNz??WAIM}W)4nHS+FK95fkYRXKTz zHI@QE7KQvF#pJS4ba-?nt7Jbdgf}6fD;SlUFDoi4M8(Hyb)^X8<>k9g3!tGjh_Yzb zkGb67p_%%bCeLCqbQ^*domOQ4B#0quAm2bk^EqD2mKG6twB@q2zMk_P#c}DUA4Kns z?M{9>Ao-w*Z|-j^#{~nw7i|qu%1|swAIWm_h778@wamA4;sTaeP08XB=olFCN2!E_ zg!rtcVN7Ia9+_HI@sL37{Zc=!@fcJhniIp%w&h<*_dQUZhTgn+6M5?NH97g=>a$@+ z<1P}ugpHDPiD%EADYUNx+DifiPNP;R@dA&SI2im~?J?}i7we(x9&;&^latR>ju+@i zab>HQJcG1*SPTLbb7YPreQthX!T3r!^OHWSak}quOJ7zeCaQbZBjgf=t{cRG&j%VZ zQtUAeL-T(8jaIfg=Z_Fr>lio=AD3~B?272%z5C;&4Wv{;;zndR|HFo}_&$|G~>X_%cJHRN!_@c(v zC^jCV!5O68U#>{Oa=o6q|^z9c3}b{IhdK#{OS?eLvv z1f@rSFXU#@Ow#Iu5LGc)d?zoTdR@r{S&J*~Mq+o<)}7YF%|_yNZVM2l-c;ZS9dub= z!MywOsTIkC2VTIM!zvG9)R;MK^K2)nMpSK6P(9PpP$(!VGr}=~2Sqw%&Y80Ar4o5< z&2#QX25_U%yW?8^>SAH@A1? zd2bZ!HQtD&<{Ed*FXLQP*`6jiIXP9yb-N5!EU;(A(Hps?m39$xSihu_PhqfJ;Q$EV zwY&=v2b+*kvSjN}4*@o`yS#=hkgBRLdCe@8cnd=uqd!}tH6&4Z?U?)0p_dZ3<5H%} zPVpm1l4*m~mZ@0~y|QB7)6*NtW&gPMs}%KKE{jemxp4U|0g~lX|j61gY0afm(b%a}H!%Apk9ENl|8cs^l(Kfqzi1 zG05P@JdRVwv0Adn3pJC-mlhjNz;fC&nszp-=5BHHg!me8f*{YS+AC#R(*tc07?{Fd z{>1WS#PU$!a|}EX1e;ph^_m^U6|%@3skJuOw{oI()^rw!3aA|nRwApk&-5Z3AksqO zPfSJS?0ND;bI{bqkRPa1*U-q~iQ<#539hZYLy;)udG=c1C*EWXJ7CAP6(*G8Fk8_I zH_-}pCu@tzC*+H6A55J=pgGB@J)hydutg{bLdVAPkXACNP*~2H6cw&2(QjD{8rtxK z4TeA|PEz}NdrGRlxm~DI;PGWtAL1exMi|qjpHvqeJD?HV`KBvyL@Ia zmd0}LM$B|oiA>g{0ozcb#fzWa80WLmf$*i!>L{gtWny(UOO@_~DC~#bG_>Hrk?Q#X z<|kV57pDdtM1zglS@%@RmX0au1Tr%-RjMrAb94N0rGxm~kGg=jHnN@CRYuFtEPwO9 zIVGwWa(+!+%}r}XGKX&U>W+0ozmk8JKmp~N{yjG1rq5MK%jiPaXH)>np5{H8kR(sb zO17pC9sj7`yB_l{j;iPh=md+SWkq@S8L6h?DFz?Qf5n8f=kpE)7kVy-m8K?X;W7KN zC}zXQ@-@IY;}Seh7PVxiw+iMU0v() z-!mxq)H)e)y^2?sa`^j;UNjdwm$28-mqOw~X<7R*K}3L^o3|@Ft*ErhpobN~9!f?r z+Dl#O6@4k!aeNFde9wNl{}v98e0nFyK0W-IRSFcOb+uT6l?PkrDKq^VGZRDWC3btk zl&ju`kP~y;Zf6fR8j5+lA)I+sLFeshfft`q-`5A?UPP{9QQqzN?!0e5zkiq~$SurM zQl`r~s;?-rv&sk`RUcJo^`8Gi<%Z+=^^6&GKfBSBO<|8S0MaqMhjArf{Zd)#ye*|= z(sK0lN?X0;U1jVzDPdp^>ZIN`vG{K~t4jR@GYBN_LI?4XGK{hDBV1fu5I^SH;=n=c zIbMgf2UD&PMqgrm8j*sk4f|NS=y#C0I>Aeb#Hd7TMBpaFxp%KMAc`4SX!7(uLhuhm zLO2wHwL)l$vx^Hh5s}oa*vD>TmXUJjP-J+aqwAPaww-(;csmP{CUxckvMuf_k-2SJ z3<FViufq}5Hn$TDLeDzXX&>zZ^#BP8u4E9sGG>k{$#lTQT__-`@spH-CZ0ld=byPT%vlv1%M)t#NeqBxY@+pF;{<|%-J6eI^|-=+Lp@oFgr z8n-QX9C4RNp8-(a7cj_3fK+KVkdq5Cw^FuhGc}>6>}4`|3UY4lvZl2-&>NW$3o>ut zVks_(LPulbGra*N>~>T($SQIf4zys^eQs$<2VxFn;Ci#v*df!mvu|@=mAP(SkG@RY z5W!rj(2)i_Ny0DsM@-z<%*1D}FnTQ_@X~;#_hTn=*pL#I+|Ft*9!OL!`-_r>hF_Ti zOLKCpau1J=%yR5tAV9smgiJ8o&9^L?T3UMD9T(x^rw>i#FV8$ukgpC{R-3o#eB5%BlPst#Kb4Jxjto0 zgT5uj=R}EiDIG}Vf_1;6baz=S_RY%1WNpBGPPr&INoWj<3sue2nx+0&vKAMxnSqik z{9-K69s^9=PA+qugx_7-O}P*YpH4;x2k{-*9RZfg=&OQCRCmzXK+SF$C)Eh~5iz%D z^WU301-Q^NHOl(QPwUe_+y{?V`da#EnIrX6U$Ep$1xeAUe0y@pHwMAOd3){-zAq>p z4MF(+85z{5XxGCazh!dk&@n$Zw+58?#KxbU%;Wedw?#xnW#fau$IP}!_Ufd0uqA>% z7}!B{ABHrCBfuXZ*~RY1h0QKTMn)e(LpOJJKyY|7adWr6JX7NZHuhP(b+(C!JQ*2T zs+uw{)#w~;jAAQobdd~g%EOeja13cOBR#!D*b+5^e&~q+#LiKr;}NQdpBeRagz+(H zpDpLH?ZbF!SZRu_os>G#jBgmy+P`F;(B)9WpYao?MXiQYxivd14GWy)5J+ic3ml z+Y1QREZ5Re(#ZdqwfzV44ebt^bYSCX@|&g%2qE^)K0tH8`jYNTduhaWglAMxK9w-uosCP7Gc1tEtkC>U62aBwTA>B8% zKki8h`6fR1W1cQIcOYL1*4fptYyE=H=R-Sjj>fyN%j~YDIR4tuL3Rc(u=ElIy{7l1 z>g7%$^b{Vl>E9KyR6h=CwHtz!3vlyQG%P|ICKViHo-XG%+qc9=vi)!m_v5I{9HlG* z@Llh_CyGgkk$;kEmZrFT`Eo7@Q)y|2poJoXVLBa-U2;;AHRmi7fP`5f-VBB-k=U*6 zot>RC9KhB&9m*HhqL5;s&W}rq@4HiV648|Ufuw79RX+vU1X&{kMt1)ZI#$*@kY9?8 zjV*>XF^+dJ3)jkOos3`4z@Xmq{8($~yG5ev`uw_2w>ArRAV>hvS0Dpo{vLtSJ!P;3 ziAqS+6@4|4k*{#E52Z_d^XAg5%?vmP7$&!`B3v`>L7B1}uHLw2IIyO% zf7@5R6yf*n8$)u!5KJuSv|Ojnsbi@D2yG@K#f-G7C!@(z;O+Tgh5NYCjKJ3F>CfIr zNJ30BtWje6P~Zv{>AXXbZ9a_{0>OehhW{y``{jvc`jq7iigLE*=QGbG>Q*q4mmf^| zFTFhEYdNa(!wI8S4uZT zGzCMUUpYPARlXQ}?at$_BI$ALMo$1131FW? zYO;qH(Mf5^&ZU5bLv}EF$1i5t3yWVHTmv-zns232YK>X)-0E#TPBt5lrPM&#&{=u487vH<=wryVDIxW>n{Ch8-8|g*#JMp1E)_YPH)MX3Q4@?4I zp5o8g<@ z{Ef;N2iGAn$U)I%F%tTv&DM(63+-v@I!SGibQ;{VUQ5P#o z(yUCnX#c?hHVN6da>@g$I358p+KUCcNEY!5m(4iuiS7l?>#H73_43d zLKdoJ&uV~9POG~ENf)m{jUUc9>mM)tTTTsT+z*mSqIQt-pVfo^Vcd7x;=NM!Mo-bnY2c&|e1xcpnmxZ;pwbM{TApeQnsNT?1 zJbDF1WaQw@#?o&=0XBL+3ejGEw3GqF=oTU2X3tOW8`r=jBiKhKmm)<7yIy>{U!t6x9EbG;N_z~eGQ~$b8yiv(qJY*d zTzAQ1%8z7qRmu(Z+g%&I2St0Z%_XajFRyBXD-_xM|Bj~&&9%ohg0~v-LT^m@hl?yy zUThmaCvsh-H(Tt^_hGsa2UScl>=s`k3D820fL=mc2ju6aAW`sthwo9338x!_DWOCY z@aM$*vJZ&SfUoszXY>JO0&4zZl~C#AsUfhB$bPIO;&tiz;*0?~ zEl6x$2L2^v_;w3d!EP)05#jhk6Ln7cYj6}p9T6nO7(CD1!07^xlK?_yq=8->cAgsa z2V?i1iiuqVojP$~xB^N=q3q3eYUV2JW?v=VEzHd|fG=WezP@`#x{lrb2oZFj^EE(O zun~jGdI2<51G?Dt%JU#dFQ9Y*ga+$Dtv1W2f}eRHMh3Gj>X@bGl4=HvpCUW#}mkx|M< z*-BB978g%6$OsoB*=l3%v<5i^%A}kii53ekUD433vNWWFf!l}<83OVL-|k{fx8iGU zfxQN`t5nepa?g|PQdW7c`<6(HaU`SOuM#^-Mn=Z^uU6o9pwTRkgz+_i?Vf^pZ%n)r zu|5_D+2UUQOnzj&l&UI|>CB^e&ogJ3-H=!PKdi3-9hp;em=np9FfZX?4C`078@37F3m0T!eV`H%#&Oh{H zLMf#oyO?vkELf3Rxf^CT*kZ3$pP%jXD`jaWuP`IE2IdGljW2&vqzJB2-sIDR&1r>n zm8;;@g8Tt&Q8%Xf?@1SBkEW`ZFezuNlX7rGM&%nmPDoSCz}-zq3x;}uKJ|>rwK>Zk zY^7pX^sTbo$I9vE{SyjyBjS}%d5g^HsVcn_Gn=Ht0_OSF8w+HC6jduwJ>3US7@xs} zN7_^&xnpf_4;;apfYlV>iOSR_%xPE@+Q4ooJj;NPm>vS_Zva^a@@2X#1hbFHp&mU6 zz^xRFobYt~LKOKuK-MD+eD@+1ax6dy7#4I+8<%O_xqi>VS1Y{*31 z4sa|E6-un>>B+0>v=}Rog2Fc>TY&8a%rfSIqhhVNw8-UIEN>(B@^H*|KXpR=738;a zt;YE}C=)1msy>6KKYcGM#z++n^NN7qp}gwcoWCeRo6Jp>F;S}~D^99(*Xz~b76PBd zBqT>qoHwMA{&GBeP5rh=Mn}nv8f_A8?ik4Yk5yDE=F~vGj~pGUzpmN0BTH=oiSa1n z%M_R@5(F~iHKL&4Eh4`cfW^2P%2O^tY4)dZPukGclix07nW;+1(>cB#ztv&P5KSlniLOwK_Vx(wI{{ZqB3z>Xc%c1H zUBP>dtg#1Yn>LU3CsdSbP9#TY zPBkWYD2!UuLwT=?N+h-dOg$#kpO5-lGtUmDv5=N2ph_Pt#ypNK^78V;cq}1l4Q?GM z_yeM{U8Vw?Roa4j2$TVULVsZ<_{Bewvy=3p8`OAZoP`Z?{luekY^e=4pZ4bmhi=hr=rP=FYHOp(6+Q3hB;vD; z+?s8%+g(!Z8%LT%;N-fz1q0a6!L-z>Oru=U^q7L;3LYLFF1@M*$V!l85|s4&QsYT5 zvU`G@v>ufn>6QiHU7t|zjw&y&Y7}%kT1*KbV7-==jEk)9jpIHroMdM)@A~%Bxm36Q z8sGVfU8ULWb65eqkQC?)kl0fmb7msh4b>yY^^?7OtbI{5y$bY%4O!BD^qg;j5} zva(G1friff>ed5S1I4_9sVo-^Hd=vLXNR%^H6yR{tt$-JI!#K!bbyGr*nG^-r2&B(yD{ ztqhF}>EH%5O?1WCO&P9#^W5}5zIWrltrz|8Dp7qK6ACx3!8b3!_Hq@#&G?!72Z2BN z6bV&9P4`_z;M2ZALE(RuxMB!G)t(oCL;w-s{t{V3-h8V2GTDU-7m%XY-`}(W#dmYC zXMUjmeX*TazHknRVgG*pCwl+=x(OU`@bwF?|NbTpY&<++;9BI$$PU|FKn;N+6kRj3 z*8EOBe;D%_sPKp9*B}7|$P?Mw2DG!1{&kF?v&eZLh>QF;QH=ll#7md~RBb zN}|&ICr1Ok?J1sBTI`{=Ypr(sal&T{asO9UR~k-b+jf;oMYS`PAs&@7q(Wqh$5dp9 z*kz26$QH6gWJ@JuDKaIQDKZp0Awz^Bc_PW2IrC6NiFe)J=QzIi`-dO*a9!7Z4(nWN zA)c6ah*fRnjgrMRIMxe1TGLu4D;6=eUUo4vMe{(h#Q9Xiue)rVK6dd_|1|C-6tV&Q zx7Vzgsc8J`v+`eO75{1yAK!lZigydshq#cl5F^*VoVLZ$iS{nOkt$afLyO`DWUwWtemJBWX3LN84$hE63n+|aj(H$bKEAgw0qSX)FX)q?uNsGUz z(w^1rr_1s)=1wjuHMVwZL_2W@CoeJj%LOQ(Ps_gC{rGv{Gq4y!0XRActofTvhCKE- zWT6bUc`<@ok(P85eKH4`+*;W&mRF7%0KqJS_8zv>)YSc;jq(ofU=qH!0*)JFt=#t`T*aWaD4lIAr2h_qr$)xK&V4 zP_<%YeZ7euVFAOr4rlF*omIGyf@J1YO1+`=F0U8_Mf{ zTi9_NNq-=1FYu;;)i*;fpS0TfSM@UKT;1w~N?J^K%hJ?x9k)2oRW9m}Uh7AS6Vg_U zkp@k#g0p?oirv4<$bOvXn^rEol+a=M%;+0R?hjW8O9wwv^2dPAi+g2c=41PwHi00X zczf^g=x85IM&Ki3mn8sW4VF!tR(*ArnTM3$MTVD<>zJBm(z73D99LIgiz-QN**<*`FZY@6rGyrd$}%- z%imS+H^sL6B*h@f%tZH;7uE13S=*7}fTCuBZJIeWK4PUjBW# z^8uy`3ksB`8Of{I!{4Qpqz-H=n_nyMHkOc?IePKny|Pl#n;zOW%Y*rb6}$SUa>DkM zjMYAjIO!XDw?y4*Z^>BUfrd_ZzNl<2?B zPXGKFWwK(BRk>v+1pRvj1=TOCIB{)J3NSo<+FCl62z3-`t?`vAp=a$@|4L>>#~(N zjLZJNYyS5MREV608!~>6J8+2bnz=bIz*YK3_0lB?03|Xf3?EC9puZ5M9%LhIr@ z_?}BdL?nM0Zdd!vUXo(#Z&mh`_c$Z7Ru#H-zp8I+Z;w6PeKj0nJ^fMGhNa}?x&GLZ zk#sjKtO6Ir0T2pOId+W6XQ9sG+qZAd#U1F~FzWbTqqMY@ykq&%VRQ)??azFWpR{Wt zx*|_6FZzHXxoVh-&c70;Z6L+tnb>$ z!LjXjMTH9D%cDnkzLfxpPqjQ^6g<;H1UR_=NeY}!ItgS>${=uH?nVCyL!NKN{#nfR|IOA!VC|qx(ch4~Sm*`T3TIxEB^0d_LeZW{r7ORy}~l&SOxAjALlXjxjH&3Xo~m*Vhw9 zVo?8w7=!djG;~|HZfy%RC6fnc1ieSI3ci$j%Lj9cRWvoRffR_kgzyymJWef}VFb9y zWMN@}pg{ET>FMWH+&Q`j`}$Nd)y5{t#ObbMVj@V%SR=N!0kL zoWsU$=i`gaGYzPDSY-tRy;yjQghfZoj6AqB+?c9g$HKyr&@_yV{4(wqa)33b>*Cv6L#j{a_@#=9eA9`!!ouGZ>Rfe-qqJ%o}4h=+hC+XS6-7qr;~Y@&ptEq z7>GD6BqGv_oXh}HPIzo=9cXg7?c=ae^2PZ8_Q&P817O{!&!3YrL{NI2Us_zix%Ths zD)teX->bB+0aiR_vD?jHZi=II6O?PE{JM zwC>VRQKfPm*2me|w#Xjg**1Bt+BBMCy!TwpoH`4}%V;PuUvFw_lS}mGfm;j(76z>^ z9Cd$dK(4ifh6VXH-=dd6Oib+RpV=1FE)I-AuzH!8(K-Zg;h|JRm4)*Pb{Q)d7yiG*jk;fyO$#Yo(~Esgbz2h9yGZ*)%@dZtv(=)#FU! z<<-{GA{3j{%a`qkY5iKRPTf$Z@w)Ci{`cS4K0D4hnwy)OH1Zp_WSJHmt#4^;ybkv) zWZa7pJ~lCvb+&o83m***+79Al>+$A6Enf#BRBkIJ|HX^O*4B53sMW8$SXC4huX=mK z(~hg)-1Y>7IIK28wJy+aWW5g`bg@0g^a~N3+dVx!%`VzJ)ZIHfJBy$(z4*N$&u4kb zrN9M4HZh@_w{C%gQ3-^w`c-LBlL(j*iEHn{wGKO4J(kVoGHFRhVRP~%>%zhUC@Zt_ z@o%=Cup<$EC@_-ztUHLW`nO`FiMhFsmDNrZ2%z2-g-}nCBa)JmHb`wz6q<j9ymTOfYmRq!BPYcFsrmhvph&b|W&wx_2=4bpW7AmMI1ziZU_a6mqt z4j5B$uv68?r%WqYSx@h-R@9b`@lf6ciI=8JOo>@px4(YawaPAIGj;d7%j%%eHo|4-rXDxz8w6cjX3 z$;rwRR8Z&`5EqH9ug3Vn{HT;X?`A?hd+}nnw8mw%D_3MuoVGC-y_A=sLcH3yq%t`& zf{seH{Z^ILSzwh9$-oR9b26rA08H#3q%m^2r2_UqzeuXfgvH()>C?VB;qo4 zfqR}i?E?P+l@_(|AV~V!^SwK7dQgcZ`?Jd{6oTWzMR~8eeHF-)r^f}>gdi0^ZPqHG5IBkMGlG5+ga4q)$Lotz|OlD9sRBG0S`O-n~p-)vXLa*JSOAuyk+_*9SxlYPr_i5Y_`4l#Q z!G6r!F0>aFnAUcB^AMlcU_*QZkJBsPj11IDAc>?r(D5UMM!kNmthh994U`xwUf!AA z4>o`+cu`TKYKVO~rN2ZxOU`(aU&D5a&S{m|T-!jKlcfDD?*7=)a?IXd7|>}-N{U@e zByOu`W;Qm{7545$kj=Ssg|jx@1x%TD?kD4zB2a5)zGdqVTr`z*Dw*Yk6pHVsu?K(| e6$S34EtQ-8Xl7HMjKd$8K~r5XRkeL&(lBBg+^&Ehs{U zF${(hLdH7w<-Dc7%XQ9mo%8+u&iU`Fx;*o~&vQTbeLwepKhx8D`gcwg>v}>ctW|L{xHWwhy2NI z_pHv){dIh2omuIK=($)({cxVl_ob+uk7U2|PtJ{4aAhozBuC|s^Js|_n6O+i%r`{X zoplaB=dgHF{DWluWWtHXd*6z&U+D|Zc}-3;2-+i($~0mvY8D~{&V6i(<~y?ftWLSW zAVWjfpau5XUg)#Sr2O06M^`WM`ko&i-mASdMv2>1(e;s#kd=gkT6Vv^?~0JWP@-}> zIs1*=3LEj#vd7(%Gjt3X3-K1M@wh{W4nKmasom33Q~N^?K*dW`oRa3dn^#(Gjd0v7 zstTItKHbask;DBA$EaR()+NI9s;TBs5z-0 zDPs6_KmJyfIn%T4B`RftdX=lcQ@66t{z1X8qrkaKl0zoqi;*0U#Q**)y5p0?)OG%+ z&nD(Ll$$8(0jAT4&}Si1PU0=R=i6V{k>9hwmrSpI6ObkQKC(hPSYOeOaO^2(E!Kah zt#-VkMN-XCUh3`@?u#egN~^>L)7X|kUbl%p9hW3HN?zh+;gbSzNPi$1gDT7AUP z6GHYU&fn%M%6TN=dK*U6Du14{>(3B6NYnXd_`&4Jwe}+dpSkKo7F9MzF-ciztML!L zUTwE}DYrdn5&2vs*S%go0n$ITFX@?&-${}e+tv!i5au@iwJx7OsAcku*p9=8 zf*;x;X}6S_8nSw2pkdiouROZuFtxFL3|x9(9*+m%YWEv%4$WPqj1E(Vo1M~jcMqlA z^sXk0JTwO6&L0NIm${yhSK?l% zZ|3HLIVf?PN$H8{d8$F3VVZ&7P@_P7V@MzzBIm%ZqRgo1FAo54gZkKU`MbHgBjo*+ zxPQTw2gW}ii*j@Qn&Jaj;x^a2$ED`s4dnuffJDTE)%{_965Ps+T#DWfj`D`LHGYEt zJ}GfK`}laui;5zVND-u@h=;e6sJNV*oT!+DsDy+tFhdv-;O=ARFYJ!E_7lVbjN4EI z#2e=61M_g_`U%s{-ow{NiJKdE&-DjCH%~pie}H#K{N@6{4^e+RPf>9ZF;O=+(SKcm z@KN^zfc!@2f4Kr-45+E7Ar#@^>kWab`$64(uKgx|w&fiyy?g&y@skBkFgMR%s{m&I+e{yr<3E}8Z@B$@^NXB+MFd#>54is}`w#8E zCIhqd^yF`QKzx6qr*&J2`{(}h4jvGggZ#lzOv1rYOj=AB1ag21gQUczh3!D%_QH~O zlG4($GLm8-3Auj(rR9$Bv2%w&e}V#li@*Rl5+F$_kStVISXRo>Q5a+=Cn0Pv2LcJ( zIY`@yOWNBx+S!Z$3y8bkFhDBpT>llTpP(E7P|}W2F?)M431JCIaR4PTIRGd~%wAYb z+)fq>k+pY}kpuk#lao_2MVPxw=T@x*Z-d{jA3q2BOkk;+!U9Q5|fjb5R;My{>sT5Z1fABDbyPQNa9bJ;$k9_ z(!ZAfJQjI?7=W>MKjjnv@as81i@cgQ)XvAl+t|ayRf+p22(F(i|M6N6P$vgFAG_Oj zK2QLtn1qzPn6$ivw6QoyUP4S>N=jG^Bro**}$sOYz{yHDL%~|A1eQ z4m8RL>UHqx;G-+-mnv~_{Za~fJIDbE2s=Nh!!JAmSO>2l&UWrjP{4Zp7S}(|VgCzJ zkcQYxfgs`%!ZHv*06>n84#Ki_lCr{3S*Vz_I7m(sBzeHre?UigIQk&%yrHU203QKf z0pj_KS6qC*4vPQZaX~smf1U!sFkvxi;eRqr`ZvQwe-kYF(`NjkSW)zU;)&v~3IAeb zfOQAY0OJMNLeYO1!{0mu@cn=J^ZP9RUv9z0_1{hYBmVxEUH@g*f5d_RX!3uh>%Z*! zk2vrjP5!TR{a<4j<3H0Ws5=k^A%SFREAzWKkZ94{>)g40X#eM*SB-@Uz>^c6nihyd zhfZGj`S0+dw3n>FLk1r$J#~f|dbab-GVePIX@?GR9n!k3YV1$`F^Y=5vW}YG>{&2l z8ts$pzbDO~8g6oB1Hkv!k6L@h$=}2Kvga0$9E@9@ zbB`Z87(Vz*z2(mgwa5pTeoubPd|34N@D%?Mo8LoL!=nwqhhllh{SP0E$MqaBjRJkE zjgP^9AbDgW8|T1v^VP%2r#vyZpMzB_vJq~wa^oKx%RI%I;w<%OfvEc*h8dA_v^p0Y z87&ZS;-7Hir)zCOHlg4;pJIt`!cXc`M8Jej(dJUc9y7(z70P-O3H*^!V~+ZH^$rrY zJ#_+eHHO&WXQT&QIP=Ll+kTgAczv#9TYC2W zC6(;5tXlnNkiPaDnD~jETm!-TEsPX=q~#J?&7_dC7FR>IUUUl?mvz_GtCX}C$hd$qNtLmR zuhc3_tVzB|=k;CA-nE#y{=f4gR-8a9U4=g1zioC0OH&8TILO()x#isAfHC;1*d z{ZK92!OeuoAhREDSGJaUo3MQ)BaIVQ1vq4&Hajm{WTJBjH8E3Zwdz@yNa9*A$2?_- zT)2{^;A{LOGep1gq@a0=b~S$2&$Tymj8Zngzwt7leOaRPJ6`KpiW2vL^EV3!S9$dmWMQo8B$t!B@gYoV~l- zp;ifZ6-&#qu==fS3mY}c$o)KhrKP{mWL$pvGRD2$Oo7+QxFh0Z0=X8RuHpNoPM%d- zf1z)6Ynt|+my?(pP%K`n7Q{&|Y;;m7ZjVJ4R`<3Aff|K-%SBaQr6NumLVy!lhwoE> z6J44>g)MIMD=UGn&eYN|&Gkx7=Pz}U%aK`Y3n?4{t1r4uN_#dTv9pk#(d;q*<=hfm zl5?(KXkeLiX5g*ZE3%jstvp|(?p!X?t?%1Mh)Z*R<&)Kqu~&Pa^(Yr#RqA}9uyc8r z{AKytT-8KnENpsc!qT^(nd&}2j0a!J+{;lGN9aFgBm1u_&xbmf*`UTB=!d35flr=gh7^d(TH|+R zR%=J$v<$k~+0^_F?u3(pORWZa^JHwUl1W3%d_5@t676dQEuTSVj-pgg%f`$RpC^9G z>aAp8y4X2bs$@Hg`99QVS&xcp%Qeren0gns%sQRvgm`!9t)&QmYr?KkBEEiWh_ogom@yDEz{ z&(>Y{eq=wP-Av@;_im1;od^u^v*gUM7Ny;;{`kWVwYM^fQYoAm+srIjcOQ5ZNJlxH zRu@#+&9R$zCW{}fHQn=l@Xa;y8Zl@!`y)gigs)R`sP&DJ9>dJ{dR>+Eu?%_ov^z^N zkB+x&{B^@bE?LS;`|ed)BZDP*Z1EG0J|FKQ)M5MJ?GPpD(S9SQP(5DW8&c(-+IJiy z*R4*bp{O-e1xQ$5;LNuXdAG501H_$3PyAqE4{Cmi1vA`%mm##x?2=Qj3>ZnSyNt;z zA3d;#kHH=v1ZN`Of@iepD4Pp2{X?)(T5rAY+IRl0?u@=*Zhi~y5n(yxR#o=`8Lb!N zF`muYix)cnGNvUYYj8nvtUDtX0 zS*5(s_+ce^yqITt0>S;MwC;==`-Lv0P`}L#4!6&1#p_y?Plzc*jSFekDrL1pnWl$V zD$^92^)FnA1L4UognW{3uze$2StjW{^+}b}aNdASUPR?sAMy+*LDFf;EL2w`U235O+HPIwY>>R?EUGSa{gJ-n(%)Gj)aa=kFu5ER?r6o*pilsk z+t0~V8XmfHDTjZz?UHidI)>9MFQ6+^Hpk;iT5m1XuSXk?4Bl?XAv-T$-Pws2q1L6` zRXK24#&s1B%%)dA<;KqLbl3ZmRuh#gLNIKWpGy$DKCA3^e3o}4V5EqXbw!#nkNdSB zwd3cB(>Z2R3Nl!X5xcL$+NWi^rMF&JB=?L&eajh3 z5?>^<#|YMqH}mrZ(%nvu)e!P}NDo2!9bw930!na#<1HaX-g!87U6c=WZ z(PNZ)Tc&yQvZYkIz#QTchY*b?S)`UZ+m zTvgn7-Q*`?Q1#`^JOyu-ML`%ah3>A#x6f%;%cM1!Z5Q65{kYUzFm#*TGR^$!a9Vt` z@l0iTe)W&>h3etgg+IZj7D-ZlTS}IN!hPGgg}ykB{cnGDiO|S6xD@*K$^6?wgeduq z4ocE(j6SAbPg4psM%cnkmM#+O@0@WFN&S%qN*l?JU8ud2KA?R` z)cW&IaNgs*B1uVb&An&e&w~@0)jOM&U7`ikLU9UQdN#zJV>mj>l1Ay%AdY@BssP4F zP1}(TbCq1VBQQahXuP|A7egFM%?*^Ea26)yQDiA-Vyjj(~ z`VH4bsP=mwY0s}E!aD*E0jDE+X4%^vqx{aTq$&B`>v7*lS9@3$LV8}>w&oP9_GaX! z$=w?jteJbQgu306xr?S|DdzHWWVy8u^d>8jL+|E5Ya`BbesGOarT_ zHmDiFVbhvMon~c=7o@ivfiWp3!MQXx+u^|7hf|l*(iFDTQG4bl-1W7CPjt#!>#lBB zd2E*e+`Z!)hy$OB56F=7wniWq`UiXosmmdHQ=s+Pnrc04LU$sebtxvz8fk-YGUHqn z!DCleR@cd62rxYjj67-^WA&evE#V?Dts!xUd51)SSxP1QmPnG&eTMl4#J`6zm|FE^{$ z8FOIwAHXe5YK9rTgBWbA+&;j|oV%ode5Uk-=x;Aja(valvPj*)p-AAg7b+#Ss$U?G z@amC9+boJ4I`v)8>C$Rz+0Cjm9JVDhs6H~QFkV8PWnpS`Yn2+4rsQ44eS9UU$gNl2 zEvrfAf*@raYNHZl%{wInCsBo!zY%Ms?=BFk4O@a-rlJQzoh^~km)QFUi|W^P=bkMk zVb#>E@E-j;pUU5Sq1JV!rIAa0lYui>Y3Crehs;B^ z2HWNLIpo%2>-@i-Kt1$4NLt1tOTqP~__2`f$UO|Wehn>*yjLUWOK(%}Gh?Xm4ICp_ zGOn~9%@G=`T3@Jw9?P^T#CerYwVsq$P{=I{-SjL}QmZmWqNpk*#H3dNOAotyG6wVY4A!SVKa}u&PSOb^sgQfYs2;ao z4z?sM=C`gO3Vpt{^tEz1%t_JWl*obh`n=OqpwOKYN*wdO)JEH0?5|wIcdg&xsy~ox z=tOF-C}&x3*4;SCOM5>7$2s+cprCcxnuNDQMuBTf;U&~&1vZ_JJKpoc(%&hldXO^W zCPVl2c>UR#!s?mw?R8jt6rk{_;qqclclv^wbHM8SYi~E@GUR=3K8alQqb^R!%Ql+z z#VQq};_@79DkT|ct?vp`MCF?zhYxbZ2gDN(Z`!e9{mCVh?J9fa?oFFhVZ>U@^Y!Xs z_rBQBoe7h!;fD3b1>XjoM?u%tM#47B)tyI8e)4w61EY1w;{qI03brr`SL_jmf3Cz^ zei#mvQYR}m-ZgS+E-sACGRpZGR`r`^^k!SU9c6zzrL;AxW`v%tiTlJs;N?W=ul(To z1?vI6_4T9b64hf1CIf^1__ZHRcdU4WpAf$hB?H$!t12NJ!!qa&b{$9mOX>_A`kh4| z5_|cNbojpJf0Ab>#(f(+{hJ`M;G%zI$N&G+^8W)o1RVb4`z=;ZJEk+;wn?)P!cz|| z(X6JOfIno6*HzBw&r}O5YX(j7%)Adxx@havJWiHV4&8dUH=XXDwDgk>;0U!GmLOo7omZ2Alo1Qe-n9AO2G?!LqNYtd7Zy4h57-Pn87b>wi}GL|N)2 zl!a)Jed>*4d0Gh@^8|47wbA+v$hgKkF8IOm*SNpjNoGReM|nr9Tk()V<42ig!Ta*g zJz@f*I4iWy)*B;&WGFW{IuE&!MBT;{3bymo9rL2hUjNOx6Sf+vD4bsg-kha)*E5Y? zvRw$pN>2%5J>G{cxIp%5t~3+ZBi+F-YOegL;MBM`Y{&p-z4>5$U|2!;@>D3_ZmSvP zCDeTb3TsCZgcssh(^i?r;+uAP1(_`1Dm*C9va%1S(+Prw`P2J118eQaG56C~sp49q zTA{s`8r-|@RA=rw<(cVgM$J}1k9#Ef?JN+sWpuU{2qzixJ$g2#DZ8&$1v!)VsQj>Z zC<5kEzRJ!z;k(WL#(FdNu5BpKj3aDTb!OKpzuY`P)lnh2-Y_cLY&ozTM`r z;RnE8jG*bShCKTjqVLEknSakF3j+JfAPC#$Y@1hhbhWvt4x2txq-D)?W ztROu^Yb(h%VfM>P&Lv$99i( zmh`f$xV_q)+uV)TkLsac9B1h8I+tt{-XgU)H=Clm@nxv)ad*ObvLwT^q!)`d6X2jN>tnP4kAyHNo^t zEWc}NH6kP4^*&?Q2pjeCv5m{9ndEg%n!!v{&o<*2i)zvox2sADZ%xRnuBz= zsGWwMB|c*dS}IE?33{PTJKWMEyn62mJ9vPvD43V=*0@=|8(s(Lnvki~tAt|RUWoe0 zi2our)3etI3NqLl;?1vjPm$hDTz#wS6u-(dlitjeA*lVV9VnudtL#%x5|$Qpa#eUn zSKoE7hBp{~TEEsjt!DGlY?-q1Y9Fj^rV+O@mT_72r zc;d6{5f5ZvhC2Hrh5W2BVbuEPj;WyHLZqwgz}2ErLu31pabzA-B5#8Q8~Dx6SU~#z zUifs>>~Itz)re3%oQK>K)KWU^K^Cf(u^iee+|OENQa>BC#-oMTd1Jl~Dhm#pdA&9% zN$459u{#o)SluYH`<-X(@z;@0%blTsxvC9sy87mB=-~Pt_hXAaR~y9Nfj@HQnh}z- z=U#kUW%#9fEw8sXZRa1=hi*LGQ*E@_Vc#DqQ<^D6eHj*H9h~)@Nd*&B5;?ZUIkko< zM3tE_l-5>A`(K#y zR8SUMEz&br@mhFy+Wy5*@RrAzZO9&GudaFHKJUnG)L8S<7PZOZ`LubvKcL z`8)glDkwk8Emb3ejn*iTTrm**#2U@@d zVaCm-eX}OCOikqW8g`6k(rHwm9~uI#D?aYGzxkvjz31duvW+tCVaE*ndttne%;;Cq zQ`RT`_?J_SW4khf>D2lsrj$@5&)#NFzRJ}kKS14c%?xXgXJnWV#_0rPkB-l-%PP!n#rC(M?wZs`zC?yGN6SIk1kl=qJnuce3V z0&hebr^4r_@0NwwJgTQ`tNgGs)hxNPQT7mU*ZIHQ_2R(BxD9L=wKv@wMKIeRo$QI? z_){KVycoFT5&T+Ei?_)ax{~wokDsN`dEFB98{q%lvi$#n|NsA1@Bc60 zKSu7*zp;XG=va%1Y}{MTHnx12K+5!wvj^wez;oO`tfWP*Fc4*2o{$#h!KZiO;qR78 z!%Xz`cK1Wr5lx7$7wUF=V*buXR&~5{1`T#FH(wNp3Aiyu@sOg z2$N0%T}sM7q58W?gOxvGGwzb1+lE$_KwCD7Kz27G^p(H6nXDFIUXi@W2TpOkqc{9g zjrPmVqyjy4i@X-|kD3}9s%Jk~mT*M_8xyV@kX;2jjsD@Q64d0Yp~=G ze?JsU6xYyiipTp_%OyRe2$_&|6R)R4zWS{d=5m&x@h#csxtcM(;!+yz#!>LVT^b2j z9w~pLohWk%7WRl+ z(8jcow8Neq@3Z?6<%?(6SJcp@}a z1YDQrxDx;EWvP^Rx3;(Xhi%iN1^O1r{CekyS~|=HlWy5ew5WJ1r9Y0lKagrO>)U$1-lgb>m<%WY=`kM*dx^^+3PT&? z;p^Y#PX&Ar=4F78G3?7V1pti%R{@PK z&}8sI3Rm+6BR?Jk_XPy4A0RE+F>+Q)-K$inGm+;hp{f}8?Zj`=Xnqb74M>7<3CzLa z_O%#s04L^0*+<~R!mRXO-TZn+oQnm;6@>C>LBEV>aiw-hFZqq8NGKw3Why`fj(}=? z75#fKa^BhOVu|1(cMK%ph;1(%Ive&@$TaPScEXL{n%i>P)#R`TYb)E;dM$%1a|HI3 z#Db@;Y>ZJGHgGyA4HBS1XdzL0w6{L2vbcr5B8+pf zgFgO5a4bbpD3%4p%L zTCVJC##~KUngGmZSy<`r$T`CGR$6*#%3Q!7BiTgQ>~Ch%iq zY=br(0-5#Y&s_j{IUjY(yu}9R5q7@6>D29tggX0OZ43$4-yZ(_ngO5yzV7OWJ*-RM z!Sf2tt#Nq+nCT4i+q|K~)3+iF%o8tlteZ z!(6*+21;wSXj^~3m0eDvn9vo_5?}k#D8hzg6iEJ%D|*Pa<0F4hWzIg;5OYy?rrv0M z9F7sNwIy1y@RcQ(jnh`N5*)qWTywQOIx|-{T+bBf7t3GZRiM}yC+Jrwr3}K`<;h|% zsd}vFvFo1sh4LYfGAJEI?37fVW#3LAhXlDwDsCG7OMS~GDMIQ(%VyY!9Co)nE!jpS54i}lDX@S9(4jISa=;*s0ka=$H%u`c!cV?1tnM^+` zyAj04*nst;Ip-{UD)m%_ye(LK`XylbzYRxJadb*fZfXmd1PMCnG^g)rS+%cBa>NE? zc3Sd6q5<)H{zT$NqIkIUa8h-jkCL^!P;Wg8*1nPMlEB}=>4{=7KOOn?6XE3t&dZvY zo}r=br`u{9Ov{PvRr&F5)Vct4$apE5kjD?fJp9busM}Q`I35nk6?@G%8^%qVB@P=W z-{`2&efD}i&4JD~0vt65s9}+~bb%!X`-;`G=fmnctMmSM@&anJmMSpp(k;iMl{01E zx89YMs8Fcb6E$8Tv-V>iryzE5UPXD>2xloPw4W9!C1NSX%D+CZRf>~nTYGs;he?RU zPF-_XB|)$t8Hj`KE3pd3x0(j=0$LZ73Z5P|Huq3?660pa!z@A8_T27gpG@* z1E7aerc;^9jtE{GhFv75+npY_lGSXx4cH1GpaB937$7)FfMXV#1P3Wx&XtWcDIuAZ z#QroumZ;lyXSdd_7$T1$*L9-8i)cQ@sjjW%Vtn7aR;)c5mL3yItsCcJSx8chsdH?y zZi@|qfnQ8Z>k&;dWo2kEm@jQQHM(4##p6agE<`lLDrt_uIhI`LNh}$obx>CXpT}Sx z@~vVF;`5FN8j0i_$j_-VFhR|HGrllA6{HbaM>73LCY;XYRF(HJrTKL zH#2Z{GVBCOlwv$UAM(1E@Zgb-xKe$W$;&&AEme(@6%`T&KLi8&jA3NsG*6oYc{-Ke z^g!nLk(g(rd0QVe3m4oKguT53u!`(g9Ob6T_*V?7Tobwmc|+&{A3B%wCLH$Y4R>MOCx#OYMRb(6IGj>uUxYg8NSm>DuJJ1*{A3`k?Q#ovw(qC>1J`C1n$fIVEr zDWMO+QVfzk`*!b%~!LVAH*}$ zaU5J?8Yh!j7TF+Dghe`sA+GO=2HH`}ilX!t0`_@LhN_&^Lm;;&7CMe@mIdV3mEIxp z?0m1oT+i}**DebQx=VUo#DAY|C^37_cbtys@-r3y$x9c=V);+Kqq_9*JOo$1oh&uY zoVK*K{(+{@7@iqrCT)YtN{`^`3#r-zg)G$Si|K-$hU(I$#wCJ2QczgVb(pD*&mzhn zarpvsS(ih2L!+&kk<1*uva-L`mZd@><<7N|*T(~M`AmO?m+2h{f!_fu77G695@0^A zF>gH=2jP3BE7mC7LvU)mQE~yJD_2AT=!NORYu8axsrj<-hjpft*&d}X)?9G9V|GQd zW&AouK)wLDiHi91yV2r|?=*pM1#`LimzUskVR|u;Rs0cXf~M> z3QGf=#l=gkb+I4yTjop~8Ydwbxb)(O!QMy2T89Q%}y2k!EGW@22@rtU4x0Z!=lHxBFYQYs{e0yw{ zCnbY1u`XLTajGM@&Fp1WS+_zmowNzYUgyqMf6dDmWFj{CHYBjuuVGfYYranTgu(-& z%1zrWBY@cCSrW9i0%TBGTO{OW7*=x>QaTF+sbj&F8l+MKX7vopYr%|mi5?_gsmNLM z^+WN_WyOWL#$ovzD}XduBj}P9{fCFcO6Jb!Wh4t3iU^OHePx><3Euk|T}f-OOkdMZ zi*gaMabai#Y&QATphM_OGS_0eXE|rbM0aZDZhuFb)g}3@dioTk0yFJtIH0UISmb^3FB0kZm7!Ww6rjDyy1}z;nAt!c@p1!bFeQQ+gZxF#5@Mh?^xW`{> zZm=J%Xft(sr4v!(_!QRZVNpC=1%H6!{`TXfuHf5I(}mH}iuuPz$&=tRgifg=vFT&R z%+MK`??+kvTkyARRQg_jc$lGk9~ypBRs81tG{D{KiXh`xrsK=L;+kB@sZF~s^e?%S z=3LQZZQa8Y@~KF{eqTCAo7q}BAU$KXVCRdrA6u7S+I>C~bkMh1Tsr~B)eS_Kfh!i= zQxWb@UzOMMV{9Z(wc?EzegfVcz%l90#&G8lsqmpAtXhPi~+mHiqomoPGlsw^UY z=2gIDPuNWwmPxy0dtt3Ce6A{YKCm0F!#cu4#yGQEnKbAdidYGW;xn-CG^&dV))wL( z-n4juWB9u>BLPK@5A znr_KCJy82a;RC$3`4AF$Q}f$$@cqxyuM+!05&A%F!S+6F)dH^=#X7T2)=j)lof*eR> zc}19kvGFRs`iJy$s|QZ9f#=iR2B*I9_*Sg$XP^c`69w)>q($xaF%_ZRdO9?{+-}=3 z<8=78?OO)mma2AlUwlh;ZBV#R3mV9EsdZtJo&2_JUE7(&GZXm`jVv8*F?ckmk?aJX zzB2|*Cq$$)8TD><@&zOdcE#tQ@wFA`{lm(%lm^~kjJ1Y`tdG5B!t#7^xzQaJmKVK* zPZPDuCiQ)l(o3rt=y)6!`6bgb!I$B+`_0F5^s)2A%E9gl?7o*-ZH~T%MjL$vBQt$= zj-or>ebG*oPW#K&fczbLoX(6qLy*3;k+lI3Udb-9G+MB29v;HJ%1POG{6ke2A{Z`x1sN~m9PNEX3#t?0ti_$o}>(wbTmJ#=K0O6=%&gjjZi z7*?6Ct_IDClO!YfnY^KN5v`c%xRUKxGW_&O9TMWNn6Y;R-Mo59*zD2VccGQiK-l% z8=GtO&F+(C@%E*<(5|1pQ~h@!z!fjztae}CD1IO@ zQ2Z2Y7DkeDI`Kwv^l67uZ7-Ke`}*(^?^sG?+z>i>9z9i=r>{w5b3mi4>Xz)vq)ffe z@I)Opt54k!MV7$cAK@u zyaezH_uaOSbx+1GHH*qc5hN;vlJqcdW!F}ORc2nk6ekK_tkdxrj%7kq=XWS*A_hH; zu`y{@!g`|z&U#HsUudDdrR{tR?4Iw4Jvl9(dmY^`(JDu4YXa1c&+zQgjtXNyMboZ( zi=-fq{wBSow|E>Z@J%YdT%DGI>+mLFi+uI>q7ce87QOZv6`-WkM~M(h@Tgg&a!XqtTbv=qqsKXK>7EUVl#<$mX| z$zSLwJj=voJ#rhH+;s49*E&I0t2eJNgMjNJ@07<+Ge6p^c5{-)`=$FqBJ#~Vi_sMQ zxyM*%G+eBR60j=e<(V`eQcP*}?M!;M>lc2($UT7|ucZeqvhu|^+;0s6s#YpaERW(I zav8H~08AyQ?+@KnKd36-_OTSG}TEq1RR z*7i8&R;;c@OeG<6L~*azrghil2DeT|-`n*Kiyea~CGR372~+?EcO#e|BtOQ1|Dx^)I@af_jGPZ5`&rXHv*x+FEd1 z(e5z*l9D|f?#!e`4OJ1XI2UHHY-eDMP3bLyG8B17LddAld<>F<&hoI>@}*QOKVOk7Lf@&QHI zpOH@TRv6boqU?U?OJsq|=)-wyvj}TB%6w+cm60>YBLy!eOxFU95$5*!LqjH*Cjys7 zPQ+^CAEcuX6GjM05tA0fEkM)?*h5Q90bp+*+x1@R_dfci&i;ttM4n>Lw`J~u#)mnB zL_Y~H@GjfdaB0=B(hEYW3#L@EDM#k-L})QnP^ED|CM{#A%_np{3r=$48X0QKR}T1v zSBuz5GbvnxbyL3^ara#UPK|<%OQP>l(YbI;`uS-!&IL9j)V1~VauJso5u5oKn--HE zE4V}WO)q9aY%AdR>{vT2=St{LzbpB&<=_Bx1#lVxy@=uc66G%)#7!*zvd7$rFSfbs z);7(>Ho~GJW35Gdr@Js*JigS#8FEauNa$`7wAgmvRK?RN_$2GK(6BbvT1B&DC-tHX zTN%4DoT-;}3Ig+rk|aW?#kLPG*cM9+WAYdd8teYU7@=`tdYMizwt*#NHEAK4o!6&O zyjxCg!oj+=ad4L7@2*LGSh4`4t5^L7!Mc_0#o?Y5UJy$x;Qf3}W;K8|i(tQ7JIRFQ zam#Z-wvr7---&nkoG{CVpNGweb0bNu4=~pLLyt(p3JGfgZ04!l-`y~kox6efTd=V+ z8s1?>SGd*sgF2@%;G}wnK-k!C#UZYA(bk3cjJgeXM(vKk7MN<_=%iy>2-uOaREORPP0%>*IT9 zt)E6&8XE1qXWTu9TF|B?{8%FMde!~sfpqS-PK>b13tzI{cG0YF)b^sX!J*;SKn<^_ zB8hpR$t_USIJL#+;i&zg4{Nk*EME$jvR|8U9oy?ZmNMOh_ek#WrO_ItFGHBy;vTkW zd*y-jc7upgdJBb4MBauuYgWmEdWP+I8SzAcQ1JBnfcU`Pf_nX}8W!g5Lz!Z~sCbZc zvgBb{SZGDcewvI%+o1jfmyrh#UR^`hmX_zAuXrPvJPni#X!GYHUC7>f!=&T(H}8&8 zU^#q*47{EPSee*2t|c=-b8V#!?fmO-52xkteu9w0ch2Kv0=e zz-&qYUFSc6CnlzKGAA`-)U9%Fnlk2bMKjBBuKEcCm36%)na>5KvI|~dQ#Z(SRFIwD z9{jOgyCY{CQn+;lA-Qo?rodjFG(#I6vuS5&3b5s~t{UXy@Gvnl!#)3XBI6p&+M{$l z!mTEW@Xb?2%=H&dz)jb}OJ3X&ksIdt?z~vxoex8|&?{?7PYO_$2|*-GA&_Sr8xX*@ zHl0@MwIvznGev`#5(8&VZ--#47J+NmiapS1gG^|v95KiSi3dt9r@Z#WSuj@CNY2sa zygf$BG&hTbw41l5nM*WaYcGn*;Ro zJ=J22NjLPM78GJ(o5>G?%*^xIy%A}XOA|Zcs$)?lq;6c`VZ0ip;R1&OZ(+l>lAB(i zk=Ci71h%}MLyym&)U@7Yf|2$a$_=)ern`H>FA^E;UpiPLmD~$k-AOq>Pr2*7`oKk# z2A9Gk;bg_Ct;h5O0@1gC##~?{7BH+wRfAeUq%3*nk`J7_HRZKAiWFJWnOp;}kE#v#_vzLz~ii3MhB3kBq9(|SU zuBxs*eo}#@F+b`~8$R&0bn;2=X4_?b6A$V#o>qDNxY`({pr+)n<3}Rw@)SFDkl<78 zOM`Wu_X68d`M#v=&jCHr%`TsVjFZq$5OTawpckqYDd4KS{>y~C6a2ArxDhmM*?2BW zrOw3I+Bazk7k@U3BeB`f#stmk=RU5~gz@bl=nfPx>h;fzS$W+pk8=obVT!-_I1*m| z)e+Wf20GU${ zfhXw0FIVm~e{g-%j}CSt#i_}j#Io#+q8e%>sf#_MJLj^~9p5>sJOSpGmf-Bw7!}H@fizPTO^qE!plk zne?7-S)c17hvPQiyr(F(z4-dp^wqLd4cBoNjkxoq#LmuZcSR~W$5vg&Ce^-9wl4{y zG28T%QkPmg2aG}HbcOUi=F9m5d^#7%(!X@{v0+WTN_~E22j2eF6{FSO`Dl-c@up^4#o0fao9cku73RY-&X%;6Ti8n3y#j{o zn*t*stza<=v@#AzU$KJG!3sx0&pcLNh-g5G6v71f4IF?tFTm6G_HM82u|nGvb8r3Y2(9x$L_c+_gl; zUOgs5veWVCE=rssDN+tXOLbX0`o=~ z!FeTOqU9sv2?Zty<E{Vn6OrHqTwE24^I0+cvG}@22caQcK5r zcFpV8!IoRvZ^u={X@oH3%)ataWtU)vQ=hZfn}u*QeUk5#KX~P&*}l@>GS-BGdeIr) zF;c(602IxV-t7O^=Q$@x#`f^JM$d)OV^~*d5vrPOu5O@T^d1 z1?6BRY!Mv?#C#ajl+#C`7E^)&?_OPvuhloaad{IV6_-;q72X!cd8jponA}??Ak?(n z6Yj@3*3Cd_IbObgp_I7xhKU&l4bRCc&%uVY1!RJ8vj*(Ubfv!Y$C|Uk#f(`aT#}QW zOmTzMYL>Rdh0*V)pNwr8H?L=i=hK{(Aj2^uyT>{Jo2*yFhh`CGPiuV;&=S+hy1#F_ z*Ua#e>8FvziIi>(H+pbYHsF=imSienIG8#5R5f_siuR-lj&$Zjy72X2ee1mxC32)> zVoGev1W&zNdjJE6eprv0|3=QZZn>+Vr@kYW$o4eErKe$!wssqbmXYpe!S)c%vz*^m zAKU%pQ!4qSjfM|p_ajolB>O_km$S*ZV)vn~$CQ1Qh^=-NcG8lQy;ND-POkC75JFW& z#blSGf4~uqL8&bSkFf{tH%HOl_Q7d*-f)&~#Xbd6Bdxwv>fVd%m)VPch6u4ASW7?_ ziJch_`9#3RUh@||T29b~flQKbsPmv2>rEm{iq6gleegZ)BK_IwC2w-LjS5F@$(|7Z zDDm^m)_sS_>qK)wUfVA}9=^U>Fdcvv(u?w3@>a=+_Q>wNP>LTIs-|z#IS;ik-LwF{ zS_B@NKOeW|y&d#%y|vVP&a~M{cbnV6t5EaqkujHiJGXPoY`NEA7sJaA%iMs+9GTm{ zB;M(4`!l(;o-?&Jx4=5jj?jjQS=nD>XHC_KhI&`Pg-@JdY(Fmw=t1BE&UxZ!zGuwp z2FM~H>tb+XWCPudmkf7_EkjL2ZEg1KnWyt=&rzzjQdY8Un(rsxFdS67_#Lnq2mddC zC!0l<^E}x;4X5WuLE7M58!STi+Hu$iE4KR4-xpGfTw`RKva^Jeak4TwwY6`uKd~3i zk6&)I>>JBEVOpN8F>M2OjOUrU43dz#Vb}=aUODXga+bF+G!LmyDb4*KM7?EHn^Cv5 z-BKv-?(XhRDDLj=8oam_cXtaE2*usqT?(|gTZ+5e$8*ke-fxYOpupaADb2|Deh&qe$&R?Dc$J)u@|}{9bN0xocnSpW??s%^as&17)rs z=^FqL@_1*httxrM=qSElrG=tf&LzL6r7LR}o8*AXq+6#eC7BbhqMO|$f>7ZpPXGIG zdPcGAUwdJVXVm=lbzFzto?PKEim+t)&Zk^v8upDAE~TxnoCN zvr%wa42s2CQep8NH(+?u{ZH>*tgdDJXY-1^nKIJMFeyMD%z)5hFhhFFc(|`4Q8}%x zt!s`I9wasL0f&9?`R+xf>k|zXDIq?K4H~zLZ}uDCwL#c{FFE7xL^xSIuft(Vt-kDY zoA1j6uYeiNmQVk4F*2+<4qO72(){w=aQoKde3tk0zU=$X$5{RJ_U=7Bx%TQ3WQd`I zP)T7UClh5W%cX+&s8JZ!Y-WF@B3o4o!)=oC+Wg~d;g7VzuP<uK+q z+{Mo6_9Fld_$H*c8+bH4iqr}MaNciQy0f<%W7Lnt@FJt@80)!o(aV|Xs zgS)r+PHL4El>FI|Rn*v>2>mHHp>pYGX(gPo_29mmp3VO0s{O@YJnr7cguH`tMuXmc zchY~m%n_{nmtVM3W15E=Hi7g3Bx$>I8DU#t;lnfp+1cz>NaNRZNGMwZC{{GP`kbK> zdZH`zV83(~bZTS7F5i!ZbRo;BdN!QLgJSP(gFE8!pqmzZdxfQ6$TX(ccJ5i;-=Ma~ z;5}O$jBB_LNq^(Lv@ogLa||c%Q|V3%#$Dm_YOOZJU8VyoR6ELex6ptG>zNEzhpR-% zv;|PnDcxga4&L~3uSF(gs2;%wZ;Fhb}7PR;SAIIrRV}ljP6v7dH9u= zlWq)OHal%Peg~5a0`ZEZTG*Rk-D62O!_k?Uxu89e)FL%*H4V~!$!WP~05KeJ9gJDq zDi}a>jN+)u{1c6gP---bz2+4x`?FPPuZD=ygpWhoEa2x=WF)99_B(&;%s*GF^JDAk z_@LJn@XLiSe(u(IoWFK_-9lTMb>|_IQx0~r!`GgtaWK%A@0FmHmcZNZlv?OYqrhis z>19Lu%Aj&;^Y@a3x`&s<843!L$tp~-ty!iO{$~PeMy$R}gb_P5L7|x;7lhV$;-msi zSj`9dGG>LxuVYJv(e^O?{+M#psaJ)kDp3-)vX6myaORe!Tw)T?b_Pi#f^tgQ^sEAo zbp~m*CG1F;^OFzVyU0^qTwKoxcD5=}XlZI@p*@Tk`y=o8B|+#6bpv+_f;IJcdM~&e zP=$Axb=OgO-|JB7pbCREy?;`ll5`8nP+lCWwRaSGRwrl zb@vcOjzdHuH?LE82(2;A>~ZHu`S`H^mXTuOEwGrug`GmNT+;#SjIrirEclzaIc60l z>(5iq;cLO&l{Sk%blDBMl?ub!P@sWg0V*$+H3izReL6~bBM}2v_n_^*O=}XuY1a6K zjKjA-3t9nBsiC=JHKYz(v9GHOe_>cfgmSILCn6TUvE;b2?0Yr#Q~=t)K91-;*eV(u zrWgk}K=(|;ga3STdot}@-BRxqJS&|pWcKwNZ)J4Sho|Cg3d@+8# z-1a7EHjGSeNt+PY)Z}Q~a0&c2;=6JW)?_KGfqSDBFVxmRP|-BgHqkADGE;}^5gK4) zV~$ZM2?`&!A|S|St5RreCr9`)2@n%Ddn~%4pZJfJ){;R(qn7G&jeLQ&i;Q=AHlj8_mK$L(*7IGs_~9YoI*+ z@ys4`s%nV(um23vkeR6K1!EDP9pTMtPu05cz_v9~N&MX@hTaJO#SNMRK{len-N6Nc z&WV5R&+br%Uj*Jqsv*3Sw+X_gT0!|DDQ$SxcV5-&HhF?Mu(Zs-Zm zFu3L>%yR!3H)mi_FX_4DX^&j&@t%(IwHdwKt)?u;=!(j%Ltd?W)bqmNF_YX8>-aIN z*{a5kP(k!-C4+aM7F9er6>t3J)khe2zl{#;C!h1f1hqy1d=)2}R%O83Tu6RsU3p|P zD+ep%24S9Bra9^|*uFx-_MJo_UeMwD&2r{CErYwtxc_gda6VDS3L8Wf~`7~3!pf}rX7U2h-Xw>_|9(7^-~XNFYa2N>5f3OTUl&t zDF@#jMcbvH%z>Qs*^e?JVWH>vGA}MSE61Gg_e%*Bvjv}fQd0uN8|&-WT3Fbm@Swkm zvOeuJ;Sy0kfJD#}bd5wA75r9vywey3RDbKRNry9(xBHoInMLvkK%K#3C2XqgObFTp5Y*>zfNCt%CIz>p*X z+9Vh#YYk@2MgQ;WE52(crubMWwoP9H^-XU%x{phdz%0~JU7fSU(o}}>@Ej+ zi|W(PUX_gLPkzsdaDm$ZR>rFl>h1`31D~+CI?9lRIVAAsm_PzZt?xWEt=xAWuO$M4 zZ@zp3h+#wnoV|28^2{GUR9RV`*k@noPvq2D;o*hng{2}&V!@Lwwux}IKOm~(ChgUM z{Uv{YU~vq)m6yXtrq?WNIz<_&-0QKA3P1zSZPl4 z<392V!ppXY3sNJgK7L{)jkBN-rblL~_)Om0j7X=9X+TgTOl2HSm0t$ktr?>Bwb~cO zNPyt~FIIdzp9_W=#+=dUrGWrHGv-jT`QN>f=~^tr>mPh!&j7ecYJN^2dANiIV5(;` zq%yN6@>K7K@0qI--HeoS-$|5GpiP%^6QgWR5nu29WLu&*OEsWk(uh@)V~^U^fJCTY zJU>H1LLmtx%tglEj+LI5%(R`VBSs63{kui0$#}V5#YZAG0kuzF+%qWbzzfEzKHd_5 z5!%Q7-lBqSI^> z>Dl9-xScMtj+XhBbotLqyk+0Atw%G7{4@<;Q_tj=R2<3YJ z&=_3D*~S{1)$i&exx3 zPf|>K3oU)+d!9SeQPLBH{&Q%ejPm5AXLCD0@J@&ap*HifEO4h?T4WeP>V|>5>^g-Z z!ns-ad`;-RClTi1*p=)Zcui7G2=Tl?@(yS_74-8zt{K&|=|OjTbHmx-OL5uGtWCHY z4B6ZcqE$*AI^?q!+5eKi>$EY~|1W*>;&$lRi;J|U6D%izcT3yS@O1k=o*d}IgZ~_M zE*w32A>Fb$vKrX=Loo2nOeRDg5)eLPd{33He=ClH`(k;Np7jl(_SD7ifsu4~uiR2- z3DLs3!DpVUdD3{KI`x_;a6rnDba`wl=Po6$J@Zzc>CCV_X&sC_@54NC))}?Ykv`{6 zCwTyHA-}K8kNdkSeON==vOW|Iiwcv!lIbx3bzlt0O4`0{_FZn+4`^?{pTk|Pao7+z z%K{{CbbCd?#GfvUX)kJ_?1!_F(Xd+0_nTMh+>v!*Puxue-gRRG8zBuYvwuU+c$b?! z>f1b#L8)`0Buw|YGP7xuryxqmCXSIzBp>h^ila*7>z7#An4 z&5mW3x`V@V?lPR_1>y+PCm~OFrr#Jrmhb6`-#yNihhrAXCiR^$-D-d_Yh|uozDpZ_ zCGX$5SIl>TsDiwk@{83*uXM#f|5GmLg$LI=)oT?82E&`RN&5q5I}6p65S@Mv9H;iE z5P9v|CR9DhTHllGeM7BV%^4kmrfCUFM;x>|!#Evi{1EP&x?4JsM_yc=vSgd~^mEW| zYh2z-kF;K^kW?X zbcCPn($}oUzr!BCzZvrpJ%jh7?_H0XCu+|O2GSwlWP?(7y&&&)J8dsmR>r2Tnbl`EZ7(GHu`xN*QJ$BM%TFx^fsPnm0jhnxQ_#0%!X)e+7607w{-+bD`_l^x99de z-oTD}IBlsXklezjAMkR#tIIz;lyUoQ*SV@=9xDb8Igk=frN8?NCI~rEesWt=aD4p3 zA+mHY+wEQ;M;Hj1XL^MIw$25tX@@%0#E@A4SyUQiq0zcOyu4VF8}XbN%+$wcF&TDHN;NmLcbKD7wp5y}|6~X?JJ(u}8Z@(hJcoR=?o5d2XmFl{QaXJZ2N}d!HMw)gQ}Tmy<_sdAex>xyF&J? z1ul@c^DtRDjQ-YhQ0OQNNjs*UZ)@cIwwLd#Z=Ka$9I_mt)$p3zI&SwovY>QxT711x zq4OMtdKI(UJsk+qxUmX+G4{9s^?N?<^}H+J62W$@>iS;aZ4F83H7HtM=EaOUz7e$m zQLC*zI1sg1i+1A z{H6$S?$-NDUVECdtp0aQWwFx;H2Ua~r7)cAkBZ(>_d={6%ui~+3y>fun|_Js(QiZh z9R0orYc{mkIEg8^MslaanNSkQ?NynXnM3U|&b?d}08 z*1&EMle^yUvHO_wzYp2Ocb{|3TOmJzs=rlbk1TT~G~oMcGUe$_@BN#f`q&X<4M-dF zYnxtYr}#Z|xC6a}Chi5LE_T9%yySyg{C2oLj?Zzu<953UMfqg8ILd_{&Q4XR9{Iac z@_|)LD9jWuGyGeh8>8HM+LbeqFcDA6^?9Pk+~^PW=eMltk@KB{W22FDSdjRqEc$bkqcT#r`-H%Z z_!eWu`EJ7-^~P%aOKD!Vh``-xr_-J9GS3MA0L?Ma-KJN4_B8WXyCWFgbK5TZHIH=p zS(}sM`J26zBPkA;fSB~-je&F0HyF+Rdjc)jMG) zX$TO|6EcpZn-?cEkRX#9e#6s`Jp7?&HiaoX>OYvki81qE~sb%uwBu9rOQV<%6S zrw_W@n2c*Pz=qEe9^4}{=9gad`EcjDuHFi%5)a;=kJnx|^TE4Ci?us332tii1Oc9(-#1ACGunVhP9^v#az&!W zZG#Q3mg(*&TiEmcgVVa>tX1X3X#KjATJi>i4x7(a`dW3B7790~=LgjtN*taRIHlD` zbqPT0>uEw=p)TS((m7sVh@D%D9P$GK(k9 zqD#32EhhatJw~S`X6(|D9=d#EN@nDUFta%<4uz3Nr-7yc2k{$DQY69zksvpZ|M zHj?*;aBz(g@Hm5Fz9}U0tjUuR>uy5~VH47KovKGMx6ZXXi6xTmSsd>HPfwMr;);W4i{vpzZrU_sVCJRn$lj4MHOja?)tPMw95M|sl8Q1;cPfV%%OqrHMi zo){igds<%BB(%T77eYpWkGTmR-}B5?%iq6T_QKOr`erHJuW4{E#8=jDip za6`!{Y}fJhY#Vg^%k*?bHDppqc4my}lrl&=a|^7}J8d;4ru%$zx~}=+ctuo_w>BKz zb!eTw`gdv?)!q4Z5cV*-wcGq;?YHdn6AF&7H)5Xe@h>l0BS6gLG=?j0@YKeXKA-mp z5lusW7j8k7Z?j{;@zw43wb}@5R1$)#im;nk7`5nRQyaIfZr1C8rhKz8LDcKE{1=oM z5f_-}vo|i~{SZ8I3QtKX79%|g)FyXJ+ z^s&S-EWW!vtFzOUZ+pMf@+NbK5WVk)Hv&VN7d0m}PQD|7RNA@W>O?0tP z+~?bV=DfNbSJ~s%K9n5Bj$zSZA>^*jD|*I7aN55BahThZ7zePG!pu)jRzw%iMEtY3 zrx8o!R7J7*ku<5i%&Ed%4Nv;M87x{l7m&^nPhX_tOe%!GEOTOgg}qecjIBt0rgjrYSB(i}zs2D~Pn=q!uMBqKuI-B(e^YbZu)!qn6z_>-+&_bSOdTol+#I7=OkT zV9C|ds8DN54B@z&`qJ3bhF0olINbd%dB7HZ7GeB(|MK$d+a_nzDaD$9R{PjuyJp|) zWOq=0U|pJZ!cm`b5OKv(ilH~vQ_%pTpI6$|-%|>;0j+RI8=uGL`SFJ+UkQY^TrvT9 zAU4LW1~baRm74m)n%|Hy`+K(f%gH?LT*ps_sDV13iu;8mA#_RE zn|t#l$PNsTWZReb{)`sCaAp6Ogoj(eTPSX%?<}E?)|dXq@Qo3lmWHzpTcAOAas~bv zs3XJm4afXc!BKGd4K%Kt(H0`Scc569N35|wQpvL-eZc2&m4>Q(cjida?t*Wh9{1Dt zSqUWUl}PEo4_R6f30IgwVGzV4vUso4vTD*tYv~(3EpZ!2sXYI;wE{jq>O{eDICUWM zy)j9%UlUih5;(1@Z8;ZfbSD+$`Oe|s4~uxmA`CkbboE;FoAeD`*NAv~lLvTk|6%pE z^i*Y?BrG;OWqfR0ciZ58vLV6ad2Ogn7D#c_bC0n5Vl?1xjGl}+Sa9Nx5?kDh-@65t z&N=2t=vPOCK)7j`R!Y_fgKcS-yN}@hD~8laJydKqS9avZXSFZdiCK{}nFY<=0djc7}5k!#EnY#1OH$Ohc8Bo>&~Vi;Mis$s6w%Os}hjSn-@S z7eNj^S+mDqJy|Vx(FsR6+_#A^&1d@)wSlQxRKlnk}^h06Ygy+yL59z<7Ni(UGAE*bIlxb{CfXn6 zPv4k^@Hc!hXn8kQmR9c&+o4Hju9lGMf+3>3uD^284Na+z7b`We0E?OrB zIdZA_+_^VPwK=82<~^5Uk-oN&45FDWcFjL|P6=0~p(oM3ue&2f^rSCD$4-%e6rrg_ zZNCg_I}%DOIn3dFvagSqtywOd8zcRjfuO+W6ICoW#|2VT;Wu}bukHeu4aB)`e^wv6 zNd0n*`2tE?6krAOJrEcK(oM6w4ZkLK9hg_*IbEN>d*lMTTxf~_@1#V(^wgAsBoPDo z-i4P?{Za&b+@T0wKeK0 zujeeW5S29t4ot_>ybC$37R@P|A#lk9mQm2EKJYZYJ@wCk9fG*q5=;#60IJ#DkvGp% z86r;{vz(V+>J<6>u5F~{0pfq-40w1yaC_DdoLVQ$A4tO34nji!3xy`i;73Cpo!{eB zP3p0cc2uNj=J@6BojhbQ8FYuIQEJ!v*s~%vjAAL#XcOzs>vRU7Yg@gj)raL(cDZ9d zGsYq_u8wCW;rleN4=GKZ+x?GyV9;3l+UXT~=AM()ToS?$OKPGp0`xgE`bObd`F9{) zQP9s7xA)9a8`3q|4w15IJ~Oi?CGv5Gslc3(^gY}NNamiW={viKq8R9l5HOGOc02Je z$O*Yuur6;3G4x13ysj>RboaoI8h*;zAkO&*;?B!q09mr?FILNl1d^8=l)>(b~}wMG>d3a z!sh7%dViUV8G2iKhkk!s6Z9U@&wdy(fBhl8!CuD{#+raz=AINDW%?AT+&XEs`@v8R z9;)s+b>!(oga=O7r7Kz@EiYf119yUcMLVfpNt5n^e2r!x8Qn3w4jl=9a&4z-Anh=u z2g8iOJK-B*$M?C0Zd_*=V@rv)Fe#Zc1a#$GEpm?v4Aum-LSCL~e|vA%r7h^yo+nm= z+hxf~-vcF*H^usQd1Z>kOsy|-^r?&l5#V`)6kMi*qmX-7V-FJIYmapAxDo)NmVCWd zflBSDMgz@MER}jK=AiD*&lNkcg9T|v$GN#Agk{>ZZz)VZdv@gQ6tzC^IYjljNilC? zCtlEYb4#BQ3xNlpQNJlwp&5hT-tAu>vgO9;U*`oS+8A@@n6$bvY!;yYs%c^O&|*E8 zN-+}5XV)dU@*^p(@3 z{Ir&LS*!bLsuF*;eF4u3AG3wX72)z@zL?lflDb&e(s=Jn}_c%_w|6AAByOcXj? zag```<=)-#tc*0W*H`78fF3Z1*zYo`lgIP+sC2_EKXt@KnJZlZm!sQ=goV4fnb`HS zyiWfbct1+eG{>1*=rfwHG~8IsP}f9+OQBnF=gaP6!yAS5yA$QtBGXiD2UH*b&Y$^k z`F^C0nOJgIfCncn{sD4|dH@k}4M3H@J>@%%-W!8yhRQW_9oU2ajY+bNx&!fXAoEtXNh76#e3->L?!sp!|lFMEUoyfx7Y1rJ(wrcaLh4kKszEJsS|0;Sg`~2Rz?) zQ%8CY^*->POVD?`qWDK7;=w0;&=!GB0g>Ef^VJw~sg5uRPjdLeqwRl&$+XlGUHyf} zlBreYN1Q|c&S;HtTFdG+EZ>Gu%q$KOoxfGx#^}oo({}x@?y+C*cZYawny)B{K3Nj{ z-!u-T=$<*1nY;1$fF&&@V#3@BfP%7DC=*uv z`t@%jf)4D&+UMJ6`t8d(!ehm^6S}p5^oGwfknQS-*Dmwc`t?FOV;Ks;vOM6qhYy3W zhJK3f0~n>=_fCtUP_FWNWMHB}rtjl;V_w2`>nrfG_FS7MufOmJ-6Tkcu!C`lOTp|a z)5wQGPiL?*>Atem(KJZWNtxB0Mmd=Hd7jrcN5*#>Z}pkwyFP5x(?Zox^E>hdobU~g z?YEZ6fcRU-tR{iRX_K)+mlsHTpo#Ac7%yLUjM)vf{^0$NEI3WK+fJJdEJ3gPOH=%F zhjTJWoc_DVOv8;;&9AB8SASUktUN_u9F#m%#vH-HyXlC`E?XXTLC*&HnY{mXN{yOE z2Ro~xj$VclK>MU^np`d6+QHFX078(EP^d>!J%7U` zN1%Gw$F%X;xX_gw1EFthPEXahfp+ktcm(c3SZ6VJR6>8A(E8?U^ zU+AayS{XUhncoUhBaQ{Usxb*Y%UwkyMHba}uSpx37hkZ?d)lduEDN$+oNTrq2c$8j z8Fn290*_w4M8Y``N-zd`y+VUt=3KS>e6Se-4dJVRYh6d<+mA6fxxO3i*Yp|7n^%rtGXlk%tJsU?IybEYQ+Zfo7 z!C`Ak#+-dvX6iO&00UYS?IO%!+kV?ptW+EJcFG~E*G4(oJ-5{R?%l5G{M=c#hp=~D z(5;rUw{)#8J3FzuWw4s;)E?amG@hy=%tKrp?EW&9YWg|S;(Qo zx#o?h!8fxZ5x|udb%Ls@yyi98{FCWZtC2q0$-H%s&pwHY-vE#QOI381n<{n&#kUEs z`5!Zo5Hv)_XH|_M>(Q#+d6_C&TxF)*5PhlF=DZ&d`CfHub{xNcBK$`_-+|plZ51sa z!-xMnkSe1kL!{Hv)~QBqp|NdJz#CxC>)v3#XoNz1NGVO2(PCM9v;VQ?Ww5E|RM36P zRN#}Py^SPYd3}H$L{HDpbq<0QWW}i#1RO}DBDv`cNnBP9aP)Sw67-Wm2S?jdA|>1S zya&kW&u?9+8nbOuTp4w4O4kRxzK~iccR7h76e7n0UJdj(LX-ZbCr@Hw{~sUV%;Oh) zCBqX4LAj-5+*u*iXX}ErSQ&9}aE7p!MEcMpe;Uv9mreB%c$tmCNO{YMn9B+a#xwz= zfhxwNO6+db?(zIkdmO*a<6+&|0s`S(@io39*=8XZmRNt;f#{{xvP?VfOU;uIJl>RJ zX}}bv@7G#Hp6b&r$pwLthsWL5m%bB5wjj)e7e)Z_rDOUUSKJ~u_RK8NwUx-lC1Ivr zPwyd_2O-8LfIr|&**|3Z*T!IfnD#R(4;ESQ9cuM%_gR(2fq&{T?V!vCx_V~dHSp^F zj&c*!*PhB)ojqtX0f=zHlydRg6j74Y0M-q_V|O}E#_mK{Y>fU({RL{rs3^PoVPxAw zH>)w$bScE^FZ*U2tXdhi%pt z-X?6grcW7@*>!Jpw&6xCkE5sKKZ3 z?E>sDZcbmu13D<0dxk=LTEhURzCSuzx_)pe6sP{ack8~J+H{^`Cf$k#(s^YJ>4#(C zg{v;Mu5~<;bMShw(Qa5(sq6k`&oHv zJ7sU!U~CU~iEnunjLOcOGk<_Y072%=%2J>n#l;@AIQ>{bW+6%Pm;zAy1ijhzbp01B0abz*p{UWLkZFPs9>ArbOUM(PS~W2aH(vt zxXbY~?7|V$RjCkOkHEeP>D_DSwj!MfCto)AuMN-lLt0)aul4=aeqOxH1K;{Rm$l(m z$jQuV9=0G4{m5W$;lAegu6X7dT-40QerAlnQMDN|^*9U47bR_++fm3bYV^)TLW`0D z7y}$h;eCh+=Ue}B0S8rz&kwrqHQpD9#@o#2kBB0jSFARlfu`Ty(B5y0Iv#g0M<{l` zeuf)pu}OH)H+9>3V{LHwyIJ?pKCt#U8s+M8dwIHc35G&EsM$j#C$!Hu*-S@Xdz2|~ zCK1ju~DK9)_onN6E z`_l%#zO6o7*&qTD{ThhEcS57v+vLX zQ?(7E)_pJI^GqbptN6#DI+9L1b>VXHwyM)oBvMt=<%!9-Fm2lRvOlzI*(=hV?~wPQ zA9yCy8Mk|UzyVAU5cSUp`=FF(&wB5_(K`LHN2q5Vg1oi+SAsS*vr5k$TD3=8iheei zQaEw&JHFdgu%4a`9*1`VCop!6?jN0bNfgo;$0Qh`AA^=WpRhjAHGft}xjRB~Tz}v2 z5J-H`jh*1K(8#9no;9r={W5RpcRJ4PXEv*^)4UDYL!-kM(UC3YQbpJd>>}`KsXt=L zkwiS(0+mk1*ZuNku4pEe1-AG|vR)r-4rcqV)b%6I$ohCV{c;;hFBTA>{!FeFl;Yc5 z>#=@^Sk1Kfzo1SlTj^V;jhn*=293xQe|p%AtbY*c`4!BGF2Te3y(1(j4^#L1h}1CB z#3z_|VQ)Z%K!_jAo#R=TFTq5{<^T=QHLT%3g7xA7du6UbKD}~>7JIRfBFBQwoH1_Gg zeubq&x|z?P`Q`gBy_ZWdI|A8y>0+CUi-!h_2;ss2cfLwBV6E8qd?0u1?=-Wu@+muGtq8xUuEfL)ypV9^zi; zTw1BCQ&v!q@tM5pLE=Tp{8}pwZs{>n!0o>L3$**nh;`{BvxW&s-SG7MZYq{P&4jX&cw$k57E??Us!X5 zbBf$isxQ}*DJ&IDEBVmUBx+VUq# z1KS?$ZXRa6szkn;;o+p)QjaKH6Fl9`^SQ$qWRo;ux<96b1OK;#tB>tjG*G8&0tqJoA-f|<5qCKXWpCq7zD zFVXt+#RG4)?YjkNTl8A<*TaM$!pYkP8_0i7K|4v0rRZ0_<*+ft7BSp4$DJ z+fb0{iQo4h{0$!%eq7))R2Dq*%gr-#E;IRRT-_Ii=TY10c8Y=mM4X-nrR(3L>luOF z`8=Hy?^ULnpXcYH&ycgYJfQR&4T*%kGFK7Kx+K4La;C*`;`e5 zHEZ*&p7fd7hCXNo7qP#yXN5AIF-vt7;iTXTqKx2U3UH5)7y(C#7q#r%NPG~20|Al( zqj=w`G(C1%xICkd4|OO~q$RxysQ+3>Xfv1J1OA9xx`rqUh9WE#Rf*>5rxjHV96c2X z?zzD@yk_TCl%S5M%v>hw2OTCd9KAD8P(}g#!Tf~!k<+0fd?R903{5S2hJ!Z3l9nvE z(}w#g8Y*WbxNiyiALlDPTelm-3N(|FwHJ?vdN;56%`+1ryReKx3^0kI?*S zqR6{ZenKbW;30X+;0xgK>VjNX(4cmjhkT||83{$!VfFr>GbrH6jIxMYcoT2T+}zk= z*pg)Hs@W#mTdlb4g%7a}fh)ym$*A=*~jVD;X<}d-#*DGyWDQPX|WLZXWGkOv?)tb3-MD z7vK;sb|v>^!cLUTIX75~*UkXiRKNIXA3>rPN;Dm)IXwnOo-%U;3XKlEm_$FJj<7_MCBY4D)^Ps_rPsI%HKw{K;o0@kuXR zHt{X~drVHbXlT&*84D9@<+9$>Cxp|=Jv^}>%o>#;Y1FIXS@Biyz33eUmDlIh9b9`> z@H?e{r$f4;c$NL{4Ab+EyAV7UUmnF^l+R_1Q9nl+M3B4So-l%gQlS>B0HDG7`nKv* zYalNZG{@u-POMv6`8<~9j5ru3eyJ?Yr#JOPvt2Rnu52mXh1+53?;8buKou1Qj_oCa z(8xD$643Y84B$2bBK{LrMhZAQRVNE6?|)C;Saifc-xe-tUJng<24-!>Cr(<>MK5=2#7accyarha2OXR)Q731BokxvTy) zlgmGGQLz@EXBtdjK{52tWV+zpI|Ubo%lTrK2IXC9mBT<~i3YZZCmMA2nI&g_hOoM} z%_3D^ydcxV_3JMbYrgh|sIG+cRo+g$0y!yhyBb^xkt*`Gihc`wxyK`=0Xm=Tbg$Er z_y*`8NJTGn_j-t^R++*SCd0C_Ch5_omI}B^Z3vgoKkl0=qb9}xLm0NZ2t@lu&zl4q zVTJ7x%;hiXlojY$P|s6^bZ63cU%{MIi7?Qz%FaAb8=|J=5b6RDk_`IzdkDWl2~(H1 zSS+_tfMaqI=QO%qlAM44ih2B`Ss?R0NsIz1By&X4(0`8h4^{v8CyZ76K{xJ4@Z~s} z!WJGXml|F`Zd#!f9Y&NzIEC6}`?pvPIC6HR`M|m&W2^ra6#nzv`F-Z@lFD9={zNRO z;g|Bq$dNhe#RH8OE^DsNiTn}Mu+FJtVr({O@r&Mqffp27v@~%}4DthneEBIXp=b3g zwJcnQ(y`*%A7Ol~;^uZUZNgVKrP9`>b5O-g!{83Y6D;=Y%f2ceUI8Ew2mEoq$@!@i->%ZDw z+`d5sW{X_Bk!X);P}p+0v>;Vw6Z0jquugEo88WlAcE!*f5DS$CgAr z@h4^6QMCvKVWiIGq^~~Ik$`{|R$-u@tuoW02??lGiIwJ;n90T?Ww_YqenMBu0KP~i zq<;ga7WCe(nK0RY9F_9l<-Q2@J-I37V!8Wa3#EE@F8}(~nLi=IIZ*AyM3B8ATmt8w z$`_pl9ZT#t9@8Nwb4rjONe5eICR*x=tj|>*hC>b7{;!ma9U_Xy!md3oF1hevI9Gib zgpEw`5Ws8(-dto^2SdVUd4#&7#kGk{10O}&1?KY~W7D31?fRWRODY|ak(27+%WoPA zIJ!*T-WDy;(xh0k`%_xWP*G^O5~x8g@&Yl+RiS48!U}gHKV$!Ne-p*^vVr zX8)=p_v z$IxTnB|iLG*G~*G>39!pUm1+(;|j-lt9k{Zm}lHv41?GzBNZYsn56#7evQ6rz(`V* z7uo=`)Ygo&@N&ST`uCcvQu~d;9qW=inU`fLwB3t^@h~ZR8QW%HSwm6x#y#JB zm8dZ#$V|ufDwzo7{e{puA-`)XG^^&L?@g!tGZdD?rUF_u8yIG1sHQnNp!|ZH|4tMiFSr;bY6v6E{JsZV)w^V7V%zx;LebF2KAf))$d69_Q~6v| zXBn2F1&&^^s|G<8V|n5i*A1e#^Q4_Zo@(5zB;~zZSZ(o_Xr-5Wi!ilH|a)*-6c3Uv@V@nm0Ew`82>r zff!DO`g8mal@?h_VTutM&^IR5TBPN0_VZ$WZEF7nQgf=h53ma#RV3?TN2i;Fhm>IyLhm3A+aJ`5rD7r&k2-7Bb}g1uSkimY_x>1bks_%B89Pv-j&E8sD7d#W02F$o;uH{PHY54PdgjJp7DH3Aur zR^+??V*$VyLU}qW|9`wqtdD4P|6@ps!8}oG7f*9*g@;{Bwcs047!RoDo@sIplmDqw zP*=y!6D1?Rq`C$W*=D9OyXNdh-FvP>3<=8CR-JOLC)n2~E%QeiZ28~;(HQV93a7!B zmk!X>A87_2ub^r9E!KT*q^M&!tPSrT230ztnPGRB5>qL6Suol3wn?EClZtGb)BaRB zR=Ju;`ml`Zo`|FXAos(>o z!h`Ra{(8Zy_?001eH4q{+0~GRRr1AVG5a{3_)y<3ZBJXq=kh5ED+~({Z+7XwQqX?{ zA-=%Owg&49p%#{~)N-NMUu!9GnbC_<1Yg6%KF@R2F;xuj0sMm#K8wi}-=uYgeT(^+ zE^>e8v^ciYQKKs{JgeCfBF8P#B+H*i{4*xdUm>K?rBt~L$MmCr1s=h<^o6J9lU05~ zdyr1o(l3s8EMNMZ__QOZ8S7d0?W%Kzwag=Kw0Ft!|6}SafZ__eba8ig65QS0f)m`` zAwY041P>O1y9D>(?ykX|!QI_m-p%gY{g;}erhutx?(K8>v+j$@Agrlhr+cENr3BK_ z3XzXaWsqgTyFcKD`c%pE(bL?w*K!`aze4-~OhUcG=-K!opRQm+y~Sv_dCL!PyY6;WLsDc6jDZ?t*=W%_ zEq30-*yU#%Gbu=58e!MZZLB1l4pNL@{D>ogm><(Yjf%AEi9oN)pp!_glu%Q@`rirB z|4NC%`XADU0b90&sJ{1HUl^bdIe=daD@&t^i6pk%}geeH;4+7P#4|L@I0N zR@f7jQWguxvp8g#N~F*dje-0*htO^)20y4#!p48H|@=fK{NV!u44t8nq5Tax$94`^0nmo+gh={1i zv2XeR!W-ufw!A|N!T`)hIXb@^ZR+cDc{l(4$NV4wbxE2n^Ay@r5L@`fV@PGc(fLMU zwP;@KmGdb?$HQsvV>v4iPtUYuV+o^1h9gy&%b3d}s5;mrJ41Y$m|-h~DPjIe^9qn! z(+>p!Bf%N7j6ekKb2bX6d|U;!vPAz}2D_P70_rhVy=B+*9}e!y5>|?00nzXqodZ~g zrtcKi!LW1G7)qLxm4XjKM`XnMJ@oww2AdmHH*7dTl8lGpr8FU_?b>FwESC zvCgS6%^?Gaf4P#zeWx&e!%!0K$Q(C6nt8k>7xpn?t9tm!#+x^BZEa`|mMR33%BvPO z%KX?XdcdOX7n zJ~Zd*dn{7;rN*#F4hQ2IIE705->wY!-kZmrABJ5Bvi=`kak`T`lC8xqkixjA3T-(i z*C#eMAWABRBJv>^dG!jjtd2Cr+mRsPtbNU=ucatiGa0^Gx6x1BEP8lC!o~-R zCM$wUN2WqUogbtQ;aE=31r)rDlLn*l7?LkvncDNN6|)fE&jrUw8X4ynw&P0SZL+r5 zR(|xThG)_e@qd@d2iI@#f;NNtr)Y@|`5Aug3xDiYe_#2#h$KVgajRRAW>#}A7@6Kv z@akioI;q!@(aJh9PWt2SK4Uiyx)<~`6eq&>#lNv_WcT2{Hr?~uw$Mm5#}5Z3>MQ9$ zcV1<={{|nLym(;_q^g~Fk__yyTWOBFyt8nJs1daBDRMg(m=^IDtFHugfiWj;Z8B4d zOwP1?Fw%*gh6%UhS4}f)47KkC4C{QqwZ+95%wUkP@E!kZQ$HGB3ME`+SQcnlI(%T5 z=Iqy845qH3-T29z^{NiPyL$IgFCtRW68u|}6aIRqUsn&SH>CouX zMo(1{IYgm3>p>MFrjBwj|6S-fqhi;?423>uQbWw_hx)o|p-N3t(77{N2l!{!j9z#p zNboIx*81jN-#b!2vS)nv5uI5V6}<)=vB^jpROV^tkf6P_Jg9I-C(tG z+-2US{>6s1UJ7LMZ=L~p`&v~fhHv#Cbi65~Ke7dkzsQyt;wDS!?mkdS$fH8le*sT-f?P-T}_<1CA(&8e50RC)K?l#4Lzwryd4X-CJfJD+V-PY==5f;s`_ zbAb_J{Q!fj=N@dzhfQ8i`degzW5s~Rw^RD4$}gKX9p0te=+Qf&=+Az6As^t5V#!I*S5`R&nh5xb0YqKaBrIyIY_=%~RD{m8jfG!G!m*})lEmadW5HfAQ1*T67N?uTo>I2LDy3sJBnGSZB8&(U1q~%e&G)Gqc)EEHHudltb01u&6l3* zI5jg^d81_(n>cNA+5b9g1kyIe(uYL^PCg!0i&HG@UXz}R6Dj`gch%gU zEzHC$^^YGs4V7uJfxUBINN9D?D#jiD{E^3kaGvhwQUn;iMQC(3y&zLnNHG_^w#rCUZc=0~BjR%Q{%=aq zT~n{6E7ELj@!P{Z6RQP$iU4Kdx&ztHeT9eTX0<);NU#9Ahd;e`m+QJ+WNa%0obbB+ z=HfO>ycN3EpVA%0EC^(xo=PMr>mJ=Tj`pBY8?p`NT8H$N$)O5PWv*)jg-p@61qdYp zJSv()j~stPf}2;IynKzhP;*w61PHm+ECo01#=&hH?&u>LkbgD=8qTASTIePi z8?!D8s^74@DPOE%UngH0dbM-|~Xp01k)1v2nOdVo%kG~fXB$PEn6#pI;6!Gt$s1tpMR(?R+Gjh z*tXYWdz^zzUD}Nz!&4;PpN0`PBwgCyVf*3on-+z`_UV0M?RV&+YWn@#ddXSs1WRQ8 zR0kB6UR6wt7&06pMpC4?(+Oxu>4TBP$&?CJ@`h$3g!O(S?LM-fgX)q7<^yFD=bixJKISCYF^KQP~>} zniY{};ofdA)j>E|o!+h6@eVB)V#OaY6Z|T3{A0TAuN+C*n#8fB>KTa(W zI4je8tW`IK%r4LfB*2Jc{MReJ(fei1yjSnd3p~Y6$)KKV^Qp90Qbww}yHm{{11kME zron$22FDyjqN|2UbWyK9Gq_+kd7hQ-hU4t1)m8wd9Abt}Y+=5bq|J4Zeq5N~BQF$j zJQ#&ziD&eYZ=IgDKkeTCk53IDJ2*Rq!(CN zJ?yah9*mm@QlNaIBq}L9+(?&1;78K5!kp^*{3$=dMA1J08fhaPGF=jJ;uyC-fC5i; zsL)^B02blLhyQ(zBi`5?Ljm;R=~@0Eb&HXvDOM#;asf(l=0ib{rS8u|_Jis#d9;iV zn@^7i;fovfVnNxoPe<&e(rb}>!iMKPuF{W~vU7|J!a^T@(o~%iPrWrmeDKJ>l(t6W z1mjk@=7lxSaMi8FqtF@>=SKXhKip+A&B-C`8k#ny{&GYeWBK)_qBWzF^t<5JEmwoX z#8w(G&)VwInySgw%W!x^a-r>plP82%{huj?LA|t>v#+QiD?R**7kl(2Kk=CiVas@S zxMdDgLLwaw;2i2nLr8PWPDb4HTqFA|gPAV(b{CF52I3sbNomh_fm0*;y*l?sA~lY6 z&V|xw$50HC9hX+3ejVL4uK#mUe!2#$YSs?>;0Bn$WbGf*1qZq0-34K=G1oGXul=>u zkdwf`H{RLRqx+~rkt$W#FyHuvvl3%A(j{)aGnGsG02T6Kc!Rb<@lCYmNk93-&W@n%J^a>%DYou{%&K_eJc8iEy-#tPsxGJ(j z&?~Kny5yHAkPSI~u~>3Q(2aJbZoiBC$?;qJwkDQ%9w7hU(OoxkR4|NVWUX1MdU zUY0(mDM$@P4Z$fAI-7XS_ibB=%STc<1Yh6aX_1Z|^nbfYc7LF$Y1YUT6Gg`$l z8?vWPA-5ElV?ps|qkl?dk^-^~gnx>}*a_5L1xt2eI~uwp(o>*(M5=z*4hiz9%)}ZW zoWXHWKoKY3cXQst33I-yZ5+7a37vk9t3=;MF1HgUljTlY=iaPu+aZ;O)%%Aqa4uqB zJRn`cJF0#)c*H!BljjY>kq-K`I*mNYZiVp7GIkAYo~A>d$5YOA%x0SgSQ9In;q1nz zg9Pd8s%`SHP|k#a>XBqCHpA_tL_RCuj~t{)z3bV~21#k;&wkK?7Jq3fGvn1$(Wr!r z)@_K ztI4qyG^Y-@JMBr$q!xzhFzqQq%TQy7TuqP6M9GxlSJ}rzKz_}ww_t!Z1e@X@u_1ZN ze*8sjaz{{BBG;oB$H(FVkdh4 zS{t&@g=Kz|G9XR2+xU7VdG@@QEWyGd|E|!%e>VMWBj6U1zORs2DyT{4aOMS(~ zR)Nc;Jm`V|(5HUsW+XJmN0Bu7U&Tm1tOZc})0ld}5MVBU!8=qyY;38JoT)RLHKUQeWYm7{4fW$-Ca8DmZTO$V;%Vq9$-l zM;K}bK}D6~Cbd6F5S{fivI6b@biZ+7w=Qg_+`hzOS%dTQ*e4vmu!t_cd<+#ef9FB^ zp4u+%4|eqc)8A&#d+C9ks8ESMAmQJ^-9Ft4p(Qve z$&-=nP8H&GG8@4z!k`?8-GmVw2(YCY3FUe*ozEH5 z=Jwtj&!h|YAh_l8(rAM>L-M2kesJhWJrat~sQ}tnCDZjnlmt4>BV4QUQPaC4k|RBP z8}?xPo`$h_~-aCVXjPs3o+)*;`rc7(DGVp1IXkYuMJU@i2zxrHf zk0_>CZ{*s+O>(VD3B!Q2U{1=?#jAFEhJL^dD8u{j3>D8~D1ZX5^~n!jV) zlK6@kHoV-fA4tt;AfvDHph1%cwh}OR7QokP?_NCI4{kh^MuooQe}Xl*ZC20O4T803 zJI#uSvi*9lGrK>D|8{_@Ud2SX{%^@UyQr+4)=P*~gKqO!7AC?0df==!Wi#-;NR2$%J2Z$)A!v zNEYG-qTVBX$&9Y5$rSbVx}dXuZ}{O)$Qrz4`YIY3h>a0InzG-Jf}KrViOQ7=+LK{_ zeE8Xj`kgwKiYiK4s`t}-A;Sx)Gy~$9^bI2KFR=d7^_Haoau`$ZC(U9>Hno`U>JTS0 zsNn4pLUUOglC;8Jx*gLr>8anm-zi}(#}6@X2!c+jNN*^#+da1HND*h4{OyR$(nI0Q zQW{BgYz*>m9QR$T-%TPU!R`pAd2!DksurkvoG{Pin$_?o0Syxbp&D3kFEFs{Y0}M` z!-}51tz{*Dx2Cott!hF@NQ4*C}x9&W%o>xDqaVj39(8*r!Qa&0xg?ODBU51g3HVH-Nu~IvM^ilKs zRlsK3J>0sA`f6PRj*-Es)UnAQqyr7n=gck#wN3=^e%b7jm_xFW=@bFd_q7O%|7jFCpx(>h}m_oKIsem4`*|G#blOf>4Y%Vs^ zFTLo$)CUWf53#nA!FTFgP83pWY&jt<2Ry$LX@exCo+Db@PhVG2V5!UUK6H#jK?XCvM1Xr z&}(Z5?N`fMZ|TMCEBfs!wVMjf@K~NeXiM{YZ8gb)mX%?D+pLa2+ubMvX{8HyXaV7( z24a$JJz;$5Jq(_Q=>ug&-H}a^wXQ#{DQpf5k z4suJ@b@7iL^Cdzaq6Xof=ZAv{3fHlifBY#Ul9R5N%)5H-@69*KZ?+2%@t&du(f?l0 zqncc`A}zdZhtymdJ-VaL`@B-&`DT;rEA+LhhngoIBW)~HSR7o#YVVrhFJvFX*k+n< z#QlD{T-vs!)#Lvla0Yy+qWzRA$+rzZ+Rw4yPB-=bgXfRP!&l^rLMQq4TsE z_&4D|aX-}vWwsVU!t)f31f_EO%>-*UdTei2@<ti;l*xLa z2FAJA9SuEH*v*^3Ust7&IV=Be7r=k1-Urv`tlzy=!2PRI_2j+Fr+C8e5|lqxHx3kb zeWofxzf@mMv{t_;dpRAMkoXLSXDnWc9)7Zl=o;uG4nJ$S_+I&S)Z{d|rRv1*cI(j3 zIS6PDH0+knkV@+1lUL@2i?VYHZsc=$uxr7v=?nO*$L2EAm72Xy_l$pUEIol*gjOzM z_tN}2DRMcR!?(7e=5oHG67C5`H@OUba=MD-TLTrkkb7TxJ)7bZ_`crmsmxwymY;D< z{!bP_=8N+p`8|M1;3uCn1YE?xEEj)$wZ%YxgRqyt&eMDaMh}?yNu`0q?Qdr7zR>($+M~%fm+Pi`^2&q zRCgk2-La(fqedCT9)yE;e6i}>=Bv6$ikrE1wR|_;3~Ef{9)}ALW7VL|_qnXw*9mx%sDcch}$|0iy<0HM@cG%;)duf3~e$Pg~jW1JWY_y7SEpLBxd8|Gb&DrkmBvamE z5l=VGAGRCu04%itW)5w(UmDFckp_V%5R9?PWwj(NIn7ly6`6`al7Z z4pC9hCMYR`tkq}i%UHGc_BYiq2vMc(f zuSv`o+(EaE+8;x6*B+(@+o|FS%ss@25?_YTX&w&s&&iM!7FnCWvf2 zVA!|3?rn^d{mo<9ES<^9m8~Y9q=-0^c60hC#=W$xBK%`5Ew@-8NWO~%zdx>ku)ZPw z04;B#Ey8afF+83ny^S+?SHQs*z+|T%h}t64DM7o!l41VbnycGXnnI$MERFeHK3!)w zK)_WY&OjTd%?>xf-M5WslZK}LPZFpqmscN}fTEoN9qDr)M1J>oCtGIUO)_Ep88bQGB*Cj3p{%Ej%(XBvKO@36)23YGLyQRjzPWA`ih7Ud_~Wv<{hif%GF%AJEzHIng+h_A##lXVB z4?(2Ah*&Z(F&xHJOy~W7F+oMxMe$a~jVlj_Em?luFwV6|4uGQXmIta!o z6OsYQfWdVl%PiM2!9kg?yk+Dwh5mu7p7e|c@gbb<)H{Y){>15G_O2Q9bC#my(1DlI zA@mafnOc_3K8}Q_t$}!gZ2^@k%`B8`3mF;(K2vV9r(XBOr><}`5A<|Ja+BZJp=7J5 zYd|pXivXxxnnG)lSfQDfB*JsgRw#y{?us3KT>)dJo3*cre0Pq+|48UR@>fGEbH8%p zn~xWdN7%F#zq;`7ZEV+Qj57N?NPTdR-)bj3-tfa^z=v@-kAUs5Rm8ec=5d*{x-NgU zs3z60z=?vY8}s&*rYe7*Xy8#9lam0`3`34o(Rc&K9(DS8V}TKo>9LqoW%k)>^n8Mw zG&az}I@g$Z$k%gLxrWUuB)I7Ot5k);;AOk>Xa`5=`242V44Lo8U`xO0aEtb08}X@c z5`#_1iZ<+srk6F(gHC_4EKH{&eL$zxC{dkh`N&xWm+f9$l_MM18fOV1ciP*N+w4ql zPUMBgT3rFm)*>Zs=S?9}(mB4lxQ}JB6O{ij+vXbAju}f$RiIYgd&PY+L#>m_@NY6< zotrYs3R&u$><9D71gVPW9(>dA3Gi=s0hz=vL z#{{>ioUGH#=}#ORofh$**!Zv3iu2snp;D52)04IumsXgpKF?kZ3|P#~Lt7O^3E^ zM}M)Sh(_f;Ib=D49Hwm1Nm|Gxg)+sMGW`pWJMb&x(^b0IkT8rmBs3!$+?V3kmsUmF zVsv)>G~T|Wq!k9TpGhy&Anb=ugA8}?ILai@RhIT)ynlozy5@Oo_Maz}9r^IS98)DF zHC?ePo4$OSV*WC`1;z4SOV&5t8?7Nbi=^0+@BgaI7uja+2L)&nR^=rm{lt}+Kfwr8 zUto@C7E9ZOdq%0p?*KKoKcTbZzOv47ZhLnmLJKD(GvQ~!Y>eE* z51@{Rn~qg zIeXnirYi%n@Mv8B_twb(;4{`1X2s_G5!d-Jy|wT2{!e(s$m{E(4ErwGk^m*JWqQ?N z)$-fJVbO{2Z$d`xvx9N(f^kkFJV3Z-K4gaq77?+@m1G=LJ=o8=jp|70TSzTDudV3M zKv*?z#Xb}0Sdu6kUsn@uD{FN;%+cZC zMGTe6BZoSsA#($sfFcien_A{s$-w}y=Z@vPZ;I)gQ~=J#d}7Wke&oRy{;(0z<ERpNV#v#|r%);~Rys$Fb z`{NB(8zw}993)%9(77uD?1%{VCp`giqPu~4A<5MwI0hpLu~Y>@xu~l-iof2RGfq&I!BHQ??exx1}vJ9W3VbyYtOY0o=kLKbCjHnmUT+8O=T`AMib?LAh3rY)#Iaq0ex1`aj9> zWOlSVtDvue^d55yGF5ESzH9<4#&nMWSS?5e)?9ub;G44d#ntpUl1#kTVS?8@uv{z0 z%+Al@?ng+^JdcF&dMk|Q{(Z*jrock?M`mo*={~BBA9uiEGA`SB3#7$>fJ4V|Rg^F~ zcRwDVJ!38oiZrHcXJZSbTYuCnp9D%p%CsKyt!5w#;g05;yD4oyqI{(y2 zxp1VE@3!P|?pQrgpHCD_23e0@bm0L}+!5c+_=PUgLvwV7XM;)tX^0Y1E?UR`&X zn{cn<{ON*Yk4igUO~O2_GmZAbWgI>-MYG$XG+RUc2KAQmR>IwVm=$et2*D=OFT~4;1A@ zsqZF)aYxLgl`D(>Nqz?dnpu&X$?Lx|1!#;ayT?yq4SZ%G(i-P;W}wp6dHoM%H>+jb zMh(x(oXUJaLDolVcufJA+v2t&3{Ql8|UuZA~BdT{XOm`Ll3Js zBiDqd&@|Nu8NEFH)*T&#ddv9vfOVg!3D4EXM^lPiEs_zWA-Z$J8__&8n}VHKi4z*r z-FF%BU3V zS?hy^9o5$+Gpv3e;#z7b7&bzX-u<{znr!6bXGcsT#Pe{K_8jM+nG(`?|Bbupj?s|d zTTVcfPm~J#eM=cRa2REM4e#j^t4E^Gw<9N%Xg@!ctJO4P83;)*XCcEpCd6m5pWAcm z^CkcW;cF0NFJ|tS9iJ&B=1lRHgVgrUCGKqYSt(AR$rDuPJ3?yKQ_Qt(iCiqL1=iKp z%N_L1cWI11LT|*Mj0@72WG1*N&qARepFcAi8&tl7P}&E%6%BO$)ll6i?_{;;CVDRE za(owV)Db(}oD?-n1Kw<@%(tOr81+B(wH=Kg+B7L2v9~@)`A5(V#M^^WlTu<{b<#F3Nygc6pmrh zL&{*jHf#S)P*I!#v5*8(I|UCE7kWc9!z6vFh2=@eR_uPEvX+{-6(bxljGaPgKJMnm zHx&YSGZc>LtDGK8fvCo1-71hpdldpgcgV!NFH`hPqFQ8+lg;dbQQWUhpk^^YNwhI7 zEM+0y2UMneH|VoYUNo_d+)58KOU{^M_wlfU|1tA9JmI)+vHo%-^b6h7T=p3fdT%KB zH0|}0Jm+PKGov~RsRVxdcC%eGM`#aP?6S18cN1Rt*~?GNIie+Nvdo(+3<_;Oy~dL{ z2)2lkkZ@WKJDPKMQj!t+BR<1S5G)i_Wtsx(WO(mV7Q9rImn0z4_DOkdqbs}?!5pQf zP<)~HwiWeGcl6xxhfmZo7;wy7J{i%3tF|#rCO=FRl`PQKU@B^R-xZ>?c1O+(J)O{+(4TpiOhZ(C_pzCv~uU zx>V_Ay7$YQu35Wd@DQ5A{50kO{LSEA)Ouhc_V!3LC$xb*jX)P}*`(OELL{B;o4n*} zPG_F51!K$k@j|i~07Lc+lRpi1z#P%)rSPqHZLd2LxjeJJc(wbD=A)vx*}mbd zn~*|gcYMlz2koL2d;BnL_)6bOR?^=W3~O*XL}vf;T#cJdJmsl|@=s7c?pzG}_G(Ig zC(P3#HwlD}7l~x7?MQ&u4OlhQ0m&c6p}5C9WZV8`OvjYP|17ZlBp9fpN1=N>DuU>8 z(@$k(6dU@Zr|&V!x@GWE8++0%`wv|H%lNu}C^7<6eXHglQe>&~+k?_9FIFA}7_5woOp#?U~WkY~W{s-jM8{tPPy-)7_Q@Q0<2j^XV_EL_t zOy%+jJBUF zk%7#H2_8~agb)C@X1J)-ZTqkh>F7;T;Sx}u^XU>$suJq9)h6@@_zB1>NG08Z920^a ztEkQz4&&O(t9D~$jzn*JY23)eK4vC0_0(G)h+y@qi`o;Zde&;~PQJ-Q0ex0+vGep@ zHxw{>WarUY>^)8tHh}3p>gVY9SG2s98E(WR#l?1$q!oowz&P3*5O{IhIlc@o7iVci z6#KY-g97l`Y`sQQO-8j)^a*{Gx(vfTwHNuA$#gCh@MkGrhIp$oHzine>E4upML`2p z28_TREd}fn(BE8yNoJBX&%BRm^awb|27a@mzfDs)gjm0qW1_}0F@cQVi?eS*35YMg+`6)q~R-KSQ81;vjgtwU3))#AHW|>P*Qw#Es<*u zN3Kjz_!?+e&^sR0u>O1xqYpFJY99a=Cg96zD^~5TjxenDJ`47|ohIr$T^jYxU`@Q_ zn?B4$BW$4QvvBSFRLC*Z%UZ`~jZI=FvQ3(&SpAGnqmcg4)SDmiMcg1~O zxtKFDXe;rzO~!MY3iWd81wZ{u)J!;(Fy-EeO#53ma8fbAg|L&neu5)C6v8uPnR=6j zlVLpK!7|^&>lw7k2}@g$ZS)c8mI#|o_aiZ~sZc{wLqJ##vP@M`lK^l3?8j1(5L@u5 zUPh=daH6yfK%?XX_43186XjaNXe>?!p6Y2ntwj#IW4FNCl|jj~xmpt?+&T7k4?7Dz zWw0NJY#I2k%9w#}1kK@;?l=~ZAL~YtKt8U+_~?P}ckd$5%O)xHE(cR-tLSsN9_d}9 zxc&G>rtEbhsRJjP{E979Pu+Uqo!r`cfP?jGsG}~ZZ`W@=axP1FH>*+-aJt-G%N{JE zvmR*wMvSqG6WhVz5}|d*NK}NH1280|LnstXR!-QSp@!ncJ8v>j17&5P>N~zg z7zQ8*@rLm2Nn}Zxx;v6cQ?O)x%KI85)fZ_|IoacQLI9y}OrzgNHbpdpEuBvtXxYys zC|&#p0eFxdUnq&yN9gka#{K6a)}{2=1^j&JxFd*aOX#BJz0Gl!f0WefwLnf@SqP;R zj6Yzl_BgbO>?PO$fywVaddW)~hZXcxuOce8*ZBi>Y*dFvJM+BFjUDA;rEaO~fndev zr0e0|=hMyo8Q?!SUuHq+Z##x(+oW)v{He!WQFUfVTYaMJ)kVn^R>@u1)_)SS&IVfF@9Fc2MuHCu32CMyoM1QU&gc!yURT@ zA-3bcG?Y9AMvblgg9dC?t^t((`yVv(GdjPI_^li^!b!dT8MbXxA}3&I5+FCX#CqC4 zO{_!$XuSbrk)S5t@B&_|>W3r}Ea$F+u$=8?I3agGq@pr$a`KCTPM&N_GyFXby&Vgp z*=t_CzNkcBW^>9_C+%3f`_9#uoUe9kN)_ozwPy8jfC1xR)bC$swjbi#O+j=i)ZuV{k)a(-r?JJ zsW^PU`-15Oz*k!jEDuksShga(tydACX?GJ2lha-c&S z3fU%eB*PVeREyb`H#B^f@>cyIJo%z(&!x5gOX%z0djY~snfUf-D>jcLpcqcNM;Whd z{HW1PU1lR{Gp@_&g&rrAs*vXlIV)cZ;o@28vpqfBLcLn{51YM+FV;Gb2`=BxmJ60n(qM+5DE`z ztXcxgA|QtZ0svY|z&j{$tZqxPz#;3xAHNx#1vc%c^{RUNO$wOy5`ajmBcB5}5JSm0 zK;{8PKyN$t+r3m|*OlmLzgQ6*J*KB(g2~6&aCY2g5(u}GXmne2skUqW)#I9k7DOHZ zBbnV(Cc+CYHPHU^6=TWFwS7>@7Saa*KalA?-bm5NCVTsqfFMv`23p4W^Tx(}g7IL+ zyJl#;@llT#fcb!)7FCX?Zj)kf4&2+CBCeBnpEMSTA0O7VG(5o-YMUleV)@7HPDqABG7%z$^U_a6=4VYQSK2Dymbj`w&})5^CeC1CYG-YvH2rF zM+9FK?Iod{&@jdyYG$pyCHx%>dbz0($7`|^@+ERN|2nd<`I|Gg$Zr{6zp8w?;YFF< z{?!1vA&JF}BNCN2)X^Kdl>=l3-uMx=uo9H@HR|Cb{vfBZeK)7?Bcaeswc>$P4G>07?afQqTcI<+Zcan)pZ=8snhMPBXE^T?xsO zu@VZy9qC$TU&P3Dic@SDb|vZ?R{Qg&UfHV|zE#EF%`U5=a>VfM%k${&bVk>d2By$| zGL(*5_bB@fS-9!otGkU4!zt~=WeR|c2uDVWI`8U_^C&K$x*D>0vun8n7SG4c)>IW}IJGnQ2V2-8|w(sj7 z6ucES|JTk5lo9lb7KOykLvn62pg~(1r}nlTXKZI2&rdc8hXL7+z!Nzion7JQ8R@dl zJkG2A8DZteuc*tuM$te+Cfp3C7z7eD;mBY#lO-V5VxZ!Wr~Wq+DSgn~;^$|KyiZQ^ zfjD9v$$93+P|A*@*{$W?^3s4w2!vMpKLK#;v_`0qiC%jD)VB$*QaJMu2wmXH3=7Z~ zobA6owif{|y>wEJxnJAKn{(k)eKJ|uE$rIn2^g>_ILxV*JT%U*;RW1i31<_VW4Z** zbs;&Ea9{Sx%>6fKH~BJKN-T?PzTykCA9%=btb}TYyEOW>r4i^Ou8UUH_5r_HVcx z({sGhs9tLCS?E#8F%4BO_P3~R;Ii$9BjV$~G_+iI+Ew3w+w2Nm<28Rc1#U&-R|sr; z95%c9pg6I+{17nNh{<^#VG1-?-cKOVm73YxT$tM*zZpgt;oN8Dd{CY8+dk~kOvM(9 z2hZ0E8plK*FK8EZ%2Dw#>1Uv=5EWDZwsZcBt&Kr=Sq<$#$S^A=C}%d?3-9o{6yuPx zEJ4CpncVPGpCBBty+97p|Iw(ayWynqunPjU3y9b|5VA%7uq(>-ZlBfHnsIZgXoeP9 zxnD;8bO-%;nuikIRR7`ky8KJlu_x}Ux~-WkkdqB)y~Fy9`wLoWw3Hz5oc#oGroX#x zvpeE{vH%~>l26^qBbD6UV*iu%E*cv=7v?G3?fkadtbWh>dbU!6j(OO9{AeKUX(F9> z$W9eU50DX?>J-Ke99Ux9pMH$5`-fZxGeXpV>%YWUCjCyb?B*I1+iGx1Ol6Qp`F^-6 zaZ4b-LV7h4NA)=Z3m@a$WOh=N9#)p#G&QryF1f7OJKB(zLOb{kxj|ta>WAHiLGR)3 zY^fCYWDule&H?Ait$IhOQ*|dn<}>U6-^1~5xP6P}1lM1GP5+?{VmteEIuQQW#3Ya> z4ENfQ(xoVi*o5hBu>E;9gMkLbp@e-2TEX@I6-42l_rpnfX0kRngHF6{<^shA^JV~b zIRzxrE{~KV4OwU@fz-MHH!`Y{E>1i^)wCx)DNs^z9Gv^o5y<|)gBn;b3nt~8EP{bA zq_9Gv)2`7Ry`8u8=WVWh(^!-vl$d_C|SvRHWuZl=zJMKM(giQw$&K zr*If8B4%Qi(%HFW_98{U?~MsS+}0?)jBXoYImDCzNHwc4NO;^b6X|sQZWPd+&uTdR zr6iC0O7?QlBgVxh-nMMWB=b?Z zx&co)R?IVQ9o$-!AN(J1f4N%>F9T0IHPnYEGg>|t#d+B={NG?Q@Ma(DyQMR)Ue`{# zWHdEKcz@SQv7xbz>Zfj+d_RtdDG$@?#9$HUvj-OjdT(RJ@n+VB?^nMp(|-1wO>&Wz zjfQH&@(Sku)R&28h%GX#mWPG4__a^HX8JIX$nYVHV>il^&Cf(q7IK8Ct0qDmUhv0p zmz{P8e&quLE2Mrvs#n{%OXXEdx?PMSA0|jm90_rN+YygjXlm%+E{ZcLEchN!C{|)f zUnE6DjXPZiMg`pv(IpzyYzQ=Yf*MB856e^x54Kdjp{mc>x_qbARJS>5DvG#1AWEKb zg22Kcq9pCcVi+1PGc;U#z zb8PW8N<`@%Xu!d5Aa(wKRJ{XKrd``VoZZx9+cqcL)@0XY*JRt)WK70nyUCbIS8mc| zyS}sg`M=Nod~3B@wYoabz4xKt!M!L`S{h~rS25Aj-Y?nTj9kzifKqf((a>Iwu$%S^ zt%PWOYYoNSkt1L1U(yY>g%fcOE&rsc6^kDFIPb>&#RIN>h`qB)m}R(jb+~V>hW?|= z6lthqX{a1LEhUa6T#1nCSp4=)QIu400o2A8TtDDH4=U8|>Ci~SliDt&LDLSgF#FXu zHP*#dVBo01t#o+$!nyb}e?6DP?GZ0=R1fA_HsaJikM6CA@`99^7$21UcR5f_ifU}I zD<8Go*6K|GcjIwGQzt7gu*wHoqXDOLNR+6xX66W?*+9Go143^{IVM#0w$Rf}KU_1_ z(6XsRCA4B^IR$Ny9|7~4E+8q6G1$&~_VUX?*vEU_HWS+D2F-J1Kl+qEUVCX&U+86i z@uc{-w$ub&qF3-PAR{I8!7z@uH_n~h+$E#@ua?`#`l^gGdy{e2bR;#{a9MTLyQzsZ zl;3J(X5UoaU_CF(!-X7mm6U{GJ04c8TZTP!0yqb!D+6)hB4oftW zZ;KppZ8qCMA^;`sspddFFGogr=QRxz zG6Vw{QT3I9t3ss{%4xkYM+6JhOcEl19g{(rc3iq%zLi3BTJWZra&Vb`eJt0c#$Q@Ecpzx)km$3;vv zI$aOmAc{-_OTSY2xD1oRp#o|)&Z0{CS*+Vb zO6Daukf6bm`wNxD!7FNma@~uD29A~_1X(3bzWR|(JKxER3%Nw0?nlpgb_vK&U`u13 zV+qTH+`9;m1)>LYAQTsP_$gdhpdFo7?`?>!(jVmLp0W7Vn-G&J=}pRiPjP!yES@@P zGuXT`KI^kS7Ec-73QOHw5QIrZ3R-{jKl&z2m8=dK{yP-Tysx(bEhP{0-Ghc~ADehH`4PJAQxR7 zW5wW93T)_PmPb2XW2erO7xf(-Jv4(5YKQxMB~;Eelw}|L&#iWyDE?hy5RQUtjkSb| z8fKAQaKF`$Gp6Vq8vUO|i|`Pd-OBVK$m49JbQBJ%vLf){j>rMz!g8bqt*)i|umcge zMj)VbDu_B+O!8barkhZ9Rb%UgIyK$1jI;!q_Jq9)lV+$F!-ElT6`V}NHm{GX$_Y8g zWfU!tdx=KJYG$O#pGM|h^O1We&@Vgm;N48+I0IH7!f0{TukCz2 z3{6#0S$Jzuoh^EQGkNG5i70}VY`X~xKM^Qkrw_)X*q5wlxN2yKJY$-UBWBhzY2SRtt7=Qrw8*H$&)IsD+Bs-g(+Q?2y< zo}__OcxmP$EewuR(PRpt2fEB#sv04|p+EBjN$8qZ5V{u&*2TerX=ZQP7ba%a5WOk< z?rQSQ!vfhbI@P0NV{c}`H;z@U($)dY`$n=NKU*B4g*?wUBcNCI_AFwEg}yP_{@=O) z3QBDOX;bRT9G>dAYpW8B5W4{uB%DwJd2*C-Ha)}XEkp`c1Zhmg2&&MlT!!dBkSVTJ zcp<2mEyH2-rU|N_kX04?t#?k$<9povJPhTNw@V=xb$vRHu zQrPXoH%%rnDgXOw&+Oh{_}y_=%o3l1fpI!R_+80kpewQ{!6Q_EK6ZtWH%>vU4ry1H zTUcUWqR|e&)Ex8Z*y}z>qlsDLHzF9X5bB`xXT^`Sl*LKLN@s951c{tWjL7S+7#JAE zXa&tRV-=f}(FC2W?8CkH53I#%Acl*+GfStTJS@rjUr-C{Yf(T^o#_|E&dORwx{{u0{&1nL(4{LR#YCSSn^3`PB^fC3VUiru0oG$qn@1P+90%m~Ib2plo~_{uw-k9G^?- z^xG0a+6?27AGi5U%j8#c#~(46Va0UMy>+Pe57w@@@hQzCPSb0yIRDC2BcvAPYqKDw zOMdW2chM!5NeF~chL|95Q1etqDb;kVNJW6NHmP2P=}2gsLhm!;B}?E@TqJ3(3XM-f`K2i|WByBQkF?)4C_MDa+lU zg#h}Pt`AC2K&e~Imfm8r%)1a|8ohm!HQGpKrC>wgUi~((ggezdGL_J}bxVMT8|tex zEUB?-muYEw7%orXBQjEhe8Jw69LcNwmJ3@~(u7Rt>w93e7KiMy5d?h$hIZtnq)W`_ ze`T4GrWe8QeqB&oi{cCF38p-4=U!_A2kG+9EG~w}HLoqXPFHL5GAaAL$gY09gRylu z5;io1U2%8l_suhm{{9NF<9Jm1!S-QF%IQcTyRM@Nv)aziYV8%w-jM(F+THGC&FW++ zM0YKgvDKHKk83q9+r9@y*S)2%sR`MxTGw&9T2A?_wh3xuc|DM^g&8g#GsdLGFp|H; zBmbs5dvlSc9xQL;SJ(oqJ^V5Lf1N)kK~}R*pJ!_|Mc}r)kMTl30TtA$MV3P>IDmwp zc1Kj^=NBVIcMg3P14nHRu+DsCD}s*ffKpKq!&Q93LM>@#`gr6rC8h}<<2BpD@FOe8 z*`HqW6)3)lJyL{Xp3lc{VIT`}3^Ab1-+Tm@J6z(IzH4d8pL~0*p;-5kxRO{$tZndd zx|`JEcz&(<6EWWXm)%RxGj-ShmVq>e;rz*8=38i2<;V*0r-+Wl+wE`Ji$omA$>>T2ieMe*mxlh3V?cI>hVF0%nGQ zIYL@h4nW8#ogGbHUa6YbZbWalDDV9tiIBZsZ*ye`2Ce7jt2Ch3z0+ z`vGrIcOa+Bp3&4V=+=itPB^h;tE00x4V8VnL;XakZ;oQC7+qN&inQc$jCmB1tj(PdX_q zMVC;Uk+;5Xe6yqeT!K-YFk`a1@k1R!Ue+q7L!}8W%Lc+I&Nsw9ctnnDPS%5aE}HC_ zU(JB8)MUHuariOuG(k;lcxJjj}UAXNz-FHm=RpMa< zAH6;a`}O=coUqT>4O{D+j6zCMA$=&`qSFjd8$$f^Nt3iBpcJCH&%QWUb?jrP_R^i2 z2=7e`gH`(ng~~ZK)zDWIq^&iJmbwxkzwxNosiKZ{@;&1w0C9Y zfuZbun;WJ8ebY2=9KEu`DX$%(A@3FY)%bpL5tUr1x@^T5Y8&T(z zcIy9jled099$71|g;iG3<*a)UBIZ511MX;-0!bCIno}ERcI11;N zwlca~=3{mRMon~fY*ZW4b7dW7i6lh@Yh44Jw8IxZ zQ<_NoKd*k_m6~W5eA`wVj{_3*JP$7Y5DIVVpNt-{37{^B`hA)>ya-3!DlfQ_)r zMOm^hO{>MDRW-4&Inht2$3$mzQw?FziB@9KDVr+Ez_0RTn~;W0=}BIJXRq$^&>OJ$ zxc>Q*i2Fuz{XCY3-1sN22-9J6E=8j4rPqx}_IBb(aR?Sg3~~*`r;8%a9Tt1N!ye97 zZ@5};({Zgji&wnWN2Q+Ov=?X!X6@+djVq+))h?oeZ)(OkmM3~~wsJBlnHCg(RW=gD z3&1Fbe-{z`S1bk}VrpG^vEbtBZ1B7?NIc+A_f8mw@aO7+|hR*A)x@8M6c2qp~jBN$d^(Epq? zQPnM5&&K*;Cw9&A8K|V)Kgk=ZCf1KnHC&FlI1&nLg5MNB^1EIz3@D)#Y~M*^>Qz4; zso{d$C+gx+0UM4dj?e!k=ynKQjzZfBU)8x|u*!7`zUs3RKl8Lsya`KOa{cAMhrG|e zdSTB9;Cu^k(VVrIivbZjl^@BDDynTN{#)k3SY`dqZ~nJapM<0S9zX7{SNtWyNnn9O zMcT|S#}R&kqGV#uHo-`bm`!Nil`w@u;|PlCgR_c=k`YdnC@OadqAw&Ni5n$DG9rl- zLBdfHRu_ksz_n=a_`7}2{+A*Th@`L+mfc+`(15cgev(b6)yNPL22S} zP%?!X2`o4EM3W5`iQ-p>ZA;AD{>%ol&Gnm;>}z7F!|1h9ASfVL=IqK}x)xBTzR*0* zwntDd>QA<(w-0HG^pz~oESYMP&%=9%KnrUgeR}9fh-?D$7I*P@Da>TGldV>;qij~l z@kHLBh49d0pxqm*wLxIyF3@%R$p!7phB<9$y36rt43eH&j+3K;7AtxmDH=J#I6?3V zYXZm#pY6#Rmi~|~Y+o|ncZ3ZQaR^$BY*qdCqyyJPhkaw+(x(8 zsbfQrhgTU*M$A*4C#*3-m53`ptODcKnEM1=Hu@`YE!!Y0{|3KpL%I&??B9uJW6=fU zTLp@+)75|3LV7-qVX~Sfi^L-IHkr{G0rU1S#t!&3c9`+1>G8Z*kBjqF)5Fzv9$J98 z4K`kZ2R(1ba}a3hA-dwS;;YL@7tCFYT#Rzzjis6_h94V^enGi3Xf^VDE}%@yfHuXK z{1F-aq(JcUCMxVauJvaVcppdPB3Y}*eRu^7+GF}_|aNg2(a@L|l2c`zzn82p; zR3aJq-Hl%QFAkbs?2+&r2cy~Ujj)DebwitbbV3;U1qUqg%Qmb27%)6fDzUy+$F&~T z%N{RX;JR1kMT6qJ5Is;j@GDipR2_^jm0)*H--v=YCcYx$x2T((-m}+v+`gHdJEZ-R zYdH0o%8T^3U5$u+&C_6a^dn4STG)6|TfO%|uvDlS9A-@Q{Njl?fy<76#)sgLEyrRy zOu58=^fgAOums{G7 z>B6v_iG{+k+?>!d8Z)elWKH3q6-iE_GWyiYcsMQYM*S#+SU^N)MCGeX9sF#{ObGP@Cn&i9j_twkLO|+Jf#f> zuM(%5aIk9!z117Ux;U^MKMOd7&edq%1QFQc6f{+BBl%!6oo9DdvRqkmW1N|cQ}~*> z2TCzT8O^hBYLZ(E0jhI0@XLeX6oUz29=f0hPF<<%M#JFrIm_DX$?2V9QZA!Kf2Lw= zR8*$vJv){=w?u_Mm}zv)W!8QllfBj~dE0IHGthrh$YybfXlSJ3OZ7k7v059tG;h*F z3%I30* z`n<@3*ho4V_h2HU(a@rbeX)fz1 zSE^uF1%-pJ*U=rfO_b2B%Kc=~^UeC`Kb#Zfo*)<&Ch^xrH@(8n5KULHiWoPV$n6rB zxh+gaNR5P$f6^{2D4ZjGKjN)9K9_OXQ9pi3?d~#0n&Al_!Z8`Ie?U59coiSg+jr_Z z7xdM2Go%*$H~vEs5sdDa&-G`T%Z;6J&H68<>%NBT6vu|gG$Tz2G|=9sL&aeHXhul+ zg|~JDL_fF)pDfImDoIsz8Rn9T=A!ACPN%wha|>Fmpx55ln_cUeiJ9Tf8)a-fPOP2E zLZutwVj*X~82d>+<@?J_zP@4jrw>uJFz4Ur zdvQm4J`+m%m?QdModEn$SU)TL5qW|-ft2F>>s9B5A{<1Ei(@F^z$QjO6au}0d@x#b zj@DZ!s*xxZ0-Kk>MU-_WE_$Z?@V=j!`$OF$x|3caBUKVvDU{}I(P4B^>P0w6V=bkX zaUiQ^;{(F@4~QD++Qj|_ZI?4|GgeVt}~_y!jkvtp1A(T)-8M zB~535CT*fjNr5#U(!eMk*a9^)W(mU02xjvaYf-pJ28~I*kwWuKuTxtZO$dfkM-6!x z$ryA_y>WVmVkz-v;R2pLtQCagO7p%3m-JxJ*tbdok4e0+z@$SRAb@d!3c)FHrdpzK zyMK0_hE`WCfL=*as^ogZynXP8h8pR&z(kr=Tm~`KETkUsG{#=e!g9 zpDgpJ#rB8z_iBnbDDoewo0{4(8{v0UWwlG;_2+})785W|Y~!GzET9G##bw~oGvIkPNS2+Q#pN+H?W>T{%7c14M2E5K>5mE5SDA1JJClNoU{@mc{dA5)Czy1dB zLu@1&l);&X6U?3jNuA?5Q(<9EG9zNGRaPB?QqBaqKgYqfdW|6yp|MW;SZ-aYVGFb_ zl1r|SJHG`Vq}pPlG{s-eZ+$IW+Y5-1i42PnT%rhYG_0J0SelV5{g_}jw93%E(bj1f zqB_0RN1zHM1IR7xgOAR;bm{h6BV%lg5g{RICoIDu^F^wA;=3{Nou`y$EkZDQG>*_Mz7@TVgNf^dyRnt!T zgPa@W-d6hHg3r4L^@*1sv#uIGVB?GXHGIE9jd0oBHt)V|9VUgEUfJl?hNDOvGzWt< z*Jr_PtNr*thr&U1iQ)P3koP*h>IeNPyY&b|L+uD0LY2mN5l!(!l_O{}ypDuC1o~%_ zut7zZeRQYdaE+3Ox}qZG{b$iOAi0jx7JURWo|=ijFCE9K*I-Kv$NPDTjt0b6mC5Q7 z_Wi3`gWabd2E<6uEoKq~Hcim_uc$f(?b5?>RreJaMKDA^l#}3%!)$4a1o^c5l?ERa zf@j|5IIF+M!Ei+Oi{A-7j-OHZ!KOGIYl59V&}vLoQS&q~*wJ{jqdA+CX!b38OnLQU z5=4?j5S$-8#QHChHO36}56c-5V!4-DI!r}kZ3$x60;Lx$?6@rj!l%x5zQ#`RirU3u zbGeG43;!1^1u&_V-Y>FqNyI{M6%p>o?C=GZT2Wn1Ds`UNK4u(CZU_r(&0=*XgIMcs z^MYn;%L`flh-6-gGCf~4Ul#VUAsY%bXu{5%%QU6DXe_6s<#gDng@l|4#69d9pKwKK zaO2FToC_au{RER4eU+vS*4JpGkJLb%N)R^0_$}dNAg!aV}w{9MH`rCq8avE92z-viU-%`m&1G{ zjgeAccz1sx@7BofZtsc)IbnG+@^2EPjzMSrG|NByItc$6qd?TetE-==$g3?`Td;Nl zvLEe2G<(g0&fUdYxDqeV1b@X{>}UdUaum!VNO; z48Q;u9acgML2Bj(gY;LuFH)--+m&~yAtICW9LS;v_JQ135mB+@-I(qooUNu)dF11~ z;VA}voVaMLHi(ktFM%O%kw{nO*H~HX)pJRvt`EoipEDBrr}S=5YSEgiM=zq?h&nDX z+3q9`$59rMAtl)YT{+=9|MxJMaso88ez=ig6SNedm3I!X)u0)wp8 z7wkuy@FSoT{PgFrM!qx+Lrl?M%eG!)r#0*&fRjp)9R2Po1!WQH8)aE+Nh!nls~eZ` zbq`OPxUBCx0)B`QF85SSvGl!n1sEb-69vBv<3XKBwF@f9P?qYxQk@Ar6NRjD4 zkZ1mQ+M4#iz2nw>4x!$pv!rc7415^U$D;jIZVkf`+wp{cZ_~*(m0Hj z8@}YdW3vFmaB(Uk(bt9pAMeh)k56`9Y*_90?)^m+TN5$NSs5HRpg$3nPJ0Z$qY?2$YzS8 zCs=#;eAwLXF&!f)ETjUE3N{bvc(i&re;yGxCCcLrmIn@^BEgR1b-6BQQYVZ4`C>s z2g0)4L2o`^22!-R>v=T-^ogJd)pZXhr~OteJs=vJZJd_A8I^>-Fe0Df65(zEI}P4g zNZC0qzVyfl_k*?0g8>IAIeWCaiD}M&G=&ib`V2=bLiPXX$61=$MhONe#5gA)Ux@CJ z>m>@uA0}evHYW*>RT(ugNs3pW@HGE1F_gu3XyG{)o*U@*@39?9op6Q06^J#Hk!=Gjgzk~u0ky_ioueI=U4?iBn z!ss|a{cV^iW@Q@76iJdTQoJ21&H6D!uj5x5;cPF?I9_hSpeE5|m)o$?QWFx4KDSXO z6@#33Tx?7Xiq!FLAmaQ-FWekYINSq&j%e;D)=?!ZO9?%p?s`4XT&^brQxUitgqr22 zu}m0n`jG)h=6D`Z_rn$7w?Vm*gV$UL|2qp6kN|O0(L02~`h-?QsMSs*qnx(K98@d@ zV-W=OG}NXjSEPxwh3#~gW~~TswXQG7bwm}1EcAY8k4r#Q+H7KX>jN9+C81<6?q^c~iKNHt zYN=#9X4i84aiD(Ifs=!0Bh@PSamA-o_cfJT{((gS{ZL)DD~S+QeTR%_JBs6X@Fu=Z z)OF7`F*>|)kMk6S?^POB8v1na<#7N*u}fePTEx;hzXv`J5aLQP;uW9nR0`C0tS**8 zH=BrY4uri0c`p_CjRzEI2|#_cud)AwX9Aal0u-ufq*a+8qKf9$@;I^LjFX_o1)e($ z(6{b+Tr@gdVhNLP@JY#Rgx6azivJjaQN<^y8Khd!H_{V$6ef94!{~Pt z`|E&8F4!84DNgOQH7VM@i~ub|6$^p4hary9&%=C|1k?o+Hku&ei*+(1z2FoyJv9lE zl5-OrGb{W#CxP&|k2?fmiQ;6LU@b%XA!jH_6ze9-?QS-+5Ozlk)w4jCI$y-U$Cn5_ zmGNQfx6O$jP(@+U^JvTOUX3*O9j{o8vu=W;xK25S2AjbTlgm~1kJ_(FckH?tMjvQe zQpT-zy`8-dA!SixzSK(tf7ob@#tJQ;%nmlyWW~MT0jRGp7J*9r4Wd_9$I5+ICRnBs ztscRw;G}O#91Ud(7{u!QG1IIQP>VOcl!b;80FsF8%YuJzPdbC;se?Hldt z0T@bWwZrL&vGd44as*+2BDy-juxvuAN~rDvD%4g*7IS>dvL;w6Sb%; zXFlSct*7cB>I{*F2*IgpR>l1gplkXJ>2ZDUEz1d9BSBj zB?YS_T1hC_a01mKSke0}W1sz5YA994c33@UHWM&Zm(a6kALm?W)J}sR<|&TZJBP_u z>F-ItLmtj|LY5?h7szy!IG4^DC!Mg?TFkfcN1yzR$dI@GC&0GR%O;R`Lo3uH4PX1k zQ%2+{j(``f`g2o%tJBV7R+BC7kfDKu;JBHtf2U#8?yrj*Tv?E7>pp`cKQ)xSLy&FX%vefNaocMcgt$dARS+Z>XD z_H=hP^5kPC{GafNe6Lm7h5rG?JR}EMHT2&^T2rvr<);M(9RhhE~U_?XkiZA-Jv+mKSAh0i!)COE5G5rJ^nvQHJ*@Lh|ewHH+0K;W)9l6ePz#0$p(EgT;BR7BRiC=e`I2w`n3 zLLF9w31A6zHsQs9pD}QM7!|xdn1$^6dh^E4mg+nDT!Kxt_0cNuUMn{9&4dM~Tr0ogdg{Et$u-efZ?=iHkB|~Kp(xJnqFr5V12^+e-S}o^!8TgVenb3I7&SIc z*#}$078)35grQmz$xgJvec0;4>$(=8q6#5k?1|!Nl_9m% zJk{Ijq>xwv5qDs*)qnAnNMqLu`TME?quaZ<_t7$WsY{^YrjUPH*ZX~~wm6NmSn$GoD z_wsx^EYk<(cM0BaLQZ6`LSpN?s)#%_eECfmLnOd=^sJ^Nfcevmjd}L#^f!SFL0`Tp zfjhl+>Ho)T=jv{$jK`%K;GBsP=M0Y<*9PECjv9~WlASbqI@Br}vfx_?;(c&%mT#-K zB|Uk4Ir^kfY==Ld#xO+)5LoIQe>QdwdtOtKUJ=xG*MI)is-?5_x9>x~^{0$0TNFEM zY*`L8c#0$$E5&stms`!frj~HLjuz{hQBb=cN5&}V)DyjnNzU|W!_8JZqdc7}o7*9d zR;|=%GK*8Y&6zTdNk6JD7#0%jbJLg5s3-)0;}C*jkVPdVpy}x79Q&ZLTaOe0$)wk+ z8NA#buXjCE)pPr;5qLZO=}Ml#pcALI=ao;h)*x1=(V{@V!~OJmDwn^gun^+q=}roG zh-Q^`V3W<_b{M{W`BnD|aO`~m>#m*w%NU-OB97$+s)P>bO0+xN8A}y&qxL4VJH}Vt zL3TL2&Su5cZ7%zT9%t)d0j#FOMwfqn20m!%IZ0IAZ*RCqV=+QJ`K){G8~;qA1h|(o zjX@_US&`;?{XNM$faGq6RVU zdb)}WYz1kdS~onEUTYgzlLR0Rtp2ahz0N(aH?{QuneSF(aM{Dwhe;z~jCO`&@1L)x z$>&k{kLx}UEjKimD z0d@oyJT%p_o2Kh{)^)eH_RSav<3apArZ)&KHf=U{+Obq6QjE-;7C01UGlo-8W)DZI z&dQ@7&p{mm)>4EQBp_bZYMMpGmWjln(8wOu$RLdhiyR6}?a(@QX=ueA@3GTxWP}`U zeIhTxY+J+mNpUUSA8Tf$_(6;#mvrU3*gdf|z#Zj2olq}Qzw+JMdJlza`x>l=EH7{I zRbu1cigt3%>B2}==q?6yD*)k2Q>6di;`eq_>pyfgEfkOM(D@PUeC^B+TS?#s!~JYM z7L#7nXtOu4_4#sqwo;4P12=r*?e)$R*d2?>ARL(Re5nGf+h6r6gDyPXW?KN7nS6V#sYCo#!aJ-u2HU)5oQOp*K|2^bs+dh#8@ul%xv5a<|5jYGoUPve+_I7zu zT>oeyIjiGlZzsrVqg%l5et>uz(0CG5$s+Gm_P(`!zRG(W6u4UrZdw0|_|pvS{ap#9 zVyinW#{E$8-#+2mEY?8hZ?k{%d$i8^`uF?&<5BHwgSp&$L3EK+ygNCk;-?GoRgVqd z(+ik@*&?YTAT5l;Vg#o89Rn>A>a^?5;GLf{c$~=Aw&4o{aRq&NfIo5Bt)#fLJ)QLs z1OLhG4saoV&yOD%J0tN@=}h`YI56F>k2Vvz{MhW4Q?8TP%-#27SPa?$iw544T^_Dy z>xATzF}+QT2D*+L)CyT4-luJ_fJ7k33tbGNU%b<&w)^pm!3lxKs#EJpGstnn_ipw- zl{SOmec$Pz%1)K5z9nl}Kbc4n?X|lfsnMX#HDs&hYP}`buxp((U(?H8cvC_F&R&`f zlfky~0RBDlU*VsJ$I~dZlnmoQxTrL$`oZC|-VO^|WI${7lReeZ?x}m-%wK85GX3hP zRiEzIqRWeIi6!yxgC671kMZSw^)GB-0k7m=l;@B8x_g897MEM|Q2a_;rjHT-nDWV+PuR>@CArI?fPJ2LHNT9MT8q-k+`ivLW! zOfmO-MhwOH&uC)cVy#V)LN?d^iGzQ%ykzbMpsq|7YxI}uj3L**9x;Lm)1~%T=`_yt z`1^ZwRo1kRVOoJ14TK>BSxfS-*9YKWt=DsM7b`Zk(3eRYK3571+I1v#FNV+C*sTwH z*=vjC0P3fb&j`qSy)JXrrH+6pww(T!A>=RkcyqMh&6pTVU(*Vqp`qak*z-oFtIc2( zlfS>d^X$a1JC4zoZT_vS9ezha^0|D!_4i)xHby2g*;Q0j0w=S%cdA>~Ma|7A-&y14 zXc4;;#i8>82JmB8jCuoluXP=|ILo{}W(y_CtE$9-&vDtWM!atikivK6uaEN&U?o6x z9q9rozv?Ru7&piL)iDaz>9~nTg%FK0BBBn~S5}Pd>|5k)v<&-P8tKZ1TyxROhcPKf z@GSj=)i-0rW|>xi&EM_JbD)9cFw9hZ5UW;WJ%bFXH!rYQ1JXN~N~h<$Mr!y198`Bdb019>){;q2%!go zf%i#M?=!$AvH08zD^tNJf)TJpo?!2WXWjcup!06sTf6BC=DWav_12FNMf<-!Z6w~j zzMT2LTXVM_2SD=4;!c<9$x(Ne4WEw;-w=E@S{#UZ_N6J%q|4^LTCOfeh<7}Co(SI& zsr7s*wD_XWQnzmhy%j%z4(Od%-_hg`JJ7-l-~|F?3rAPv0pH!-1)wctHvlJ!G%7Vu zS>N`B-f)-KvmLq*qgVkmB&wsMGw2ITQoAZ2M1oKT=!FapYqYVkvGZ`DXYlcK=IJ&c zfDu`I?j3Vnrg(YN0V&>x*bsU?7egZC!*J+%;o@^W2q5Hl{|A%7pb*6*D+w<9ZY~sv z!O8UmZawaX~)dpZ7B|WT0D!v`B85ew7 z2f|!yGmu`NF)Aepa-?57SHoiC;ea33F2wY||SYxqu(t_M! zI9eZ$?5rTcMZ@xT>#GfjE4dTJa_7zU^~ z2rwfZtamU0NJL?Ia~h*=*u0VuA$6`R8lT5$%zBsi4uJRjQ?(2t0fF6h4SZ^(*b$c? z6%TIR-VxV(b7LrpnJiGCDgvf~0s;+~X-EiL{il!LPS14NG6&zy45!UPenSJ=)!yX5 z?Fk5g6*0Z_QT+C=)}j&GcZ4FS$YKCR>Wumz0E-WUh|N^x<~7Aj^!0#r)pcIs6tYqD zj2S?~ANbtu3uCX^K*r&z4yuA8S52Ckz%qtF9=J|#Jk17Cw;X4Wd%l>rdi601?)D21YQ&YHR}k$Rty3E$BK(02Xzo z$wq4;o4dB$U4FheI^;bF904gR0N=^WW(!I7H&9tF;|avP{dGQ7KxswPjw^AI`2)WI z_dIR}ZeyANRfK~O!+GS;6zz|aX9vpJnKRK-A|zn!>Vaf`tT|10{JJK}5FkwP=|*df zk$jly;}Y#rTWzx?OTa`d*?oSG(?MY6PC(s8$GqS34snrMnW8;-4#1?w0ElVbiQ`{& zSuB)5{Ks^xH`{?`s&!jNA9A@J41|}=Vt`Xubd(7Fu2!}k$A2meY-iP+sr%jpaC{M& zyRKD>KIH)<8~_aC!L81s+cSWP;5s!|fwXk z1HTMic}CVeHuQgFXOl!6yB;kdS87&|waEh(*l8Ho5)ABJfKS&tOnU>s1M{fAc|rj0 z{Ybq3vniM`u*wU-o)rS_tUW)VozSTj2LUlmi_l2^zgmC`06t=av3Q*70bN{zsNQP8 zee>^h1U5(WwdWn=13tnIz!$@LZ_oRM6NKpoUugkf?E?5UoC)Kf%rG87R{=Nb#F`yV z#+82_s%cLW0yz8!Eb@;sq$!QeN?Vd}fv!}@lQRWQinz#wBGTu95iXJZZ#7P2S_lrz z8zsI$be)T1SNJwa?KK0^R0T)v&h{{QM`k~lZdTHDa>inS%2t%NN>cryy4Pj1qNBy( zSbV2>1#aWLiA<}tcFrsg>mWep(S;sO9xz0$)H);jmjE5qTf8z8fO@tsjpTfQIxuCWv`>!*MfG=K^`;{xfZKMkSW9f*en^$$bNSP&Vv7hVgzteMJKZAYbvx9r&2>_FyEqmJ=5iJW;}k)FGTtz5(a(gqM;5MK1_&hI666=G9T|!v)7m* z>Y}(_bCv3n!eJL=#s)u(!<2pd0T_oNG7#;-*4YszACJ6CrzO76^_4 z5Tg0uCNem0oT&rJGRFx9z_l{4!6bOJN}n#EY5>U2_m4r?GF{5)zdWGMo%ek78>f%0 z6oSgfJ{`S6H*`JBMs@!^a(`xDK+|D`akYG3tp33e%*cxeIuv!Zc#g#tQg6o<`Xel6 z&DJ;Q$r^h?(R^^^2Ssac{v?q-f8v=KD6~klgZ7%7<``1l?_6(wo*#CPaR=gBR5@iWe*lmJV?FCs+W;zUSM^9e6n`*t_4cRBw6+_EDUC*HY*S7eE(E zu>UE@CqK?J}OQwrmqIPHB z=r~-rycy?E0Jtk9C1nOvoIp?7TTi?YsnZ8iqj!dz#5rCQqZH0N-qZ&YZ~0pnOKBeq z8cPx-(1?dyIV1rmx7atq>k;kB8f8Ws1)#&Er?hhH5Y%^UZ84P-S*nm7#2V(x7Yn#q zJqt)cS7tZwH=j!xKDhtHX^~^ri+|uIiT0vlg;)d4&Sq@ZK=hQ9Ayq9Kb|c4TQHZ%c zCwX~jRjav6S@E|eI4KTC&2E>2D#W2WLVLkHuv}Ljdrb$Phg$zb$;?08d(mCY;seeD zWWb2r7;$(cAl+mg*tyo*)raXlU?(g5b!*KSyB2*iztBK>l`>+uH;Gd2UB3Q9^MA0J zAkYPElp_}W!J1~4-5OrnxDQSCT%k<0ZX!m%lZxVY6D*E+NGZf=Ap=?#a``>tZ0YPyiycZYYKi0V;qP zfHPuG4m7tg($Nf#>ewQa`I2=fP|?9t8(*0L-$TL}0=CaqssIlUPTD5BeM1;;MC>C? z>6n?xp)WEh5_Sb9Zm#x}B%1>I?Hf^;W|win?6Qu|F-c##harUodn!w9A@W!jniaol zkW!S+DopM4j~M?GOe2YKfagPX-5gWK^p?6#Z3ov!kftSJ03YW_U9z$GWjX&NRO7d- zeuUZaib+z>rkYVV3axQ;ho)6~U8oN3$FLHp5DcRv*um2kRM9zreCnQyU9KaNz>r)5 z@5_K&g++8gnyuQ2aErj#7V?HSp9r`sUUqU5UH*Sdz;on2gVXW0(sBx zt6df_rPeEohBqMkCCwN(3^?Nea;l-WuY|cjmo>Flp;LP4Ljp=K?iu0Xe?p<6xkJ=e zgoj$rc|-;yO$p3$-HL=W6AjTfyOTT)72w0;NU~|mBPW6axZS}watE@pI^*vbERpo) z)xRp*i78-$X`TRSeqK6Hi#uFY&JD{D;T1 zyjWqXwmx1RZ7bOQA*I%EpPzD+zW9dugc7O(i}e})MoOs$J@!2PeYlI&Dpou&*3%_ow#C5^58=OA53dHF2WLLGL2g-N z2nTHnr*6I=X4v9CGsQp_m&800Ki$Zp@PlCw34VnLYw~e>^g)pbG|${tOzuJvNe9UFax3i;?nIivQryI)5b2LR9UgR)!&oKY zsl(&jYh7OiU}E1pbYj?9@D8uj(f_RvyT>Y6^aze&rToSM^8p4Po{96|D}*S5G^r6h z<{^nZVp^STdM!MucxP+2gxIBC2ie){cM}_(!Oyg$pvjURV5BBAK<&E zK5FHsS_|Zo0b^_&CH#VFc3O{UL4!Uty|V^k-M`SX1j0dvO-bb5uRlL=DXQM0N6}3&1W5F$L?5q4=D1RWevlPN{^CaTx9g2E5DagthN-!>PTl#_khW1|Jkq( z!t`oOSKLm9b>9^}=W(R=IIM_0)z$tMY5&zgfzUU)qBLXcYUFpiLcT zE$wT+Dnuoi-Jm#5vZV^e6p?mgV2A-&SRP>c0!#tR_a*0-Wo4~<1r0V41gcLT>r0M0 zL4+Nx(qD&O8Z3_>UldcmO4;6-*ieYg@DK8VS-h{g^nuFZp&RwZrbH~XP@{NGzV!&( z5!}ilSHVM4$MxJ_NH5B?OXJF*=JA|ZO_GML3~5AGDgFIleVG3>e!^1g-)A)}nBND_ z{xH@Hw;jQAXT74T_46wu7X1_hpp!ok*t;P^20HVE&CjBN9014Q^e44p83%fb_OOS@ z!iV(&TW1?Y`^~bdZ z-8RHxA3jM?3EASowcA>YR%WnET_GXAn0iJD%tRacL@E75k?K>rZxU(8Hf%?8@(gD| zAv6t)Xgri*s!v2dP!b5M_6f;^1=YQRWUhv2?vA&@3H_Jt7+5{S13lw_KVw)H)y;zv zpFR*Ho_i|MKs7+pMoC$6T6Y)GS`uFW>#$^C<4sZr$EC8X-BM$tl_qe?o66uria3ot z`+tvjmHvO0@pE&>fzwgdu0cb!DnC{*wp*xYH|Lkt-#$JzaNfRPBKtjqb1FzF!0E;3 zp1X~PQO)6fyhYL#u*IG3SnCmW=03pr9W93&Z)Q(+!n;u>P$=Mm@aV+fC@D` z#(*Ezj{9~f9xv3(Jw>-_HwaYd^P9t4vSAkw?I&|jOcOgc>toRji!9HGMElgn71R!G z>ro|V%zWo<`>wvO%mXg_WstENzrv_fN@c_NRH&JC)BdFjr&DW|*>UTSZOay3G72nS_o&(Nn8p1oAdRN}RwJEDD zJ8fkaJ2&E}4CbB6;t11pe~ggZ_uVQ?h-03Y#@4u(fesmk-?Yamc3be!-1Y0)JUYPa zFfY!l?4zKe2xzq$1XU5(Q7J%ym{-Nvr2XhCC20l3iZ=26ltYkOG>Ry+@%|O@H0O;0-J`vC#cWCox;))H$ z&n(C8c+Q0|)`ijr<}>&N6YLMyjy(H_ErF?UDRwqdqcbw%Zzw{*8T`q1C;t{0nqgxmY}7KlGpM24R|(w@YE$ zp2MaQ|I6ZiT`No?$|)+2DiZ_za|B8apFS5&?v#4!C@+C(mB-@1?WSXj#qMIhrAFwaME1DlqY}6EkCl1I>FG;mLI_l#dxU07ESGd@&{D}{sNb<2W?#A)r7WYH<*h4XAL$4j!GfV zgIXd46bd`a^muEaYoMn(0!mwA#TcT z?>j$D75aM-x`Mgv@qp7Qq#%}mmRrQ7U)kqYWmX#PP2Zwt2U&W z={b$;v!6%g*FST0QX)I@lJ-Yd8x?F1mA7qQM3q?&lTrS~HOw@x?{?Drf#fNA;)Tug z-Htwx)tIX>ovtrh^|-(6Bu{r2^x7o*=L$D@f9Rz1Ij7>+V9u|yLgCTpr=c13RKYKC zz>n~k)PTgXj-iD8{u(c=$ajzDWxoMeQVe}k z=8mBYUMUzZ#kKC{YI$q&yEqr9RRjhy4qDhzWhouOv}fjzVl5He?4pdvBbk0K@YU(E zur}wi=&3&{A;zzK|1r{}YDL<>S&^_ELErH)OvzrYE*1;ux>=L0iN;!2%FJM;A)iy^ z{jo{4!TQnjlQ{8l8|42&8GM=OSanvbo}yf9|Aw1rI7{jLpaRIRQ3)cdCS5)=;LI15 z2^TfN0S4gY;o0oZVY#s6jOQPPBN4N9wYni-wLb>c zJ7uJYYFe7k2ihF_eB}1iPX~C|of?&c*r^2iKx945vfBjpF%dw4y`yCKlE#-G!;R1J zh!`hmc!k$wvT91fOTuQ#n5gE^ymkHxM}T7l>Nj6(<4=5QG=r&V#(ewEizpaNsgskc6};xLA=+M~)Ji2C`!mIiHXGjv0(NkCj~g~$^Pn`^ zZ6vSh-7bIR$!4b$eqtbP+#5?NUjYPLud@0p`2(bc_m}GFG@I7ujnjLJ6pLk4RfAnF zwljeoKcKljJ-i|rFz{$S01Bn9prDWe{F%z-Fx0#X(Xb0|J^{~`bl#qAMu|H2-xU>? zb)9(LaEB2vLIWaI|48%aXs&_!tSLYyfc;x=#T5i(;>Lj6^=)0OV-_}J`RAD z@dNk^%Bfj^09ocM-T_o6fGmOE9tRSKz}Mq>I*RzmlNCZ*j$<>|?RQ&N+^R7Bi7*q4)=7`HKaWjzKk)u-6Ju zvvfMrTyA}qS~)(Er1(`(vGD+w%%BY_tGRGir1539e2r_MPVz9P(L#B>FuSUd>up5w zTHP21-zO4z(8w{;CM>Vv@t}O?5~b|q@XfQ^Z8GAHh;oYh){lA^)I3Iv6rS6$!QOjp zK}7YAUf>0j)kKrd`hFZ-VXhXFwRpguMfC1Pq@Q~@wjqfk?slDaMpO~%M}8d30PibZ zz_FJTV|_hu{4q{k0OIfpYqj6clry-T8-O|hsD%+gDqf)$&_t!ah(r<#;%{xw#)GxC zt66m$fQZ=aBer^zp@*I3x=(p|ybR11!JDZE?t-s(e`6Ysn+{IPy`GRk6WJo@Uja$tDIdVsV)v%d0l$aD=L008taJ4j&Ag$6LR2yl7p zti?`NC|wtzMFx95-3y2ZXGd@$0a{rPK=zyhlI+Z4qY0#pl&<~J7Uk_%0wCQi1Z0yL zjmJn{Q7Zt*ve&W@r92DOeuNIir|$#2)(ZW8G!5Iq&$nYvZN7=j##8Sc{|OpNzAHf(5HSS^Ce)#W2@=-0eyYcX4H4NYyJKKJ9p&CuuN62uNiHa+I%zVJ0UQ zyP=85bdfcstW4O|i*@QDwaa>lHlx>oRw7Mfe^3r@gz9(!GnA++n-kY9-pWLR*^E zJ*0uv6ez}8FF>GSEC%L%S{TaDs6?RBh#KpKnWEkKokb2{18Mn5#)`YwYh=6x5s@rP z`>Wo(ll6@@>KMMki$8M%vfSU0N=P04$W{)wo%Ipl_R@R$C{V$I05ThB)`x(@1)eF2 zqppDNfCq*zeh>Q!%lyc_p&EPntLc=T6p29S>SuUxqv zPrDh-{!kn)){ieA1GpwKolZR%Lbv34Q0n|QN@SwZ&iM6r0)T`;Rrx2nMdQ3Q7Y{ke zjG4+`6m_esI--P6Jqj>9#sX=iYw~MFRVx0;dH5knwM@g*ia2$^}vXn8I-(H*X5F)-L&5o*RZWu}%fb{f$2y-4a~MAcgfIXY?#1_n(M} zF@HWDBZkxf^;lDiC>MRKz2C8~vw_8oyt4XQ;T~^KXrmF^Q^;Amz@|ZujH> zG!j_=M+ZQt%s<8+?Jv&{uh<<8fVD2xS#$$gZNTU*cy~N(CtC?GJOQx!WShss&(L(v z&Fmk)>40O+&uTx?HMOs4((PgOIN5>4QUhi`i5&_r@G)vPrM&ZP z9^7pJz12|zNZ1(w!UtQg2+$?KTj~K|Uc*KR^(*^HRP*nFwEcSvskzh|MjNd0c@c+W zFnm*XM7w?1iNN%LWpm;hi2QX>$1@KSjdH0K;M)C2T3x?|AM)gqR=0gnI(TkJ!}f+e z0@^Vg_W6m|8>K=&^WG;@Be#?bWGDhi%e@Xwdqck5AXz03`E+^dD@yZLfw55bV2Oo>pIUS6W<{* zYpSh%S2vSz(7xgSJDnZ6sObe{#}OXzqt>CDrd9U z-XBPlsUs1{)3=uV8G2C(eY3kB>{+eZ zkO!hezKJv0jB~}fJtWWoNV~P%v##tE526N5Dh(smMzFiIo_tVO3!P9y775!9ukl1N zQOC>PhOXkqUNOU~G?><56X?|p2Oj;R(@XPNuGzDzuA{?-f5!;5+2R8%#~O7797CQD zBl*IouQY!;g6+=4^E1e>*N7s&@*?$9aaf@;;E~*Tau`pbkS3Mkelmd)*I>4=fe^2J z$W;|535j3%mtZ)EZ6prV{;PSfBi4%0-}p*e+H8iiZyeRHI_6*PO_Nth0J#pJ8R_XO z82}6vzSX@vfS?19n#!!1eaRXII0=D(@CI8q4Okv_h$G-kaRAE(eix|PGrMqaK>(*# zZ%Jx%<_Kun0F-E%-Es{8dBGneIG}-eh!6S+6}d%O%LTyRx;lJd&W5PV*GAb_dw})W zvvT@(J>*WU`;6F9R5Wk;lVSMzxj0)f%GR(UX2)}|&QwvC_%eD?LF1wl)&->XAY%Q_ z41_N{X9HLU`BC1 zhRw)}(vDqN=MQx?>6d_UTZLicfqA@ATXO*TEv#KTo{2+sCecx8?^-X=+a}E0dg&#e z68O_i%8p&;xx*>Oq@;u?7fVccV-YEoW^E+{m;mA;i-i8Dc?MDmblA#krEjOB^9^`MZ3(lQ*ZADf< z&9>+`G-XF;BU4Sq<+g%uGaw8_4TPv=1CHZQUcurUe(hQ_4=~iBVGX0nQ$O2Z@nf0DA(x0 zPg!VZ2M}aW z0{9z^W)lv;QvtqdZvvyf_5Xk;;^N|`10N%GfR|cU)@=>{&h~nFZUAUu=>C5NybYZ| zLgA_KluNNHODX}2bKzr1rp3+M3|m*t$sSpG1A8pN#O7nY6+zuQaw)WE&zth*SaQ7| zUdcWL0bPEJQ5VHTFRCl>Emt6!$}UH*c<3EoXnXo$t1Hb&Xz8!Ty!Fj*8>%pDoLNuv z5zU&_-s$|YI?(lUx7e1Xl<{Pl=kINsRmOiJkN;I{?S`dIQoNxgehBg!(8d*1bCZFy$CpE(1mgt2eAl0KJ8Y8#c^ zio^vI)f2yT2YQwTCLm2_68(82@cLSKu`7B`-lc} zqgb%AaGEA8v(FQ|Kpz3q%)_p9IP~6ZDKSWKqL=_Mhv5K(gx3m;_WXbC+c$lKxs-Bb zHP0!|@cfhdmZ^q&AyCt0d;Exd?qC9ah)-onQt+j*yznLNVktb_7uY2|!(+H^KcZ7& zr`#cvUv0rm8U6R?ZXUf+2D=V6wV#AKQpvkr+Rxr@CbYgdrfeDU->gCx(tGC;gA|~w z%0Nxpk4Np^wI@)^QbCOss363Q8WfWm!q*`?O6XZ8Rev5d2C zOcDg)s9yBoynGY69HqMGqAw9%Zl8(@@BHLzpaqpDs>!m~!-YeY#`I=5f1XY={xc%S z21BK4tQ*2>Mj@4DAlgBKsA>1ILzvL+NV^D}SxZcuysUd2q{=dGB_uPHj=E#ND z@Q2;LZ|Aciw0TW}^!mrwDjMBPbglx=Ue_ypZ6W((FJ5VhZgwAa^uLQ1f5u}yQ~r6a zJEhi1k3?zFIZLHTeQyJ{Z~i%pYk_-+zS)G(Tc@HKT+8ZM+@pzG6F;Ge9Q0YGxkvMd ziK5sw0x4H!E>S|Rp?QJU6@s& z3^nkIR`8lqE}`Q1PFht5dPjth_s{7D_5qq!mf#D;B-G$TM9Mw?26!taG0MAOaxLeKxS;LRP)1`JX@%NVejHuD2YM^s|gCwQ?l~0~JNf$1~g?{V_;CR~s2`Gda98Z}k)Eh{M?&6$o|_+n z^~ZcCZFVjqlvJL~*LmrmF|_WBFXl<$Yst6k=C=poc+dSZy-252Zx^bC2}~>F3mjm^ zd5`cEFM1RTI1cC7dNyqI&KmSlF=@i`s_d#P`oZk;tC5DPi7wyVf&%|Sg|hzF@E(MB zSSYzTd8T@OdIWi#YfwM$%f=Sv@|TI--!?xhX;mukgq0%@k>|uE{2~+6B2{steW$?x zQHuC9pe={AgK=9SPmHE6^79lHffp@F8XkVSkM<*TP5F4t_XTuyNJlq&7qzL+83BP; zz|y1dwn_p^FJ&EE#hIhZwR6K<+5+^r2fWhb$}&danX-WDKm`wXwZ#xGS1dh0n^KA~ zKhz>D?#Kq}w+6HxwV=9U7)Jca{@^%{#O6do=X82lq{7b+50!G1H5TZnBU#D}pNsy_ zG5M7se<;Dtn;@>6Sy7@8v7P0>R;&nHby#C$Jzt^~E&^+JGj#&a52f3Bw`!bEtOiS0 zL2K6$bkp_G{;eSaLEZte8NtINGBpn@-7VhNd!e~BzcyvvE2s6ub%t{lj>l{aYN&hN z9c|r3ZJmCpanKgSmJ!A3yYiP8*yo2b9|uBCOfzXhS08yBT!|&5;zgfNEw=P6=kLRK z@p#W=gRZ*AN>68t=SxgCth?&hF7-dcNh0@%%{jB%_rkN~e;oInzUi)=BAlG1EHNSo z=ucQ>FVg>&tLwJZwkWP^OLbdHKl`Gd+dV$!eCGfd??%-zLAqigYCiVrs z)WI=k{d(H;w-ytr{lJ;xtO+Dlk3o__d>7RKjyM9oKsO00({xqd5l@2)PH7dEzU?nU z(5%$%3TWBop7dEY!Jd}H?)Evc{tE8#EZpac&~9V`$C=V+L0#vzwW4X}if!zIG+|5T zK{7!_dFgcd=&pTOW^4h1-$@)=*BrrNqf785K5ht8disaI99MDx_|01)(<3zoj>U~! zM2YE<&BkJ}FR3M(+%><{8fp$!_shN$mcx%vVet4p_6Pr$seB+!@AvK-lwnmQi4~wq z^b31u+4pxUojYG4;ySZ-3{&5B!JzI^)jArVJaLa5{)w!biVv z0JU9&(g(ZTzjCMZ$8hGw=iL=(Zl@;5i#3Nkih_in{P@qRX!LF|%8+uZJP$^6%h|G_ zzFmM6ySb4G*rHj_@_iJ$dV*wN z(t85N80V}{#;9l4^|b$UIjAj#kDQLG@fplAl2$7Hl01}7mzNUw?_LppAHD(CgUDY8 zCPR58EDQW0t>G6mI~x}t-IYenKxR$uvcJ7{dDLsH`dY{&TU?3gf7 z_4!@Gf1c|04#w9C@t9xqQy=@{hs&7?K!QJ(mImoeC;kl862a+aAYEPlMHaA7T4JP1 z8SU|uBZsHPo!C5-O%~Yto#FiySU~sT11nHZV+cqQzWds8a$P`SVkbahf9C&> zPos-~HC!)G>95-t)R@*1g}YbV-jK+?IZBO#s$q>dcsJvNqT}Q{Yx=nlJiF#Xs=gB& zKKvY~WQ7VNL`kmigfP#D(ACyu&1^+W%{qWtBdy_pRJIp}Z~)#L+>lHzqcFsvwh1YM zZEa))+E(U7Q_2l`mc+(U9@q7c*!p(gv3WT|egZXG=xQ0HtY$bswGbA`KPMj85#I(s zo*L2ONqh_lp`@Yqx4=(c#%I!-sQX|}u*K(jZTHRM;n(#7EzxgMnTP(Xpw2zE0MiT! zm}!Pi83Nh<7&l=KZ`mR1Z>sA0VDK--GGNNuI)HB-(KM#KoVI{UK(8eqJBu3%35$C^@p=O;i8|1om^fzM`QiHCQhu6Zi4Ta z7GzXs1nXg(5deupP=_50|=b>~nPX)t@&u&hS-8vdIHSXy5Na!(QPqS#A$Xb11CG}+e zc7uy%Lc#~`W|0{p=|Fu)Q)QyR_$;wvZ=UzUfkqvHVcw_TgZ(*zM_lKxfft`gv#Z$k zm9e>A%ZG4!HpN}>^(U{^{@ILHkwNQGe9NWYDDpsK*~lmRkm~Z|T!Y&*{M2^qX}Z{- zzac$04-TRdD&ItIo^k23Zx_#t3wVz?fT9nMBI#s_?kv<;_OJX0snZmT$o<7B%fe3m zWM(kXw%Q`d;q0_}7B`;v5oShJ<}=+a3Km%|*C=1Y(|i69)>pLTN2vcU)sgie6wD0e z2;VNVj34_2{%1y1*IE#2PNi+D<){itY?t`w%Gx75PGqF7TssbjDQui%MMJfM6f#bu z+->zyHzIMo(T=uusM8(R-!)?oN(#xC9^JJtxET0k-TYxf50A<;UNjajI&u=yRuXC^ z)C}LEarQ!JycodYx!_Y7;}Sh~D?31#mzJ;Rxds!(Yo05iQ^Gc{EmnKxA%y`A^uKuXn+V?*bl z$!E0xS9sxJX_WM+rc`4vZyQ%bR$D}GOZ@(C-oNa_92jN7K-Lf`GSMhZrR3B20c4(r z$1y+4qtkMo(`Dsxv!oK}`I5kh&Ag4!65z%=G~G{4V5%{!#cn8bCr)eH=<5fAvvt3d zcZ3Cp->x-o**$zM>&HDsuB~>wnZOPM?L<*q&K~;*c}!Zxs=r3 z!Z7ycq=L?Mwb$+8BchfTHaVll#a3UtU5|>$8n0f-=x^c|DZPg6E!Hz0s$*_l%J#!P<`3LgE0)vI0xit=sldbyj%c(~-Y^*Z!0m+jMzD~*-os+qn4OcD@q)ZQ} zTFceFP&LyNdm5;wW-gVPuh{7y`RCslvDHqk%%s-JBxp*1&+9ZXD%;Pq=tMDME6>WV zju|VX<68VZrNYMn_DPe}G|x>bngrF-n4IL5R`z)<_>}xj>T_&TCr(_M6I2%=PfgXd zcc`2ES{+|y|3J#^{5)$D`_==tc-5ioyRkeE;(OWEZ^k!NMoMq`)%U|7Gv9x^N#S0F z(^wo>M@~u&A0j@RZ%$r~jH%FaKuTP;-;kB}?Yicrs}3#nhE{D@23V>QnI(QDr#_CK z8PS=Xa^z}us>p5*9jnWwNzfA8rjwG$&u#Y23xG>fYP>kyH&B#^Va*07OxA=r-lT9T z(dxMxUO%I^Mvz+6u*|}5YYRLb8Yww6+-NGpmr6dnq8p>Tuye>}c5 z;|WFkSnAk5eVbTu^lZD;)G?Ef3p>#mU*b&09~M`x@9zD=pk@0o76#u-e2&Svf2cG^ z<{m*;fsJ;mb+V_eDzgSJQ7j-gq~y zI6Y96w-K=fqoqik;C8*a%AAC`eQ&kl>ayTG#I_RcJQWDl)G&kdA z3OVCj;XgUJVRraKAsl{>5XYQdt@l5#sf-;4zrL^G_B~aZm6piCPbxLzS+4$s#`vN} z^a`CM>gX?KrW&&nLi4sp(#1w231)ets^gP(>drbw4I;u>MFAmGbX;5^9P1%)N$Mv# zZB~d7NuKcig^NbZ&k|N@K)FTv8}+fv#_4(2VFM~^>VlLyf;?KC`69fs-Nf-fN#a!0 zET zG+D()bi?tiO5G{;Iy!h08TzAc^)|>9AGdqW{ru*itR9z553YOJ<>jZ&d}+&q`J3+q4xUQQxk|#y9(E>{*6okA8WTPz z4<*QG?-)UkZ$yW%5fS56R%IurrCD;R?O4nIV0ZYPf~`eTUK2aDqU9P=(67u5#xuUA z(cRt(HL*C!DK1W(?IYBvCmBoh2sVC{Yl>eH)K9j7PB>?i~aCZ;!X{E-|}xjZ{EGK@bd zJJWG^|7~(r>`YCSZG{!AH6 zJX|$V7tVBj1et7?KPy%busJUE+5y~&mYbx`a!bNGb+Qtt5i#W(raHP_z!|ySJm;`_ z;jFWgDzPOI`5kX(G>n(Gb9k6hf)XTwbfkY2oolYIbDEY)l)rf}#??2=T$g^+TeUDHkjUW!UpjPgajblz}p$f`X$$iCh{w+%^sS=;EPQDHnAw5mh^9`!G-R zgY%-+f_R#NQKB2ub=k#~?9Jy^E5nttW}RMboxedfaxjHh1P{0crNc#6g{-I3@Vb}% zk57SKczIzyNS^+VDoI1xJcU7TUTX=4yns!UDNJ&~1&Z{NpJXy017EB35poPJ$FB zJ#`$}JVb;lv8T@d+cy!CVf~s^%7}PG1;sylYoQ0;dL5$Eq`Bf9papY=71)tv#RP}gL_~@hVCgS#tHOml~F;|dvdUj(|K3J>*34SJIa*F?6%;= zoT!<>;Kp`OXa~hj;6pcx?Tl>>N{q(RzXq~ly8JV&$vSuosR1fi==^?6=;@UiPo_Mwy!Y}*X9`aHr4(u%+#ya~6@z&`DA_bghrp-H z%o6X!^S+CUxT=c^^sWQhsWZmQ|03Uj-OB(;!&>&1U?=~<$_M@=@PcR%lf-qFzX*?w z53Lr07qd@#hJ0Fms=)2;@-{a2fXyP%cw49+Rpx>bvFpS4o(tlB;SWc-+#FH(?}2fx zVtXF||GdQtUrqqhdR2XzS_6N+>%(Ln8JC?;5zG6g_{A!E}!PtTsGM~rN}ZgjJ>*)k)e_Z z%WEn3jiV(kk#I__j2(mhEt76y=(6+0b*QMI*t>4bynfPwRiPpnRkOJ`>`HK4iOs>D zgG{I2oakUt#d=30UfR+gIpV6K7Jq1XSZpE+6PbFyC}hAn+{lXalhu)H>Pi)n8I?}% zPSWS0p^SWTjl)Ar!@GO+Mh7Jr)?xg0X$47!%u4@xmdS~RXvtJf8Ep|sy~6zW>OT=3 z6entA#X&J+@vidxfWkuL*wYIbsf={%{ z1uw?$Y=;RnXNBCr$Va8L#~Q{}MILz52bP(VI9mV62UAU>8LXJN+nxtF`b=R2Ml=z+ z31w1p1uaA_7Njjde+Z8tPLe5fNHI?&hIQseES#vZ=g8$mi$wzo69Xg*b)5<%iH~_+SR)e;ED40_1DK>eqLKF2eKu87pOYM2T!bw&sv%5$aja z3_`PE6~kA(z>^;9?Ha^CfBwjD>vAzC zD@`yJhonWIUV@H7@v9x}VbH%aB%8A0hLsiQE*#?FNd#_%#!obgjAca}yi@53LyQB^ zVW!N?V0a_NO5MSyk|P+`_$m`Ic4Io{gzwB>WK?AZw)_ZbTy@x3lao|is;ua>%L_W2 zcK7LW%@*vXd1c<%Xti@F&`HqvtPKYf;zuHWxz@x`WMJB7q@Pmw7ztQ-W4} zg9dzs22+@>wbx=&LO-zx)X}UgmYKV+>V$3(tw#_F(h%q$9Z&VcOJIv}wcKskwd8TH zNx5RClZZEf5$ipf=Z_j3XnJQH!9oF;k^PekdF}O)E1J!spJOIrNkb9n<5I1q+JRx% ztAsiEdf>xY|GL`oNM#BM?M0HY_Ljs_hiX%;$_NMQq(t@V;9lmje8!lKd7*=mLX9?( zF;lgEYW2E_l?Bn|gNsB?V?&^`GMl5yBHwy18s>h9mFO>GT>nbcag=cF=443lmQoKB~$*Y}DG|R2IRKD)? zn-`fG%ut^I|LK8>46^3v@9BzNhkc^olWkj?E6Y<-!zJA+oI6~24nt}m|EabRStPL8 z6+tFO``bWNfPpC-_?Sx?sZJein0r1z{Xso0q{jZVj`Eukid7|xqUiD9wZhwX(%lS< zqXa`NG66oBC~arfH@pv3KUeCtw4Oegr@_TYkGP(CE^VfAKcd_|#`2RxvethJzku71 zR^cqY7b4f4&pe5xo)8sc{l>F@!CRSe+w;O`dik_@X1t-w3x+?D`8((pezE_qtC}+v zo?5E2QX;I04OLCV7?NZZrrV943sfvE)&a@G81ZX28jXRzq;Vo)o1=2xwK6-A20Vu2 z2yf}K^RJq6X>Faiqqm5G<`*eJp(LR8~M@97GIsc~N+g%@zhQQr_L? zpB3~4rsl>ooYaXL+<|C~|C@&H3iM8lY~{v1-PQ%<>Q(BtD$NJv{~if-0i7%ed0a0u?)x@vR)F4Zh^YTuYHtJxvTkw3Q%Bv9 z`#;*_{Nb)5tPoEuXo&IoT_qPmvFUNbNtLU#^PB+#J5DBhm;cU{1lE5lptf!@KHNfG zg%WJy9{N<_Lap%o`Xdzev4^2)hT1OG$&bDeOeNJ zF2e{%rTv%kx8{|f*x@+@aik)NO;<4(4oC~^V`|+e=D2EK+B?xRHtBX#<7;IISWfsK zlsHbv8wHO;!%w?hZ{3$W0+#OIm%z2z!x~_PJ!IOU#!AM3NJ8f7!gUkU%%62A@~fR$ zrTVNU(v`Dg1;oUDs(ckF;@eYWQt^d|`)W~ZaR;WLEO(@Q{Oao4d|1;^+-t6k!E0{M zGRxE?TlTLO4o}V)B(64-`OX)0n$S(0@`d;4PSx0h9+i2UqE89QLe&T6uszFAE44`l z)68ptKXtT%r!=-{zEZy(S{n_aoICBO2>WgQXI^A&UUJvN`nQ2SF6*jIarm9@p0Rm@ zFq|PC@LH#q6oHfw!8=@rXPev6`elg~Pf@6BK6v^4PoO}uI*aC?r2-KhFP8O;yJ(bv8XYqrP^*=ibgIA$o z{Uh4&03l4ga%);^k<3RCPDx_gx%e&D1vSer8B|3kNz7T=5{@j}kBQAISr*QV+3spJ z?P5A3-e{$)BU&rePEpn!r#C>OMG2Wp<@Q;0n2-PDB8K^>~&MU)>@tr868jJu6`Qjb6 z(|5?f@(jis-Jp$X6HzZEPPq7{ir}AU$EXx!Z@skg3%eLlWo#;N9EWUMxkG7!V(-@Y zB4SW9GH}$Tj4T`A{jKOe;PbP*Tjv)B6E7+e1PIg&fU}sj{&2<26Nlw)$bKiNYp}Jd zL_>8sY^Xg#Xi>|DkRK5W8phN8*TVQ^hG5oq7gC@{m|*jG^R?4I(bbO~BS?crE|rEl zST++XRZN5=-+pjl5B*?T3a@o2iGfDMqPFOw-@_0lF>85yA4NQVSMTp|u1>xC>$@l} zhw$;+EgZ#ai~e^iA|)(UU;nw401=!4Xjs&!xa)9h9Cz_ynL^Kg_1Zc;&_2Fo4^O*V zPAu}qVy+WueS6t3Ovu-6z<203^X}Q<%tJdx%KJlP5+4XZ<&Hq49F@o^D+hvOEBm6z7T8%rrasPB;zf0 zAT4+r)W!9ULrh(eqc=h?K)>YI^@;tPTeIgNIsd4Da-aYV(DH=vK$m_v)7g-k$10GG(N=a`w;E+vECJZ0dC zmQ>~}sgJWTdLB-&I0}+l9M56Cc~Zik6K*H=V~{F$8(>qbZB0l!y72JHF**zUXZ z1*!ACXTw^^k_T^uKm907`Rsi4TcstW%^iX7gU92wn~rntaPE6(6b|(s6>mLx-eEa4 zbkWGnuVMNN?Ybc;k;0^xhgx3DKAm>;ueESj?JPgw-(E%P+_r2)e*W8+GRr2Oh^d>) zjBe^aS%Nav*1~x-eRiNEHEl@~(5H);*gC&OZT{inP|_H8v8ljcvPbj3_I3bQ08aSOa9f9=4zJ(U@Jv3HdA-m z7VEm^#_zu$P3f;gM>bHSFx4%W{6Ad11yoj1x3&$Uw15goBcOD5ONvrTcb79OMd>5mY|@ONxJ`YV=&rbaLT)PsY$7wm9S`j|rq+k`r zb@1T95z{!)s|M@T*};;ug;^R_Z`t#KC)yx+!G4P$HVhYb{MEAGqCYD&B=%@uJ!<8F zd;ejYb89}Lf(wUsc4nEZ!rh8vAdqQ!mJAp6Rk3%R`%|^swj}vv*c5cZNuHNeE=2o= zW9UB_b+}XKebQP|B#>;8_#vY}OWa1F9zH~nR_c(fX zTd+ypH3^VxU2FygTk~1zb+twhwFJ2=*PGZpTPdTmTqr#nVJWc+UZoAq(0Ox9j_3B*1a-j;|@@Gl}^)#Q=>t{!k<5zuVC31uceDTVK=`(-j2^iHhoTHqei^0L z(_s--C~R`bqao@4N|1$o?j%ATW`#DI_lhm|w-E#3ZG%m%7LBXZQ|R;f+Pl$~Y11!^ zTCQH}bXbE;X!Xq0bHu8S;V6s%Vb%lv*B|RHaW|L{oH?ej8su6Fzs=6IFkJi>)h%5D z=QvaK&%z>U=lKLGmsFW_iuitAtH>y)54-=4e$sVDEGkONO+A!+zj7cDM!QD@JpBOr zAQrf6qUC#h`h)~|`-0RyI+*Hz9}*IMI=mBu;}37w3@)5FcJCS!eXt~>WpO^B>caPq zD938pE@t@VA(paJs44GL*!VmAbfZbWj8Z4L?D*iQ!{^#aUvJWZ74~N40c{MMQ*y{z z`It5&tqQ@sh&#{yNvbNG++gp5X@iHADfYKbKV=C_VWi{-DP?xz%F8z6gN@Kron6*= zSO3k<1vG~HXPqBoD)_wRw)#Jq__b1Epi{3!byW(|u-bpU&9iEq%(7Lrv`_kcQ$c9O zQ75&D%QIP$est$6WC{kVhM(+%DGf@7I2i2z(QIJ&Qd%=RK5uI-E3l*^(@&Cxg&n84 zgD;PqAMlrWttA%?^T{YR)k)-H_LY)2mDpSB=N~RB#!e?zBRCm&C8|zHui89X5$s<0 z^@;zyfZwX6FS%zp+C9{_@Roo7Hq7gL)!OCW{4pkPZA+8cUiLD7Wra=ps-R=}cmhHZ z!-28Q{ffB}iz&MPVpt7^ba*BCegP+b8b6&Th_MBaN&Y>t~A@0n#4ATRb?UU zea^8QH~Ti-F*Ql48mHQ@>U`@J1sz?Z`ilF{Kjif>5K=j_8~!Mm|0&NFk$$bka``uE zu*%t&%ZB(W8g()xY3B27=65&eIbpHs`o|)YWAgvK&7wbh(RfHHG$ui|MiZadw`7Vx z=az6FGu}4_!|YnoIl-<-?Pr#ICykUUNN}toD$U^B+HqOkSfO=5y6n09-9yHfKMDVP z3#vmlDr#FZqvWO0q_bd+khvjZOsVddM(eK&y2fFS`3;I_2ak`ZQ68H`4Cpqm5!V+F z`4qXAMs2KK;};%hEt_OW;+3OmZQKp89slr=u;n$GpqEaLUg;QTnxN&^|Dp$cEa5Oy zT3og$lZqEgqky8t>Ed;E0_uY6Jv2)S22CcvsHv%))$i==TrFHScEvT_t=I1ZtKUvA z-|hqqkYOBwNjKzv?YLW51ryJ1h6k+7sewCiMzL1OeB)YnoaPEk+BGU4A7A=y06OuY z6vuq~*e^L2i~V{q1ADh6_Fi{?rUH&zQA+B$7@-~J@Fk=OhGhIB9uR5R!eD>3v?9IT~;Ihr90$-80( zrh|C-VQxS}rcB86;}T7F_k)F}&1q--;GoiGU>yn50es_xOrLr!EW$qW@yrd58_#n4 zC#uG|D+h7^!~5MMza;x~%=&tAP1`gu^u1dTygDV5IjxF^EP!2RJ@oF=hPXBfq`9}V zy!ZWIf}6nbi9AX&p3!SmnkRH-Mz!&F{_q6&z((BM+`xvina^=H9{DkJ3sE6HfvK9e z$8QTjADZ1L>!V)<^Kfh4DD+Ff=XX^u?FKWP?*a$9*KV!bjXC-GLB+1?G}j&p4ac3s zkMxP$cGSS+-stY?IN50<0Zh230LRe)e}DLz{{StgD137=vkUR8t)7Mxydc+T)C@4a zbkubYj`d>;b%o^?@lp`isqUCeeq!pBm40S2a}9qcrCiVM=M&e;J__W7-KF|Re#(rM zuI>{prkYAi3Npt^-839H3o}^GaD_pxTd&*;d_J$anYkrv%`=BIrdY~XR7{F4%%I$I zu0*l#hrgY=NK}ze8*<%XsRst`z%@7=S_>}siS=OgaH_JQYi8dBjc1QhnrENYyl$V} z*~Nurmcx9m8!Sz3eNkgU41fM8a;X(y#%%=rK>jv4;=nK7E?ib$%$T@Ya6+^9y!U6L zccbs`N8OV=)YR}7Zzifv9$cb6zTMj0rQw_ap13OYj!ck;{CejSBpnEkSu0YOG71VpfR*ntFocB|5ax~7hLBSM^clu~^Hr;k6$=ZC_iD)pjF^Qj z-XA!WS5}@R47rjU?Ey>Jur4B(kn!J2r-0vJbvf@~1Kep1XHbdxlZo%Q#L6owj_Vfh z!zwG;=^M^QGKwc5uUyo&r3hhbIu33g9ydjt03v5ffODaM05B>5IPzPmcmqu6B4`5& z0Pp#j9OPpGY}M&(9<**o;$R?HNZQR}6bDnr)#Bs57UYBt04R91kHEuW4dMNj;NR7b)#E!P%Kx0mT_ThP4v)6U z{dKfWXx^?47+LRw^en$>y;~}*d$)1JOeKt=_^=w|3Y|74 zlkJy~O+e63IymMzg+W0-^JwR`v~HsDjkpPmubIu->g!pMT4p%lJPsNM znr8aIx2!=acjMq8t4l!xE&y?y=;uc-EhSqJ( zBKUweEu~+)tCB$xutvXNif4QAF&Ws|rvSfjKO&d&opE4tl9-c24!rq$MzSTyHdPcAJB!`V zX`lrJzS|;<k1UfB{E41Y7ta)81usWFqnFVe(CSbtupkUKNCTP;HG>x^mzBV#bjb}aR|CO(46Bz-622l!*Bu)N(9v1(6R(Ghta!5 zHq^F6R_!l%fy)6fN(wbfb@B&19ZTTF@I^@}&Y0y3ef^OT^q&X0cWGhxACALM!H7N( ziK|qa;=)M8(k_FyF?jVxNnReJ57C1ON3Bu?L5vGx$SxXq*ESxKNaFyxFtquk-$En| z&23U1NRx!Xa2CatcU;Z>jf#W9v z#w9T6%)b$wEB?OQ`Izp@nUdLyDX#|dLognK-NmTKWix@BVJdJe=jswbVj_fy!*ofhlS`${K!Naiq-JeyH zkI@Hr?+zObOAcOV`w;!suigkOWsfR4Sikxc1tVEo8#nUeD2bRr=y7m`I7b6KNYM36 zNFxTb+Ks^AN1kK|EvuBQVp z>_y>LTTvMF$MY3%tzIvIyY&h%P7r___DO}?k{1GSw71z&0W}SI9`e8dBdQm>HIPBOHju6Zyv%gfeNK{jZ&E`YxUFEK9P;{x zz#>C@mjvKF6I(8e|2w((w!93UiR{_3Gs7q+?4B9;`(DV})2@2&mHQjgmj)7G!-B|C}G`oV8n91(H~5U^LhY#e4EOqqgIr=w)b~F7D-Co zPr+J2XGHY@{^2*bx3E`Zx%?f#d0M42jIa;zng#&#qYwBdA+Y9drn=Bay+8>I?Ent- z1K>QN45DaEOiVH$7Vzs3{LIQ~H(D*J^KHnP|NFNEn54&DUsJrlMuH;2c5d1Rh+M0{ zo?#6vnO9y)82&I~#BQu$X|0^5F%*T^1L{&mAS@2Msj^|pY#KC|yaZy7x#2wzuPZ`C+SVZZ1| zA>Rf?zIdiq^1T;PF*+D>OkcFKM@Wkg2@eF)${&r2wtm~|<$E73x09v9i)iMSBt}wH zD|8!v9{$i_F@>B}X7Z(aE1x&bR(sp;dOEsnFtT54(8?d42kXe_{~cd-w;ut1!7=a`LF-=R;M~-{_#@jJ zr=hV|p;G?!#pA=_<6tiT`M)R+o~7brhQ|{I$Z0+@!PEQAo*M|$x$p0(Ad{%Wrbl-f zHz*p0aqr{}yQN*VQvi#_UH4n0{-^(=1$bW!mQ_ZyE=VGwQ~}!P;VM-@>a?2ba-;ag1 z&8^2!It6eBI6FMI09Ro%@`>UYkYf@ci-|F@Nt!@_Q4AF!ZFwO^&;qugxM`yBF0O~G z)ziVY%6)IrbueGw52EGDA0C*l(c|?vE&7{e332giFdz?DBn1|?;6+(m`zf%zyTGJb z#}I&z&E@^&j#7zhH22q8Bjnk+TXerQ0~eSQGJNW<1ZOb8{2e(}Sa_9(T^jCu} zz-gh;bOjt7!hv5PkHv?SH;68Az~&(Z*gXY7`)egJa2^69vE)*T?Z9h6VX+b57bAty z`J#a}6c>fhBS@}>9PlEw_w&++Qk`Ol5aFNRd?hK!Pjvebv?gGGGPY|ZwYuSgDdBJ>E~7Tk(b?GjT>udbLU zf?ZFni7nZzI00_wvgfn=4?rg9&d^2YJHvRq3V%dw2EGQZubZw!b0iafOnZQfXbE<` zn;TX(HY>1|e^FF~kDw}>7#)prpaRs{NE5B0vx<9HAVs6?1cF7m>Bm3L~3va#G|1C zBm)BjU=|0AG$1Dw84ZmTvXh4mj;3XB#$5(ZGtZKBErB13aOdh2%~K6<6mLv>4ektJ zZL-`$sXf@ln9cm3<9`7DvA_qVh<3)igxCqVk^TDhO9#;R8sGnWlA*6(IfxV^>hVQ- z1+$qxY*sbj3GKHO{Kwz>l{eEo_<@xNJ4n$NBRH!7RL>e@>ehhNaJ)+V$XSkIKtf-= z^aPmR9nfU`r;=4Nd6v8tbiyq+u&~=D5y)WVPP*7LIBtI7?U}*I7>d)5SsBw>SqMAG z!zilIUW3>gfXRa07BZdn4H3@Q)>F?t zhHa0i>hF25z`@RcuD+;x1zA;9mGtsG;Dfnd)-A5zEwA||F3NlUo_1+k;;K7j?f?sd}AFPwXb@1$Ry??wO0>@b+poCTj zxGF9cW3VSJUiB(9wgQ_PX+1r%SOeg!f%dSS_F&xHbfx9A9s_Fh>T(>>jL zkQ8u%JvMl!31kjCySp{pIZ0Q5!qm90faT zV2AG8s83L)1d1^5oT6(Ge*{?OK(3a5RRL>|j*hNCt4R~vOz;W=@}{!^lr@_f<6PLI zKCOoz`piAh+Aq;*W0Z;l{$WSi3~t|{i6rd8%gHxeJ`wg2PenjVjFM00P#gUVt-@N)$TKZ`bScX6 z(u&X+ah=&;PY^5vLR>X?XD@Ch+-rh;;rwG9+@qy-SsOeSzniISb*KshoNmsRD%p% zMv*1x+-j#gahI8Y)4?iRv02T}Mba0TlX#r)qIDx&q%1w^s=e*QwsdPlpN ze3Jf9c4{>aaa*LUYpgL3IL$^sw8)A0ax!f}F#J^}>%%@VhL?pCW%))op8Q>QKm?cv zlf~Z7Fp&lfMKhRQiZkp9*VFf&xLY=9wmC)g&Oa${;R#3Bs$z8F!E9Ia4}5*k|Gx@B zhXIUYvZ(Xeo$k15)-UYM&-c5Ii#lJRInM2gwJ{2GeBmT5jtW)pw<2Ux4KAVqnVMUb z-ZAI9cSz2K8eXkF(q5RO@>|0Mv$m+)cNu0E6`o&)=3P4(9$@4XLKY<@Qd|_dtrcj> zceuPAz`-V@qePDM2)Q+N1(X-F)&KWm@OjFVD{d<|VQN3+WVk|-cPmBz5|IBK;DsZmw0Wp8ap1Y>&h!JB zd*&Bg^Rz+~4|eDMx2M>&xe~r#-+_%LeeRJ1^>_^vjkfH230_->%n!sOdqQ-udx{-V%h&GE42?E;8F{zcC`6Fh6s%1 zh**wp30C6I_=Qz}$n^G{jj9Gra-7^@L`x}L$+YzlaF}M5yh5b8%CSbv{_>N6M1o3` zI;OqyzGKpQ{hOZ-Wi)b-8c0DY;(PFbMIr-LOQkFEemIr?JURa5ME%9p5F}-h6v5|1Af;|LPxO9Hzzk5q~sfzjV|~SE&~cesIL= znD0X3-UfDvTkDROek-vyd&#`~>g6K8*3;ztP_KEv0>xyK@1=SN+JALx z|DX0Ed2E!97}K+T4P0`K#csyo%Jm@1ncP#yuCvQUnv#->gw-3yw|*hfY{5{EL8&u>diQD()jFJ>$KWZ~h-#cQngkq*nXcf+q*8*BJi z18gtM_1%lY27AXbHMHrPB3vxL*BhnS#m?RRXJLRpMav8a@IY8|f2a31!X$kuPH%+E zZXr>8d&r-8c*g$e%W!+SDM=D7c#UY@WHF8Lh3S`DnZkIRVe3~rohjF|iW}p51)#-nIG%i>vKqNg*>TA2YZ|_vdC0 zz0T4YuR^m&nk~O5^k>VSLR26EIMzSqi6J$({$pHGSz6Kg#j7OHdE({E&}(9tZBjj@ z*Mu8ze>8@Dw*ITq1CL0FMYsNu^SfDs#aRKX?7T7cuGVJzZ}Xdq6et+u0_#K^LXw2Z zf$9X}RH$tt#(w)fs$;1pZ}{t5TfAk1ls_SX*2j9^%DA}>J3fWaWT<#}RZ&pLg6(bz z_CkS1it#qxbe<3q>$OSNzUGAa#@$>~3}XF%uf6vhR6%CZi41YHXM9K*wyN2fygpI?UGvKLA}Dke{$?Mr&+PP}MJL%EHP-`o|ZN?Gk(a@C?1o3mthK`wRT#_MfX zWS^F-mqh<;bcnhm|H4MSu1U%k=;+$g-;Nk z9;^!^DGGy-v3vLSu>WCTk22hJ%iJddVxceZQOv*)_;Oyj4(O0gK87( z){OVGlC_nZC*q_g7CaD*G)qmwiIxlBcU}32&7HdqT#Lx3Y|7^A(r?2AdDJjz&sOT0 z{4mb2uFIQCx1I9AV2iLIaR?sS&KpU+<-7gU3s0M)gYh}~2MFc`(VNM8{e;BzZ79N4nqR{rCB3g_TkrV?%w_7NUb^xUuh=iyiX;m)zf2 zmvX(nV)y!-2bjJIzun&#}u|Q-<7yjI!q>%k(bD&tlVp;yVIfKJFd|g)K%~kM&T6aq-oNbuQM- zYj>dgi!Bn#Xype@MLrw^Il)A*{G@l}FjkAg*M2~v+Mjf9Ges^#7bSi2d&-4Je~&Rh z9TVg(KxMhN(3EM$b9z6cs+UE4mnVd~`yj^1O&e%^kiK;&h+d62<0)6}C-?;vxIw9U z8UV_F-o!;mAAzcUiPh?dn)v@-I3IGlExdTc{udUZrW5q4dehjIW=2mnXDb<{Mq}vY ziJo^9_GGuZpN8MD@vn$pc%G!&Nw*qbOgc6F{LQi*wa_Soq@%(o>LQ|_GW}E7Ht@)- zCh@rOHJ0v!&Db+@zd&|shdQ~Rk~-^7n>?p%j?0l0<1? zadNbYnE08gbs$M_t-6egx3OjmjD6J}wg`TGeDKIGgizF$U*|7(aeRsER9-QwR~-L7 zxe*;xbgsS8B<*+>@qqY@jW&99xA%7D!z_G!?~Cggdh4vM%zW5+pN`O6KBvv?0wn{S z=xUYvUk?v^LV0GxAI?UT5ScXUi1?>7w@K-L6Sd#xvQ)ARx(a!V2iMl+PS-n~{(Ls` zPoDhn_~&x}SW({Yc1V@w&n3T-xp!6lPw!6@6_}r7UeK^m4zT`Ns256H&edf2dC|sL zQQcr*xWHh1^_Q8Mq(ewF+6MFK7%J0?X9Fm`QX+%XaS0Xf9{mPG1_OK3w|j7ii(NyJ ze~gM%s#N}L6d0wRyEuE@ax}W%Id$l^2A`6P4hRG~XT(yrfONieN(K zG(>-km>Vodx%$oKpn#MD`!Xf`Eclf8xzh(mOG`B3p5JdGRQ41C%YzlZ`9v%H_-tC2 zsMh*02=j%Sxj$hpaqs5i!gGwf^{oLiNGIXQA^{P5@MTwy#6kWciCuWE%q_Vc z|1(L60LiHKmdqgKlej%ax~lA^=8cMEdYFF~?%(y3hn*CQV}dW*uDtga-kA9|&n#mS zmGY$ZCF8)$tmviW>C#*Rt7wd}dbRiU_zOBN3Ari1SGi}0=6g6bN%F7tU!ZwY-FDv( zz6(@&=>^lo`DH-njr#mYXWWl(+9;~m?Az%ky4tQx>3X+)bNMIaLeS2cRJ=-kf3K`# zlwdFsedTzuSI&ue z(m$=)j5#qt_Vrz_W0wnr1~6o7xS-@FvKL{-#r?izY@;u zewh`{#Gf2Lf2YesyzDqO?L=T(|9#`($*G0;6tzL+*=tU-8|-@a#pXYkYt#?NCz-_e zh!6-84-c=Is|)nZjyxVOJs^T1%$uYEUC{lSa=V<5aZ-0Z?%0~I;{dg`r!c_r5*}(m zgL>>VzD2T)t*xy#@IiGvY`BcRhU%)-TN%NYSIYsp-!_3KrzNPrtgME=zv#5(PwRqc z(YP#zXCD{Ci1_d<8n4MU-Ok59Y7jZCy@33@bD9E?o(hd~f?9+XsKd4}qOMtU6{y$z zgS7${z^fq_@cl}FE4AKyt=$!%iV$2kR#ad?fL4tp{vKyrdYA(QRaaC;NWhY%bu2=@u#8OLFT0B!)l z1YQQyb$@*^fTuYqDG@`33cNSa0^HK6u0-iCRkw7RP#X5nPs*nGKl9LncP4$Q9Of>-H-9EjN5&)I)$tl9$F*Y^ISybc~kRXF7*Wh znQowExXkAjN{v@@&jz1NV8MEG2^^6htMZ2rt13Hn;>357(9+Oz|0tIIHj`{;lGml4 z7>M`7iRWS*?%hWLCgPqB7{*Yz)`v{`m7W(SM9Gqr{=b!PVeB-Gy7vYD(kP^aJ7`Xn zUbPVTr=}KDSD`NsADtD3D$FI*I-x4s@$OVd?$D-9mt$T`Ai&ctVZPWVx$FyK_|W=d z`Hp|Az+7pVCe#Kefq=H}j0oBMO@rm|hw*Ou_q=0k=K4G0_`CxqR#(qe4Dzc8xT3vG z@K`mfJgWV5-BIkx3p5M#nsms~xEDlrJ*DsToZ*7hob8FYj!)VQH2l@fYo0-+G*}p|$D7IH)3iqd(4ox{qeKS=-j{PW=zw(a zD&g=4qvMgb>#o{jE7U-pVtqv}`Q?F*8TeJ0PL;IW&H=6=1k;I-T>+ik94{d#Skz|J z8;&<~25jWp5@yq%zKRUtq76aiRum7IV+)QD5}Gu_2Z%r}y7!MpD&(vhpY<{C){2_$ zrr7F(7;Lu1;_z)b3j#k#eLCx@j{nB@#tL;jkJ>^iskyS)?~z;7=_lp)esA&hVQEW1 zyLePx!C~s$Guz77wC8D~;G*}CK49H`)EWFNxybxj9hvSGITOYDb#QOJ2M6Zh)8Z?G zb}!^!<&{3IjG(RjsckC`V${SHZPDHVpQ(5(H`&PQn{1v4E?#}5`Wxsk67^i zRF7@R`Gl>vOKsq(9~YLPg1G#YEc!1KX=Fc-*vKa>Z02QoT*M${VL869z#_HV+e(Vb zi^jD`#{DOy8LlpwhJDu$l54?sw&x$nef&E=u(Gpd{>sLcDr^{@n?a$2{+jdd%*jbP zKo1xXe%_xr7TAidJ;aVep)vnmQf}ziBl`OWPmK#KV&4p9vX z3`8FR4$yI`pOOGwa|P=4LX6xw$JNlt!+_`b{$P2&hNMdndS_C75aOL7y&_)%mDTzD z$!nm#cx)TD`Ct6O@B9Xx3UVA~*c{wo+rC}1*p324K@rONH+lUj#?6fk{d zjG%u1s5xcx%Y za)RzfKgcMAg~$kGqm}l)b7Rn&M>j5sD%=fbq_jn&zLKamHAw%nSfomp0`UM!o z#|FWC6{M=Dd!AzRJTd3GKi}YufGXa-&Yetx^HdxP>W{UG24@(1ADrNm0PhZm*p6&sQD_Xt5mWKIsmy1HB2q6N;HU47w( z)H&~gM(_yqU!||-PuBY&?EF|m82bA=#*0Od$H4hEke`DVn8VM8213w2AqMsS@Wei- zlTr%k%Z_Q_i|#)rrV9r^cGnA=fQN+wfx3Z-TmX>l=(Tu1bKLordo*6`js;_Rcig3S zFjvC~NbE;{((X|KbEjjj#-?LC|2)4m8 z$O)Hh14TS2s)JToVBKLOPl*&R4ActM0pC@*L>m_RcWCdrzd6rr>O}G-#DtJPpgd37 z1>}--=PO@<)pqM{aZ}NqIVhwPIn{%Y(P`j4!-8^NsA?)Kw`YC@VMoTI^5talhf?(r=i1-n8_N#h}_hgM%|VP>Z@@w4}FE#%I7!FRU`& zWBVmfClUUZ!Je7-=6A1nkJ00l=Vk0J2`-1wj)h7tcfg_AhIFJm-Xw)$42e*+&_hv> z(ucm&AtXr^nuHrW`3Oh4$I1O)12WBq%(#|P!THwnd2t2m8PV9J?kopzT}em!>laUn z=y&*sSqZ_8rmjbpsH!?V_xrV~%cWqkX2ai^Iu2D;wZCI?A?m_#A(HU5MZ%-r7W@tu z&t`7M@wf@z&pp6B^G}O9RCFinvRiJBe0OM*^J%3WNrTc9c4IzTBBpDp#pf6_=giI< z9nZ&=m_QUdv}tm`AD)=laC%q(9U;!c`qOWN9stw^>0k5t4?$b@1A9_OcO;n=@WI#K zn<}ja;kFdYzkqBST9J_Q=Wa)-35bA_Jzq(4l9VRX6jeXb>kMfDF*g`eT*Y%*kwQ|% z`kS5KoM62|T^dOB&3kP`4rB=1)nxqX%2_lj{^fDiQVFpe^q_jF*LE3Ph zzQ(ajsw^cDoTGeIFK4rEMm`_Zu6!;&h;jT=LXG`DT7Zz@Oa2ce3KhEpkV6D)J(YZK0+ z{Cb<`DnftyiwN#*;+Y$Aq^3cb*s@1bwF+Nj8|gh3o;ovmx_%`G)#TaFACpy93kJIe zzR~hyQlwbRSVb15yZYxVXSIUVzBB2Dg&q=Zt4*Po;~EWP&B1@lm^ym}`6@#W$4{<) zkVsF|u@{lDvSP!X0Lp{(H2MQEhq!@$G7Lu9-Kw6Tk0Sg7Y>cizU$ck1w0i#GHu5!7 zXL2DaE|0_ZY%7VIfjH8#+>Emg+FRctb|JorJ_c^m$an9WaW1>(Op9Pc2L`^H@B2+G zKua~eaM*0$FJ}W=Eg`9AN==4!whA$;?7L`_8y$gNrPNN5+5lf!6}EojTYFqe%e(4& zu@j>A^x^6(M^j^GL`{W-h00)IDjo&{{WI(J9ygG)6$pGOM<8;9$xX4xv(+f(J_LpV z7!YB@yn5L`e`vnmi3QT*IbIF|J5DdaaiWHMo!!EBIS0vro|MoL5IJv=>{ZU1SA*5t zz{;`c$^xAj4o^j2Yxw>yZp0&YJ@Rtcd$>ImGclpLSa7kZjYRY%Bmi-p({Ly?6etT< zW)~mqt4>tGmI*|iOaP1p@`Wcb&X)(FU~?o&kaUXcg4Une3@d@tTI52hUO3;x=~f{& zz=42?b~RF)O`w=a&09zTxhpp}_we7pUOK2(joz!33JiaDxjHfe?k?pjU7jzfy4SLNbq`Q65GqSrzS))c@ zK;+iKSw(jAi&+9W_H|BfTg!&B_3UbRS$n2rB&=Rgw4}e}yX2}@cyDMWm?C;NB|LEW zV#+ux$ZWaNXGR18K9gsb)8cIw_g#vMZHG6i{rhgA*-3AHqofJTyVJ?g<2~mQsf?}M z<|NM`XSeT(`!zJS4VX_bo@lGCNcetax0}}cnV0;2MJ@3XHpI&q?@SUq=hTvNl5UTO zmQ-*|zvGQv#reRCiZVw=aB+Cxh~!3&dR0A*w1DsFBS&aX4ei1K84OB zmn+V-GMdPeNk52Egb~MeHK&uq6X~pIh2uDSIAIaZUGv_Y?mkozbiij{r$6drwAckly#}JZ?sTj~4&_J>d0|PB1Kw5l7E}g6_XIUMm z=}cw42l0-k=~p1>@6st?USV)mn$OpIra)ve2%?4=+#yg4q@k5H z6yt*#8gbBhj|8OFrBk@EUQtN50|g9HGulE8h|&~;1IuqrrcJSdVQt5MAZ~&AsVx7g zp=`KO(;d47eW4y6e8Ax)O*xsHiHIfJKy% zQ6}tWr5%=hKeZEshGlWGV}a20xlA5ibMt7libJ~@mK=W1;Z1U39FAJ;H7+gyv( ztr+ur@67EW2YtQOj|*GyD=mvO=$Gn!>MeIjdQT#8E*U|cmMV`PesW)k4-evJwov+B z%WiNZE?NP0s!djgU5Je(L=Cd)+MF5oQA7?)aP=IPs{X(>w912fL8#jLQB33ZfCle@ zsW4q_tqA3P56=Gfz1bBhYUAfva z{iJ3)K&xRx2jGES_)G8lYl2HEHKq4^UXiWdIcJs*f}qNHy1 zjL7ZmZ|%nX__&`*Q4RUZFLxjhfxqj~ST7*f0?NB+q7CB`?UpBuos6zmmQV!;1mJjn zH)qhCMt(MDJ1TY6g6{4K^z8Kj&c&(>h0GF#rMP<}k~aiTCZGQ_?8@p97_~(-_Rw-_ zQL8jwQdg|tmqwQ9q%Lr|yOU&Pjx7jY*EgUSP+ZvWTXEvQwS6D1_^#&7D+X(r<1+H0 z%Jg~-zNOJGs~M%VEz^V?W1cMp|ArM=k-x1hP>2w?Z!C}__xN`w%*C9PQ zz_4L+HX4tTpY6|bSQgAQ3)0sLU*)ub3YpcEPQc$#;Wv9CS3oM}4YceH2W#}&YRtYs z-W&wLkHN-guSV%QJ_~0Nak?}o ztyoha-Kv^pIohO;a--CBO0li|^HGuZ*W#Y@v53|{B7Pz%+h*zvQx6&24{yJrz)MsE zCY7oB-?Ru0r>FG?R=J-d1x#qwLlze~w#IkfISgdsqF-ZBsJDJ>Fd&52-B+qIj|!DE zmfw}P=z|aI%3)vb2>9b@lO8#2gyh>K-$9HTK8d_$6kjg&Mug@?{_$NNZB#w8yE0{N zQ2bBxQip5~{Z*E@Wvhb*{fP7-!LPOZJ}6xtGbjh-&)#@%G8wuk;MaOdk_W2`li?*L z{v8_$idA%JnHU=Zbp`S@JiLg3b+CAb?fAY965+6aayz`dR`{~K%r0uak%B^axmI%3 zf|^?UD_!h_!CdF6&p=AKN%i;595{jDLwsJK_r+J9BX(T!0v`w^pbLLE1%?n9jYr-B zX*aU~0rVU~iTW{+oWG6DHpYX-qI5^HK3#2p_CSW20tJXtu*I(e3b0bD4bZqL?87<% zIGHZU->+sS8#f36aH`9)153$qwZ5?M`QlY4$G4qBpx%Oo`gGO}3Q4GI$J?JnzHYQSs z_isC4!+rgcN?Rq?s9|Y_dCJ5NuGaAO0GT9t)xA>0zqN-wN{VpLN zSw-^?wM8EfH892zZlgQG?!TMszwxtOIJ!pE7;NFP*~5guzful+SgcJ0PcF?Fq$X+d z(dJ9{Cj9(nFp10QIMwoUqD1;a2?;vrP$h`^&ExE7V#NRPSV4_)1;|!Cb#NkNb-`Q< zlrlVkO1ZP~YX;2_Agx;hYIIzv3IKNQ_?+)h;_I^k#QnJMZ>NWztnNZgUI;-3*r>2D zPyrH=6T1_XR3Xyu-QDKh4h zhPIwbO&7YN`jg)L+r2@a!*-DHe9ujD#{<MM{-qt~dTIn3L|jkK;m-Zwo4fEf4$DDm6h#i`3yw0iW%GeJKvmR4oOj3x!N z8K9CD!@%j#`|w|KxhpLQ#3Jk_O)#1@*6%>!cg&N*oDRe+ZujdxEnOgt!x|k-U_pq@ z{PsiEo5>#(*xqx3xvEbc5>WlLP^h#SCC9LpnXZdv(%V3#G9|;jnUPsr8ug`wGD(>t zbv0H~1G$gw$*3KX)j z#?CPUzk&+92i6AXL(;182@k4gzUzyzsUpm!UlQK}|7K0D=Wue)ZbDZ5f8Jk&IAi(7 zQ*Wt~TA4N}yciLeDw(m+7H13lKuon?SGdN`h&^rxmmuj=xFpRd_b&A7xl~KmVnk+Z z;g@Mej)=J41a5)_v>+L3JuzF$){*D)7iRWk3^%?TBcHFF_2m6?7Qc8lVqS_kMZ8Uk zbN7yvZKaOUj*-0Wz~8h#Vv+LM_)#->7;<_dvVUj*pKR5)do}9k^DWh5G{k13?&XM* z{hA-*TlNACVGlm}?;!HSG?y9ledBKOczl=w2XzzvH0We9O9XZthC%*Y(;dWreN5MC z%Z-ivkws_crm6F)=n=Vn zY&3JzNXV?0)7Z(HxaO&XPq6*gg+lRF%?b0_U~p%noVx2T&HyGClUjX@*0TnuKw^&V zV!3*5)?u6Z;21@gRv(-=Tvb7dgYAK}gZ7R}+nWshLqgn~r!EUUzal6f%Fq`L(ekJxsR#g#^o zrv9S1!0XBlncFqq@EJDpn|`ixHWB6phoIZ+3CosZf&;(ccB!!=0xsB9^a`Z;1qVtg zLP2mnp9;+{y>jAuA~agwqd_Io>@GNps+CN@*{jL&VFqtqRsX9Q0fW3ge`5PBL8--!V?;^d6pAq!Zo~MJl5hqT*Dn350na93V45tkBVE$xl82C*m^E`;mu5Z)7BEvY5L>P_qT-;JzZvy)%XrPt|>U5?AiYvQZT-$Br!Aahhbn#{&}jS5+>@i z{!}^&lnVb<5{*7F@ZI{qwHGFw@4N2JMO9>&5oTqeK@cjoX2O0ySY`)z|y%>eX zvY=E$BzKmFyhu&{f?lNW*?D4n?C`jVSJ-zi*dupu2T|xL`$Ac4;X;^{WBptkQ4)(l zb>4YjV(;^c9MXS&V<*J))z4Hs{RctTzbvx{CU?DQbMYGKpvXl^G*!MXA?ed?O#K z>>#f1S?N9&Lv7HTlM2b4-HauUm*44!O8N4MD30GbP4q4pbvo9dCv(tUa7JU}O)wDG0*Yi(0ect@V^M~*oPNOF$NqE>rguypAIZoj( zWaALXc}N;y3=DK9NvxOiZRby06GYWAjJa7gF1B140bTJBvr`Mj8n4_IYJ;+bA2nn%j+0ohv^rfl9- z%)0}e2olQ)FHr6LkW-Qg_$0{HC42OdiI_yFyDY<*li5$Q>F73>A_!8G`6CK=-WIg} z@-)l5KV+sAEBbJes4Llhpzlk$on|QC^A;UTW!t|TYcJWxl4A+SD3GHx(5>(VE(LI> zvE*KO*s4;%AgbA=urPQYm6jB1f)^r5zTzQAi`7zF+l*Vak0)f_9OzSoQ9UevD!->_13- z&k{IaX8k0YNw`A!@uc>N7_Q0S_xPUz)IzNTYVcR09?dS;GdV?D^kX(Cr;3V4`L$Zk z_XBLtV~s`6BVK%GZPm&6(Um62BZ;Z7AIrvwvcBx9?VfFQo#IF68sz2UGpEN3<@h0Y&lm6l4pZ7E@x(syM$B~ zb5b3%dDvZL$oR?>eR-|;{OIc!BQfR}_Tx`!oHhLDH}PoyV9IBreAi8fks6IyeZG{q z;nIV_{1&ZgK8hIwBkZH*|5+Y;rj~TLz9p{gK?Xw_Npl0u!z`7aAu&EBDzV1Jg(_cE zuoPl$8qCId12JTbQ)CVLe#9M8r_GOPRv*GlNSe8{yb_(IUowIlD|ujb|3t!6GF zFvy0u?ZP7aTG4|?yGz$RqqhD}#CBs4vgo@XtcL|^6)5Xn>bh}ppQI-(;(mSCi)*K& zG1FixI=UH6N_Jf<%$<`;{DjG&Pi?IPpG(z=W83!sG4|F`S#9nAF5TT7(jC%BDj+3D zNq2WhBhpBR2vSmlba!`3Nq38c(hYLv+TZW*efK$Mj5E$N_(S*D>hnBnuDRx%_w~8% zfO2viHOcE$jOLHuDwPPp_#lz1r`;8E-fUKK8}VBu1H}1 z&LIyQ>zZ|4JW0CNctGd*0v+hKc^!5!>$>2w6Y;!FmZ3CW8-F&PnqDTTKzvJL#1gMo=d6D|N&M|rgZah_j(a8Ge#bqVEQDyO|m@=TkgMc>R&s9xNr z>W#Z+i_luvX-Iea1>~^8n+kekg1Feu zhxt84C$RYPrKa4+3vx7=vo+X7hGjIlhS5@VwOU)N9OC)S^ zfeULeE{ou+o74l@h2-5%+LCq z*(XO}P}~XijSLanwAC|Mv}B%IoWE(Kf@k;I=+-q2pT6+Od%6^?u{A*vGyp0ccZmwL z#v~$sXeG|r$~n#exiika=9e$8cmk!bnET;9!0X&d zPQ6&}c6r(I3?_WWLO;?Uk;OVo<7gQNrhJTf?w4!GM7kI$&-LVG-XZA2a;blyx9}3< z4DM(S%inPKqL>`X{SLDkEyTtG%yidYsBznf$Y*^r(xE4g)Wxsm?hG$;WYkl}4AvGp)xfPGNE?-a~Z)ZF0wQhQ8vplQwrwH%nK>Hr1YyKdPE ze_N`TTE|t}QOY!j(ad_BNlpY}A445UU>c}Ny769}kI~Cz@Ul-yx7XljxS6{)eQtUo z7M!1kQ&Oq_675nJT7v%X9o1bQM)0IE3~WN06A-O*jd9sR11go6NOV(IB6pfTzsIHc zCKf~G3E#$3fOs0aSkqqtkRJslslAz`a8~M{IJ@;0=G@2cgqJ@?=i`2^II>kc*Lqfz zkqu)lNm)me>I4n1p=V`NdvlE%Y9~H+j zdZy?m3kT-0u1dV`zjS5m1y*k&6xlS1JaX!jmifm#l$4{R*LJy_SzuXhUZx~fc~|QW z8uT6$(fXq7wHW)@N0~MVFP+<@0@adRs#!&LQ?dS9vR&M~jB*A)iP;1nCVNV#dtQrs1ffOL@Jh&V_qnX6xm`le`Y6Qu9^IqxvPnuOGcetrKvbQiYZ)FFZAV@9-Z_JY%Hhy|j9>3=>cxRCQm6MQS^Z^tOG z5%-QYr5E=NBs7PMb#ualqi!T*90)l~0-skTJTZIO5huu!vKX=1c#qeCjS!Lo+b%WR z3@^Or(~F?<(OGkvH*8%~r9Dktc6}`u;aul~Y!}StoTYlq zz9;Nc=b!q9e`8+-ZgF(08T>+%n*XrDaM+2m+VUfPx~X7kmZh1>>%htvHX`khli)8h zGYrhJWw_)&nFf7#+π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 c6{p7 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 z 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 pgR%G}Ohitk^$JTI(&D~m) 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 *vf(h@611~oNJ3W(dCFtjUS0KK{|b1+t(+iX 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 P$R;hR@UcwXAmIN2KO@-M literal 0 HcmV?d00001 diff --git a/docs_versioned_docs/version-ros2humble/ros/installation/img/jetpack_detect_board.png b/docs_versioned_docs/version-ros2humble/ros/installation/img/jetpack_detect_board.png new file mode 100644 index 0000000000000000000000000000000000000000..d249207067a1cfd1cd92c9438943491343f687c0 GIT binary patch literal 392127 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 z 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¬WO(+%{@L7Dovb!L!Uk4&J1ORc7 zQ6mCq9jftg&S+c-jk;LR+0+F$)9a@+?Hs1<5#`TUsTSX}8%}b!CszDwu?-O3_wM<^IwZ|^yumJS$nn1!T zXuX>AmY6Al^7q%QwW1G*DFa1T=OztKr1CB|1EUe~+?P7l3OFSO*%zR=h%SARC4W)OH5O2}3ykH=5}pL+6CYM}vbIJ_s%O&O8CL2F(_6!qLq= z#3i2Xoy-(eNezE=up$rM;}|hDB(3|1u{|!e;7kXmVJY|B#0}B`zcNv~?gbpy!kjuJ zA1y@0Ttg+h|4P-|@yE|Gr~pFsEUC(G51*MSFh@({&QySd$Pv0fehBEH!YCs5kJ(WDozdGP`SGW-yifAL& zoBv%irBzRmCC~xy$$@bCv}~L)x4Q(M%eiB&z5{uk8`^s5{?mbFb2l!;N}<}ekhEh| z=*y_%o12>~X1Y?*(wm7b(EHm+eQLD*mOvShuX!}+=lvQs!NH`FNh++M38>VUeg5gW z=gSAkeYl(w3yvQf`r^eOGAJU568ah+))l&-WCIrD4a;k(@y5j#QLE%3Rb=@GjtX?% z2_~ztQJipha4{lp=VH{`IjG6*SEbC($+FNV^1b;dy#eTX_`HwQN}ljr4@|VO`dGUd z!)fLp**Be7sqrQl$GT$&wtF#=IqcU@*i*2q2O6cZ!gIUciK236B7Rk~G+oUQ?w(f5 zsz#hUCYn64iH;dk)4utohp=rq6(r<_5+bhj$29_@5^u|}ubQb@EoHo=wp623Rc4OD zQq0mCTPZ2e@f76>I)x*}XSht7m$||sQ3RCus_+l>;LY7sDOU}BP2-ZwOSPB6cE&mH zzwcPAvO!yYjPPApZp^!t!%C|xG_uM)yKyV2u@swGg)>4T`I+=E=hlk4f1_Sd)J&Fy z=lYI$e%7}f4){4!cBW(sw4{`#e3y5~utLxmOt#|6rbNE`*y$@#<%qK$W11j;U+m8( zk#fK9FQ?xqSMMBHy9WBw32} z5|L_gU`Z!6F-`9<_23*CYamq5%ZztO)P0h_Xlb2<8+~93$J-=E%lDl zfeT@6ebuSs;SfzB18nL2NbIb2?ew;Xny+ua@LU=0^rMTK^Sal<=#C7vT8ikLt|%sH zLKO3z%HP9gJoLTZ0$KRifU3NQcq_A(f{~m%fU4k;MD{FeWbWgMrF}7188(uJ8sW%2 zcWb4MmFUk$IDlpSS-+MRa!lQcLFn$CDe=TL!?c);1#g|_N9vOH;*<9(B@Q-)1hR5V z$}L5(fZKb2J7KY^c|zd*_w~hjZ`vE<8epYGP!yVLo4uypg2)TRUNTS%q2p{0APary zZ#bvjj%uH20_-R`QdMD5m=VVxPv4FN9u4)@BO8n`^g;z(A#JHtU=|}$M72WVU#`sa ze`+>6`9(3gS6!|OBN{Gj1POJd5GU8l@gY#lq&H>3WkV)Qo#pSi3tB!AVd zXRmx5YFq!kq8nWCoz>s?*6HD4E+g?B=HU6~_p=zTMlSR9g+!lNgkY&5TNxpdDE#?f zO|yJD5R&lRwq_fQN`l+po+u@;Pm|P!G?%631cG)C_%(wHj-V&ok2sqjeT2O-qLn{p z4*qrrLBY;0e2f{}Z!x<6j@S9L@caGku#&$XaTNWh1e}+X^>4Y$VLL}St>`YKERxHI zM&Fn$M|QO1$yZ6G>lwlhE2g)=QOGtgi;Sa4X!yQ%B3~$Q*S~&XwJa!osmf&()wjm_ zVD;eGM!pB?g2l}2$As!KtlU#cqLb_}yW&snIQg(8ljXs1hc9*!LdAR+P0gw) zt>}zIU2{Bg#l_?S`FfdO%viT%xBSP}o1*z^e=H3U9K^j@#Txl0J5ylzlh4N2Ag<7l z8lvHJsVt{8A1D+r=M0p_&AOKmtod^Zv_M0>NeH`MjG4$}dw~5q>sX1ig}SiJU1<6M zcl`W>3MJ|(PR9HQc{;FUMo8i{s}hM7@=ps}IFp;a%FXofB&x$s^!}uhh_^ZIa)D-b zgQ#FQj5`Hf37BQ7$<|K7uPySuq=j9jzBxxx;Y+5Z;bFM8Tm0fP=@guL;3&Xv_L29k5T(#CAOF)@UE$ffe}82ZcdZQ-Q`T~ztUw5Dppv*(`G z174k+%ZtBwVOB!meVOQl-9>W??(9BagVRGCjBZ#dQ6{vU6{12j?0cB0k-!XakKd0e z(XYkk$&;@z-E9ZI!fpG?WgDW-i_{SEWt?m|**aeFfMkHcobWWT+fRGSi zN5XxOJ!I4S#~K@!xC+hm@U?E$4Ci;yv)0uEQ?eJ+y7y3lz_7ogUXg!^GNGN-S@?AKB z=TtjF#T_KKr*XMR!rM@R+~FqxyM?OC;pNb$4-%c~WWH*7JL}mAhnSNU(S!qTkbVM?MrLw12UI{#Jy_SF-ykfSy-ShoNI`;n#wYq~5r_6^0PN@onRlQ?lsnQ#J5KP2YK%|cRU>yKs%f^J zKbCQKqe0SRUt}-H8as-H+VL>kTdAd!iB+m?)E_xRXQWZ!?}rBsc!_(_5%r zjSCTU!_y|3iyKAQ7|cKUXh8sus>V@d4x9@w{00D$Ly#H*@7=b(;VE}t3X$^>pTCrF zz^(XDXbf7ySuw+w|1@m=Og@a%W*z2-R3L2Eyv|rHmwP|xCdsKW z9h(pc0v9w;rw$X2@Fxk?aKE#4r_Q&0c>nT`CrPbdw#JP1+N*L!mn+wT%!eM z{c2%e@3|PxoSElAB)kZgEW8OfJFVrjN|Js=gbU`}jrv0}N*T zkUQYOPJ$F1gVAMC3{!AQ%4}yL5pFC+_iJq{R$p5b>S@S3 z$n%G9HN4?Bx8veunKc=6(Yu*6?_}xI`Q3#$QABHLH9jUubjl5lwNRVcUEa3f8IIIs zm$5R~*}rpCCGz$Y5vm6`65LPs$||PvOuqN)NTh)+XEw?f`qzy(`F1jht<$sa%z-(d z-Wo9yT%fxQvF|WLHFl}TjWMi|kGNRy-4m(L90XRgf&2@(8!AoJx%OPLM6V}F<9msh z_G9sL(W)kJJQVG##=xxy_Dubv=Ah!&h)z)g%XKziowQgG+IMIx&ZK2*vD?RIHwncD zj_n-a^5}?6f|tPBJ;&4u|SzK5SEZt36k-NJs+OL-6yo zM$ySr?L+wosT&JRTWrZ>x=|_OE+$E(2U8WflcDh$PO%ep;He?-J#kd-xj4~_atyZ( z63BU8qG%*z79W7$pLJ|RZ9);KyTw?5HGa)@IQt3flgy;;v;WQMHDCF|^zD%1lb@AN$5N`DsYpWdKN0ylFjGEQbcSu+cC0zv`N_`j%CCpsaoRQfD8T7_P+Bs}mB zxvGqYua=1X&{gWSmY?tCglz%oi7H4GnOHAZ7gtuwZC5jTQ<@*G{JLVr5aJnZvR@Ji zTupXv5yD2b4t(i%*oPOF|DyaPGy_6g@H#n;IE=fPq zJO%5#M*b=(A#oZO`9@KHjYzRq05pVjIEz=F5v9s3pD+b_@3UR^r^F%gyQOt#Im(aZokKb-oDU`IqKi3 zDwO_V4O^Ps1}jwsO!IEgiZeQuATHCQ-dafL)Z@$A5ZbAcO-VY63ZP~KC*TicjC8{2 zz4TPjyx{K}ywas@Q1(VhT%2M>9UmX3WoYn|lUGz^xrmY2nbKh}|Ml@Lq{lre`ekm% zrsvrfw}EH8v^4YQFZJT8_l}1uuxolmTT32ck$oSQxWFZstFkUV>(isD#8DVZgWxL8 z)SgP?3FqLV38zW9%6!8$s?CQ!)#qO#Zcg4tXt)@gCD)18;B=XV`%x}>VmpDp^R2R2 z8*j&ewbz8h59J!0Zb@fC{Cge42fjux{r}biY(iFU=E*Uh9nxfTmy$Y?3OvuaGDy3J z+csVA=%b(!UYZk0YJB!%G}pb7rWDaGZ+W<#uiv?7haR7B4(QwD0jn%x=QFD|x43`i zjqRvexEAR?Befu!RH)fLv$xqxe7S@n370+)nd{tI#-hE`O0KHIOU=w?Hr^5;ZgUop z91u@RE5X%a4tZ*_So04po4^ImQ{3HgUYB zq-PetaH`GoO>fYi^x%znEnW7$R`)n)la29ji7N@Osq1zP8-?MEtZfDtSqKHOVB2c5XxUj>;fsn?$mh^$v}JVsY=yzMm-*G(@+z^9 zFU0xIRe8(EJ||h<*7ramGA6ymi{mSV{5?Z!BmJl?mJuCT-Z%p!Odh2ax>(Q1&@%ub$dMC-j$?zK0vPzdS)V3vvwZQ4W}t@3lIbGU-2=akPvq&%flxs@Qc7E#V`u z%~LNkt2qDEiM_1*-PdDBrJ7QBa={?z;P8c5eTn_91%cFKCyK-GR3Qp*JGFD7F~ZXhYUqDMu#0D{le?037G7@OG(TG; z*s}Ob18#+5nLW$9B75yM$^+w%yOzbPmwhQxLH5avaYo-<&R_cE(X&*CS;YaANxac@X>|b=WYK50RiOxH+ zSy6gp6On=EM|MX5<($~R(q2K0bSCG|Nv=nRf16Jjc?zfr4P#cBdn|vJ( zVRXnYs=D@CeMzKh1}u0u1(7jqnZVJv(`c=q40`62YIWKv@yzHmXvsOeHEKgJ^uB${&r0nAmvvR99Az0gG;N zI`>9-oqb^Qc^@4r!%cVpq2~JH;^op|?8y!A$r7i9TJe*bQ$qAnv_>!+VRRVjmKo ztGlA1-;MD}-C*B8u>A~I#IMffNxRNJm51^>O6$X;U}%wovW3f3r5O1WSLaB3VQ3BJ zrT}BL1(%PB&by;HTLLNJ&L(k7MJQV>`xKY)1z%rKy!nY_Gh`CV!b@ops4r-3(Z? z{!_E~cJ-eqgY2VH2QK#utcut3wOIiV*(uDST4}t6V}ex>8pO~8d$i9&q|r~r2dtYK zHjV(9k($}d6n8j8sffZictmNfN8*-hvW`HilPuVku!keYZS_)!7{``HCYH5fBi87w zR8iP8=;iE89vQkv!pB>;@2kpVqU;GGHmf@?67`Sqd3Pe)d6LF0)3Z*Yj+eLy)EKKY z>3*%}mM>?VnBuUSBd`DLA}l1azDLLWWJ?LSc8BLsliCVLnf7Xc0K~@GaO~olAu($fwB4AC(}h_wY86VQ7sNEdM}PcfMUSSA z7Nz*awdqWk|9JcJa7^jlEC_jsa+*yLF-^&AW`VIT+L70sr&fRKo$Z&t_Lz?ES>`XD zM0C-kPqYH&P7gPrsVZjz(FMG%rH?ZoBtG9CZIS}eklKs^7I00y>EWm1ll7AM1)!FN zUQXD5yYoKW!qF)7|9n$w=gO0;zV+xnn@vc*-QLwAXsuGC`Cio)Aw%mDnnmpaA@O%K z@>As=>_upP&J7})u|#NF-(AbBe-h3N<-odaY#P$qP>otVm@zDIJiO~Sm{SI+rU_fS zb#^s1WsR@$I(6ZGkQG^#dUE$5?a1<&rm&RnWgb5d$vx7JP3k%y1{{|*t&nYPC zCv`grx-2xYjk~sgV+7)%udCC z5etjX0GnCgF}K?Ow#6gD1*IBQlTg+TYS;{1zI~*|dSB(sgJ7^@SW3sfp~51!-{C++ zEQHb{-@h3@aL1GfvRX@0rP<7JxXe|lB?%o3!e!=0Bg5?q(YlM7-`iqQK)aoA#q*Eu zl2FO6ZJH|IyT%#GklOM)<{H~k_qfc#QYF{k6B@C5CPw!RhIC8nF|@V5mi;g$`NNOL zow!;*=$BPROEPfvA|ghexEEo0jvbniNcrJ@4k?Voyr37h1b}o-!%I$? zV5qm(6b+Y+6`J%$!LP2|I%XiGFf>WJh`8xKz1}F@LP(IDpz?Qt7gVS>ZHmiWI30vo zH3qZzxP$F|rOqyq(WR0k5D^COQm-az)fR=_cJ}seQg}KaN9v6Bx>8GR1Y~5A1=m%n zb^V>rnBx|OR4c)EZN2OmY(1>HG-@5PpzWINxcjrHe^#6liZ!!i<%;q4l{@tOEO=Wu z`xO3bs2u|LiBnPvG5*$-G%GudbB-{kbCSbPl)GQzioIZ{Ou^mHVTh!mO*bymTN5Ip z`YduYcV9Vq(2V!DCmjiTk~Uk>GqkZZ;iRsN6`!rclJunOztmqDi_=KP7^&~x(}1{^ z4Wx)rn+AM+cd3n9+md4&Ghek+er9X26%#(F4x4*r!akB3Fyf2vGkG$f)zzo4V*O@Z2WPieUaUvoUxf*`-&f* zS1vxzUJ-m7YO)yZYw-^VG&-S$ny>v0U#jR-S*hd*oy!x7dea?Sdg@wk13QA(W+k_7 zJ$YRqRm(!QSpKG*du8o+ZwF0UYev30byjHm?eX5IRA16$G{0+dJxe55oYpwwiCHCOD<%~aQWG*H|+@-Ae%$ftHU8g& zz{1jeQ)1{s`@#z!t1U}bU?^}EtMTSA8=4?9G}dj%hKO4j!ByL^5r0_9z>Me=Tvy#v z0z-e4*ZrD^XXy5zDcL?~y^56$O8wrz3)@a!oO_?J2KtCwbJtYGmLZzjv*~N%*;|Nx zG$xH@RwmW@m0r*J-Gw|A1&jel&k)o?<1OOpgqH1;NIT89xbE`9?tMxc6OSbejserb z{DC?=s{u~d7^*I+EYH6;0N86r;+MObw;&z(4p~0ocdOJMkNc8wWx-3*hRRyoCHW-- z_Z*v-?u_R-KcBIe9h+4)(4j8=A5&KW6~)%a4MJL^TR=oGaQTu4D{~Ij) zxP(C{=41O+YZ?8w6tBJ4CL_#}AztDqcdR?)A%Kn0@*Pn=za|8%{$>Vltadf>Iy3_y z72G_dfFhT$G}A6&05EI%M~(m5F(;8-RP?onq*0!esw1o4Kl+>Y8(Zv3Yafljt<;H= zTTym2mNYatGF!>nqIAJoc5gyBt|IBl2MBYdA(Qm!+Y@G7zS2PYTL0gkJ=JvT= z2s%GHsHPi@ncKpP${^P^s3jL+m$|V&Y5o%4gnkF_!-UlPHIHx~W94+0Q&?!;up57X ztcW=>trGp2r&hbHb%)L~LLTAq?A6lJXzg?ssByP8dzUIcxIK^WEn5SRxcK9J@w{#^ zi1Dh6Cg!Ak^T$-KG}XAEb#WG4#=mncR+#wg=#=PCT{Z2aY;759CG{OT;{{}VG4W|u zdP0hSS&3FuV^67QWzHV8++rf%!ieW?OtIKhzEj(EIBh<(NeM-g^LnSrO^X5a_o9fP z?t#nw2#v`T#1PMoGW|t3QDnpy&5`a4 zsmvwOs%G}4r!yl+{|*Mn@)aF%<~NO{x-|bI#J_fn9&7Ig3lmz`UaQr%LoqUsq61C3 z>MS@i{K-M|OQhW1W%=7#(1iH2T0B9j~+Tw0_z zIkXwevAC;mOss`9Oj}k^vD!aCuWw8L9<608N$NMHH}v^W1@GXEy(`%YP`J)J4oB+e zWo@>^AIJ(VKju@7EfP}0IviFp-zT2g%6B$CNA`1^?!}MV?P8r=xKWGT zQ4YKcpdu@@52+2yUZ{51ps!!RU525Qb!^jgrnhimxp+KPgO*eJth}}?ll7yi(k9f| zXYv2a&W~M2qAr_YS)t8qwL!kPCpswlLH8SFhTlR$ul?P!4~D%we))7J-Qt_s7=r`H zIs4Q1LMuS?)pRNrA@>EI4Y0sD$n=62CvI~r^Of;$riuLVYyD7E6j{Z0b{ zhIa(Fb`4~tS5F#61NEE&oE{3T`3mQ+4$*u&D0rWBeN5*ye!obxIm#Td*}|8zP3EiX zNXu{Fy=%*-;IL`GN{n;nw2D3Ly1+e`(EJiMl4C5FgCm_+Lh`ys&h3xvI{PP6e8hT( zjOfP}Qt^<+`2F<#Wqp13Nm?%pnOF$Gds}73lzY_1URz+t#%{5ro4~5Xmlw?+;-#O#)=WZTBg(8< z6Nu>0nazEro{{Bs6%$+cKel~{Z+T!i_qOy3ty+*)oQlSasPobF5qhhc@n{pp8gW%^orL} zWZL`^P88iy8C7jhbi8S3yRjzM8Vih}#BtWYX1c1K;&`Excu?_X_9fRar9E7?u2oFN ztFaEN%E%Cz^g8xd53kOGG)eaT(ROf`U5^WNtGVk3wz`&=DIu_!&Trcn87w8R;F0Zb z`I@LOZe8kttzIGUZb`^|=;gPv>T|*zVl8?s72g>#hX(pF?WBEo@xUDIM&fWyto`bT zb3fs^)!p@Nyt|F=huX3$lp?(IPi)5z$gj)Q{Kjj3#xzT8nY|p`tom%=G%VAr&>1h# z+xm?*^V@9yqyp@qhmYbfpRt|YaT}W~XsaHKuwo`PjkIORub50)d9ILI>Sg(hU@c$Y zA5y^R&@05ICk}eO!JV@dkQ>pan z9QTspOxk+mppV4q2J2M8Y!hSS!YoCHq*7lkM?ZC zVHV8j=a$^sr z^MHOEf<9T*yT{l*_h$vau@yylkfSwbugXXhkugu+$J6~7Nn$v9cD`f3bQaMp5ecwIHmGQUrW{A*aGY|!QPk4h1R z+^#DwKs%X#b6wSk1iQd6?bQx+4sKJ{MzlA?`RFS!nzlvUpO(_R`tV%C%#gU0a}!DS zH^XN?9ZA0J(iV~i7Ek6aezNht=MBhq+PfY}nl96nn=vd7z98{Wl~M8l@S*UgDY{yh z6RB6IiB&L)S78AZ*=NYw+c;X}y5@UHTJ!ZjV!>~_7oj^& zTV8AD7^8Y$n(Vs^NlTvxsc8`!Fo9h|`1AV1ms2#D=sXShq!~c5O-;421UPA_7I#ZP$7Zhu--mt3Cm#hoAYpbv~DkR2$qYbJ;rR zq4+sO(U|NT<(BSk5&6f*knYbRc?8EiTL#|Mf}eVxdCwe2kat#$DohdZK}nV7_N-zb ztM%FdEh`weG18*Nj>-^_FH&u*pZWOrI!s=!{Pq9hz7WMwwHW2$U+|xQ@@FQ9e)L+H zm8c`z*~hM&0J(ImX(U7epj=J&x`f@6HFe$_Hk>ZiN8!P4zQHAUuGaR4jp*nizrW`S zF^zMyokX9+(N^HfcX>h7swD6W~zsu%r z9VrW!#Nt#+F9S&)71jmQEuvG!73$# zWGle5LScP{kj7Po+lEFvs+@(lUyU;@$W~{F=IrR`;!RZUmxm+Y`ps<*?u4?I>b5Sn zPQ@b)SlpGaipt~%rMHOzadB~8Sy$^xe$C-raUqvCO|1qXBFad=G>t`}`Q z>xcl5ICDJ&(64Jw-V}c=(&akRc2u^quVUD1UN88fq#(YbFQ+jx5@tY>>`1eroFr@nCGI(%zev{}JDJ{2dJuV-pYDSpX%3yU3VU_y4 zL6_}#ZtQ^rq~F_q9yh6zwt9y$A5$M+3uHgcp#$l`i&3q(EkUmFYFrN^=n)zfG&#t@)Za*8FaWOUS*#LNM{HEcR#Dh5`N_xAQq zG?c7bOh`(C!?W(v4X)QnZ|#G$=8B>CtP-HthBcsVoxCnSKGt%Gd3Y<=^3v z)%lMap8thn$)njaJriT+j#ejH38ku>QiIk^n%l#$shOECgPR=KLASSlis}4sdDB?E zZzI`3eSFJ4ofq(JSi7x+X&pc~LVg}XXyTWW#I8vM?c?SJ7Y?6* zS8=_BT} zGVp@W0fO?as_IKL1>cu`Qx2EsDw8TvF)^3KAy#&FW=oB3rqx9_N!o7FRaL{EY2)6f)QY8MoMZ39iare0c&b&C&1uHtJIpB8V+~2s89VE0~2P*qaSos22YRn?jgs>@k*d$ zb9K(2TXfOT9-_!SP8%Y38^NeS1S-j*=0qk16FdKtWk?w2^$K--biI z^hf{8{DOjv*c~N#`HD&-dYhS&)sYOr?;lj&O!f>4~Ppk~?(WtS`PE2%Qu{XED{Ok* z^XYQG&HZJd4T4wxjLerSTVWUC*+~!QWX#WpHhmul7IK^Ar1}>$gaB1VrLHqx8wSNhWuYuUDf#e z;$5IT*-QD!jopOe8t%FZqfRvY#rpP*jql~Bof(22>AmJ7u07v9bu=2nVyFar5?OWl z9arv6PfsIf9U2yPv1f2Mu$WHK<1k+plBDnb>6dh(GFM(*Uiz%U=Bq7UyZ(HP)E1y4 z@r_&JX)NBg7h6felA-uUAOG|MWNqu+v&(L#t>7`wR*vuL%7YY4`?MEr439o-y_ey@ zhGDOcw4%SZKHn`QZ^T}dhQfVR) z(mFXgsj8}4C=u3YZIlovCLV<107e1Gt)X`NMEQhM+M*hrYd`b6noI?a04oV%=N&Yl zl8Bq=Wc{2@VRu>E_T$S3UvfS|$(p6}()@+E3;2KNccxlPPT&StPPs&MK6c z9bg_vNltbwVw+7YKRsZVONtvdM;=(2$dikTja5-maZ!T4C03GqGqZ`EIcplt;!xv&8)@iUfsE(Xyqy{Ig5BteX1O^z zf&Lds{zoAVhCq`;b@0f@h;~aNY;iTi1G1W+p>H&t$`fbe?(Tm1Uu= zKjF{5F)~sh+#gt6nGZEWO^F;&ZTAOWpUcF!cWAl-_?5ZB-Vdr?+b* zhhc7xT(UpR=e7Hzps=K*Mr0sOmQzGz1m=fm>T^K~;l;_MlGkboiRX5PhuBr? zT#@GxkkgS5&w$fn#5GQ$ib#^xfH1`^hWZ>BcE-2c2ENZ9?{$#(Z~rWi2L0^uYHVt;AeSdD_Xp@=`rfUc3TdKEzoE4sJdg04~*R@C#-eN`I$1dT& zJnYe3`NojUy3=r!)scv+`Kh)ensPQ9#6)acl9iNXtJz1=@ZAGAhDWK~#y>U}*XstZ z^4Ddr+TXOnC)$sQ{bWUcF4_$X4Ywz?@(*7=$=r1nFt7Gn>}=+%S{D}#^d;YzUX(dLGe-47~nPAL^eb4bruyj!I&)bPhG)qa5I&H}U!5Drn!X<2HGwicswW0Gm+3=EB zpP5kJdvf(03hZ9s>QXCfT4l43*#B|q<}b50(g9HLcT6weaLcz|U>E>>CLIm5&rI1s zP=M@?5Cjc8XXj1-AvxVdhgB6fUD{Y^?6GQXBNbrDd)jol@+?j{p%`@}q7ZV5R-YLi zw;dYeBF?uRyP`Hp=ZR2cnELWS>As^O+Znqqc0u~Q|3?ZDsg_5|e8eQq%Yc7LzcuJe;-QWE zHnv1RgqSqQ@k(zm{TdY9Zo3+CKayRGn5Xy4GEe4h^AS9JA#p=?#;JQj{@IJ8mV!U- zZ+Q6Ez7y5AOmhjFow(HTr?EI0RI@aE?G1UVu;)ZXvVuf?b41NYb}ySg=DP_GJJr^eP1(PqB#jU4uwte^jGKPhh+cjpoQ9_u?Fb_Gw|`?>5cDK)wLTKO zzCn{(sa)d!ByPz$vZnaZK%k;N%>uu%qm*i>Pe%*$UqFoOiJBT1GCxT_2`O@+Xts-zFK>L+6?OB(F~xdV>fQ~NW=HkFTsiAIXOPR`1UUlZ-|z3`G0>dz9B+@ z>y4u{7?|u>wc$1svt+XKZ5sZ5`)r^V=`gEMMYZrd)`m$`Oc)FNgKru%E!65*}U#DF9q_ z^=$cn>LMROD!g3w8U(O=EI-hiLy3 zo_2G#e7)>rj^phVb*0g~M;-@;<_%{xt)VQj<3kVyO zd=1aCc3!T(LT9RVbhZ^@XcKbol3t4yaM)=zz7qT#^0^OF8|uBuX6|>yd(}wyWEkaI zxM7`y1Wrvb+r;N@pDjl&Ic^QUh_r0|C_HN{3SJ|Qg|`xWxLtaD`WNg>onf00;dV^E ztBOKZ`XX4_wu90=+mL>b@>F%Kf=^$2xM>r<&GD9L95l1<3hDj?Ow(*!`u`w6xby>t zcK=GIX+lLuqArL%AAgc&G74HpQMA|{U%<~?R5{lkvE!qv(_SXMGn6x3f7=<^(o5{` z1Wf+K4?`59Leixq9n--1v=P2O{4dyQNSBTa{>ZB-5huJ9XN@b>v7SPU*5V^UezN*w z8#dz?YoUU><;+!%P{4~tB|)Y!-Jvg#XV=pWs|H)7Bcd58AstI78b@jm(=MC>vECO+ z1pO0sAzLB<`J!zc$8HUoru4jvry;Z#i5QWZdd0lhbdjvhbJ`pr91S>ygde_Y;|kAW zuW~8L1Cp4_l{a10->(tYcN2qG)%Ip;N61XeKYI=v*|x44QE#e-OCQH}9*-m16)$+5@scwTsHgXJ}Pwd#N)1Y=oIvf_H@ZDTAYo z*VT4;|GjK?j+l-OpkliWp9#g4L@iAewTTWPEAj&8mKvSQG0FqH_VrNmt|Z(#ZUx!X z*BUa+aQ*{jvL?u64?V3_qw=qeno4lMBTKsv5W!RdCM9jp`Rk+c{c8KN^f3$x?=Wf5%x|J{449l`rkgx9*Q`=i|sH9Bf2ca3F}C-1_;J2{$ZoNzUujYLh%>?rv7lUhDQ z;XlgUNLVAWtb)J?jPr#~xUL4w*yk>WFpCHPM#f`$tYqUZp^^K;< zJXTpL%U?!9snCdJypyr!Tl^(s{*^jIp>%U!mbYXcE zXEHftMEX))mPY^YNY*Mk7SjXu;;z)|8)tA8hEZT1bs_Jj>Y?HI7SA)j3Fdq%Uzoe) zemg~p?O=Rxol|tetaHDdif)wg1cXqR#QuM4DIFc+^V);BtE3kG)GMJru!$g{GuwD< zSm6wYJ&{9w(d;8g(hYYJK)efhU22uc_ZLvADiUgSNuokii?{PVX*0|_qAwR4)r0_D&8#tG+x_ydmngjn*b}u=xqMD+H_Sc zWRe4ZAF1#JGAv+5+LolD>|@c|@(P%8tfwfy%Mi%bA^PyJM*h(!iDzifN+03scQn0E z?O3`{{n(FRDCzHI14T)1y<=U1^i)=%!rzcJjNe{aYg-p)o&Ov$_zCdlCY&?yn&HFD};Rn$0Q6C#T|1%4Gtzm5X1P)eJxzJ5Qe>;E4Al{|tRM~}1xu?5?IzM2-s^PHV--&Z(?%I!I6 zp;@OwPg(woi?})n@Z_+}A+QHM+b^Ezr=ng6h~4m~kf}wf_2Q*Mg%#gdjbRu$00A`{ z%@nS@>h0~_+1pzmO5wVPtmhmb53&nhDItqF1_oKM^j;eObUSeEeaDMqGl>74ufEqN z5wHE?qc<8FBo?EYteyvhN$f7jFSi?O{cpGZ&5a3Xj~>1RLKR@^UJh@3HrICG{kap4eZK{Pt(h92!%v~8GqF8)8-J}& ztfa_-#?H^5FFc2kX=<8Dg z3Ooek>CoEGYxCcr*B_G9I}I0YWTXMLxqT1}rm(h$c%2X$t$@QZuf6jo;74s27p_r} zE0&M!V>qEdhKGk0>#-b>i8k@|sHnW6+qH+Ogkh zz^RYk()HHS^4*oc2lXtHZkK!IlZ&>c`?bDT?ntx;kWdUG@yakkqL;xjtrG{hINt11 zt4?A!*h*@>&Vyg~GiJGp&Bw&xrlzGe_*^)*a}Ep+W_U%%#=^nNw~78Yv;J;dx3^a? z!GyNIL#^^=wQg%F!#x8T3R6>5bm$2lqB7THP*y%z>eUZ&5UuW5?8pBpVuad=NA>a3 zpyL&qt3P(^?QF=XjgL<{0iz;6QO)M&CX#N>x7S|wOO2Z+4F^AeuAJ;leryfoofEAi zr18Jz1lQWRbZo}N#N;4NCp1v)wJrJ(lHAC}-POqXS!6O4TU*=(_zG!e(Pk*dXOOM0 z{UAsuPfuC)WRUd`86KtC-PZ8mrPcY_HiWBxT|lgOw?&Uek2_SeZ)npPTU`lPRG9=t zw&>^-N+&6+qt*2SUSDbPb;cE_j=8UJpf8jb9k{xuN9sZMK1}<4WJJ`dB%mdml{7^X zScIma775@TZ_wMR-v4evCJ6XKU?G*lpa5RI>xrvnsXGAlDY_hWaVkdlfW&G(e8C5RsW^gu3-v>i|534I;GEH^@FSahgVez1=G~ z;hdH>vd2H@c}Lc$c={?1)pBFS20g|1&Q4LGeqHUrJ7v~A_6S13NEUNrY-YLW^zo)i z=Z9i}OhL6gPWskHzkN^D%*~X8a9co2TKWy26yWt~|I3mjUeVSWt$d5>H>unz*y*>y zWtkXN+|Gv<>=XUmTo*^l6zh9sv9Gy=((WdJm3L!)0(-M!0t(*l=>d~^>HB2Wpx&ah z!(AJImY{HuVArgxuXE2`%X|Niv-Kk$(HBVJhe zvIm{s_=d-NF(3N*-C7)^U!6)t+52W@xt<-VcU@gbA+hHFh4u8r=^g>LAS{e5ebAzS z^m3O_Zz=b}4(==31nVZVxU=iI8aX7{w&ZJzQ`rUVE3<(;g`L?!?-h9(eTKy*9 zNpw`yH&{<9)~VJLRAV>~i9J^{sCBGQdn2)q>#iEp9V}}_ju09RxV-OOQ0+REbiXbo zrPOQ`uB761{m?rIp}pK66X6%rdcpX->a*4BzQHgA=V4kr_U!&@U%R(=Y)ikE4I{dN z&`|qP-GyaEW(Ho~jvtI~CYk6!==AvQ8LsB4tN@oBOv=I8xxVH~2ki8*Q?Tb;#p68k z)g*ZMkRGs8vU}z;Og=x4OCn1CT+U=A>b0b(=s+d(+9sha8@|GI{ga~^uFO7OsVm%6 zmrvHz@@a{REEHftA6v9=ggv@Xy1wqQZ0PtLYlley?=IW|HwNDG$%x5as1q)jf4&jx zFeaLT`idJW&=Hq}dwithKK9k@q}n6>BCojic!*hQj^~)y;`zsY{-w+crb*||8Znfn z`?EBh(pcyQ0^+9)cwT$;M2>mI3$G7{;6m|!VTk=%hy2*sW&VIuv%WFU6^YE(93$nT zyQBW>`Bq@yC$Nc&>%RSJb$q93?}+0*&R&vWG`jw};n_Qg$Yy?iiuWj1oFad$D=Q$D z((t5IEZZyH)F8ggywM9bD{M+~ZeC)!*gi6c$hl`Kkh#)NWdcP6^vc6thn`6^X9<2o zbcQ2bR&G9*S(@Czr94ADUK4YI7TCT-Pr z^(iU>4XzsaHc*S*-g$|j)PlLbb5-nxy$81M&H}D_u61|_*O4A^o!Q~pI%}TryYy$- zWu*-b^B6%bvm(EE@sO8~Z*qJbUz@NjS-zKg!D8gl9g(bZ!z1V&Vd9YAzs08tq}k}d zu~YrbFid!($M};xy|SoO-`>K9u!!lK?SVF_@Nk%3&=k!r<5@I~3)ACCyReIbmRw3< zTq%8f6Wfy1T5nRQfUL&lOFvL&*-GiRn>PHjI*m5l#FR=Sd)^ri&l9B+O|Ja)w#a>l zA5Y^$cOn^I`&p+egk>2i>99^yZcX=S<$Eg~w`(ai7}s0@kR|k{RTL1wCdb5dB9!^;jH(Kj&j#FC7uMd!!rJ^Ifl*7NC=oE-RVX zkw1TM`;+P3y(i-`;%`;Ono_6^OoDx<%nfVY_^9}l;4|~e+W-NNbC`GK9P$f75V$w`H7j28o4l@wPux{WC zpc426XqCKs)8)%C^uZQV?1c3gUkmQ~ztzFLjq*Kt zyZ4-_w{`7i-FJ%G^NTMl(ainoT%WTenahIgoP&E(XAX3ol*lKG%q#KFbG_xA?8sz9 zOj;$(a0w#cv7vaz5r?x3JF4`({$3qc7lY6?$c;d1{}1#9%L4tXy>D?3e)MXCT|(Q- z@Lux>VX2P$9m-IHRdMPZxOfC)8-vSJ7zPh53XB{A5H8CE*$9{3VQPrNq2I^|_Jmti z>}=+ug0F{07vkyx$fJtjB=b6L+d?8WbtHV&+M1cYRdv+DA-zvyUAtVA5wbONA~)^4M;@?HaQ1oDp!?RzQ1I zT9aRXJP)85FAmoJ$3uszL{c9r#%Lap?eev6`8saJsuzdqDe3sSE8VsGH&d;-XH|5p zxVfos+IuCa;rQGJ6Fqk5i`CF)X=aM6Q+Vg)^_q%`$`)KZJm32H44c=1$B{Eu_$(P- zkL;&8J9FP|sC(jx^y?YWo2O3`hGL>a#ParSMH~wky5k-axzYgQGj~{aQuT!HuJPR| zg(W?R3(FXmPI>*w(@~jz`dpgfItUMBjp&=+t!7MRAs>%VwouFaYG$b$JLCP5^mIyY z^UXN7*3$zBE|CtN%QsLg0wOdhPFz$g(mR-8hP{AZVwYom!U_?2jg#V@>3#YX09f9b z`jo4?1ZNsm&D=OBb1V;X^`*CwYHHBBc{D#xyXR+twzGpiakIDxmL}>{p3ipkQxm+( zTzn_ds%EBTkYVI*K0xxwqQJgmLH5-OC^Lmz070`#%XZvO`Xi@^?Ee{0$Y5O{Pu z`cr^MQ%E;uXEnEsSYM<$Ydlx)9P48>wuiy9n<+(dB{xpl)LJUmD1<8m-gT8pl%m=P z1Dw_PSFTWdF1g`aD@WXOf)B~L~ z!^KkRl7+^gh=6!(#n{dnyZr;-PA_(mJzsY7+A0Tx zoygTG;KYJfZ&K01%#~$f?h&j7j@DWIzVg)T%nY{PqJT41uQHe^o=}7xGRpl;53q&2Q3xv&x@6gQ&%I^v(24 zsVSP`D@|ZzlE?6b+lifI^_yuneV?6stPbghK6|v8g{Q4-qVw7VHko{ronih~s|j-m z7j`qLX4v-31Z31CS6JzhyJE-XJ;679*rAgJ^Q7zXQW_>GwUiNrm6!gT9ROLDo00KU=LIGAmWtY`m}t zPaDOM43IZrRq2JSMfYX>_T3P%5_q2NMP01rRUKef^p!L={;L3@MX2w6G*I9t9|l<0 zBkWDVr?%dt)Sh$RLcE62CK`!ITf6Xj-?zQ!Oi#X@7YBlhv?7_=&CTf+S-y!23k%}w z^EYmGv7)#9$dBhnB{Hr?zKL~aqSQ_`+I=#uymm;@6}h}S_N<3{sk7}s`EnmrFvKw? zIEmg+QNyORDx+lunOiBsu%ok- zde3BD9%=`OO=nuwVp3dJuZm#&{_pd$f>#> zZrCW8%BUzO7!@H1dz;YUh{--^sg`$)&ZpUxd67*1=J?BM<>}VQr-D5xc%r$ddGz~a zueU-ALs$l8O+y1R3yX}dTF$e#TjmHn*>PP)5c)!c8k0hgWG(XfDOCl# zQ+)lJceC8zEtmqpt5?Ig&h9H1xUTBszP!UDia&)#BpcmCfzw3${n23%8J z<<8y6&OmGo$p@nCj7ao;8VbV1o3loj{QA8_VYZ~J#b)PzihRJHW_7NUObVmr5ye+G zEmIClUGj(~d6iMHj7hu%NVp%yAswk<6KNURFJ;YOwmz@VMLN&nz{bR%dC(Rn_XdN=eT-n;dnJAVM; zZlTAw*Xg<;gMT!J=Z9`w?l*3TIIwSSuIpX&EA+HfukZEWpUttPCH`@VGUEFZ9Og zL7iw~Mw`706MAQ`3rWVN8oGy(e`@H~$6c8Tu5@8QqLSzhp`pPy()4~vOse6*T6bi$ zE3WA6xe3?~X}rL5TgcFeg@wgcxAub*I=oI_{x}1bO{YOSFjunW;;T$Sgf1TX;fC0W z?ep|mR~$na!|_3;qe0VW3yT^W2RfPKMbh|5qd71w{D98<>BpwAty5F3w)0cYMvZl! z*I8f^6y}7YWPLs~aP%=LlzMI{Tb3^yQ9xGPYIZv^OQ_9M`@vE`9r$Kf6jgHhpi>h9 zU0JYo?&sgx5k2;MF;)Q%p#ygvlt@JhR%51N2a`s}B>N=9P1D#Ul^p>vO~5U67jM&y8(V*@s^PVQbC-reM0r%d^=A| zkCuxB?4FH#>X4`JWn9W3L&tK9O<8sgl0k2JXBROFL`5?*jbGKwRE_M6zB|2bb{e|1 zy>Qf!MF*3We>>pz*QkH}z3k&KAq6b@$;tkjDB>$nJg>Hs7SXqVeuQ1~yvOo3Ymj!6 z^WJ{aDB}P5PG|D#V>haL>J3&~{meP#bNPdH^?4 zpYTb8bBaKe+%|2Xke0zE|E~UIdiiK_7Eu9y=V5+PX@9Sji|NGx{Fu!lfrPe4tKM%F zMB^OU8(eXl1f}ORo{}liJc0&>z31)-fnK&YVdz%O&9fOlG%pW>kN~Zk+MI34LZx2M z9`ol{WzxZ1c7mpx z#5{7mRCl=4nteSqzZGUNir5iY-vFPUy!P@DRAV7FNRF@d^0l!JasXXyy(wFC4_LP4 zmHV*~CFFCqKaVwL;lIP&U2^}W5ly^|CE@*jS8H;8EEhSPOQB3FC1Z9!Ob(BNhV z)bx3|b>g`&$#}8KkZ#cphA!(Dg&xOOXeCeNJX7jW8c;mR&kHVj_N-|0A%NWM7#FlprM1Me2v0}pl) zFUiXfb69?So8ZHwD5Qg`gl9hM)pL8zX%c-?WV&upk<1K#=HPs~fQ|nUyYt%@19OoS zbooF6J`A(1^J9qy{lS-OcgHR!C7UjQ_$l+RHW0H3DRUpk)h5>rQNB!?IYPdq3#MAX zr^!oHlsV;}-JSJ#r!ClkZ%3zTOQvt)`R&-38GF=nXqIw{YY#@^d5DQKPS7`}e4zvk z$L%Z{IMxWGj4%U+exO|ya$@gl&C4GjEt_-B+NW&|yRi73e(pCwhI9H1i8aaRhs5-?H~@xM{iyreDe2y1flGSs$7!|+ zv0TSBdLen5(w7bMWugwctEq_b@tgU>C$}ra?LB@Bwd%%p;CZJj7h%1D(ztCfF(0+? zT^WB)**#1ftNr%-&e1X~c2!|Zxm)gP`V41dgI(y=QB#asfR*br(tF)cpnY!k^?I&k z09)2>&C)w_st?qtUjOu*Z73XLt+a|x_m4DhqS!MtR3Oqv{oK$Ry))b_AiF+KfC=S@ z0w>RSo&q;dyCIHAEE{NgOH zdhYHh;2r!XdKg=iTbmB?Mb;l0%pj<@7=DU?s?pYcc zQw*Zp@w~>tc#)#1N0um{^o{BGlGOe>SGfm((-sm*7fV76`3!pT|4g!TBHtCL!{VrTc-u!=5zxIlf_y1OP|2M&j!Cr%w a_o}{ZQ`|(swHp)}fWXt$&t;ucLK6V(@m^eeUah-s^qt>-jzZ-Q&XEYp?ZPYkj``yY@utXem>Y(~+M$caBn3 z<+0wmbC>+ioxAwQua|)q`WL29;NJ(hfr*!%wJ(di2h;)VYR}^3?{3dx?+11`cg_zF z(J{Mr@y@S@yVSB5_Jb_5ZslQ3rkGJJQ(kXw}V z@^i7fA<+^#S2qpBW#62mQsVQzDJ>8at)4||)Uj~iDu$`XeVW4XZerkVUA8qw?;wpl zshHQf&qlJ_>mHOP5oy;rzrHmoA**Ux%?kXs%s4)6otqf{jo~Y^0{;8{{Sl}=%^|v{Iwlm6X}8RvML{RsKd0)Px1fI3jdl?k z98UJ>)7BST_tyi0D;^d+5o+W7jq|me$w&H+!fDC<{#g>AdJ-Nz)snH+3H=yno?;O+ zYwj^NApAi|Ojw(Nm(bw0nIc+kzH(ZRCTTZwm zsrRhM>i&gw$8AmjCv!J%nRqT@yc z(fFFoN)Qk`KQJI(CYl;jwonM4wH?&Pp3e{B4#?fPb29RN?$)+0_FgPD_KsjT*}Lma zt#?_#cCvSkMKuL9-4*Pez$$PLdwsZ;fi2v{R?_aSyd1fVpAl9K!aLi|EPyg(0LPk%QrYd>B$Pu5csXEYw$ zd)j({-Mzq2H)+OP`sBxU{<#of_}_H@t@mGh z|Ir!frKu_P7;5W%x;)j#vUgACm$HM}g6*V!T-peU3W^FzNb=f<*+}w=2uO(W+DJ+Y z@!E?@3fqYb+u4ZNN&JJ9s+*^mwVSQ|DJg(B9~ht`DkvZ(E@~~tD=J_o$SdL?Xu~TZ zDJaYeI@wu! zSwFV+vImF?2#HDwh)D^F83>9<35iPyi0}%CND2I-KhzHF;Q#;E`&4;YWX@Qw0`>&v z_y5s!rcwI#u(P|fTUYQ8RbpZJp%hZqwr5-LwDz&L`>{@d*4ZOlCu=uHd%$}96xYAn z!T$?U5EK&@7Z#C_0Qe_p&nqHgBfu*uCM>`!E@5kLD=BCzW+x#0@6>IxpOS%R3ASy@WX$d41C4t8@RYP zP?@==P&W!05lX&3@{4+G8Z7_HP02q$iCyvdQzKUNj!gsyy?-Rb7bYmR@cVbK1v#FP z%{~zMfbZ>@8&lQM`puE`byu&-d5UXlDgm7d;={L68Abo-i2fznwXAA%1x?x@$d|6Q zcxUZDOkl3q4$5Hl_ML1rY%Mjz)XMD!w90$-iQ-Jo18Y6~G{%0ocXoB|+1leail5gO zQO{_9UN%yn=l^->b?<`Z&&wsfUz&ej4i^0C_mf<<`tKVT&YB;j-2Hs%?D84yn^_53 zyNu*TcjuoSKev0%CmFAlmQ|z*w|O%t8(VlMRWxt*C_>Wyp4gHtcD7iDtJvhe&sG1j z8Mi7EgB%?b19twu*VC+$z&13ZEsuEf=1uJ#sN6)xn>Ro1*;H>f2cGV8Z0mNmynBn1 z+f=@{0?+95jbe|L*BsZ@F#Q$>qLRGbRtWj;U&%-dnJdEFrRi_5-Q6GHuDg7z^jW2D zsvmrh--u}iJ@);YS`KN2l5Ph2ZIkx8~wYkCCc(N0kntsiY>DKTDZ(gIP7swaFtgg_!@e2Kh%A~g!1^+(TXiw-A z`QBy$Us5?RC|}<4B};;eaqO==0I`Uv-`>M6C>!yjZa@k*qdk z?M0W6t<@XP>g)LfTwb3j9kTUZI=&cFf@s}TiYcc=ttZyGeEp6zU>e<65`)lZ3^VRB zJ6-wXAiQp+|97i{y6J*|PHnY71(1BBA)!`vccMwVlMuZ)hYlc39pQ*nasgXkI#()3 z7pP*L=V!>g26kAbZtv682R#;VwMSg0TGd}=&loF_o@z29t{<0U#aC@Ta1q;?7JKX$ zLBYF$c)zdDZe}b~xej6xM6Z?jIAU$pEV&`JhtdqS+OL~YAJ}wFvuM$Y(4o^*H(ha* zxGZVWYXA6y0+}ex$vHE?;dy5oW9J6e4B5enJ=3QpAB@_Rb9Mm6&{%cYKdfnZ?{f1z z4QR;sk!?W7u(L%0=FfxL>4J-?Mx81?`}MJ32^HG=S%ZPBMATwe9`C!Ewnq8E2=QHF z)#~obP(#n%5BgGYr1FO}ELdBg2I@b_K}jr*%>*TzN#v*1x?(9^l1uL2OQ*w4F-lhl zUIq6$iuFzhJU${Cl?_mhj(93fkGCkqF-T+@Y4`6vEx^3VTgPrZu>y@t)+*l!H4~{n zX=x0;|H|NW&&a(FQIKx(`(;(e3DR4iSVrU5t5yNAPVF5ekZI;1Yu$9^Ma>BLsx7|B zwFvT>2`GH?8Cp^>H;pVsRWlwUQKinjr*b@@z0zhoJ=C@I(x_PSvqi-WrGixL;k_=xj5sEFO zi6Cw4d=sOo45UME$;JF3?E-zUjUW^rC~?ETSCDx-wPzb?Fk{!MzLKy=jveN~xh@U_ zh=VbeVX%?JBibNM;alU`c=GOmR-`tJxw0~em4FnSD2V8E8^)dwx^iX?y_yzY8vn&C z{pq0@TUK~)AHA3BfVHLu6V8C^UOMYUpJdS7pIUC9Ji~cq@8+Ffta@?KkqGh1!Lb(K z<)O&EQd$Mgweh^=p#|=#hmdA)0mshQ(KniDE-qB%x3R<`U*c>X<8b#N?z5)v${K=| zuJ!2mf{aT>POFW879LZ9Z9to3%G*Ot%BUGY%kwxF1CFzmYGa(8Y$DbgPhM(;2h!1v zmm+uyx{sER53n)LgqTvp;AAp!Ct}7rt}C*s8he=s>2@TzIuX>gmXW^Z_sMz<`Mo#7 z`$LaT;JAkxCQ+xduw&RndZJF?K|y#9?;8OdxKo~K}sDonm-917Yl zl%$3w6%cDNhiO%cvSsl%r)ql~-adanULMFd^(sx;hFd|-XQJM+65;vJ^ z7T%h-8evswCRRE4j%-a82iUy)R#hU77xx$y;(PS=a#5`Fdey$9)I1fSyYNuU)^crh zp$N>qPOjBcqjOPGmO^$4?Oo^WMXL9CYNz2SHu(`Mf99r;-a+RpV~Iln>zM8s`t9U+ z>y`l1)}B;sWOpcjYj0A@%Oev>9KDwjU+H05%JDwXMVVxM@&^aU0n)**z(+fJfcd62 z^WfS=ac8rNsJdpi#PHCIjlo}EiMf_m!acs;nUqfsT2DDJcq3C-f~KMSn#eI6bUk&f zt_Z6xntoUqn?9CpSoU<;PGWZ}h0_y3FY92(vtNt zM(lgSJ+gL~ri#;Wh+;|~HA=%$dW^f-SY@bp6r&>9?lD{;xx_2iiWC;FXt5{(doXVvU-<6;_4ls#SP4{(_yeM$=9O zPPy*5Wa=sLw&7?Vi$uW(fO+vc3G2PPWB^cMK40tAshFtd`CBd1>S9+y&H9%rB4R)J zxA4vR9lc9KLh_XZwK} z=+?_{P7!Z4)U&!u2B-FzbzISO0=>Q|d1nvi1|E6hvyX(^mATzs!&Ozu!arABG?kbf z|JX0RJ(ZDgC`Spwmm-)a%DbhRhWzv`&AJ&~ELh}UzTYr^Ke^WldNWZru%6b1SJVL8 zOkZ2I*u9M~lg~yRLfSI1;hm^)m@DxK0n}eu0plKU(`SQ3lT2vTW^EvOuNH!1DS#e<`aV;=6eAVc|hneZI3f`5~V zkc{&^A%~3b-_(?Q8n=@*m%{V|?Y4Fsv?{h=bWV2QSzY;jsC`DdjA z-ifuxH1$baRcO}576+eLG`6H>QcmP+KZUPei1S@rj2O{RT{A00Kg}s?)d)PoENZ(r zH|BQBGUJqYQ0jIO)t(Z&T$iy>4Az@-yUk*ErOT%2)*t$G(}52X>BXG;o{412SI*>f zXm5j8KLa=FvJ0B8nwV1O*QV~j32udn!G=cIU?PPwNujpu`qCBTDj0EHT~_{Rp==G zxg412h^%OwSl5lKU8%_$D+-VwEkvCj2?8I>A$(X9hNaH`3#vW5x!*s=bq^jhbz}`8 zyain}{W70IhH@J*L)rkLsB~D|{5+_|I!&&=O4+t)$G5yTU2gkNABH7d7xs6=_9DH8 zQM)wKlzF0A??%%u^2+;RwNbj@2SlZ*Tp9|w&;FV6um@yC;Yje-ipZQ{R=AQF7{d2i zRz|GCUOakfAN}=N4-d+^_s@!Tv!z=-pc=P=!j2v9YrbURA^^Y6tIp^A4r%fZH8R>= z+yy(0yfxA~d7xZ0yh>>)Urr?JP0(6tL&Feb5~XS3`@^Mk=p?*AqiX1lIPkjNY%Tvs zlOig)!f*ECE6Jo#QzsDi^9FAtto@IUYy5?OU~r#%Xi`&OzpjHDUnGh)?xCcbXV1$b zXRR46giD9KmnqzBzPx^)L&6J;8WYyqR$}NZ1q-^n!Kyc;+&5lfUFn8azNYU7mWc{g z8_mpIOyxJrT=&ynYcgIB90208UF^w3%{rNs=f?R-rTVkf#ocoM;J}-NG3H;=4h}xK zM1U5#8<%P~iwO(sQ~1-)9&-D|$(J6iXJHrO(@0hE=SgJGxgE8Z$3DJh+Mla{2V8Eo zg6?ftmEn`JJr-VRX)$4^R(GAIznicA`Y2`{{vcotZDv;Y)N$W_vygku<8tMYNt zavq@VK&~zvY&)hs($r=inURfK?gISM#xual=KBP1{+^@^9V(JHOMZV(Gd55^B95}O zNb2K7>Fo#8y!fZnj-sVH)_!VSX;MgHXC= zwST~!T+MB7*h)z>o9698h95}s@@4{Y`y_$6o8yjI;fybIC^a-uN<^}xynm(H$YrL}|d+WiDz$I+{UoxY53T9>|GVEUO&-t6?Y@XxIK?9Kmb zF)P?I#lpw5b7jK0>ol%i-doJF8m$EqICEQnu$6{FBdLZkw_dMF#dJlI@l46udOyM# zB>Uf|(y^&}XeDO0jLKMIDY|ikT}G752O&(7?&dj9d97M?T|_D}Zv4@d@<$Hu{-=x& z&NvurIuNn1O;+CPzy5<(TW_w}BSL$2$nFK6%86{=H0Wq54LAa`@v(kqZ6Zgxvq)0% zY|?XlT>nUcul@8-KpK7H@1*oUOOk~W?ic-?i&N43@8{HfivQ=yx_|o5Wc{4q@^%Xd zzO}B>Zn^w9rJyJ-{h;=*tloXdl;p5niUGge`LvrKdSaR?+vop|XL0{9tgc|1KM=K@ zQkU_M?z;ZOV&o1ZDa*LUwDFj6xPmI*ntwyh=F^_+bkcTby3!ex=2wkcOhNLgK_{cQ z{5)GQ4Rn2ec))^Rmh_t1SVG&+U-p2tn<9TPh%IpI_vKGpi)dcfZV$CHu-pZ2?Y-Jg z#SGUStL5iHWmg3PH%8R&lYQF-Q#LwzOy~%cq)Y1Nj4=0Yo$S$AaJczIoWCeHE8Xxt_~ld?@u1HgXgsK zapfiQa@#!1K~q7UU+Ru_q=y$PrrJoOl>Y+i^}g!9HztkPOWp!DtTdp4H;wZjHg3np zsmLGjvsJR}wTny~iSMe)*Co4r*89Nbat1}c6T`j--9klRgcoK7$@rnvd)ap2Y3l(& z_&fVDqOS0U=h2as8kw)U>fIyl_4uIWjA8m?)b;?`0F>D(SY`j9^`(QQ#K|{Hm^WSH zK&D$@`CyunxmDDSX&U$lv3eZ?u3TE7zp)tdS8athChvrc@z8^A1HHcjR}U}AQaPC) z;qRBLJP=)uS%0;kqRyZGGV{=Exm%VZ_&7+0+Xieig;Sc7PB^j1X@K3s@iF|(nMr~+w41Z&!&suD5)`TA%6rAiBg4eTZ z<&JlDi|!oanALVY@0pSow!asM{Bp9XJP>GxbUH(^O)+mU?Q%A@malSWvE^k&pgO*$ zcCi{MHO8+deh3{VPB*??+^u}6w5DAaJD^pN)PS30Y1y((&>-%o9BJ&6zMtUgWv&%4 z%iJ5!hwWinUxgP77Zn({DB-`~DXGtgWmxUCc#V(75#nG+kY!k=zZ@dO@_1_)dIZBW z+3*cK)lQXVJ$g^br=OnwK1NtqQP8sG>m#2!MESL27VCJqf0oJIb?d)4FEj3{1R7&g zWVZsBqj0M2nMmmBP_Vfl%1%dvlRmAN)cPjqh!9Yq-vQXBBmRUEfNxvX`eK8BH<k;01m3b$x<#sX$3W;(g z%pPYgxnseJZ9Z%qkp)!3W_p>E66(J-EcU$akCP3)e*~W|EnJis9N7We7AaH=VTrpF=-EyM5KV#j^uOfd~6efGpz$_X&&0m=KMs?Uz z-qqrSOuO&^1V|bG(Le&NN-QTLz!#)=*dM@u*s$7SE_I;43|&i>+ig{g*j1~@s)d^r z7ok(b8?Vo-g(+S7YXO$1(wzw91qXWpG?h&P2Z5W=k?bw;_4wGhA_NWGDydfI zdr{@5lfw@I1y;?f@DEDh`LyAn=63esZ|iE>@|ecsui$0oW4(RMv^J+Q{qdw%!))P= z@}s)erZ!Hj%E?0F@VtED<(?YHVRzGn%s@CS4ZczaZi?9BF5;&#Hs|GSd6arfx^?xp zpEY8DG2NB?t}W12bCZ+Fu>F4ANYo^8I=)s#;vmFpNnU+A$klp4-dkh;OUAHS5I?2X ztQ!8tE?|7@2=a@Olf!THhw;;|E?e@nTTAVY&sx1gpIGs4M52aMPE6oL#PC3~9AYA4 zziRtqN`4lD#o@xQzWTTpUWn-(Ubio;J{pVaKYheG_na1Q1JFV2_QAODuwxK$qE3C3@$wRv`rBcyh-XssP{ePU%1$o&SbIel5!h`d2w2|1a~srfa|7xy4UfeGLa>O(Y6vM8|Ohd3xGZ! z4u#UzKPcCvR;1ah;>SrO#79S)ib+vl*zW#C)jubMw*DDIr(u;r zvK3cP_oJ!%%SnCj&C}ST@>Fz9bZ;3^EB{`1=WLn%SI+bERZ!q1$jP6}@DGkJ3-c>X zo8_@^mFjSJlVon&+9ern8m)_!nGez{M{(!8cjushpRMazSf1iVzF3O!UBk6y!-gW` zu@S<QNYg z>hIfUk?E7?zxoYf$lDX(0V%~3BV{%vT(~V7Bkrj8I^gbdR$EK_OL0{jcHQESq~Vw1 znttqw*iDDM3IocgjNPJWb6n!$9{C3V;QI*rv#km6U$FF|v5l6QHm))-T2EkKSvI{p zuv;Bervzhgad1#d>WQ{PFm!f-loR?MO{LrwKt;_0@bthKfkk@UsjSlDofl0gj~86t zt(fhF$?iRTIPTycgxivn_|fc0k0KS(&0G@A zHhW95ql>p;GxUMAiLOBjSL}zB`pI8@3e|G|z0ckZ#uba*pnIx!$Jy@qy}z{Bm>Kfu zVVI4oY)cDwQqSho)~Owqlo%rg%=oxzn6;v+jSDVckaWSscGwv&G8ZUVIsRDnI#1N2 zy$T+p1ZifW+Oiu9-^3QlAiYfl3mjQK{+7}bm>z+oieg>T3XEJhfMH+SXqyRV#HMxg{aqO(u(@d06lA5CKt$XAn z;*7&Y!|K}9^ulgu5Q*3YI>^0LfPr-C-p9SD(P?D5x0q+2b~HNJnB&u05Zus_H2Z4q z;33{tf}BSA_uVs|wz0bnormghl>+k7^A%8~WUKpKR2SM|e6i}#ebPVr5Jq$-L_4w=qyKt#=CBQ z*hdr0N#p@dQbk-479Pk>YlG$ zBwJaw;FkYY#M4Jfm%1m?d=Je(ur=3EahR`j-~?v~kD3+0QPC88nj1gV(E%i}!Q3dv zq^E-2$|D-z-pKn9p&2?VG7&Q(PMd4e;7|uC^>Z=n19ZUwwq7Wn+;Lj1F}Ci9Ny@LeFO|TG_|p?MWS;!+=YiZG>Q* z51r{^`C9K2@o5Xq%YL$XZQgTx=v*#6lQ*hn1|}hAZuXh_yO4`hdJW}(uFTh0}E5=h%!G6iu0D_Vb-F4+skpqdAER3Ud~O$NMqFdXJ07=*4@nwuaooE>Gjh;Gch1hBy^jW<$XuH|c?3NL?hq-p&8}bw4&qtw2Ewp2PeKgz4TC!0?xyaxAQo&8-D(M^c(QZB6P1MJO8h21v73(wi_gO z?$S>^Kw+gqpUOY&H2`zxt%g`0`CsRh+1quCi}iFFBK~Nx;G=|EB=yLyEHCSp6d6Cv zVHqIVrE=abOG1?H6h1@wykoqc%QgJzlZH_hk0Ok2V?k_6sCGqkV!s|isZe^k7#ugX z1tGkg;?cs#iIdMuXuqtMq1WNvxKfD!)^x8Jqy5N+Ip7$`JerXMFu?F!ElDT) zvGn?}PqzVC&SO_UFyv05FTICAsij^hkkFD3aZ5)&s+oPPYucUzV`DW&&vxwwwuj|@ zQB$<0=8k;CuBtIcU@xU<2m-Xu#HgXpcs`S94{-DOIp}!sClS$+#ylhFL|<*9AtLf%_Q z$0|r0h{ILC+;o2717{!yf6niOpoj zgI5K04zO6ugG1XG!`f9-7n<-K?wTYdv?Bi_h+Q?|Qc7Qyqi5x0Y?Tv{WNKE1e{X%f zh`bHMmcCO_#b*LFwA-^HldPWF_i+qsV$2Ue2&EBH1%*127NvnmBIwq=t3ZsClOTZ& zOEdTx#qgtI&qJ$B0NWtfU^&YTei5DzIhVo)qqA&?jZTNx3@%(P3q^*7+C>94?-g6* z7cM=(LguLe{w0#t5|xrDNPhSr%tjaRP5}BeQSAN|DYc6)>3Hhtvr;V{V1Jv4EriD(%NY0h%g!PA-J{bcsXXh#yRz7H+OsVzTtJ@hy!6l zx$r|{AHBz1*Y}5@A$rBA+^F1_2dCdhI(IIcfc&Mof>>JQTM|{E*Rt-$%UfNon#;Dv z;9%|jRWky0I9jTJx$l<+a?y^1cwz5Y@v*vxI) zVRU0bwOT=f+I*&$&8flnz%;(Fp>OS-x>(FBVB|Uf0*H}(e2icW;+CGU^t1=%bW=Wb zW^}_woR0eH_AnO=)MpRZ0YxOm#}oZG4g^rNt!1-R%LKx7Ou2o9@6$R9C#5= zY~ZGj;@;gZEvf^Y?aM{~7)+t(FHH{54@}G1R7Iqv2|6ulmJ&v)>FXoSZ^=hHG8-vw zYXhnJnwTzw@@B?^pd7A&o7BoV@81sZXaYV2de?U1YeN--cu5AXeY6iB+bhkiuI>^s zL3Eny>J71+rlJm~0pj|EKcap*H{cpWe!w+$Fl5bkd6^lEj_PEK zq*00wxzAGGq3UVORJt?t4esXZ!kkgp;lQk=Ef2D^XHf2dod!iLIt-jqc{)izB2@h7 z(ietkn8E$zQQvX<71Qd+=yhDc2R<+QEt#pYoovm3=a)X2CbOxkuTQRszF|`pn@L@L zyV&1pNnsALb#fMUjQ4Om0kc;KF4vp;Z<-rhHYh*T1A+}hd!NFa+o#qWR->R*so&{6 z;vykUwdcR6G2&n9(1#J10ySM;)OJ{tD>3|)upe09^9JS<{qWW2)b$BKcE!P)@``a&l{=G9?vs-uhw4;Qk$MaK`H0teM??pOS8Jxvv zV|@7TLIO=U<;~3KBk(N?B=i;1qG_4HRl^cwI7vxKm0>=l(b#LGlTaN#Zt3U(-P5vZfZ@|{c=KX& zUZ;MGl|p|Rwdw8R%m|-OH~O`-Lkol8S+;9 zk}zMYMbBZ<`=~#;4XIggw%S5p2WhgV=~Vr&^_Ag+tFPO2m(qQQPs+HgGCVXclZdr{AC;ax zsK+>AZU#3+X4tAlkV4=YafAZj0$FA+uEnFDyigpaiLqBeAH2S7;8{YnkU z%ea$!Hf8u-(yVXF;ogAZeNtf|&R-o}M(Ms_@!t10(j%;k1+Ee*tSD7zYfE+_z42Wv z;DfP4TDum06pG_0^<$L%yo!hGehMtz%cCuXhn{P-l^*c5605WH?H*5ylGpj{@O93l znv$&LYctRzBa>GPZ*dEuQ`>m*yeObT!4RgF5Vrf^ES+l$o8et<)p(dwpS@iK(v++$ z4C&&!I^U4VFaTb@mwLk0I5ZKKznY0#TU_Z})*R`N9xl}#_%;vEbk);gPzFCp3PYo~ zKULVz`Dc>1=SKZ-CcxjrY<$Q&BqUT|nmD#$bDx__X18qsRK^u0A}lepJzKmp1<5qw<&R}$*Tm&Zc5dOmku2Nxs!bc6H4-j2MY1V-T-R?}V{jQEPScrk zuF|f;f#QX}P2xV$4zh~RDx3TxgXn}7!*;8#}`IZQ>y`m0Ha6a*Do4n=~I%Yy=Rkl zoSnS(0ZOObbW|!f^D0U6Iy>O?lqkqc`It@m4gYwdl>U)&SGkuU)*x;Pa#Ku0$0U4= z%$4|53g@9H+h6~DF}Twur2lvhw?WAOxSG7=_FU{%)0plh_mjcD{D?0U|m&dbTH?XMi-v`4Hi)K(`~5 zL(S)g3CP!PdKDh0#{<Ef5C>mpUlHP1>_G!T_UM=*+Ax4jv=kQhrYCp^7qpSnnh{tbjt$U+Zt3Oj8H6^0pi z`KBE%)SHYIuDg!3Ozz;qP$bjqNiJ_}5UI9Sw$ah+z1|k>uzaAJO0Hm<)&=^jY|vh8 zywOjyN!Kl5O3Ik!(sD)QVnGGLrfHYODewqG21O5Z;|d~Ht{>v+QaR~^sc*36?V3nx z%3wly@>RbWlOK$sTff@$xv8Q-9NH96AeEDIn*4H3zo1b}!rQt2(sJhRDMp5K?=Y9Y zE<{rR9`zP0dpxL6rACaxgN_sAJXX6x1%$Za&9SVWvAW>K)}43yXoot(inTg@H_R)w z-^FK!U!sTfAazebg*v@%S6$4YiJrgO#|$TPcKFWuRWy$oQ!APh!~c|~`Z3)TCUBdy zGCK9-Wi2ea90mT>m5#@??A_aC5dtW!9o$CjAq~et%=Ay3>Pke7UI#q$G$dio#6=$K zQzkwXh2|ARhC&EyDJvG{NY^!drKp79p4dH1+9;CJo6urBT=hlPW%Z@pLKo?2Lj~u+ z7En;h7j9-b+o|V9zDPR6SkWadZPJ0rp_-sBOV5h=$l<|IwA!zsFXf#078x`C*JThO@A~{Zn9=B}L%_FK+pZwUv#yB=ntKNao z7wRD0US8W*sOg4SSkA!9D|0nW8*Wmrt~Dpq2UcWYf(AsU zLOqXv+Wlv2B}UFJX@&Z!E(v)bIUp%To(NO+NXT?-jfJIc0T;P_V*OFSYm??Dn!_>t z(AdPlUN|Mh2x@AVx&yxHC-DGRGu~2Oz7q6%!3qa1v1zAyWw*h8b$d7gU*)^%sNhoX&hiSdbaA7)0K!o{)!=17|!x_Uxhn_yD(F^y4$GW$=#bcvqN8v$O z^jy>*W+98Q_sSqAd0zmu|$X4~Kc7wP-L9bMjx z4Vj$NyFk^O=9lL|9*3OfiuF$UyP17($l|&g!68#Ydhy5>c<<>jJW_WyO~oPh;O7Yo zqWKcS(4`Da&+S3jE$kD8I0>tojd0MjspbNq2-!p42eqpmIknPmPJ5<-W5_g?zJ5lQ zdGXcySRi3tJm97#-wd?MTdRJv=xGJ=U^F{i{ zk(Sh%L8T=V@r{A;6(+(6(N2=VhULLyUZ^$VLhSIjxw_F9Jf#r-=VIJ|ol6loA?(tCThtu%sc_}G((0cRw zC6aMI*U4N-HF^^*moZo#F29>z@vWeE-zs--$Ws}<{jr~kF)QH}LRcc`4f;Fti&Erm z^^HP(I1U?y4qm6($JXcL(y`L=bSsh5ts03r2KbHgDeuHG=+k1WMEyNSqwT^IFSRv= z@h!UAz2+%zm+}wHbc6A;F(>nZlVm};;u_bMpy(yoom0VX>wN+{p{q&I+(h|8jGX@T z(g3O!$*cV}M-t@oKmmC`eb&Nu)F*BW<@Va~6~?k{mC2WZwbPsC`}2@TEI{qhKa-&| zUa%1Igwp&f;NxxQB$QOKp3+An$Kk!ki-ZM-W=sH1%ab6`Hk)(DqOG)}yShWWZ^>#>ir2SXSzgMMi6C`zY5cjV zMI9fdFMElML|(A>?v=?0^#@VEYwt-lwr2N4si1bRJTe|&KsCDADLow7e@80v&afI3 zE?Ss!^Fk^s9|^;W>jn#vA?%2B>|k{+nxtd;tx=fn{#N4;G2&6}d{$?BVv$x^TUM!W zk&0S#H30=w&=J^>8c`0z@-X03BNu)r8zqEMC8Tzibi5UlU%~Tf@SPLmCF3609R+rM zd>q8PO4J9S;7;n@3}q?9dyjfNPUg$0HyPibheT`eEqMp>yJ*^g)+5DQ`Ag%(CRQ>W z$(Bl5Q_WSl!u80g`zRW=cnVSubYgj~Ay}Qku#kbPka!EGe zeM#NbrK&HXJCzIo>kWyHG#dLoj*T>e($k1O4l->J$ zz2)uNtME$gg~LDrzmaGWBWzs93p#nRGGaKZ<>~hW&-q=FtPJinR5o1a7nk=7n7@1|_eDYU?6 zUgeF&kxE4!x5KAX4TIZ`HgbP;*e=UDfUS1=mF9O&;fg>-m*la7WI^SI1r!agI#TvLa9Yb=|=BsbFoCSMUG_`I#8>G1OiZoD7yo`tl313I9( zPwJwh_vFj6Zy8{PrM!cSE!HE*=v>?r$IB~Pcd2VG~Bm9E8xKI;maMYx4C$4g;T@1 zE~Dw_lARK<7+H^+1It)e;~#}t71e}KBeVpusbWZwJd#l(B`rftFRm}}7r9{+^U`3b zFVnypaj1qzn`m4Ui6O^j4SlW%lJ)+MoT^@!=ufIE&&`RC3NNMT_oEBm5DHwaEZmOe zO)`GUUO8JIb7HY_IVl%iHOSOFe|vHxE2y-`#FVoTv|hT%w2G<8l0vvx>5s-UJ7Aic zQdSz=XJ~4ZSk+0Siv!EzwHa99-P*$a6sSaAFDIOYx_^j}nab;q*Kb_gw+x*9?MBQg zLTx!+(KL3>1x!H#ugbZsP;vosVH@w zIPv&J;hyiGnkfaM?;A)O-o_UFLvh#kxe-qvs`vZqCxv9vZ5h5<8KIpf7+Wz(MeQbS zcZiOFyv#wEj;hWAO96RRGDFW`qm!tl-o;l{%_ zILUl#R=)s5v%X99X-TR8)AYi2dxG|0`}=3leH8DoZ~`|b;_x=&cC5ih(KaDCQ~mWt zo=GpGmIydqS=5hApZ`Vp1w``8IxIdLtXHt#N>M{@nRbBQlE0e-QSK1K&f-^&>3t!I zk98S(eACOLj8Sv7`e|f|fv+aK8T`?l^1m7YXZ8m`9*)plGNSkG{q2e`3|wRC-`vfi zj1+63h3G+hU$Rw2!-lVnF(`|vQk(JMNTYa>0=hMyF=KsC+JN6DLWk~ICC2e#W)o}n z=Xn>WE4}u=Rde(fp}q-guHMpmMM|PdB8|==gTU_b1R11()i}F_FHzfjm1s-DrpS3A zFrc;a$woB1>9b5zY{1ZTT+uG?&@N8C(wnHh-*b$e)hzQ1E}g#hDsvo#6#d2W^9eaa zpnFMj@E3oJnok(NS|niMvNBeNQjUwkO&1-J-}FZs-R$F-vOfEAoSLKN2^m$2iYd*6 z{F}peD0oas48rKJ;EL|?`hJZE%?I!sDB;MklUliofiuDJ5PmWxmbD|6knVbyYkG^C z`og8KM~FH%MD^gDlHJNIJML1oJ8It{7NzFOHyUHhE`}H*nQK=p_IS(Q=4>hY!bK@$ zf$Mc6J`Fok4Epju0sSr0W>vY4f0)Llkc5rXa`6wIt(;gtj^H6p9^RE7ZmmCpi} z%L@p!fXx~J8JztHC@?S%jjGEQkM6HM&@8=S1uB$3(F+RBnR4H)0oAPeABDF*)_(fU zLsoRTG}r4<<-AL9Ddl>pSNCHV3qR{i!uzNJMq`Dq%*mv&_1$G{?1l<^_f`j}@nn0tmgWv5;wV9;yW+;W> zU*3hVl^w@$Zf8#9qVpgoygK6!UqqM)qoc?v@T1**XCear%QhJ0-vr3T9p&C z;Dw{~ZVo%lI7J*^CGAgkOr@dJp4id_oU8lPYM1n}3OK_5YU&-lOyfo!UTr#Gfr>0gji=pL^halD6+39)W8dBC=0F8V zM%`7-c?!gYYYe-h?#JITl+6;QvKYwD!Red+Z9IetUOJ5TsZm+Dqlkoo?n#tM z0TYk5o&n6@jfbe{GI2SSoiR{maQs?LE!A-oGZBZid|f;j)@fP5f9xN~;j^nb;If5% z<9S$LH?&)8RRU#jmRbmNtFaN0&d3aPjHMP0$}TQhrZ}PdrPmSZ{2|)%U_XkF`A@^H zYr#9O%0@abFa|g07hR+Fk~05f#ELln7`ektkRQrZulDZv>sQk^+M+Z z%i@RXre71yyLN|vjQ(ZrP-e6mnH9l}`RtXimBS7Zp`J6hFXtALZFV4vAE_9t>KZMo z+2928)u3ot-uEIzwVOqaj)}7v3PKEtkhnX4C?$M4XXsR~Iq$9nO12h%dOyRH$E_Y- zk3AW$0e73io5{sO`2L%f#|AdF9Ts=_#O6lhoIY1~#|g*4E>*n(}<_O&QyEhVdW$pK#%j3|!Aq6?L=%Fo@K! z;=ZA$lg{<5{t&nA^heG)C*)yB?f<@q*fpBU3C9Kn+_mH;0_1?mO}^}qHOy{{9m-c8 zR#S0Eg#*7}4O2JCKAO)kg4tEnRqxFW!9#yaYa=2ehKis-aFgRq#i>_6C?CM@-~9g= z`awvA!jv|OOS0nQKT}WyH5yBJU21dtMaCf5y~#M1!j_x8-V$?AcNfqLB?iQi*@)Gv z5wyO=a2_lCR&eL}3-mog?bVcTk>os8*krj`&B#4Gu|Lq#Di#vS!DH5(6l3y^-V-AA!^%we6j`p)qEGLic#0fU zep&~a26UymKaN&_W%eGF%?6Y)O}3smExs8q#(VNer_-VQ{;>q-R0YhT8WxzRRa7iw zNFR1Jzh1T?FRt-fguC(eBlz!RIA*JUH@lxSQzv_F0Q(|Q1VAE@ zRBp!(rQBt2#Z6pt1`sZ8))ZAQ1gG54dgz|`66I1@NJt1>1OP{g z0PM~R)Fe`+6QT9-{3n==B7?zVqwT4GmtB9lH|dmZyQ!qUSW~CD$0Bg2ceo?e<{O0PkS1S^tkKqAHN9HsT`iIsIJV5ZOm1=n#qpgL z{1X4(7`9exN2UyaML+aA1vB1z&LGz^ttmz^zo)8+d1#_J`bDU!x6;Mq;J1DM)s2Iq z$sADlLQrv*d}6?M?%hCpYpAKuo4s!~1(P1b76`PS}>K8B9mgTkE+vW#sc z4+iQoysw~XvS?^gy?LFV{F)3lr18pXntf!6V65HeeIdz%*{Qt7I%?K2#>iI5{uPKA zlBjUzJA&K<7RuS}(Mx^*1PD6BEYw~n(&p32$F~h3iR>RvR?_nqCjM$G?%&}1{`SMA z*Ycw>X$gN|%D)$4&d-(XTjgLcru-~F`6=`IXtwfvmUhK`<*p>Tt@VP2l*rq2f;s-v zAXbbE+Pc#fr)_&&X7i zpJ}x@eWONi@k0r@0}LmsvRS)ZH3s1q8|ncVzb9$WAAhSpUy4+Dqk-E0tn=bo-|}UH z2#5_+liE7$@tsJ5kf2#ZDGWA73e;`nnv}qP3xnuj>SXF*`B|DyZ^v@k0EV^RfA1U; z9AJrWavbWfv7eXN4*y=Be}AA5*rvw0eqs%mRcum!DDkE4W_{VsEtw(dn@3&*$j^PjuRmC1 zSoi+`yAS8zSs&zg;q{s*ap4rH-%AzTWKGnsyKd>63ikSyZ5W$JGrb%| z@L*9B3_3{WIHc+PYk2R0UqAfTZtGp9ktfZEx}TaWE5iL%0h;px8r|>_mC)F(&Gq{c z3m9DLx|}bZP_DlkwE(5>lvOE@Z-LUn?5yOy>_21}q!CABiB7NeDckJyl+T#b$fJ

*05m>AwO{~K3({NUJkyHF}6O$S>VPm?=~-x1>f0*?UhSPxHjS{C1P-ItvG za5}xk7_JAF`zs4Ku>$wd;4}fT1UcMra;rqfi^^4nI%yJ=RWz@iNE;mc4D@9@6UR78 zuy=OtfN0LA#(tA2m<9_1BT}Efy(cGpt$Ro9(J_&k{>7sikB$0oQGT^~eUwlTDk^!( z{(N}NPqGY>8>~A97_lyJalqW0RgucEW53-46C?u!NDOsgYE-=`g&YCKk?m$t52&=| z6h7?zOrq}RjRV_{;0&zG;Z2OPzoL-tF^&CmF#ABz#udIQ5)vz+GCUGNojynu(~f|R z`g%M`U?7*l9}gys`6rUuy$m-i_F|O$ZnxL2ry(2`$@9XFkRDG0*s=Ji9tV_Pjodfi zx}TLgKeQ!46u(PabU=EZ0jm%S_s=fcI565|ARVYv9V6>w>S*A7EBPRhm+0pOCE7XN zk!?b~l@a+MG*~%(SI&x68xD;<2P_=NMMn074}QmGbe!mv^8pXW;Ck!nYzf&5@a{j` z>sNgud+xRdvMz2K(eL)tws8zh3V;N6&Y*vhz@j)6YEKAMY`t$m4_=2K!lgQiH4qvs zDX(ioQcXf$ih)LR`}>7r)q*Iw-fh-^q|1rn+&l3hU5N6pssECx(AywqJ!koxMe}3| zWxRm-J(M;yxjI1(T%C*Yf)W-T6lQOsadKsvugB9JVkulL35Uhm6Y&2 z!l`7@u5oaNs6ccXl_He>uemK&uY=PfGQwf91My-^}`7tAG8m?M~qG6dU#t7Cm z;*ir86=|+-Dnc*8(94Ko^*Vq21TpcuUxi=-<4yo2>|38pu=^JF4c#E|?t?di($ zU2R?lctJPPtrRnyLXyA~kCDoNh`XWQWyUf2YW`Lwj5-P$7z%KPSvhN)w0gTc{iYJb z&YqryX4#FPgmJ2;e$-%oas}0 zj9A^)?&O!~{6Qq&x@VNCJ9Y)meVVGWs`(S68P2}0ED!_~15CE8WL$@5HMuZQ^*dpx zKJws@O`!uZLjgTr%EKPYe)lT0@p4FKFP{HO)c=b7l$J}uPINpX$+JQsIootbQ@5?2 zZfzTq-Q8WwSRRTND0~U7=vVkqp%T z3g>Qz>*<{BLyQQey*ZH0bEJS$Z`YMN^`M|s{Jiq0NgD}X@im< zz0E~6$_*h1Nxv0|3;!J_3I{-js#B?KC#piQ)l?YIq_r=R%^f-HDi8VtDIotbnVwoB zKYdG#QHjmhMN=ZAve#ZS@wW=m7}kkIg62D0z*hl}t`CjEP-vZ>UVKJ`#F-Z89=Jzu z9%)k+^NmDv$?4=ZXV4BvsgckX>DRnuiF~XMX={BpAl^6XfeH z0BdT9!iMpmNC-hvA$VSFFJS^(Bd*EXP|L*bYon-;lx)}&-;(Kl(i=s98yuWtEQ&WarM!w;74zJSwidL@Yw@FG2#$1KNX)X+qQC0DL-SyarqN@Z zkJEE&{*`MZ*qW5A#LY7{ZAjo~ejl#v!om24Pj~sF-yvRCOvc%u;H!Tqnn&zz4nFf> z3gY!U(NTQvHmGiJOM7kzllFLoQvN9|9#{?IstyF3vn=v{wsM@L;FnfEm`iNZge3NJ zKp{-tOcvZW&kQ^d)CiMP6ubL0vicj!&svJi?-f$d!&S=K5?0XEI4{P};!IW|>0fra ze#z(+vwh*hmg89fX5%iVB1^LFq6Pt`V~CoruaC`_n z|HwWsg73bBq^+h3vt74RKYa@1WWpST=Lb#yM3Qm;VgeT|x=h~BVf*#&(sMsJvRj)c z(Y)ic4Lhe?bLwpRZ`?1YFc(87|3L;POA1abu>)9beOg4u{@CzX&^zV>LI>2;4jb1p zb8^DulcAB>DjzU#)1Or*+zX3697KQ-`XX}ZgktCcq6;o&0!4Xq+N{Mp7lMJB-P2q7 z<_+*-rdWv5CWK%M?Kh zlLzZau&GKQC^R^V{ZZRT7jbOx48sM@w$=YMFn4zaVK?pU51abnK9yV`($o(}hZgm#!&>_aGYGIh9oX-DpJY<9T5M%OB%QksfeLJ%(s%^K-F zUwP}sS>$M3D&y0^0ZV=&0qi$dN)?F_I7#SCE+id#Mh-`*!a^h%iDXHGiNh<@Fba=v zM5{$8^`9*`BqTxz5a)8@PaGh4Q( zq6b|`_#m#q%;mt9@$DI2rT70nCQyrzs}^dC(HN4_++(W0R#4hOWgd#-BZb+!ibwFj z+jeXNJj^+oUb~rUI7a_O@PA%X^R!&`cztC34D0v(>0WY9F!h#hVYOn7L9OpDLKRDf z1XoCj>45GYG~!*TJZVgQB9@)X0Nf#hns}NoJ9oX?3ewWjgnZ->dJ}yK`yoj_NfF%b zIclvx%Z9x#ZFtYI1EJbMoY(*4yyO-vD$^mTN?eP>;h<)plO`LC151^kq6e;;Hx()m zDTJncr+(AA5869d<0vov*A}7*n?bgFuu1jXDp-<4xm-{rqfb}=B82}xNH|eVA7alS zyD=ze5S(IqPPuDtaj0})>h9lYrZ#~KXpp=Oq|JAx>X?+f&F?c<-0zDmA79Src!f-7`d z*73PY7EIqM3b9p5w6*(nXOj~#h{3;;xyc>$A)qmg)F*$Io!{mYWp24-!*<)r;}vU# z@$0rCcU?;I?Y2hxwi)?g5GKNltjsVq0+PC~(yi}~m_D$I$Qo%tSoK8K-( zl}P}bYW1ee1ms{(kB0GWyTAM=_;G;eSi9D$#j4k+kfeT&Wcu%;oV&Oyb{^Bj7bdB)5g(U;bW$d!M{;(}GKC1IK|Adtw1Kl(ZR=Gc^7%N^vp#rk04F zhqW1$?XHLhokXI`ec374Lay}c?TAF0xO#|$n8kT8ZB5~s{>p_eP|Tb@E?#}eUy)%` zLKYe_KSO-kH|*KQ8No?i)#$HDwC3|f{RE)^d6>$gvBkK9Z#s{1P)rLpaUM1S*lEAQ zX!PsqSlq3NAOR=YU6x-giO9q%lr~iDnB~U4D%PbhVk}rpNouIr`h$2?%H&P+Q{$x^ zwnCVEI)4j1J~D<>-h>?8V*iYqvz7(hEJAQ14G<{PF*Rgm=m&ZP(Ap6w1D)an#eo1B zEU(WcLtF^4!#cmz^XMruGbcl#g2)@2UL@B>&=CgtOXn~B+y7gVA$~APoGR5E)gh{; zNa+VQxld=G)0qV;w#7-61d*d+hEfa?h5#g7%@3xJ#>JL&cn^CFXNDz5EGsnN7ipA; zDNRZ#dYGZBtN*I^8wZHt(Hl4 zPet%0v2{*@cL^5et5+G*6lE4Z)lKk%&N0>ZF|ag4DJyPiJ0fQHXQ)B!Vd{}M6h5!1MkIu(-ok5wC|8Ph93&-Y8*&> z+xqiNJZOIU(Cy=)&V@c@Fc1a=0%>y#M14+C1N5?wHF6pHMX+MhuXKroxGD^sSxYmO z4ByQ1EVfDt2uZ**&M4;7XkoKNO*g-JmHf~k$KB-B9Lmg{nyjK?mSgg>2-Lso?NAiH zKv2xGsQgaWK3EnM!l82N(TXMd{X>IhB47Q&y>KH?d_n7f{{_S;>(zPtu*XFZ=PzhJ-p*b zsztxuGLI_1%s*9Mad2m3Wh`l)(v>svi~9K`r$q^Pds;4o=0IY7)Rksw{wc4Yr;T!h zP?8{cUtHGqv7N$C_vGi5CcXZFMNdy5h|x#6(ju-qRVuAB7^#u9gmnc>I;4+z=sWzA z2&l0fp>e<%JeJkXyJRG*E6FX*yhQm)$Nme)71Ur(eYn(b6r`~?<-|r z7!N+o>ZUmb^G8$c!d2Qrb{9RiY{t8&DB;AQCLgwK7NLe0-`a!0WS6ze+ZCqRDod!} zey40Uqk=i_&uC*Gn^#O z@%&U&eQ?r0aS{Z%i0Jl8{3lCeB)}qQCi~zHXQ;2d&tL8sIBa)oGDWqleXd>N(pgSQ zX{Q9R^NPfed}EMj&X)wj4QLFjlh&1IjgOJ2)ezMe*tA4nyW`4+AULt0&p_i~sII;h zVi;;RU1g6o?>2AoMr3r^;W6!x5X#rYC+T+IxpPW(zD#{MLm=~F*Pt8F_HlRMruk!v zKLnA>fH>Q3{6(Enx(CTKkxo{=xe-arGaH*CJ{buRCVKo)-Ev0aiQ7t@eL@` z(aJ>18{mpt7b~>JF^-o3pBwtn3X7AXMawMgXy7!Pnc33N;+dG+D;2p}7hzMJ-;t-l z$$qO;UVb#w#I`givIYWTT>!-8NDt9bqhVTqy*z@a<4Pr7gdepaY6UOHVb(j`3x9d= zJ8SLcnpoT(bECpN*io zfQ)d+4}*1EZr&cBsXniDzbhW2${i<9>b9a<0oKfq_JofI*#K0Vd~So&{*AKHXiD{b zskJQR;{kmxA5(z~Ya7~k>g(3hYtlhy!3g)aX|PEeh6MPphR5KzxEQ_`Ve0T|L#J6X z`SBg_*85BHGFD2f(NdyU)zUI|X=kSpKs0tQ9m{XWYR0>mzyzh$PFT-SAMMiHh?wVh zDndhL-E`}$Xp+9m>f-fw!A05wQAWz54z5GCFG~UDq1rVw8@Z0*CPFA+TgD(E>`tD` zzcqEhm(PH6vIm~;y}&0^d=SKz!|iSga5Vn{`rlgsyWhT(f$+_I#i4c$qLiq~Rh=eF z8BZyx0>@xx+^xhOok0FC!FyXw6)S;|z!juJyQ*_ZBrvRWgu8kdo-z-*y&E zk=gr>TAJM$E=yf(fT7ZC!OW&U(kix;*C&%W#4icdb=Z4N$HQ$S9;E068qZO0{1y-7 z=erY9$JZI-0(h5xkuN;Hp-54gt4L~p>q~O3o%ypI&aBlGEnTq9g;dEOJUt(EPk*be zOi_S*G>^RHLSc(FbSz?3EPZdr5`){{oq4H=_CIt0iPBHZW1&L#z4#3_sO6gWXy$Ct zByu95I{y5g!oFT>k>R{EEFuL*dqAk71$vUgwC28a_!WqwA!Rd=UwC_OE?vLz%jQ!lG;o_HT4(5F~OmBJf+ApbZgO_p!eRwuni;8VtEz zHA`x;vTCpsIxRo{4{IULF155J4yRNoOoYf?GS^~c=~^Z%4jAm-zxN0N^(Bo>$R;J! znzCXtR@J_LUQ5?qJ47CVM@N1nx6|iMP3!hBZLTHi17kR_n0(+Ol{V>`-!#BvYR)Mk zj06dyrf=z?G?}J9V}D>l>w!Fy&&8PK?!K7PMl~!Za`td>azXy-c0~+v0gBJlzA}Uv zl*jRBC&*QK&1k7oMuFZ>35BHbWn%J(B%Fz9yI0o8_&ToLpO2(+`}AWSsq_oRR92%% zY2TO3Nz>G27{s|9QB{?vk0hjLCpMelwzBj47!D?P2C7)ZfU@$WG#oreU4EbRL)U8a zx|{MMDz=%tJ+Go4&c6GN{e_|SgzkqX`}>>IbuzDq;lzYHd?O?am{VKOTjukZi%s^> z-%z!P4OiIw#_R=(GY5e|I)U!|+MfZmYc&dca*%T;C9Y8F_~_AfGVK=B_mlgcOXHr= zfveR2anX1M!+rRBQ1BA_?N5=)7_C5AEK6`&SJ!&Z?BB9tL$>A_5;;HEOCY*)PNs-}dv0*c}jl=`f7WTn1q$a4kjB6Le z`%&ZAyv~!*5DJYQrnUd*$-7pe^a+k>s)ufZhwdM#bh%PDUmC@+h6XFeGONdGlKIpm zRce47V^9LYu?un+E^Y? zv2eW%2AMGHv(D5-ADPC3rWS#7IfHdxAlM&QTsNF<3tsi%G@?zIf$JT&g|>``gE5;~BMImM(Cqy(7_#2iW4qJj z3f21vL{jVhI#Lqin7CNADrGxq!!Ol@{P^Z3LrUiVLo@v@?xq5MB?*`n@$As|o^A>s zy7^2x?>z*$1ij07arGPxgI_sf<$wO;1powh>(qQDr7Yb{l$CY$5q4c8{nPqQSaO9s z=s1E%U3&f4|4*Qcr2d-^i;Sx9X8#UNC$5)}O<@uH_@}1n5Y=*62+*zVu)(6J5#gX0 z7@#?W1XElQQ?XXx&xQbO7hruxcU-Yqx1XetG?LkTepa`rQtoTP?a!N+9uQ#Op9zfP zk!so^^}H0jgOTX3akB^dO-aEGX37-z3sgu>msPPA+v9I24r$|YnF}q1U9IwrwRkyw za;6=vtiexI{g*}~gA>Aq4rKD&KyOv9Y<$fMh_itdmhQ^w&7r5NCUQ27O~!P=Q^M_1 z%CV;1BMCc$INiT+B)4QJ`M<04k^r*6o9=pu`Jy>Zg%UTtSy6&)mME?p`B0shjypsNLzGwE=g@ROcUScW4Py&{k^(QtNcpak8@|@Q;igpWFMJIF#$0IfC(N`|-d= z#6YoAlPwDJO-W*z9^9RIb+kuG=RJqSjv2b`gqlTdBnb$HqD1ZPPo$Rh?)GZD+T|G; zkA=iH!t=hdEaZF}5;I4?(bwQuKNM~Zo?h+HTE)_gy5-!zp}TQ=wZ)JNk9y z8WNqd3+Fi54adgd^NV_tnKXzXk|0%6@dJ;Oh(|4YA?(IKX#ii%tHn1HzPmwrJ zajm^V5V=|fu{IuufK#R$dv}O5$To0eYzQd0EZ*<~guYA7qY z{Z)M>Ac`QcQa>pfIT{SdBXHj(kAR`lj~#>pO&LxgOf7?|6zD~Q$}S}pq*%u0IM@>m z)vrx9<;KBgrvF4E)f7`YLU#ifwko4%m0ZK%u(17~qWX$kv=nxuWl6%qe$o84ES7k= ztEhnjrBpugOOQcr1UqUBT#SNc*_f;Wl&Q>S>LFS%l#7c?qSJ3wJmrSt`GL}#Ly5Rj zvcy#x$JB2F?ETo>#9*}#vqOEmD}k8hZnm7H&dYVVu+zLc#ka-{j0S_AHP;Zq?a2Og zRV-DkNJPS{L>le!Xf;%vg{tE5vVk~{MwC!F2Ovt+m=u+718b@Zo>LO^2tF`)ems0RNAEH9Z97yF50Vne>XpcC@hptvetw0 z@2dt%jV+k)(mhIcCKg+tsa_qLb>%&Nax1-#_0m>`9ux^$Skzpkrw)g$|6y}j;x=*A z@f>XqY^KS9xxdATSQoy2GIdA1viIhM;F{)&M!_M0B8!I;+rfK*D+aA!>dQvFBk8FK zKc4Xx+cy_O&F?j~H{vLm<7KM}w8k%jp?`}eaayR`} zf2Bp$Eo0Pc{xHFol9@_tleZnDkEf@3lQC9Ks!HXD-T3s%9lIG!O*Iv zb{78@9z2UI&jhs?(L5=dsmfIF%3@NeA!!DW_?@@Jh9t*Lb4ZFqJ{FZwzfuWIoob?a zmC2^`Ex_c?XEM|7y;u`P147GS`CyIjTEPqCZ{?z}+p}m@h*YP7+?uQ@&*XGh`mIxM z4;s)cE}~;YY{De1J;AO2rCdQF%Cbemf;PS$2WQ5SL?fvS{Z=U)I<#1N^sa6C??Na_ zI3-3A(^Gi}!g+-kAs4VIz74++*_qU(uJs{#^lR;bZejYK*khysQtk zgnwKHdm<&o$P#NxO@ra!#EQ4C6ku6LfU)09a1K8S%opG}$t1io8vemgJQfi|`xx#+ zLgYVYc^F3{?V`V%2P(gBP@k5CmVuf4oSrzb!P>m(q~6xJRD*IRbs{ukUKYqgJtgVi z?!{-|oG*Rkl#5FR9}~_vbLLHBQQ03130sk6Kq}+krVglDkLdM-P|P#XjS_$W!3dE6 z84?MruH22?ZmJ)G6rhRjG5^)Q-;ol@OIRxAGoa4;&DExa92p-Mp+Wx4MdeXCyg&be zL4IZ6#!ms))id8f{W3wnAsC$T#*%W%Sjg(=$eIreu<1fv^8SS5j0jim%c6!bj|=tbbEaLd9?(@-6>EO@{(^ zWcwm)O%?wYm48{Kvd<)Y zB6ZtwG0-t4(*98UUhVZf{e{Kgj;c_p#fI(&h=;Pfqb1!l-+B@ycBz4neN9rk6w`cfE#VlPMbu@0fRX8*!iC=6)~h1k(slB2>$&AnPDT~Z$c#YzX|{kx1P21F%%Uc$KSfi^*nB{XxGN0~lzO)TAPr<(iB6Xj^VlHtGhuCEEI=y`uq zdQ-Kqa>zDC(;Ub_za->ZnHO{IZcUW|;z0-ACNSgYSo`oHEJGK%@5tW2W1HADgQ20y zS$0y;q#cERK_$!D_|G(0?0k**q7zVA)5w5cf`L75N44bjNB=(Dlc;tp@>`optn0LW zyhxQSkyL2Jz+y zAVH^l-#7=^H-}WLHOeM_R6YKNN_ITUdS3Ew3jfWM-=4chEtVBw-Ky{lq`zNiy`?mvEvKKa+{|0}TTZ7ksyev=gtwbKE|J{A zUfoQ{b}KoHG*$-ejP>QF;gj7DZZWs;vS)Hdsog~@m0ZK)2f z_Ip2u#JA~(fG5WjT*E^#q!nk0nOV$=DKWJkwp;zOnp7ADq;$qOw}p;Qdmi~D*{bB- zSj@=KjvuBn21?;xLT;H0%DsQSmQSf{oG9JZzWvr*mA>w`wsP*BuM{))3*$ft&N}6) zUu(AckEoJRj+}%>#{?H{lcMZ*y9B=S`1DbfK|*$z8hRJ?y}b^AUNkB}6BpHdNeY<6 zYQ4SMKNFPokO>I_AuXkR_timEFFyEHUr3(9f1)PIU16ieAGm(Q9mk;A2yYtVPYL6M zKFCjvep+Z?0}sZkLfr+I+6=@@*R;-2n17pv$XUyc%^pQ(YbD@e{)sI3CW6OU6--Ry ze5a$V|M+G5Xx5gfECq7KvP2|nLk})0h1o@wzm&)PB0+~@%cx|h(QZ`e%D^`xbU^rM zmBkf;!q>c?_!73um&SX1UUqWQrriNWz~4NwX(FE7|GKh! zg=3uBCJy%yjoi!^J8e-_)W2-S06~^?w4MMZzfT|vH{Sk=U0Xi0`||Fx_`k?Umh5<= zdSo7)<5>fbGB4HEe+jmJ@314au=_gWNN=aZW%5ZIcX1o!r*G3B3=)O{-wVIP+tz6+ zG&}?vZQ>d@!R1ULE4D>4i!oeisG-gw_@<4G{uH0e^EmK@e$LARX>C z$-r=9stQX+-g+0}e$I!R-*;3R1`tp2Wr=$J?w;_1uv^B$k)y4k=6BDi5R*p4qVW-r z10nf{Ioru?#WD4o|oE*l}CJN({A@NvYY8T1ytskqy;72-KH#DYo! zYbY{|ofoYSVck@iudI7TfH95V5W{UeK1ts&z0Bwu-2(4Jbt{6>JT0};Jale z5ehh{?dBYt(UrD)U}zBi!M1Lz_S9sem4GV&?l5(DslEd(Hm@Cnj-tPbSR5x@t!uSM z#^Kmx-vJLzM9OH&>0{kV4$JAXn%eRRtK!24F6|#gmY*otiD5x>Q@>i8ot}5(mkH}*C;*9N6Sad z5j(aJ3RUo8q>ug&+jn2?Ip>C#EACk((CuBtqI6^>(O3%VghPTTJP<0q`0K-$H`SmB z%oL`{+-Z!pYlK#LI~p-txG2!En)K$p`$x1CN|l%&JP0MMdAI zDgocI?bd0H=AcZIGoysk>6GVmmxe7Nt6y!f*T&3d`f9|MnmYXLIJ@%v)Ej7mdBA#6 z+Uf64ow^AzCu~&}3Sf;>eXDRe7}lC4Ntk4sA=00lM_dz=lVSP?$>F5Sg(E7KPD)%EQ>a>B zOVhgKO7cVE@>qP|u(5~v7v2x%SC8F4E*`u6kg<9zIo&d-oHuU?7t3*TTTR4t zcKShUA5OJ2!xla)M`;!CMBozB{_r#Obtk^xep?(?as0Eous=TeB?mP)a1xkyUSGa zvk#QW9pH3w`4r1E^q!wrHX6rAvLs-;9j27wh}@_`Z#g^t@4q1wMvd<2lPAwzx`I)C zBx$zk8S+|slojEk;}ux?#R}g)$-|AOIX)2wjCQsUZe?(f?N)*ocGFW%Ic@Dzs+^2Z zc_TR-?IVd`rcc~C_}(=S${E{6^4b3E7w0)E{>?mAeMz^0ng*TweBdpe=Se=4nI9$Y z>sO(G#<+|Q&&Jywv&Ox$M-+OYl8UKY@X`Q*gi%_%6Ny*y63Ad%oE(+dNKbt=cMWlL z1Obt-u*EJ7GbD5z1|I{ikjIp=2t0~~yKga1TOLf~1->4E`yZe{WTrE|&N$nt>TK(8 z<#$v>{Jme$*2P*qx~MC$vR9>=WqTx(yu7#V{g$46ObNZ6j2?^<8iz25&oa3DH?%SQ zkdJ<;n_V#4m=`?)i({yX7;m?T6e<2ARWE(avB&zyc>P`dYT=ccizaW+BP6W0bAk^> zKiMfY-Rt)Ww($+~oQL(HwwK-esL56-u8QZpVMj;n9Kr*kEK3bPhnn6pD++y+G;e6- zziJ>DS$`g>@$+cDj2YqeKM~fCeb81WC>>G>oH-CI-WMEq@Ebi4SS;$`fjGAvf5e+AZ;8H86%;PI-`7CYoC%tEw=Zf$qm` z8HN$}tghH7TvRND1`N1#H^%0i6jKZi1_Z$y#Aoa6-}!8*Aa7*b9#&sZ8_W&|{mzyn zgt^+L^Vcj^6ZK_^ifr-;y^dUrYjYq<_;(OCpQ~msVMR_DkpOqAHIXQ-lg#19n~DJY z(vbt_v_@7DDYvT;HChi8eHJ-eFv{S4KYu6y6V5nE{_c|CPwx88TrfHJL76kM>~7mc^{2M~Ve-!u$E0{;BMY*w7F$70 zT(T@Z6-NZA+#`z(i|>^->jA0Cz*oMqG9ijwokzPA2^lISGMmQkFwxpIF_Oc89WR=kLr`pdGI=kfpJ!)5xH4Ws3$RMygjot-bL6R zf8z+z>arKGZ#_pQJv6uaAORky@7|h#+nzU8PAfNAOFux@ntDaDAQ)XjLYWI4jO*P&wtsgf=3_re z3j-Uu7scD7-HBY{K3G^l5y~oJddN_nOVG0r>=JHX1#c3{ADz@+53vdC7A-}FYgAdp zOF?0z=^+q1d6abW7C|fBDoNmQ#DrnbZx@kC8>;*JUVe!!v!@uTpM|IKn(s<2;#g@* zJEvgknz0@v>caMS!=lr|3{!`v%G`SrJ9 zyr*)`98CZj$|=(4!rlZCD)83~8i@Z&!bRKVH$ShPjN`nO@UTz%c9L)j83+nS;_FCD zXEi79-o%k`RNBdY9W!s2G#AWTXA{o-#wxql(&^%-r+t1+L(Uj%CDI`e``vC+M7kQe zI-5SM=W5}QU0Dn3>T}~Wb+)JVpFYSK8;0v;E^j8j_k#o$`HjTowmR`^e)7XVikPA* z*5GZN92H-lyhR$O9;Ut*ca@bmvvw1Nq#i@zWLeL5myydd0A+v#h0uclqjz=4pmvxp zdRS(pOyxpKE#-awAr<1_cdOHB2)fY4F3VfM5=}eQV0frPu3~nToh`OxgZ40t04|P_ zp_l?(Sd#iN2@U|_C6sBZCid=Z-W!TZmh)0Gm5r>Pn~P7E`^Y*(jw^`6-Ys|JlA(1g zqAt})5FCE|FTqgn`US1jN_7LwqasfBE(6$hmY??-TKqOc?GK6~w#MEQ5tzdao85^- zI4+%zY|7PVe!ut{*nBs`dQ^@wEO#5>u}aObRl?LlYxB`N{PQzKGrQn zpW&UT5fIEN%RWg4|5tpw39M*lEu4jNdG~~;Gjuux6T?FYOew{3B^bi^<1r(lC`b*{(dy)I9g2v{b89P3kPtNX+kaQylNPms6xA#F0|bV;iG*@SfB0H z_n7+i?k_VLC>!Y3dAfY|L~Y)r4xFo8Yvxn@Wz$I3K9KYG_fnbT)3Lti9-=w>i$>SF zfEjPpyYNGC?xgH8o~Y3$4z00LnW`)=Y(1jWITm_Yfa=t*XbD*Tcwsnq(a76xDjUu4 zIm^OPH-8+x2aKl%X2Ps68iFt_RTcd(O*DJ5m$28&T9=1>m4;H2d63!r60v$a5C6F? zMO6O&=hW)U*OO7rx<4il`D=BfVf% zozd$3NM(z}%FbDw{?19o$_4ZjdIGhHNszLr6IIPGOv8VJRhh4%|Hn=%#$RYN8$rXRCL4^& zCsziBK|*JsDdva4_pJ!lI`MuWxg`v>hA1pvaX%1Y5>+EnppLAaxKX5-UIv0c{vk_a z;=l_Pd65D8%i)C-ZLcHyY9Hc| z#xj3JN)1(Th${qlrvhd89g1AnKuZjf{ql$vcR{7?g#b=2)FG*b#SlEn3 zo+wVYD>A&~pr59Wx(00xx{UB=iFc|*dp6byD$+RR9D-ceB+{KIrzvCXy?TZ20n6wZEQ8bQsvc z8BY<+9z*l4^}NKb;A+OYuvhJCD4q_}Npm-t$8R-h-T&9rn@aKcTcM`C;6sXs|y?zglN$p#P7_dP@&j4mTZgWTMgb%eiXi^4eY7Wm zX7-I<{hWQr!6TRM_{HwsOI!|3(yy%!?>T_1cBN&b|4fUm_j|%wAE!{W#`|yu1Ev^b z6#sD$3i{xHsB@gPWcpEiENk^O4;`jB`6@;*-))4#l+OFh8l!&7dl57!Iwy--v40n0 zrr5pV;&G65)B*sHv2#eo`~8zX=V0;a5i985I1`ciH~KW*AkX|Hm3SbVg_VYjOEmkw0(fY6^Zw9hXhVj62|^J8Bm?VahHY^P z_~6t}JqOA)$z_s7x!?x{QUS5D0#T4+9ip!>>H|46*sc?bi1Qu=1=7$U5-}i*WTMP- zLj_qF`^fiRslLQ^T?v^SNe$Y;NpV`jt11%smZ2U*eCYSN)vMQ(!?2$>r~0Fq=hisF z<#P2*pO{w!h|&k37_iybJjNMW;c1Z8Y1PK78|a}xB(l!byd37|6Jy^!CmBbGq?7Ug zJ1Hx4!a+HvuhR?WytbN7E(5Y|O_brlVyIz70@2G3@0qy2_;Zgh4@%y^Tp<{TiwL zmC$ufAPU3wc2UsN7T`wb-ZW)*15l z@E}-s|Iig7_sN?xIM3%7@2%$r=xpymZ9C(zw9@JX zBiH2k?~kjX=G=G3v3Lvj^x%WRKkSD^N;-!APr=wq?_s{SKPD=xS*WVP$gP~#+U#NVYH~dB+N0I92={X#AW-RT45Cq(Ek$uxiCer$&G75H)u8rF^aPe}Q<~PTpx@nl2Jk0)SG zM54#0vit9{D!6rse-*Lmg;wqG?N)jeB(4l6d}u=6by=(PW8FBV@cq@N^=py<5YLZ$ z(EcKyd)Z3^ICZf+ulKpUWvd>t>tbG9_=}>{CvcD(wW}3pG1ah#zROwl+D-hl*``g?+0~fo5c10F9<@s zd|j=Rqi)8rW1G!n30cY8A%^Wxzqaxd#x8QdrEkwGZC@z1V!lo7-Rn9pRkv?bvP{Wc z)l^M>u6xDObGg_YJ<+?2M!D1)3cx=IxPv|%!FK8yGK`_Cd7$om{GxswG3K-y77&|q z@xc9R(&tKM_WyV~tEe^uC0gSy!QEYoYjL;Y#oZ~zDG=Ppz-#iTA`R6YdO^vipmTW?(g zcRKp5`0GH+p>5C&zgTQf)UgyX)F&?{|D&3|gym`x*6$2%>-?Z+lNT<>r_~Eq&K&;% zp{rFE6{&i^QUEt+7kWx`v_Wx-A}$-?>@4V?g}X1K4e9ODvvZL+mYevh)1p2ye2zDJ*Auj@iEHsPv%y zqSUvb=QucRg=Z)8)jxl;9@k_|?X|bbjHz}Vyn%$G_>H4fqV8i@4vz}6m7fh0i&1C321;zEx{93H@?SK`0UGZ z8yGdB-tgu7JKm)q1QFnSh~j&>JwNG1ZrtODme7_kP-VjG{0eLJ_r>dB_9y_VZo`M$ z@nHe|A?zmuvCkF@xD;X(2x(>;+umxZb6R8NIKKZSjn)XE=9@W}og<0Eq0=|Jm( z#soo5(EdY-=#iu&1*#AfX)e!DK&`RBQt>?wx% z{*n<8%F>EMh=Zh4GxQkng4OLXO94_cIDzTPVg!Pf0-`Yk?ts4kvbTwkldKL&NQcbV z5rWkyZTXlL=0X8Gxs?6~p5XZHH-1Bp`94@l-4QCP=<4qrScK5^cAKX5Xv&KmI9VD? z_+_v2ePcG4y@V9L+X@dUs!oG>XIP!2b-vpMoGrVqzSiG2-a9>fDRg`vC>mN0<){&` zx}n}7W9-A1XV0H&U;Z5cSFVEw7WBLCUkP@iiFUPpXJQ4phpZUF>M-RJa# zU5k7qmn%8PVUL+Dw2w1Kg8M*Yv@%Nta z-Z)~t(tGTL>`p!8gUd)tCsFZGE)7;5r3~)}0!AvE*v7(?Nc*gFe6errdfQCSgF`;{4hn+ISac@YNJO6R}((OS2xcM#2^1ne(2Lu}qDdawHo1P=CTrtaY)O?>c{ zE*_z4UysJXzjS)gEJ`fcjUfo#ACNnizIrAaPw0Xh3eUap(>H>(D&xqJgHqFme=BW! zG<6h1(>nh6ByCFN($p93a}KjqCwE^oXsN%vE#-ho5{wf19+w#kK9o3O3=GvcNH$PTi=F!xIL+vkn0eV$zZP=%$mm~%-2IAcLe6JQN_qfawk?mrf2O;0zZAZxd>U#zh%j4?J~BJLJ~F#n;EIh?6$b=m zQvEgBj^9~cHaoX489U;3C4e%w@4F%Pz5eY4YWU&LCqR6Z3pst5NF%WDlf8iHC-wJQ z=Y1GHY6C6Y%nV~)v^cH@*3EX~6Xdz^1V4sP)65KeeVpf+HTi+==vLBs<+0KAW^VYH zVlw766mL*@`UWIy^Cbb^z?WQqU~`~@>yz}%4wMhnecuD1>jFMN$*V_qY&BQ+uO`DS zVqTmxe$Q8#jrS|NNlpWgr=?e(%Ue-BseJ}%L*z~S0pu21OG5LP_&=|^1Uyc~c5cM7 zWi7i}9L2%|Uh?z%dBwI6XW)aKQTiTh#rl&k-|$4;Z}4p-B`pqZ_(AjeZ*ni#pfH=z zD`@;3VJMqH-I|x{=Z7cyon=-11B#pfKXaN@M4I%pwCiDB1@&GpKiKrsJSyL73!)g<<;Z0^7y;U+=de;f)DRt%ugD^Q!`0*$ zpEXGE>P|CI9paUUp(a~;h}3N@)LYNQdSHG{xl%KDxR2yF8ZtOTWc+4mYTUyLrmVZq zFnl~(=DgoBH+!R6PU8nbByU(<{+;MKChyj{jrKUb8G@v&qfXuSc;s(0Eh{0(o*d9C z_cR+|)w=^--;H(W-P1AfY=AqufAi!+&8T|q2Hj~%HSX9ND52kCdplM)h060oRt0-S zYChVZ%CmU+WIZDsJMBX#K;V232r>%pf(nq4LZHlOSSvk$ zJ}S;2{}T=Fd$&i;f7n?C9;cZMz`Bjj@}R*wkM@T^NxSeq5+Uut)goteI;&8Q4hV#3 zp!}I{KWN$>bP0I!&wU&(X{Q5<%!v6RE(N^somKdd&X*??E95@puw2bMy(6h!1E8_? z1YEHTUa{M@+R^hxUV(6)Tj2xVqnj(OKBTiI^!+x{g<8x^Nz$Bz9|BDQKYz8*2F|c7 zx+i@%xYiopmhkk@Cmc=Ly^zw94YQ^7%}>Ec&s!n^ ze+a~R?(m5vr|U-6-uoF|;5BT!|7q;6(>rWVZ8t(yZ9CLu?~$)zlh=>5BUDwB2$#tG z2_S*phQ7)CbOX%H355OJ&pB2zJj*W{m}exBG}7IkVuXX5Fv61X;_3T-qe^WbD?vXB z5{xUknspizd+(m@qKwrFU4k3s(WQaI)&nE`U*j;al(K*B$S?@CbO|)1vl(;Sa$3(V z8lG=J?r3;(P6r$!i61jFi{yv}Q$T#l@=XFrxFTw=id;s$E(b4r zZ3q21W8|DVFqStS>P0T}b3Hdn!2cMWhUP9saoF{+VI;r-D?T?s!Dw&4hlsm5*&6C6gFSj^A|t3hHGdt<%3L)k{&pzarDw0+qu}ILa{pC`6U|Yd?Kq5_=83{&h^jDD-yRmr^+ys|yWUvpVK0WYPqsXL; z45go-LojxVrBsn9)UpGuq`e!PxhZ&t2*4_&ID^Z4y*JYNB^lJ|t~P3_nY|K86^Zv1 zS^fKo)6di(#c?aW^jqgo&fD<{+8=(iX#Q;J=<-NpL^jKE=hV|r!s+t&u}H^lB*y$H zq>5OGl9tmB$+O`CKI+_ml_Ce?7*0~x9mLRDmQxcB|G+vg+|TZ`%|1YB?yrvuQcPLT5m;lQ3T-mH)mz0Dqp30wvG z3qSqjg}*Eq=tXV*wPb9R9=&C%tszq@1gowno*8#?;|V&^n|FDOx*THRe<$-}_F{ky zI!N6~WfcBoW?~8ROWq56Re*zIJ$b9!FtF|!wf6Bq`UQOU4M-8byPB^$meN9>@I^ya z?l#nC_h-UDUeVItqmD>R);Cy6upfa0018mfW)yYO&{arqQ(t|I){NLQRHfULBy(c) ziVw3LQC7{IDMJOPu#rseN%Qx)CR;h2m8Rmhg%P?%=#P3sNm*T@Lqgvz!PKz;*|t!C z&6M{)WZ||SOvc7SP&2SzvBaj~ck$s(uH?~VXzAt?r<(%R%LwV;xWOkdAHOoqcGoo? z(jOOiwzDVGvZ_v)#sR=@S5#Fx<|W)jJ)8Z%dY7zTpPsar&xX3IYR8IM%63y_j!Ib( zk?hORCR-)kESjK9VGp-mh3NgCd3;Yglw6KtriK5Q44vh_kze+Js|1`};nO~<;Su&` zIe(mUGAf=+Bfae*4trhn@5Dm8i7D|T5%(YW`5a(dGOiL3FGk*3f#~E=jhi!sT0ZD3 z2#l;sGpmGcfCvBJe-5JEp9x#G%bc%^MTG_Y(i%^GHOO@X=#dM8{u2Z16Oj==GU=lG$hPgb}6`o1IEjYtt5nBOSz_f@Je$9Rf$uV`}gm z9w$th-M8MkJ|kQT|2$Osk2CyX%j#aZYK;LiZr)c{-1Iv$r!ymqbwH@koV&M5F1yWl z57%@zYVdyqk4e9X;kDoVYT{HiMiYt1i*m}HgDv~B)qtp}@)HI!b8}_I%h^2UkDXyG zfF6-|V>DHjoz1rbBg&AkNBQ`D!jOyZepx15W5R~sa-|8%LT$ATzML*#CE>A8xis?N6yaCP>r(Hb)F@mbLVHL(>&Mzc#GoeLiZjXs!KT6Z-z~2ic~I zgbeFtKTZ~xe;J?~KU6cEVpwk~>e?u=k|C%cvded3nhsxzlz;doHS%i?ZA2uxAFx8M z-|MaPi_fi*@8(M_vsQON&h>OZ$+ znfCKvCZLYy0rse9hqSJ9zj@AjhvgP>~;BvA;*is!xrp!^@ka%KoL6=-v=?3VL8w9 zvE1*q{jBHU;ytg)R~ICzdNRaT5N<0c47FcuIlMJzb^E2=2BbFzyeg%=wl1Twkf}uS{3~dB*t-}@s@gws55$J1jqfm7?6E*y?zi!`@ zz@&UG;0c&-v)GGzmLSPN*5L6jXCxUFAE3;H0uvv;?c1^Xy$59qA7~1^ z6k`#tniY21A(MYxn|tW9Sqegg?qsF|N=P}9#}tcvxm7HO@t7I%QL^5t6wKHg{1#z8 zL8p+gNB!etyZijcEW9jRHgBw#zaEe5><(Sq=g3u?*IcQspKFKKX3U~{JZcT z%`vBef=%?*P50r|prJlI*o%U4NijsbajySd6rt0^H~SGk z(hR?I?H6u+em}S)ljpZ`CxM?sbKD!Fzr|kR5_%MWafSl0Wa{ZAwtjiW{5Sms4YW!h z?SE@G%N3p1O%Tj53EY;k3)SJciQYE98s?#cu))Ttl zAa1O-k0@f(83yCrAFb&*(5kNsYFl}#3g7H-<1SP58^7s5vNJ+Z3Bd_Orl6;s|m<0GMRkk%imASIvWraz!Zm%i^Q0{DURk(BDCZtGHlK( zA6t%+Y6t_EriZzfz*rmDE}Vji(X+~#gs+wFcgS4(p++xN>!09Jk(C>!2NobW807u+ zC-N_5dGs@_erK+_=p}eYz_&%H9yy&|RyNQ;Su*Ay_Z3-EAmPBvGg9~$vi=7nM*K~k zK_~%l%vv+m_0epd1M@g{{`#W^5{}15s!Trxf+ZkS_~O;T`^C_MQQ%q?KA)HP*nrmA zvtW3J6GgmWlY`f`#R*}+57?efIPL)b(ZD4>*$b1Qc70^ksV2Zz;WK|rJeqq;U3Uo^ zK1-th`ihTFmM3tkJ{jhYsSt*kkw4|NaVF}Ad8{}XKU0W9FrYi}%tY)lF;zbKdu;n5 zMtESOtb6pcD$%!Hg~(5nq}0Il9u0n9koZleu}I)aU;J1-Y%VBKJzBu*g>xh|>WJ?3jQR`63j zl-70TXW4HesQOJafoGpfC1Cu0-wW$S&!Oy#0~yqJRZ{mIs5jp`lB+0$yy4sou~-_+ zv;JRlh)}?CFFtz`BoaShey5_IcLlaH^jULG1PNOQy6Rm*f9bcQy-5l$;-gnkpKO$Xq1Y+>R(q{oUW~+{C>|QNDe8uD@At^IvFU=_`_fQ$^;547 zCYNB16Ch5n_xvQHn@3^>8o04v`3YsmsYmu?gd+(^mF;)ggp!B?(Fp3L_J ze7w|>+R$k3Uno_c_TX0@?WLs_bk4{*C&-f7(_pmrmBF+R&gI`%E8lU5|icFC2$8!$^dvxpG z?5qw^znjCrJk0L2IvFt@*-5>j6R2z>)BO(o6Kr`$0S>8qLt#JW*IdPm2srL@zS1#z zS#H^FIBFDa z3@6_W%?S}F;(Q_z@lhTuMh5*^Uk}-u6CvE1kC_Sc9t~Y?p#7QI(n)?g7sZAcxE#{( zG3xC|JFdB8)~+?<f#KYd}0thysn8+t1pfT^^7A+fu1MYlhCWtVb}YA63?D9_j6p zNmb-loiex6jf4U)>%~xrb0A34spHx*8!rtWac6+36cQAYn*NPzg0Lm~8DR-DCRieG zm44)66E^MWC;z(>d9TSitE<^5RO)mk(2>HW>X<)zzS=sV0Vm+Cen!UkG{3qgrdK8t zAJfE(+qvcRkB-@)7;5whh$uh(;a{-t_Dt*3L$f5?e7@Ro1Dx57)3(T2x?Oa>DbWS zmcUy~hXur9Em$U*i9~tHKEmVbiCG_k=R%c}LMAV-Y zLf}Q4=T3!xP`?j)K=(c0nctP3fWyGDOU&9rI;aVr^2GtRwvC)6<6Z)ZmJ5Z45>0S>2{YryKuM z>7rCKJXlR2KBUuXzeA>db+w?Fv9I)4VIW@AUDCY5apW*WNuafiZP3@O^0=fsO8G~%x?tGoyN8WX_ zOEUW@{SV`RrH0Wu+)tmg(3wTI`bJv~hs&_}x~%Y-u$cOI1IE?r2`wuUq*q{+6?7h= z36>3~L^>HFmnZvQGD#jffP}zOp8)0u^$B}M3`lz6@4|WFbUPqs>3PPrPgjli8zsaI zE~rlO*>fb6^Ax<+iLGdb8Z@GzdWT|d>`p*$^n~u~x(h%3iFL>9?)M^L&$45GH{D~z zZLCb)^XJ3+7PiyHknH(MwUI2HFJl2@Eihu(xCLL7XfqA$*0x2BU#68GhT6(@Q6suz ztGaVL*8V_1O8FEa5&phJhqZ(Vh7ZcV?k6$r!28PKc2?KY_)yBK9rV|gFx2JqF&1_O z9p?cV%Lo}`KdkR85vHl=-79@CuW6X(5h(S)(yM(Wk>H9bLkCpKzx@uy_Iv+oX& zT#jM!lf@(Ri^h%hyfjAf{cwck-Po++%Q^}H6A-Nq%w@<2iY0(6pp*w6(@bxrcGXnVr&{CEY9v+>& z>i*rJ&Yaf2Fe+WT7>T=DZZB=Wj(}AEc9p-oL@>JBL=k}bJIZr>5@>dZ0o)E{6DYw} zJkaP?Q1BRh0|nyE_F$RV{|gcTrE+F^4qbwCF%!{M%|~N18s3Q*%wGTq)_V2!-!KOV z;S0}uJ)f?IO?1pI6DXq9E0hh6;k#+#MN0{0g`1H?nUD@3>87LZsGJwEnw*7GP|8t6 zKV7B}T~5aCgKJLKA%5-X1e+G#f$nvtu+r;w&Pkf8-(oW#I7xfu1mBgm5m^`eGT!lK zF+`9ww?Tm#dhxBGaZlhfAolaV1uy{2lXpT9R5&DO`Y#civ8uq$w#|FYvtR#XWB%fc z9xr-{8+&f&e>r(5jOKaWAW+WjiJySXKpM4+YHguFrAm^1$CSzO&u>`Ac{{BS_Hjy3 zz?vULTuB>Wc_@2&%y@{xF%#Z*@8)5A=6LrTZK?0Udx+mQdb?8?qUoo@w_E;lmZ&wk;@L9X*x8vbQYbF|i~yUFo_HOVQH2JUzPOUr?7 zWzm|md<=U7=3|9gnJ`p>8dTkY*|7Jb)F2I|*Nh5JJkAt^|64o|-LI&cug$TzYzh+W zZq3=4t`%-Fy?L;D3vr7L8W$~F9GpUZhK$YOWSEcAadY@=!LaJL68q)FHFVwaw6RT^ z@}~EQl7hVF-C|U3@A(9mi;G-Vo`hT`K5=tiHpuASD^gVc8)zp-Y^^X3`9uf23*($n zUm2!#@(%j*`@7Em%TM8mDQdPp)EB7W80qr*Bd;Vn$*yWPWEyk$>}XaLhC{PMD@oje z$vp+pl6ob&ubtrqMNLW-%UhOT4ZCgZ&_RRmWNYGb=7qKv0|^nkbY0;?v&7vS*k504HhHme7)SN>d>qAp&ZZ zaY0A%b>#tE2^q|}F|zii2&pP7q~TJJ7C#r2ts1<`Wu8e=!sJ)1il% zR(KKy$00{eZ0Q20oo-|Dde?myCYM<<>TJsDX&8Vqb+C~vRncliMd6dPl?Y-UYMpU{ z{4N@&QbAG~wcO9L#pc54f;LGU z5>&SHaGuxyF2a{cIB!lZMT<0H-m7EzhJSqa^_zVFhbYfAk#Hj|yTad7;7b(r8NZd2 zF4U693yCn-EsnrxvBFBjFb&tp$tpov?j6&Y+ofNs3~I2LcR?TQ0E_{_O4QmhE!DW8 zEF1DrtmrdJ${py0EyNgqew-QPqa7Lx7MDmj$d?l4iD-&Pxg_X1j} z=b3G_aWf-PdLDV+`FTC0x62|mjjm6IJd48bCkRogT(Np-O6;?N!WX^I9HRj6=ePTt zss__Brj>xuTD9%Su{W@1>>FfuZ^#Ejv)G(yDbbkpCEuifzlHniy^nBf6N%LS>8gAq z0Ouk=u(ogQ*SgEi;3has^IppH;ld1ep|SX~Wm-eD?Kn7P`);-auh0FRY+Lvl>8vo$ z<-Yvt;a|slT#<1HA~*g+y+c_bS_(cCKU;PndoCYV$?&N`%fTBlvs`ZQJbhd$Z5^Os z-4DP(Is+cg&vWXl!(S3-=3NPln<(?gV)$~VAnk~@dBBki+(#0Aen5>rGm77Se}X@I zq%av~*b>s$R|3FDey+cP&L3Q5h#l7K%Zq4fjnk-zRa`}|qWghyI{N1V>mNBM_9jhh z$itCHyZb?qz&BTh@3>tI1%xS+PL@e0{>EvGx=PoYV#Y4 zD>{e&)3X=|V3`P73{o;c;Fd@N24^oSEPl(44s7LOn>+&?pOn$%e1YueYxo{dD;XRu zm;CK67i$kIZ)46NcI}5^TSLh_f(Nzg?;F z8Gk5tXXr@isjhQlAjKnbsUMKtzKlS{iguK&nW7bTX9CU7l_r!!*8_R#FW%GU$|d)E ze1j7Cm{`w1no~Ns1Z$2Yxi?geJBZ`Iv2u8J0hh~p&cWLGX3bjJ8@!tFjxTU5OxjiC z|Ho0_{+4NlGnacsMBsKxvtfDAhqDedu!~&FhW`sG30YuXh{^ym4yXKxBi@aTXxNr! z+3p|mbHj+d_@XgB_4oT4Irm%XGdyLYF3#OlP0orYyD1{HRzhv*h0?`ZY9jrt+=A1* zWF~a>2?OWSC9gt;lIwd~X?h({ZU`3s>(q^~ZhA>$U`qO=^JZ%@R9IBfUs|Wp+MwZC zdIHpjM%u3r8cWFQtypkQjWEsYLwTC7<01UI^HEwiirI@WAIH6c4>oM^&zJtBF0paX zHf1`=R;=EcyP$~0KRyv5X=%`3fOY+qLcf*$?i9OtI10O<#S1KO<-ooSZx2IMx?7kW z2CYQ}lxLh^%R+iIeqq$vmtqnNHlu{0*~Y8BjD41-V1my2or%x!5Bv17*gU6m(&-mzGQ7L*f`9}C~@J>PeCYn?4>Wv5EQUJXiekg{JnM{As=Yuore+>hzb|?F@RjWkO~i(eH#eN z^w?)a>l6CUgm-@U zI@M7w@|ld}l3WafNUoVQ#T~_UThS*QcYQ=()=(c7Ti#<_wqK#B!vv_nCb?1HFFwPK zy+3Dg`h~(j;IlShv5UP1Jj}J+G-z*5W+wPSQ(XB+P`r26GrhfT=mi)%fDqo)wrk=ir>g=w<-ViGn-fqH3($K!tvfp z0fMl1)VElgq(w25Bv&g`=em>mH<((G@R02Efqe|!ZxF#zMXIAR`4@@HP0*Kd865A+ zVk59I7QcK=ubf;)J|XVmjOE70h>A#K4T|!0Hv=#?oXPU^$%bFU6iMTRt)*D8Vph0lIw6m%wHh_850~2}zX$cs`6Vr{sq=2~if*LvNhoa@gjEx=$Hl9Kd zuOuIOsi0bgV74Ew-oQLc@Mc~A3~r&=p6Bw{?*-Vr^JpJY9mo}ECUeG*Hv9h@1rC-e z)e5XVH@=3PvqKW|y}=EbCb3STH^rg{V?J9#yt1BxP=?)a z3qRZcJ$-Dvpq!u`dmXW7gf0;_U@)~jahBL~qlo&*;!qjTF8r%dYe!|;eg<>1cOx(e zLTxAm{dS!=Ee>sS1-p0Tlr9F{-Fk!S4E<1dw01kSSby@uda}KQH`sElm;)3)B^d!C zV$Ohb%+dqc+0t_SWyYx#MK3}sdD2nFaAbt`_gQOv_YzuIo%`JHvA+Q_#{k+Ih}S^ zX5oNuV@Cf3swhf?yq(_-TTIt#qb=%IB1hR}&HN$Wq@J;1h-K~;UY{=Y$>~j6@Vj39 zXfL`Kp#i2FVc(s{%TX>~!)XmUdnp+Fs)7y(AUjF1D47-;VRaw?+7LT?1*O0(dhR{l zP9eAK&LeUEs8heo(IQ~#VpMFbZY=0^$mLn}H&ScW-bxj}83Io#=GY}Mx6YksyZS@gv^Sx) zZ!}O>oHeDwKjZu^_FjbiDaWKl^3{zGiB}{*f<9Sf7OqPoR55SCiNSSF)le%@L7SkP zbtsr4jKm-Nz&y5J|I-%T&}%Z1ET=9Ra;pl}rt&FgrMDcc2X;k=-$NBHN;j`d0Rr%z zRpEj#w;_~p5mtir4l=giLJ<^FU_xz&=;ko!)-o%%zq2G$2~w6hM9Wx4QT?Lz;0$BU zpKP_~h#7$Rp?&2yE6@(h&ksUL{jFv@=>dQvH*AAWlKLH?c&T*>;D(RfJN$bF{CUn!PeNQc{ZCUn7mWzFKL#H6{ z(g*CPqY0Yy|H|yy@1hu`_Do+Ey^d_bn5I;3-zAgdhf}!dX}nm5iH+Q5fjtdRJ!_Xn z%ZF6lS4SZ$#yIOb0N+|-QgxerA^vgC{I^bGK24CNwO2)JDzTIRW~yYssXd1xf79@pW_#;LvcHWw1rfBsz6@XBa$zB(zx4=t9&ze3EG$;c?$t({k!RZ z0!(i@rs;g=)qij_)z4DO(<(Ug4D0+T_eHS#r>RxhlXoz!GGY}&?HqnglrJCcV_RvV zLnBgxSVl~gc=$}^CG2*@sW)TBw;LJr6YO6j!5)c|j54kheNufpZJzSv10)c4P}0>Y z*vVugG90$MFrcRuHU{5m*i6o;KL`&KHUT4Md~?YZ_?E}^C9@Y9QMJPK&>j_77^}5N z?2)BE7Cdqg`YZF?aOgoKa1kQloTPCDgM^PcLh(K})R2EXR?M6@XHQ*0 zDzG(@sSn>|V*vH?$pF~ucJ9fGn}t;_(|B1W({^j}F<2>1{si9bKwoK1nWjj$&;wK) zB~1y+mfsTLNn|@yDX)8PQH#tD>e%`+(cuRFg)1!K=@rz$=VU4Vsq6j66%3V3O7HDa zwBUAV7>3)RI?f@D$0~4|Huh=4;_*T>ql43bFJjvuSVcK;4ZpN19rmq5BmtA%= zn&Z7Q8tHJwJrHJ07+@_!{$^ve?#R+hw(U|y+W>HRPosf>C2ovoaaM9L1JRJ#Cqx|k zDDUeVLatnrlBE6P#&Bba+~*Jch`i7zz2df^=onuXm*ib~OdVLEsNdN%w`lZP5R8Z& zD9mltIdp>NzV1-JleJU@RpU|JR9kkXTgRSJJcu7LGTpDM*>WFrwEqNlLF(R?&*kRc z4XN7{XV&aR*JZD#q1S;(S&&4tsBOZGB~zW*TfX7hsuaZi{qrq5mkK5z4$p&%yAkmr8p1r`P~kk{;%gZRzc_oX=qFgPSDVfa(b-o*lld%g`u~OsuOSP5KEn6Ghios$$=&Nl&|onBvPah5+KgJ% zvG4Ci#HsG=!C@I#OmCVuNM%LnGb0HC-sHVz< zP~%ZULY*6GX?s$+6n=y&{Nfq0eIZGr4p_{mrKfVostdGrR4S6cwpQ#;bY>>rCQMNn z$}IW%gOW0~u;?%HjG&!4O?PT^26J+#262*J4RVt+cOorPsk1N!KkQxg-6Qe|&t+^m zxx0BLl(O%>!+JPQau*Y}lA}s#S|2q@z2v?Z>w5T+7l1nOsIwdsZCGI?QFS=te7%(} zNzss?_h@84ffD(;)hb4Hnj%3nRWSND@fH-K{(}AM#iZ$;SO&M-_WK3SOVE!hZ1HBP#BN;(WTYe&hG>$Tw#lfneU)NLP3%5Y(y_bIJ15FL!#fAbvy0q z`6U}(F4(Hq`X~^|FU=ooF!-iP;Xloz7 zisZ`5qxJeUDQmL~07$BBHe=Ld5ztF)uasOr{m0N>vzQLgS^b~o%V#{NTJ3UvvTy%{lb#Nn`GIWnk zeyV{odq=r|P*jklQk3(^2icGczzeSO@Xth2?Azfzf$lUTLetjk;{BNLP*G=^c9%Y(y z03pF@zok7CSk?^ht@o8pV<*1MPbKdoCo%VZNk+%638ZZQcP-Ol(lh6roYrLIhJGa z1A@Y{VMj}JS9n+a)W-u#<&EYASb~Z?=D#6^?Qzh~RD*U)4wOQLbq^ z#xY)r<|}*0xzho0x3ZE0@~M?ynV-`3<{Dkc$u~(dipK?7z?hRUln1<3II>Y*SFPQBy@tSC5lILBYUTSs+-d;^$E$VU&&1p_x`D^IOG~;u( z_wSXlg^0k!P*k&MC|az?e81)5;0^^WIlK%kIyjYzP(>XA`>`cH+{UAL)s)L2;&iv7 zx&F~NQJ#~^K0vT*2kcL&aOt;R7a{6LKEUtKLvA8KN7x{Wa)VjqT%Fmp=XA$={iWov z%!-dBncar|JP^joFjt?sXTG~vj2?%WRktXJ+fyGjEU;+^q>7JF(ZyJ32q_>-*d7&@zJ5aQEaLyRCyg& z!i!P4(nQA;d}I+FG9`@+*;P`7;6IaEj)zU;^5bE=e<=$W7SGUs6{Xs-V_Yt$nb3M7 zm8A|gkm!MdscN9NviMdmIeV_LBWa#Wf#ji`~6>iv}t+f zqFSbb=m<#^b&YnE4G{qwWP9l8E7ry3T2aAy`J8(RWBI{whUy|MyohW1Mc-Y0)9n1x zY}Ino6{tm(o_-fw`BzWf`*EyCW6K|kDY}u>jek=!XYmHZ$j6^%m(@0(NAm+Rtt5~r zk=jYuQ{CYa6ZlJAzrK6-#NeM?mSZ4=$yk}}f35Tq#O#Nkbs#bbwM>rA<)r>1Uj1C| z23q}Jh5k{b|G}@`lM!Tk5JI(HP2Ol>1$-JdFqk38m++I%x|I$|FU&4!WbnyDTy|Gy z%Sf4bRPX+y#3-U)tt~x?nWB2tI*#IKT3_==IvBUgtpw(`8wq%$^Xp(~JX+UJ!(t7Y ztw>u-0M=XuD`x6n{uOh%{aj~|^e=Mhyn;>wr>QO!N?s4FpRsYizG2ryWl;_Es#f%~ zNjN@i=90m|CmwM)uR>}qmUJo-}PybN#f1r&09ldjVc$Z zEHyZF^mtR5;L9BsgEjy-t6Nr$)oODW9mZdJQ(od3|7z7lmB(DGja0gP+XUz*A}Qir z8uhRZ?VF{#1%B8jFOjo27K?COKfYl2bmZwZYgy%=OrZlm>sGTAf?g-ICCspgid{|A zpvCDrn-+DM1N%QZTmIq*?u_1lsTzR|(#7J!;|hHzp>awVarVYO|0NR2C_tW#L$h*UuHSe!rxWoXeKbEG?2-PfN_k!X~p}cs?d71Ds^>o z+q^rHQ-5qD0smJPe^kb6VZ80fb{ZaXw&iQ?<^hJ1*|nzGR;8t>vU;Un0LBu`IBar- zwA3nGRaQ?g?P89#zZ`82v;aO1;4_sBhxNGPG>JAC%CQJzSreZnQp#zbmF$Q#)LBi| zd`pqW)BPFlcztt&z>vYTDdsRY5}GRYb1I|LrtUFuyjZfX62qy+higFTM|OL9Wcqoi zW!9MV>Oo~2T%&L;IOB zOfhwLf)XebE!&Pd%9jyS(PcAPzuM*`(q_z2!PIBM>nEqn)}At({COEu0&DMfXchyN zju1WxW}aP>h9-~qO4y<}vBAm9S0Cto^t9EX{@tOp)m#YNtPU4#Is9lS_U>h`0|!yD z3sYwANI2aH&!qldZqoDwG1HLz%7nS_wSKTy5L1@(KaB?XT{Qkjs1zWfTTx<8(xiTnW3A_$i=Ao3&^>PspEQn)#A2twaa}QP&^**R-~!Q5afu6MqlBD0E-Ra0BHeQE!&Z zC(EZ#X|4NVKmM`X9clPOQ~%+^z<-eo_f*@h*rgWg*;#y7b`{Y_v8AAb^(`ur0e-SI z8^n#B+plXGmgk%x;l#Km|K<8|1SPdoL+54)ZDKMs8*F1Ta9TdL)GBK-LD+tvPr z{dzb^AW0;M);h^+G(9)gnvO%QN`j|7-Lh^ano1iS{`+6`x7ryq>8;F)&Y909*6Z+d z464L1!l`70iVn!AhH;K?4eMp z0n9YG#fC6uxQ;#0+Yn6$D!<7d|Qn%c+2@M3&8IQ3E*o-d9vG+IvkS)_0U;>m_2 zQ{X{C-(~m`xM6bE36`x&Xcurqigilt%RO#_GHqKgR95b^n-S0sHqgxkofuabX|Fh8 zcO_@-GJ3I!mXlu*a^Rr;mnw>w{E$)%u|acu>$FR7e0Fx+%>WONo2;5~(P}$z=XdXB!kG@m)9MZoTAV3#!Dm zpi|)yg&$lQ;dtt%_ldI3d5y%|35AWDSk5dWN$zLpQD?maNvxh=(#)>|m^P7krTt_r zNruGf(DfZMgdp7m;+t?zK>{{mSn__iQ*gKJe3<(vhB#!9R*{IM`FnX)_yiGmwE}by zwT3K*nTKnKz#(H}4)R35fEh6ticGC9$9x+$7N?zk1s`x?i7@h|i>WfCv{1B$c2T|!Jy~rje8P6q zTgnUUy(64BhhesAN9&Y_{^iO4Z^dHb3eWc14aqMVMY!v1Y1#;PKTsg;|KaML!z+oN zb>Y~y?TKwWnb@|SiEVRY+qP|UV%wY;-=1^M@7#O8{q)nl|Jc2Ib@!^Ox8AB+#ZkF0 z_XB8|qIHbDsH_7u^A#*w@d$q!DcH&AypHjEok9YEDl( zwDoY{#uzrE2}3l1^l*+C2P6+zvW1a}2qXoJbygtW-QDP*bLeO!N}V66<@Ym7<7BqP z8##ZswL9He8QnXD$dRMoeo1PC9@^~=J`{Z$8|ISytkyjEl42F+Dt;`AZe9zB(nROO zW=@obN_^n5^mAb2yx|f&6wi#73W>cn_ znjRa;aTXGW!W$J@nad{vD??oB^KfRSQo=)B2pnBp4g#@U+0j9&_idy9QR@~0E_uA6foX|@{`eUNF`NCq#H6A&XA|}ePFKR_fJg~K0 z;BId%e{a=5gWOP1d^nFNalr_9XOp3kqY@b@5+%>}ilqr@gGq!EG9l?yqL|H^H87)6 zN7NS?-3@h0@RbbRX(6~Fs2 zK>J{LPn>A3lD9NjoEQxx^;?8%nz|u~9_u|Sf>3i?g{Ls0#Bg}m(L6-fZcilR?tF=GOB__SWyQ%cULF`UX_PH118nmA0!R?a zZa|Z*LIQG89i+*-MjMx8wORn$}(_sRW!bc=eD#Kt^c|r zCNj=aMs#+{;g|k9=zxbxf zR;x;cC$|ls7fRw}bu!vtJ*1Bcmn050YuuLlgt~Zv7a)fdr%SONX&SNR$jOHB#%-qU zMt^6voS{b)0GhfM5NYX*5i(9DPU!MHWyRQHCt_e#hexX!Qx~Jjm4k&7`$Hvn3DI*U z?6sqk*(WAJSF;tUIOAAilZVJ?xQ3&7$QUR_DoJ2tG_EU$T1`zDg#8i*nrty#160q+ ztf#&3pM$aiLaLO=(m5?D7P@~DP}+sa#&OqT4!qh2cm1)TJkF1(Q%dL>>T+aGbJJzo>r7+bb9#b!{S!IJ8Q?GyTC% zQm}N1k&JATbrG>DI#WlYG!OCGP8T_<<1@whTkd}`j**53@eDKCG)N=YZA8cdJHM^V@dcu0BEJ6C53yu+z$e z6J~uiPm-N9?z6sd;zXk;#V=x3#O*(qFqR9{i`Ex9IBJdR;Zr(Njvx(;N_in3flpP_ zQpchc#MlH1?pu$&&}2epJnU5tq;iM>+d6?I!|~G8AbfNQIr)PH%_Jbv5K1pO@ zQ6q+2IZP!e^@j1H1r3<|F_rp2os_NGnwcL7tD0zw{blok7kC3 z!DZcL!&#D1v{)p8iwL41PAcDr^p78?k{s?-J*{>%TNFio#>VP0CQ6j*Y-=*T^{G7@ zVDqb&F1WlTo7E!DkDt~Ty@)z9!YEaeV(@?f&j)&uLakU%CK`)FYUq@B=P zxBzW;K~*(cVwg>dXnjL5yb9V4Qpk7Wq6eIH!F=aFbffUpf0HC~TvC#)u{&=V{Qj!g z2uJIYULJ%cMtbQvmlq{HlG64ui(=Q=Fx1L)%*-70I@ZiV;|)Yw7#VQWJ?g9^-1EQ&Vic0LF|5=iKCR(Z`DiT%dCsSd{tAHbDv4x5 z7l~{EX0p7r$2u8wDH2(x2{n`VqgAERMvwpSqDjX=_da1h)DtxB+RUTrZXhE=5s{`>!*6(DXnPrd~3u@iy(!`X;(2%rO*Fk6H`PnGlijh#5UR56~7Uoe2@Vuq6LcfuKQw zF6EDqg$`NFY2=ipb7Q&-BN=6U4MoGm!WG$@;`lu`pdgW=&_1V}RC_>+XwG0z?*5?{ z0}WTz75i+A?kmFO72Z3)rA*c-+@g5gO)QZpK48$Zi~eem40=3hBp>&}MFeXQlNWf+ zX=Xh^@fToRE0v>fNE{|WCvGP4x@A#8N7Q`?#d~puX-4-`r?OzMd9=WhOslX~za_Z{ zX6i(!plqDtFoPwbsBqYd?t1;y4oQ)t&tFC*k#T{IK_ev-02^||<2+(c`$E9=wrr)% zWi1B!6=Fa=PB{1Ru7CitTWi8yB$mL$$BEMeR zQ9SJtgp!ruhgexlWb$MJwvgz(FfO%nv~*56y-}`m;HCV3`QUXnJRPZHDE{_b$iM0R z{F{mm;JW>P=!yV=EV0`L-@GPRsH@YLLMKI6p#B_-DN`_>m}|h2K0?qq=SvBHnz_SU zUQP~3S4y7J<}zO z&;xfmFc-a0H=eI#zDt)x)*0rg%ob6TOG1+wDkglpQ<@;@M9zkYlB0A|nXn`;8pD-$ z%CO~@Cw*-Ay)r>&G-WBVHn8X`1eVCYF?|VQVx-x+H}LFzOB7FLk7O}Sjea+;p+M9B z3<_18A)lM=3=9UG$6f-_n2*#l%Xw!j7lmxXvPqbP$Uw}@EfWJBj53W93=(YBt;3+5 zNF}8?1l&ixl#_!-Zhr69;#SyhT$VGZSQNM+Nx_E)WlSVYlMI?Gjn4k8JY*ZYtr0%7 zXhykhc5V4zX%B#1JmMsEvQVaJB}3XtNz7+tiW`_1EJJ%dv^QbSih`(Mo^DW36i~3n zd~mKaf^;K)uP~H*&5wxlq{voDNAh^oip`qw^oS%D_pm_cnh)1jBU!shf_)u-CSal9 z$ImIlgkR*;rWjPeVGlp@sl^abP!xd@n3I6eR1!)^QoAED{|YM)I8EcSKSlkFZ*9ku zU^-JAJ3z<2wwfKV!7WaF^jaS8zx`?*S%_ZQhEqdGiDyFsxOHZbp5W$2ZnY>{=A zCROI1u1F#xgXnw}`T#|k72Ce&ASzAtaB+F|yD|Ge#vHAqQTxKbogosuPhccvfOj4a z#iawTltgu4$yEAZX9Xd?;|pF2gMrjGkY=CIw>a6X7vsG&#jZX7b~L>0IyDNu%uNlD zI;Ao}Y)}VistL2@qza@?}1zFKb4gVkq6JnK69`_z} zga=7*sk0!EMdHqZ@?o4&9*vr|KeWt5>7J3=?xPC#+)-ehgfN8*m`%#y5Oi+EOW>im zk71hpj}y3?4I9Ob@jHV=ZR32%;%g`)Z_JX}{u(a?`bPmfl(&0MR34GXZzK>BD4+=- zNstUkyuf=4*HOJ+0dePPu+110}++a6H1hT1C zR-ZtiIZCkC8*c-(Xalvkyh@^tT)54r+a~1)aoc!g8YOX{y})Ng@&K|owN<#avI8|@ ziNn2QgY?oz6C5|B;tFcabmGR#8+^sAI-MElD4oaJ|37yeIlKLKo)_EuL0U2e7innQ zawr2^9o>%2=jZyE{1NJ0E_vtU-c#v4?!HK_&`XZ7Pp9Gg$V@E*uWzi0~JD8v&?{sPxvc$17|>Ce1F=UFi_$) zgJ-YlR3KppR8(L>nWTQ|bc=FYXP8ND01AjAT8_h zaNhFdX;@XYrSW_7Nx(_czyv3|z^UWH;VIlw*?#~@(K)G)H$N11LZMUFg(pU*u~@ON z&>q)8b}oi2NKE#rrAYC(OxWG0#i9Y{#B@0XrFBKG(0f9K({=cDT}rkb=?dGLWbe z(WQJ_R{=e|1pT9cRO;N7DV<>*?e5LA*@KagtXcqu@&Ea3`_>hxSPG*xkaH8`l>0PC zKLZqLPE?;WvV$Lz;nG!rGoi3XUNB9dxF8rX7&%Q>W^e;f8JyfL4!zA}VDcDM4|a6b z7iz_N{2ION`f6S;|+zg6D$K!6?C!7?Gq8xrCa!tM|$5vtWOlO#lC; zi!HPaR6d$>xjm~F#H)PvB@_}^k8~bJ5%Y#Ut^qKGjv$zVZ2(W00e zk6Sw26kF3}H%ob#s~xfSG~u^Qs!5o_Qx-;xK=#fsBs^e5K`3wwAwreU7^cv^+4b8< zlN#3GL;6Bl&8G0OZzp6RV8IZw80eVaU1I!wdmdcsVD+oV3!k6zm!mI;>e>WuE0`lh zw}(M$;%}VSk;@v)rKs}TT(r+GpZv>lKCyB+E0w4=8m5M89|*MR8_>u_ER)cezLM}> zcxr=lO#Eqd3c90p_xAYiW@?n1KWVv>k~!tN?wSYQbw9g;AnCUd2(x=|NL`;Y`8P5! zZ9n$*6@SL9`QAW`;5S2)y8cx--^bFJtvg>s!Pr^}Iq$I9o|{SFACcb*#;0JP<0A1_ zFFo~J9uOd`GI%vkp1PCJZ-M~)o5Rg3-)d8b2f@O4?#&=U*dNA|$OQMRH54F&QJ)J= z?{(aW0}#Zr8e{iYdsEsDd#Enp3{OB(JfAy|*OxZ@pzEz+Dp!R)W0jW12umZ6q70w9 zdyEGM-01x%kJHUn8)0{7>aqH5>kb^g3SWrrF`vYe!?&CGQA&S20U_b{p4HUnJXDpI z3W4_qIfxg&;-FpF*ppbejsB0E%f80O&fVoQYyo(<7NmCL1jMCxYPIjiU~_Xf!%rBV z=hmtrrt2{pSC4O?(8n=e99(sluA*)1fFJKvjo@-^Pi$501pnG`cVA6^vEBoKKW10N z3+oe(a(MVgU=Ua<&@NKe+`negt3I?Pv|Tt%yby2rTv5g2tn+x22CJ2-yv9fNA-V6? zS&pXI22ThZy2IkW4Sp^<+q-8Q9&<=w&LI9ey|M?3@>; z--6>CwEIne9ubRu+0O5>Mbq_?3X{|E!;jy)&+pMN74+g|tLdt6HcKwnhra_E&}{A$ z2b<^?ioMHhZ`cE!_gg_MQuUuw`3f;;rqCB{0)q!ZAVBF1_%5MY=X@qM05%9;^2%>W zrAp+e*P(#=0IE3&WQLJGQzJEL4GpUe=;tArwzXCMaL63>$@j`T`q68 zxd}eS+{^+9jN(MB{efJwbp`|V5y77yZsy$rUR%c>kbsKmV{@L{R=-(r8La@R6g7m% zgtA~?S5<#kEtT+V>1p@YGCE?@I$T-W`8oPFEytuB7UZkj&u+)fBI!1ljE zXuimQ+filByks-orNuz;2AVgEc^Dfz8`j)SgR z_HqNtY!XiW*yslpy*mEA2p}ZdO#P7(HVj$`gZFM+&PN%a)2-G33A^hV*l3kUnxn55l)${!7m} zAU*BN-F5-j0ee92P;`UTAc(q2A-0d#^8}6eg5T{U0l8O$7czKD@0uG|RjPa;buu7? zoZX0s9|k6q;4=mr*N}2IgR4Q1b@yi|DFXB0*T``A2gd)dx*5TpaP5U~ML8aaMw8kbDEABmL5%i0(F{^u^gapfS_&uaH>qcd~+&r>`>y=01L*QwfSFUEC z_t~%FoOX+^k~L8fq{%;6ND?GyhynxBqz@w&RT7WE5oJ<_LlLI046PCoWCgR~0 z>|{h-&Ip#WMG6nHD@0!)&0j#=Iq*8Zuusz(VlOs5Zl(bS0g8# zUwfHLb$Ls^`)?P*_8X4~=VL~~`zw*ucP5StQ9-$@hkGfqbx?NcnnsfoR%Y)`X#aMd z{ogAD0hTOJJ9yhgd`1M>Z1ustl`VGe9A~y5M)I2P${>p~r@Du7l8&9ZKDNAzDIEH* zT_8DKjTk?E3aCI%;JFV(Ly!HC+`}nH8_pK^Q7&%e&h#S(vf!B@8JXg~qTt=l*6kQ5 z>1)Ck)4_Qg2hzJEPEFkuQU$RVmf=9eYTtD3l3&rS!g_N=GSDOSWJ(DapwV5p=+~B5;8!G0zT;qCdj!ol*h3*96|w0`d5gDtO*NEfOWBYFgyu zsY$KrWZ3`HsfQc&ggGpXoW_)r1_iTGqjVh!M0HjT6d!TS@yhbz(+T%@1v6S6o6c@V zFMK}frV`F~F`;PlswS>X{hwR_LtKm=XDD+W)(q@~^KFq7?%7EJ$doQGC>dXCsM%aA zLyO#ZV2?fcLC()=bl$h+nWa~~u3mJGkH12+uUEvp=}0#SHwzDwFb1>7!k0IVeuZ$I z1Lp*&rf-2X^lctc47CjH^ApJPju)TRZPzT2^_S0(bzf17feeT0A9se)cng~hSA)C_ zez-Fo1<{lIn{lAE=c_%$U#7ZJyHh_V-M_qS+vkhS^;tj^PdaZhGk@Z3WBcu_ecAx8 ze7zcGd3a!NA-3z!&3e2;9qTbiQvPw-UzU)eHauScc7{@~xgJCm;K7$;)59b8MX)jXXY_QmGDQ>V97i$v}!7TM_4@j#6kN2f@ac%`w z;JO%6yKa9m%we1mZa1N}ZD1647TsYa1YI`UcKGQg!?Xywh3=NV+~E6%xK%X% zY}+5G=|4XvHf6*OW0D=9hXN;R?R|! zF>SkQUZd7O{W>3@!KlU?$*DFw7G(pP>aB>*F^93pzBc$$HT{@Cbsu%EG2^s;rQ$YQ zdpY~g4h7v3ub9<;%lDP#8pLV!mqh||q}`PwrbXi|vK};8R;Z3GP^<21p`$w5)hNdP zy&!d{rqqve-si78EHEcI8epn9P426_SKh$NIkGVC4HtpFZ=B2DbwfS>1F(X-Fh+Pn z&FL_p@m_J&p~h^u5DhpvzC04{4U1|7PdwpXmP>LlKjt=25gl96q6SEB+38iTyaf)- zFbS*fY}?9sDQ3zNCg!JK7VOGOI=<$w^ocImJMN)Y&+lAW6o}rMwJVX=@fi|f%GG%p zEI_6+A5BiD8vKG|Ak@YbDHbRu2}(y)-3_FFK0rBX%)Gh3UH@0lIgmnR)cjyLSCyE5y8G2AkoD?UmEU zdL~2B&DNYR{PX84HQ6=FkcnST3pT;G7G=@&ZAvR5WNmA<)!t*P+U-a86*V#%(3>Y* z*KN1!l%AH*1{??3cg)F8D(I}1BAkuqr4V$u%jMg1Qt~M+w4D-kvXa@_y_gdi2~!igbB;H&& z%HtkT+NTEsJpSt*n?DsNSmM!Z5*?}} zjHxgwSfXiEJ3HO_@WSY9aU#uCMviBqV|(h`-ze0V#5*Hj6;_KsPm7yj{FxRK=oRNg zXs1GylJHiRG&cE)OiLK81@|&bsY#NO())QqnHwT4r9$&JI>~5TW~y^@UWryy&RG%a zIQc`0{EY0)x#8z4@+9x=`SgXyS=n(FM(kW6#~R0{sO{+4F5hh9CnuaaPe|Ia<@wJnU96<+XJ}lxo@%Mla;i@{@1_V1bqm0|2HV zEg8w(oUX=b76a8wk5w^)#28hKWwuh-Vl0a+GuqLX_wW4~=d|z&FDyXgF*eB$_Sixk z>+2GzbGd$2gvV;K!{EzpF*!}xzzV0P-w;yIelVSKP7l0t!0#XBwi@infLpx`we56L zHt32A$R{JhUiyspUC4L%I9v}W7b=(ffS5%IkJ3i*#{sn60#ej&a_o=GKNW>#%N59m z&+bAYAi1S|Z8DYF3c<>f5xTLz6e^dA@F~3j4HCYUu`^j3_+OctwioR6N0nk!j0d2H zB>-t3Z>A2pt&w6w6%a7|u6sf3zw=YcLpYO3lTUQFTDGXROG2C&v>FwtggIo%jKdZc z>zPI3)dS?N#pPh3^6?c}?UA@@@2zu|d_T*sEC``UZ*hHmFHc49Vm)Gtpspgiq>rA+ zM?$PMnU1@s&)p)tcC*DO3PLIOw@=9-E(3AX({*_;kj59s1U@Y58A@k>Rl+1yg6L8NX zqbW+MK@&u^nWu9!&MKkqmu(z5KMdB>oBPalvFw7cbLc1_o=>s3XpI!RO6kfAZs6fb zA)BGGS4NDw{(|^}tEb)_W3WiNu6<5oOlhhG=-GUI+KxTIPvg!4yN!41#k;TU;P-*| zvV^ZqiqA7m!cahDz9p7Y(|&6Zh9X+HfBCJCet0X~@a4SxH6z(DO?p*Nu0Ke?U}WTE zi(Sd3-LI0;NKP8QkWX^3D2>JCcSFMb7801z(Gy?kT33uB0$|)UxTdzz8gyitIQb%{ z$x&=rTZE#{rVJ+J=d_ULQV_h2P*cra5*e%sB+oA?Z>Gd-c=K^`TFA=S|bM zza7GAo62e<1#X&V_(e+nPA_km1d~~uC#P^bs>{37f$tff5HPU^p1V#AfsNQ$#&d9> zX7x~$HA3sIhwWvwCtC7V$4tE|f*2-1X+V%cNmGpsmJrJd>A&NUfjBXdfweroVV~i3 z<5b0!6*xV0d5vnS7|r(Cii=L1X^95ltbkyC zoe^BKvG(2prtu#z%5su}7x;d!(P+7+Zlu$B+VjOCk4O*!0XPePmfB}^_#*>2{t_XB z1KE6=LZ5UyV=;Kw(wQ3OWy0LNo_yA?;NhNnl=zqSE+cQUO#c#Cf`IPh#pp4{I{9|h z*?phM&4H=JyLS7sM=X9?`v_9A`SN{7-jV4p>tg2kvSC#g*7^%>*qfuNzZCXl?S24Q z$5KxqFk3zpxrGH&b{z`D=LtcZXZb zfh(RlbOx3ohS$Y~r(dQri_f?Yl_`7VME{94qcp{Z>h^27cB>n%_ni?K1^D##o8ZqtWoRYUw-$+wKKKjOLurllCD zZ&PEP(H_PExf2tLxnhl9C6+n-*>Kuf`H zhM%Y6(73PeN>)UgAB^L5=N+0hh81LqVW3)xSN;HQJzmMKsU_24dS@r|FkF=*xN0+E&CnXh=wED6{kMK=rl9kzGUIjnan&p znXbe7c+%aj?y0eVzvn{c`H_>5`&N&ZRPC^VcXulx^xmX?%=B6!d9|du*iw%?Wa)X< zftTtl^dAwP4aTiZrNx`SjWmjN?LoH-r>1eQjC@pzJN%`5yPXptT@^nP z%K=_-)!s)Y1d~fk2;mMt9a}=C$;g^2ZI>a~?AAu;VCVgf?)?KWkR;@Ro|Al5m#k=~ ztZ&Lz<8m-a;1}D%sAHSN;78>IKt!gGyetkcWSs~tS-KkX!E0?C-W%3vn69R9FuJXw zIJ~ckd>_}asR%J1Z=nM@9r-s@D+@XGg10VB=V_6efUv{4d%z02I8dm`+wR3Oe+81c zdGuN@6SV;y&^q_YV-lko8waW?+jAQ7lB0Aa;mDvp_|m8fC~?x6ueQ)a{q%<>fCw*PNT3^G5wrjaF+x_W zhS_Kte3QtPIm8;R*Zl!e8z4#;7s-mV!Y=ecOLjj%pyKpXNT^pC&8j z0C`1g9+16ZPGQhuv@hYGhtOgRX~dQkXr$Nq5Ue-S#*>e#5j{kj{5j-osKS7li3wX| zOEp}8;}r^pANh9BE)(Zhjap2P3(#DH8{hXx?4Ra5DLwW`;!;LClMnz0#C-82t0ylK zz+2FJ&mz%#%X_YU1XfN^2dGnr`Y@!|GuW?ec|w`f6ULA~<6ODjcucbLP`trkF9!B% zcQo)J0~C0@wJg~(GDPRZ9C!DfL&3daK&Y#N2yi zM64!;8C`|Zr+_T}!&~p0nS{e^5j-3rNs}efzH_ba%Cp-t;EnQUokWjEmeaZG)&-IvE;!@MSV`WR3bucpa zJ2+aoJr{>B1jSqNK4&z`(uJkKXX)KUC!_zi5J0$e5W9cdQCuzRc0;A)m~NS*0?4D+ zI8}7w0QPs*wSF-*%Iwa@w#p1-=Y+!LSgSe}pjs~Z?W7XHxvRb1AG8*y?Tql*@GIHW z=1T~d&nA#a4y(zS{+baZirr-XRFYwd5zXBLOR9X|C{GDSn%h9uU9l4z*-biMt-62C z1*#-OI1R?sI5|8e`*Z^p)$8I+r-yr45WBz?N@_;~WBE3XaF5EkXL$T72HKHE88RxR zKgxbuGr4xe2Gawi_SdF~mvGrwx`u|gT4`HOIH0Q!fCCU07Y89U!r;SHMkZcr1`5~} z0{g`(m9c|{{($PwL^Yhz!ei+!kI^E}5ve{*QzqOPDjBoS?DMhBnp#i4{wKrwU9xpD zi)Xh*k;i+vbO;q@IoUfoI?A-)5qxEq@X*3@av?!?fQ>Mnp0@V zq`)R3(CJ3?!Jc0Zcg;h#iz&93KI`3n+@k(Ew|uL^o)?7Tse=Oc*f+=;V5<2r;A;Fj zK+^N7!VYe0cWnG5;BJ-1~FDxpQ$#^ERUKDqJgE6h?1Hqs)VyNG}{oXT~0AS~o9>g@S`pjkisP@$8 zKqdqEeZKwa6Ijk0{2DgJcUfGomQZ1N+u(!U3vRO<_2DKKx~^B@{CpQCRJNL!Qaw6d zb^w(-IO2CTloeMM0$RJMb`Lq2B4OcD1^qOS}_t}2dcMIZBd>9=Uf?}S|YXKq}db0OGzC~>=Fa_J>m$=`ml}` zO9W$I)z8Ef&>vQab04y>{ zW)wR-_o?uYhdgM4ZD_=T1sx4mXKy;Bctq#Rhr4hs}B7EzN~yd%+9=o8$ZqeC#{kKUjXj?~DZS^`@(C zq8lr*_ys44p^cOTKCEF<{fY>M)!n&J5(L`RN3TzQ>Nq?Qm1HHf5 z>G=Jsrc^r3>&(KSlMw@UhbdZlwtP9J3_WxJK9?t4=Btd5cQElZ8g}dX$kX@`8#89V z>Zow_mpr66g5}a`1gROxx@qD+5Ac0W*lcILv)SKgLl!`~ZmMv(@#%_=%HqOqr|@6X zt;FViqCs|&VuRTm_z!Hls`yVBw+r6Otl z78V==QD1RMlBTPpgI%a+SvTh`*l2Cp73!R98>aC-zO&F{NKh}lBDd^Bl44HTT>1MQ zqs3O%*HQGf2sfLrWXrT?sLgPqC!%h7te~IgI`9Vh7e>r-#+}U3aK-~|;fi{_wHwSj zz46l{+XC-}nasSL~eUu!~1aDJDqQ8COFMSgGU?u|^KwFsF_~i9Cw11nTzUwp9 zo$B6EZDU^B4mNpU0Q$Cv)tg5}Y+pfC!ARt9^#i(m$Z6{gj}a$mv2(b@0z9H(0Tt~+ zUQ=u)f^GL2e|7exy2Gu(wDz({4t=UVnojK56Fp{_Lb3f+H#v9+bn7JJ1NG8f4t@`; zo44NX)mIbb!ET&jV#o6V8~}9K|62;MD$Mpg6qAo9;A1aL2V8gO*F2*-NdFpa84lf4U0l7VSda=m$xGmBfZoLN7b zWS!r&CRHHix3|(8!aUA#vo-Gg5cWd9Z-4-d7?uW-Y`U@G^>E=oudn=j>~=&2&c4TB zf9eQ8sd8ou+U`VwXMJlA)>*@O>D$bp7<3(I>BkX>p0KGhlsNpkXV&v$7C_dSWvRLO zyo?gRdqdsxRX+LSP{J`jfu&&K=CJ;XKBZxh|GtN!x1~YZt`oDTzGF3dANOQ@wDVYC zu8e#%2;!+|`1XMV7<3>9N9O4jJM+%gv>IgU*E~=tB9vsrlve>B25LK&a{4>4;Ek)X ztQXP#;fdsiY2uTz?G$HcD4oDW?&ay4N?)-btG`m}mIJQ$-+7dO;UAfA2cS}h@&dOo zgpu9k`bZ8vMu5E<&WoP?a^q3+enYbR$OHwvz4_*4Bbe;cjeodD90AtmTPy+xNC=4% z?e|AbcCHhAu1+e*k?7D?*~>v>PZnuTn)HNVu#A-~O`=M<7J!8W34A!X z&IkL0#HE;;E^~mLR}}awE4(F}*ukqn?R1ex69b>7y6lMBQHm#2@NoJWKSgPv-WIC= zfTG!0mAV5h*BQ$UI7Arv=srA?ol~u-NWKw-XlupTwqwRw6zi3S9F~H*;a!>!UG)ei zI+}%X*f@|1z)wfXv`DQ)ncVl7Sdxq^&3_ov7$MK6{R~Paqt`4XI@A7)3sT~?!|y(f zm_He9_fL{D${NRwSZHN6vqXv7jMa!@l$F%4pYYbn=~O({*BseSo$4^!srd;$)oFwF z50`(XUid|9-w(1^y+ny{I(uN(@}I+G#}3zj5ds#>JZC=EQ37<4!wc0@C`-nMcsg}I z=D9lcZ9^lQy-RmHqdL~*&gdA~)w2}_(*tsU)6V9cvo-qK5U;xpHMA%hu;}dr(6o9V zj@A>AdxEVI0PhPQK=zNEVX7!(?DthL!d)-lt@gU?H;+ca)1hwPIly9kA2YUm7Zg(q zw2g#Hhe}*$1U9C`8GS9A(t3w^^-lVL@MXfdpHWt0ah0*T^o;fb8qL@X#J9gn<}O;~ z_ATz5_o4f33d}G>;sHn|OZUl0!>M+6Gyt9<`W2Eem~he-)}V$uB#Ny2mk8hBmw(|i zI%*v6YG6;!V`B7#e_xOv2mDEw512DO!7#SW;At0~fX(3Kg|^d9kgI@tU;3m(y}8U= z_eozRcLgb2_eRXp`>08b_3X|H22|JdlJ%c`8UVHKnKMp^8s^2ufxWbRl-9>{lL&LH zs|3wIqZWpZaKn6in_6n{%wjB$bnRIYoDhUFgWca7D6s8>-)&W&YB;!vO6t1k)6sxSAjn6TWlmkI+c|4gi zTg7_12hO9&oa70rDlIxX>(_$zq%t*{GSwg9m1DGpTx8&*-U&=kkJu9Vt02Upn_!$~ zpEwk#lV~s(?za%L`ilxw7=7L5*~R^0S*Q!sW1Y3lTJR!1K6O=E`&8(%G@?=a>mg7t zE%;UaEkJF^eQWbw$h|rv%x|c1%_l`M!Ai`A+WlQp2+v)#%$AAdJ{>JY%qx=trg)h= zYyOwkWEU&peealvG#>}j_!)MdhMLKuTp!%dQ27BYd*o)u38GsAD@jx$pE!{C z8|wl?t=fZ7Dg3=|)}=5ws42crliVXI{^GchKtf$q3MiYOrJY0@Dn95-K%qqrnT|KN zP1rJX(Ul0jVGR3EEvG2*qT|1&54%?v!-5#rm>oI<$#XUhc{4sSY=^Ea8IJ<2L4(gzSn zW_2iOQD^Z2g5tzo8lA}NA8re%zCkSRMjA-tC)uMlnssdOp@y<$d?JSf2R!t|;tifW z?vmuhdy(bo$Wb|EbfCa>IR@yG7X3Tv!kQ)1pho-D@lIJ#VjYrTNAB0X#ys(%!Z{*J zp<dX(k49Z1^Ec$St}-#@ctFX^*rp1^2nZNq5juZAiSKfSmRj&S0dR=D_Hk+M)XE za`L48dVUO_$Sf8hyx0T&-yMpbvcssz6jjiPF5^~&9;VeBRoF7imB?#LxnTFGR1IUV zZM*S_Cn+3%FpcEMXbLYKHCJL@%;6<)|KBHqgXXSDqL}f`^PJ*;64BY?R_29Av?Xe= z5O5%N3Bt^2Pf7-kO^r`QPqG3GHEIzz^rOMH2e>0R1r7)0>g=C%G$}jCkou?o2DjUILXK zAu;P}N(dvcal!Y}57@~JZo_hr@}-OaYjz-wLK;JLodsJ6YR&!pK8!F5!pBur&qqi9EpQ8O6}1Ll%)XhOpmc0U}6SRcBC2daRT`<|0Wz|iIg+$Wk`po8Do=1^ARIwCm15fZJYU&=(Zlh>GFST%HT@> ze^k8#bS2T&EgajnZ5y3*+#M$!+qR94(Lu)@Cmq{%I<{@w{wwdj?|%0mqmoevbxxhC zg*oTidoRz-k+|oU+=he}ztp(F0H2>F8#LtaTWJ+vxe@;-mHeNuVfP4C8eo2+#q>B8 zQt<`z-3e0R;-M@{U$?FTaiu|jCF!I-J#0C839P7y=_uUDC}aTa9nDj%DT*rTx|VYoevA;cWjRJL1C$ou4o#nR%qh6#M{z>HCX5Q#WNS?OfEFO$uahJrKog8a z>aLJADs>=LccY#Fbrc>^t!c8zjBB;KR2qfEk~t7v=xjhsNnj@szD~{Ek~D|CZX|MM zaS~CdQ_Ihre*}dv6I`eW!Tg^zDuOadtU0YqN_W|$7&=9>#!{_0?55@s{)+%wi5Jyx z+P>H~@lWlXEg|%eawtaBel6zp-~D7?62Kf2 z$e67T3$(rC*dL?{^jEO()Miw`SJeNEl~m6hgiV>(oW~?iqVg z<5`zttsF{RurUX6oxyHKb{XKyEG9pKndMq*!@v}L9o9U|N{`@@U#96JcQT4=ST>ixDHT%8GN=^7rU{iApAM+7h91C`U`cf5sxeE*p_|GLs5v!Zj zTflZig=@?F%Y@U#1DzO1Zo|`XCO*lDR(`^kWWQ3xg&`<^?M6$e_Dfm}lWw9ip}$t` zXO9ZRN`qqQk2T6ARuRsTZBlya83>q;RFSwT%6Hr(l=XNgEPAb`MrUs?sCj)*751Nz zYrj+aB{&@2;^UM==^%ed-daDRy2CC20zAWtV_uih9TGMFY8D;V)QMc+zb-ZIxey$~ ziLW97vhlxOVSz@w`?T#wF10WF>`QbzGZGt?;{5v)@Sh7o61Ia5 zL|iqP-Sz7$mMuJi328{!!D{`LhUC!_2ZIIbj$M9Qv}Z8PV|DIFLz{OOLW=9;;F-az@SBLG5MXcfdc3K}TrQ;6dR3E>P z)bo0wr`>{p-5o$PAB1ZroY^FKIaT~vR5zg#<#L)JC4?QUY0vk2HyW2dob!Ji;R({9 z%Q2l(z-9Du35$F;AmhShxOgbtljm!K?NXT>NH{u0xfwT^bY4sU;=m@RkmRYtP(=hY zyRWXbr`_ey#zqG@K+*FWLHF>)Z90=ZaCl-~l|>;?xui}=sV&~sCeke1O+^E!Y5WGqWjj_c2>)oAQ6nX8SRSy)eMZO@kjBkfH64YO$+N)B&mm zZ1$&kiOwuUicFcWbhwknlTu2R)p`D^rrY#1kbD0~hB>XgE|Dt~)JuQ#?p^2?8~;F; z>2p#maGWjWcN`v?Ol0&& z0qZv$Lbtfl-wGDlMwKcKJlr5L=gvc+L+c)H_D9i_yS4q%ZnAi;+EQshF1i9I<}xhN z_nc=XKRJr|+tG$M7xg&5$)du7qAiILJsbzfMQiiiRBg#h82~oHOKP~FFpRmJg0f!9>k6scm#JDRvVeFP zqRSmt00Mpc?6H#8m+s zy&n^)u4??mRqOe-7O=CZAN94k4%zONqvG=7#V3drhAA7Liem;w>@x8W{QsUTN}od% z6~|b#{cp7CY6Jd?!3w4EIPsD~r05jF*>DnsdX+h`e1ou)5n9qFDS{ITw`b{uX;CF_ z+O~N6cK1B#R$$q&(0*&Q0d@!)PS)^Oyp{$f;3uD5=;pKSfH6>ALQ&C+1at2Yq)ley zQgP@w#YTEK_coqJYnlK5(1e+}O!IqLgAV+w%OLeB)tiQ@;mYFR%TP(p#1xMbABy%@ zwmqD-f>Yag+KpNa{ePDhCjK@WRhC!?Gb90_kDR0idYj^{TwGLQgCIX85|BcMj(V6@ zMsX+#ZmC>X4|T?QYPQ{c^o$31IAlX@f&1ppQH}57^uOVZM2@BI_z;GGR>y9w4MIhh zqEH5%N+FV|S1vCb!)iE&6uE#RUul!Umx&uU70lfj*Ola$LO}7i)rtO`B}$rqp~b9b zm>xXY(G!`Edi2y_t#_Sj(3@&MvV|vG{~a85&m9w1V6TI>q9)`($MCnrq9ZayBJINpHAg|gt)624+;5cst785j>LFQbY_FJa7!PhF}VK?tY2-S zVemv<7zW`$kPy{jCVMIjs`k*-{+b3&Nw;R?Gk56D!H44Lm3lcdjWM+pm1snVMyH>5 z&2!tqW8m33VZ$%w2Bg?EnG}zDon|D#Abf`ru;ab|curq9GIBDt{CSV@h8a8E?lTum z0%?{MEvafx_)M*}0vm?M*XxnZMJ~(wG_UVsr-j)<+q;ter>ay(XiLnc89u7MS#AXM zmrICHyrkJje8Gi5>_qGa3Wz^1xT0NjlZ1lVjRl3-Y}gn|3tX(k%azE>FQPJ^=`b0+pJ2xVF$V0Oa_7XCS^X`ouGU z@#}0tvI#P$3($I8o5!|>^Bk@bU?$_#%R1Xli6)^hOm`hGL(|uD#fijTH}EC zaVrfCse=e^er8|#bs+19egh2xq5k6S1{LR$>5)dPi`5a=|C$gr^y{IHj5u16Y=uIP zx){wcY%OA5Xxu&YIFA?~5(9IDn&KgogHi$tf4lEU%ze~=JJVkZfN2!m)(MF;0^dMz~6WeEEtdE2get z{`3BUbD~=$q})a?bRzXuxJZ7G6#D84GZbjwSA$VnhVHWo1Vej!l%VwUE~Sgb^b2p0 z^cF8x9-grEOvc43Th59UR9?S9O!fAAQ0wEP{!M*m&j#x*!N#(#Q~gj}_4XWW{0n#C zAC)WqjB9I$=SLzBg-|`jOTp{V^PBse5BfVvw$5%3*?+yr z=gV~?Vm6Bknv9g0xhgaWgw;4Ans?wbdpaBvQ}rhqoy@EHXFi)aq;9<8V@ip%Y`hM4Q-J+<%Wo zrnH#3FqJ@t@`p!Ev-O8B2Q^6JrF&hk!IIYsZbEUmu+u7JeGd`DL0g@6 zBtee4|24>ju6)VMkdD>_Sa>u})_uv#=k*>mhg2>lF4}assRX55)45F!4+4=4p2s(e zI#P$ct@h0Mx_`xKt6GpIFonh{JJS_~M*!?kEA$weMeA4KHM!+5+55;8U^mjwAin#1 zwTT_c)0EI_t=KeBYXa=;bTea7KlBjNS3mEA5jDAR&fAb8P>vs(+J1GyQF-Pwusy8QW2-m`qCH90dA zE&H$@@v!zxW9q$$RTc$th}BTpOTAznY?aLKAFbB}k6(>IUwN3aDI*-+D%6aW4z=3p zN&E=b@$L-$W7QinEj*#Z_8IKQ#(a>8TUq~cy4_&1(0YKE+D4$)&_(ipY%hhPZb;y1 zs)h}QlX^d#J%R@hQaln&|K!zQHWhjZoTC2W!1s^aatPsBfXM~MzzN=Z3mEY47$^ijleHo?~*_M85tudL^rlPO=4}ow~ zdGPW-3Q2Tk^+4XA%JzGLtqx9>J6O)nAUOZ{n<6ATeV7|I-1xbyTTs&*AF|C}T&^$D(yn z>04t_N(RO}2m8J3DX;s1M2g)!oBT#ipQ;{VCGGbgNS2_+G6YPgyfFSMR!0)H??+hXEM$kj52td3KV*9M!sAEj}q%nsM6w?QhE@V*k%@_2{kV_043 zQQ|1#lv+GEY2l_X_4Kb5U+G2TTx#|U&5)m&}f$13yvkkNKH z$>TBEgRbgFcRlqcC{c4#}cc#%F%`VakH<6k70&w3MU;1huv@#a+ZIv_CcL;Z~}PAyKIbef3}q z`ieA5z&cN$Cb-s>j1%cu-5o%C8M;{D*LPL&!=^HcLJt2{DpE%zv+h4V))>*9%W(*< zK(iS2KiYwkVdhKNzmPfj3>VyBUo|K&DJh1uR9{ z4G=!qbPv?ig9X$s*Afb*L}PL@^+zGiM1x5{|ETamz$aFZe9)@~Ata>YGiB}{#xw&5 zf2k(^ayQj#zmU}5w0B;wUT?^1I-%}gz`YUBYS)R@zM&fl9kW>30D{5C;&p%8*NGIh zq5T&>w&Fr$aLmena7;IK!;iY7#gdCIuAT3PH>{N!=!UKjJ<(zlRH@xbH|A&PfaGZS zuLui%Ao|4|51}_$gCTcuIb!}^uFmbdh}IxRU7gDpZn#Ztl8ITz>3*F7GBS8*oLDi` zLP(qeb&^w=qc1Y}O1ugp#=126tTfzFjZ48+F+r9EGK^t7u!=cu^-2L>hI4&P9r?Yz z%M=Z^Io)a?H?@NdFbr@^e|?XhE0$kZFUTfK*C>M#4g0bwnEL53+&<=n_sp%3C%&&Z zL@!r--lkWst9S3|Ri=@`g@~I0a~FM~=g_v=FF3BJ>(R2vW!*J8dR@m_3!y)t1W)W& zZ15e18HER8)}Zb6Pm-&82)e)<+mNjqMhE_$`y#Zu5qF)-K5Vg@*>z+8@B_s!1u4<8 zKX|e2!EVTk)|$8JnkS6i>flt<-&`T?k!>u?LNQw#$M1|VYq0H~KkSUQa@av#{A>5z z^Kv=lRjTfAV6@n>!}@wK$bTu^=!?JB(Zj!ETBhU04mJMF}~< zRh3w_@*hb!Y)C;#j@PE)8d6bhLBAW#LfBCikgImOfR)E$(v3%}8F^xM2)TI!ywYQ|{c-Oi05P8*EplWh_V#CI+tDM)Z%i=I?fkg{x$0acP_=?^;G zkjTByS26GD4VZw1j7(J$7K|Ke95c8OR7S)TwIjx+yTOKedf^S%b0bC)B0_TR$x!Ks zN@XSc(}GMyD+pMn4ypV7@BBbRG$|N-BHiY0k=q|KMuNs&8tEd3@Es5)yQN;hmCtx53%+57-nCH49hzyK*3)0tT z=@Ej(B*ejL!+RtpJ|m{17>Q|*%Go8{Ous@nw8A<5&P1-@Fi+S)^5oy~`sON&q%O%k zxDM!%KNBe6WLW)+-7D(zXwTt5b=bAPK{2huW~m2Pz_BsxBjM9swa8rb@`i3^x|gBt zApF-!^f|~lf!QfhTz%X^>LJnelP3BX9x0TdEK)B1;OpV0`)B&HZu(|ieI2aWie?mE zp(G8|+ftI6D^=jW7pw3(mdK(|lOkk9cG*%^nJXL_kep&Bl-}Y=fQlZ{u0SNwHEZ!L zP!6CMfYMB;anrXf2*!xmgOWnvn4z-c{D<}g0;*OP>;%dHj#EGSKv#RPjW(=#8fY;^ zVxoP%)e(sebc}NwjUK+zu(boX7q##R~&!tWlRAN& z7_~HX_dFTN`S^p)0tHNiisciDr$A8AFEofU+}Q%Lx<`w)&UPx7cW++oY-`{<=x(6y zT&Qd=9rpE&5E#&o@#V!)FnWPJ9+%|Dyf_KE!pb7ooC7K$+5FXtZMJNjKuH~>h*aKC z_F>{*c3({>Gv-Qif1l2OUkG&6Xb;i-rlGJXWrcuvv_%3jNc{~nHFMjj%0dxtihSpC zEI|8J=OP%qZ}T$QtUby6#$`P8OGBGELLD});pq0&n^FyBmMct8*?TL|32Cr8k8mM+ zbxgq0P)v8go#fn+X+W5UR&Uqj$bt6q$(8)~O+_!&hR=VU1I%{V)BxkT1i72)I+HC` zA;TYvur}rOTyrK89+FM*1H1~IK<39~U@?LkfFWD2bjQ&!EAej1? zo?yp`yc4u(XGp!l1_Le5#Rka1>YRMI_;OA_G(gb?$C8cAhtsPa5=xsD+kETVuA{95yOqVg-Pe3s-%sF3NrFMQ!dtIM10mm-ei@SI z)?B<0-bxF*bC=AQkbo?qyFmuq`}p9ND!V!w{69b`XXvbh?AvI=|L*euWm%(+S}Xfj2>nrcOyLyX2VVuE+=Kc2ELa<{RrnqTOSx$c*OD@ecEAD3fKLS zF9~w+W-(fm&v;7;I<4~DSXEi3h@={w-xj?rJXMvUsU(p1V1AN!M5J0=1YCcC#}XV2 zyw&-1T}A960ZO9$)M>QYgm}Hf*)Vf!@|nr|z?Ph0qrm5JlbUX4bbs*jSU596Pbi_t zDes_+Rb}K{@NiALt3eVDherODoyGJ=)n*9XK2w>&F$Z*^+M8u(*Ci3SR~Cce2{~0r zxv7xF63<%+9G13oDy~nL}7=9c-G!r5_Ane!rf+Y*K@E%v5i29Pek4SqgFj>rOneNF&tCi`KPep&ckuX!Q2Fkj>QBqS*WhioLJ>P^toTa$N^0Q~>l{XS_i zEiHVR0yK~=4p|U?6Age!0UJ&72s+vAry435>K)C1S3fe%Oujg37%!Ey$bXJGj{Dw$ zfDi?g>$PFbhaYxb@@#>zAr1r!oj}$Jw!saoOhm$Pv%$mh#t*Nm@pYsvSnX39{PRz% z#(um6l%aJrF!fF!5!R+f%%bII>bH@m$9AX&pIUHvq2lf*7mKx!K#RqcDGQ^4r#$sr zFFe=vg#bxk<7_U}g9V$6<`UwO%3)t9)4$-gP8d4ylGTS);93hV+e2mpfS%TF4zlp- zfXl8~b4;O_rux<52cnraXD~c>{SNkrQqLAFT7@b~Dn1g(RIpWMPb5Qstu2K$6+v3z zXBMY2%(cvWi!ynu5G{r3Eb7Mtmn1jiLLlb?!*7q(nTs4lFp+Q|2VnKZgVazSr1qru@8fQK^1)^5Jp& zu^ThT6M|%kb8c3}_=TPpFxbd+19E&L0{C9@?}@!Xi67vU2)i%3xufAJI%i5 zLdiLu;X=i$XRK`nx}s-S-@VNk#kk?3mwuGaafWgtL89qW3g3tWBrueI^?^uqA%pgD zD;XX~Fy1U%OZ|GOx5-^(w^vSfa}o*hs|gY`T7d>v;e_L=M&dXgmd`N?-@I(UJooNI zX`Sv;=*DXToJ_UT@uBcP#Zu7R8Ic7*N9NO^|2bX&uD+CW*|kx>S;dJOJ<@0dL#~B; zpfB@$r?nSzYFkk-o;LD~v)!?&9`Trcgg128tx zNS`poir+KI(u@DE8X*V8a{#n=I6OT3Qmu{vPLwEG{v*f$=a*8T6E{p=c{w6bXzlFG zO3DI;h5(X&y$q!23`wBzR|d@b6Xe$~&PQzNj}%5O!MnRc4qKGpvv-dxz`)=#oL~yT zWkl$XBp#m0DtFvn3>1E4@?liQ#-r)4V*ZXvKh%MSe^>LPIgdG9^wq=9T>E7Msy|w$ z-#ymbbjb!!h0(G;729}m)&q_jcXgRZ=)ODkN-y{EMz=rixZ@j|W!_INjF+_)*j^eu z_+G%0gW4CJq3k?cwb>q|zAwJqpfew9<@&uB9NBWGt)%a$^jXxQk*eyZ14-aX{~0&T z0#o~OFo?%52fV8rw{s)bq_ySpHYTcp!wF)c?7CkkX8jImf6lMbfCi^rNzlhxI(*0h z;?zx2(b3)a;F~Wig&pOw;(3eWR(b%blGM5&Z@~Y6x1W;a|~8l%3;_p~=~$mqvtH5%c@e>70d0 z`w%vgoGP=a96nYc<>EqfMXM`P@4N@O)1t@cTT;rC*H@m}orS+~{NPZ!@5xL8mwHfb zb)YFv6{w@LgKk2semEnQ*OVp!YMrY;?}UM{GTsfA`QBRW{s_rDyjW$wUcxrrsAo9t z70TLsb8+@Dgdt$>mTAV)yCung+0}`$X?NaY05L@?#{(L{HD+6vyqnOH@?K4xrof?CWve00nq$ci}B!1 zrb2_`lHUt!+Q+6WU$Y% z+0_ku7$M_<+Tw6wu@IT;1y;3DnLGGIF8)K_cs)4Mo{?DH(&?3D{-6GqZlVc==8b$e zPf(%9RF6?aE1lPOMYw5v@>uRDte=z@Wd<{DvYy8vZwI^8nu_$p*!J^r-_|Fc&4s@|D-OLCnr&auH#~ZH@@=@a(6z-GN@O9 z_}!`b{k%I_fL@W~KjT>SeL4I5&O(dF*}pZ5ZhK#MXTnm$g1>;RpEeFt;H>%3RW_sskpPVGL;q@w9?BAX;11Zx;t53MLb=msxoh} zN(P_~6c@LJl|qR@H`)j8;i4x{9PVid0Mm6B(?925wVG%y2^nm_t=6#=gcR^G1C{62 z#tHZe4Z`iLmOBf(xfyp4-)Rw=bHl)v1CX^Hv9HHQg^OSQRCMD=7Jk5Q-t+FuuZZOy z)Jiqc8ZZ5&snlz|XE$86U6P??w#akRmblb?55>&zijJN?LPK6t71+LcTgrOFZE0x% zgoH*;@6ql4NQY&MzgykV!~(YGBh3eyk#^oY_)WX<-y9#F_PIO5UoJX{H=f4bVmv(D z&R4@nm^%poT_#7K5{Uiw-j_kdeI=@;*(ZE(Kfzp27Xv1I&Yc#kjU>MgrWb}w68m6m zJPvT%FX*^IR{HJH>vgZJ-*c(Z{a$=W7J4KRdRdx)^3!u&GI=~T6ON=+F8o6K)3G^< z|Dp|D_-RNUucCKQ=$_U4)QGsZ#$@E!ccSU}xb*7n!jD+F@Oyal*311FJXK&pBG6E2 z<9WXE@~+bF4<3xe=vGFaI)f+-H;oBURRIvJi|~pJtzxkX5LmJ69vT`NU{T#cH!~$a z2v*kJX&zf^O|XQX?_JE9$GUo%GgsgCXFeRpS=)U9n-;nXm*2cw(5rlT6}}8W-n?J2 zlec+!92AbJ^xmU)KW{#$vYex9ds({}aO-^00jY5Jo)CQa)$|Qz5Jpzq8E@akl=j2# zeq2B(g3M<}-sNGGA|W_9m;_c51UB%Cx)=papg&ERe_-pi)~~g@9~c^6Am!Ejz}+DC zR8UmjDw(61P4>Fr>34)Y!Lf=fA~IOj79=cb}^`5__w8`_~23w2eTLXzhswO6k+Yr2Ms&UNp+~`MuKAdS%mjjfNMh%WDg81 zTd8caf4@28g5$ybnX&rMO)werXD$(C82G03uDHM{O`)TaIAc z)~tpO}ONpM#tzOwUc(nw%KYUxaM>D4}!QJ}WP6F5e z$PbrlsfpY-K`}6BrpyJs?)w5E;Xe-x6W||=A&g8(!TE-|ec|`PUsL;4_*qU~esH!} zd8*UTkATM>1Vo`ySJ3KaIom?nsAR2$?{pDh?al;p1GsWXde8elz>!Ka| z>FMeDq_0oR`}yc^cB0|_XzHn`fwn45K}!?8G@1aBd|v>3e}BJ}l++}!f~_^zqj$2f zW>NMoMxpPATGUY|Ccf_*7#n6cDyR>;B)MP#VOuUf*hLq&mhNEAjF!FK3HIg{meCyZ z3Rw+I3+1-1=Fc0$2b&Y}gGVO~6lLQ}i=qve_cMj{RJ_6o;wC=+95FpbAnRloj8cV)F@W7#SHc(^}}3Yu4Xp2PaU==SriCR}pcT zqg-EKS2-UkaUJ4Bl?D@am%f{+pEG=g0vXb`$)+@b|D`NN)7?)3V|DjjyG|eHef;qX zyY4Kav66*T!WP-bksU47r|ZXy7q^%vPJ<2ttUq`|r3$$*Jm3-oo+u9`&Hd74SM}9! z!GTvU`(q&@EN{w!tga3slR)bUVwr&dx{Wfd7QATdYdj)NTjC3OIx?s7o20Tc?vE!F z6#r*(bK2jkT2LQNs=4kakJN~fo(#Z_h7$P!uL7EY7mCbmp+%Pf_#A$}o^I?iA`C@g zVxT=lTbBrmyRz$Mn3!(;jOJ~0nb2r49xPT6Z<0-K4>!*(?vCi$KALB&tHG4HSwUpm z0-4!FW;vVB(9nfS0DKec^NdJOw$%coMIp$NjkPS8~Sgs#TIxU-p z>9##(8nuDzk>TOAHzKR;59^Vs7&BrGl5P#pZfn2ZB9QB&BwQOI36(gjM z7mG3?18<}9@1Kv>Gd56zFN@UjDBs&Jg`{e*gD>5$-Y*|`x^bO3p44brWb znwIQg$4y5w*y;Os1YN&37nMp~Lb<=_yu7?AJPw9^4|&kYL}In3WA^)_xOL`JU|tXB z;wud{Q#oIu1+Mzgt-Dxp)KHPIDiSzoLet1@Y2r#PZ%cBrH{Rx}{wU3L{+NHGrR}7u0gxq$nIA*jJs zwqkSuFA^b(#bW19Ko1=R?V^)LzTX>5*K1As)|qRU+{O*ROX=tw!Zx6CQrhl7bW96Z zy{@_HH(cyse`MKh0K&>D64?YlGfAC15| zh&%BB|JRYNPW)eUlRQ+n_<}KyKa~@D@KXIt+#iQwZpR7@9_R=22X0Ux<|Nw$_7N=c z<0-!0hO6>9E=aAj62WiS_b7u=aQ~X}s)N5z8JW3gYU25x!Go&RVBH;ph+pM-XL)XA85t#|xL>D1Z-{!eA!Lj5QQ+t2t+lxP8y@btnGp6H8oVE(&dLUy z==tRBn(rg=TnTPal%{8mx=uNfu-wn zr>ZQ7h{w^j+U!(qyT(_h*GVM&dI@gZdd8)k3jBP-^VQ~m~mE|?w+oJ&o zcjD!lxIqclZ)Hp$E0koA7>*(2w|~C1SOqdq(naUvcBK2mnj3k=glVnn5_Dgb@Mf~_ zon6zy3FE?slSYz3;|hIw7IuW6WSvekwdG7vmb8ESp-`mkOQ&eM#M>`DZ!j=BNoy5E zkS}?fsVSXLoU7AS+#s9t5%w3(g%yX#p5*!d z>@&P=0(eu*(9lrqMLtsiSEt3fyDuDFgtk9Z(Ce}Xo>~9%-TbZ$>pl-U0(Y~@){}sz z0)1}da|b6aPHH)MCG|SXnY;?quBg5TB2QVd9#j8_t5x|RhMWsj28SRnMfh%N2is1# z2G^6KB70VuBT!eQZFrA;F9}zQ+Fw(Q3-S0}Md-z_>LeTgY?@a8A!o1jAg)FT%4?qA z-Z2X$mH3nx3m3N7H=yBA<*6SoRD|cIWw=#XByMB_`)}>GWX}SiJkCdLd^4rmbOY zF)Gpjk||K*^92%nIB)+jT;RmYW=ZCZY$|>F;`>E`I{V(VphxHH^*8UEF>V|_XBv=f ziDtwtob4IgeO1RQ@Zo8?0jj&<)FSpp$%oFHgqC=i}Ma-aT^&TTi4 z^EK4|q`c8^yD$83qf;1(NB{=JeKP>M%Kgf4)nSm(zV$c$Qeq+o0uBp^&&$2Ig9GdK z_BM;(yLSe!6O_~bXmiiZ&2S9838v>CV$Q*-Nc$uBI-1)}cZR35aq5HTA&JFC?^1MpGc7i~94zE6ADJOoIi zS;EACvoB2armz~Z81z6Go6x3a1E7$_Y@DDD$aUi4;zhdcd{~T{!9WH)Ov3Yfp2@ld zjOyqBA4DPwC&2UWILB(C;?iB9YUS+HfmkhPX`=ACW8P>DSa1wH_EXI^uiS@k^bDt^-@zZZD(fY-nS0^4Bl#l5JSgAStHH2ii|Kq=;O_i6;o`>efu6JJ(m#cK!7aG#q8Fm;0WiEpa}xv z%g009$mI#*665Gp&=w&qg@bUK|S-n-$clj1?TxV)s5Yd&61zDg zrP=5BI5lUo+~@f1ZE?GZS*kTl ze!|7X#y$~&nwpvd!W1)$_oKbQ({6%#jWKM4?OFt@(LnasP^85s2XcIG1PMyAM8e=n7~O;Q7;_|^9A`3R@OhjHbmEtV{)Ej4}5940ZZy<#Gu zxbIN3i=jg3G>0$RsTySL*;y8cq@cR{yIT>7YQm;S4uQg*m{KI&Ad*xhH-zf^TA(sU zH6lAy0xlmSmmwD}t9b<1Rzf}Br-F{N z*Qc8nnpWGjma3P9Vr6I`6V2$gYBLEuALc!ukbVu>)cbf&{tU?g4~cBO=)iCHdYDhh znk!L-?+ry>Xzu|G^V2B+=iID;Z_DzzPtCLsRElue8Q4nJ^QBcItYO%x9wh1oD1Wut z1d;dclq3$DahS!EqsDBR20C-+Yt6Ys^6%e2+0DlFAI{f2{RD`RO~*6Bi3B|l4@g-= zJ%J||Yt4|^*x0HpW~g4DCj15f?*H9)h~MqJFP`$-WWAM|&&p1$a7XHp7>es60Nx3_~t+uY*Z|8_|KEu3>jLhYl+s01@c8_ag0$xW5e%Diw0t}bq z*=|4t2r?Z@+e$Ud1O@qgY38r|U<4+;{qZdAqqk6gLBSTVlr+N(QBOpxI zYd>&8w`a`lw@QnLYbGN}N4ZYk-U7$7#X&A7^8lVeJnhlfcBy-T)kx}gATTsC3W~?p z+zKm@vO1B_96{%4pd}Kw)p%O=``Mw+M>waLr->)0vsk$vIkd@}F1=e$ln?=y9N!2q zClB|wmG3;(tcworq+&xsxzhr(rBi4^Q{|HVNui<(xDVwjRag_?o1_IAfR4w|JZI<~#X$G{10t4D=94d9u-v2lAB^XUq&vSA@ z+{>i+>hx5edrOIrQ{nUG_dC*p0@6R4;r^>@a;HxN;Tfx?e}BL>>UIg6iYr`dBVZwv zhrEs~xwm24WVVN4+-Zk*@&R+H>p9i)@S7)1^;z-$;-8nu5G-EX3OH)3HQ1yMZ-VHU ztL{VS$~H+b?!%aDs*6J_l!*Ns7K0je5{Zokv%xINyc`oakG3ZOwL|ZM_fF-e4tR^B zfX$^le-3r?pZ?xU;omw;F{jq%mS>3R;I@UIyx(2=C+qgsnZshb?-mjp=cxgM+e@3{vdL8w%QD^riA$TUw{;W z(GEpIwjm7_bTyc#+wO@Y>??qVj(!ECO@p)LdV`U_fRzId&@K3|ir$cs^jl|VcPPPq zH%_w3?Lv39Tnn38E~D%1VI#J~=Oq^~@n`Vf7MByl;Y8ZcH_`3-y#N_%drnPn?&Ez8 zfCoitm6>~OMW`vpV_Wu{pWz@^JaV#F`EMAyCIFq_l1Bl*N}Zt3CuOBennaM$wC2YF^E*wr*zs0ur|2~!P*S@4-rGai-{s93;yoIEN63p`Ubzq=)MYSolD}Xoh8GZt zfZWyii({N zt6;mCXk1^Q6rGWYeUyOQtvpV8*wf}325dZBs|yJ|$M>yS&XsKSK+b`GkFWB$F-0KY zsS^6wfxoiOH(57Hp3K=^X1c=W1 zn_U6s>utQQ7wcn8SOcmBML_3k2M2q;Kbt&A($dmR?pI_Hk&&`w%!A+=Ulj9lqHd9d zcnoPNm@i+5K$~BfH`*8UE*_C(W?@!nv>0T3`X3DrLLZ;PgsHpSv<7qaT3K!eztbMsf3&jnf_J`M#iS7I5;>^BO%Km2eeuY7JT+0hb} z5qe^ z+W&m6Ie3Jl7?|(=*CCuc`*$=|%P&1t3;(WM!6%+#3*gX$`O*ouFBT#wES|UKfPy5j z?FmGVkh(e!1bnXV8~0nG#K%3=W2U`8uv_dhVxhw&y@cnizD?nT=Ykp=R0$~|t%~qt zzFLqB{No;Uhi@5oE_;zt++AbnSzJJXP9k8T=-EedtUfQt(1@xMxBHC=v{?hp5fRj| zOo=O^HoLk-E23;z>s8C@c27C_p^&=kUb|FSPH9T7ypTZKax8{Ye!>ET`=?^j>O~L2sRH_3dEnbIz>-w#tqCSUK{Fed0Oy@{O;`zkDqZDSZ z3d9~u252p}xipeUMg-h*)j4t6J5U`Fpy8DR$Dq~=!&sD6s(}P_kf{>_K;Zm@_u$Y-*#Q3FaXn43=uBeNG8{|eRK4~-*x%3fxY;kX5t!Hk z?2^mIYPpV<$mdq^lV3d^msU>xl_zG5OKl=4&f+yYT*nX0vMDEPUgi+hJ;fSFJ z6o&7UV%9B&+qOkaiY`(^ED?47rYm0<;>komt_u>$NrJ%#9ZFn+%HVouKMq5J`FB89 zU_qH-s$l20Z7)e_bX#i}zTQ5OLIdh1nMM$hXHR^vAVBTf?~*JuY@MAsgr0WM z1#U*!X=rJ?6Xb=$x!2vnfoic@on3QtbJNp)Ix2Ccapt~<&|%^0NoA+RLWRy$yO*1f z7LXKJ^}9fnn}-spjQ~ZW=!fi6AkejV9jNibNjkCPM4co91)Aie>Xfv!2qeNp>pMWh zkN`BdPZ}~afvx8q0N|SAZQHx!xhsH_n8+?=P64{*Z6N~OyXsF86cif|ZdmM4 ze1!m3`(#U3`1j~p3~j5+3r-5jToEo532J?xv!LVx<6rWYUB|Qj(HN0TBIJZZ3mFMdy8?c^8PDsxVBLUBO7OOxM>&8#tMB$mW9ClX0RWm^O@2jA&2@oB#0v(50)4;;P{dJlX+8lhm3%p)R)aoZ zub*IH)t38{n`+dW8cb%3d}@GzT|+8jkivk~)Yh`vEOUT#$qT;)Z}o;60SAXgNB<;& zS!}c;23Ra&gH}K|t{YY#w-EQSl5V0wdLy;wWVjw*f?qJ*MTN`>!zYyBVy;)k*C@ zuGk6s`$XDqZ^njC0|J5GKxDls$C{2SB&}+L7~t8MFV~vd0R6BBBmlq-0vjd~ zz>!pfYCFsZk!~)wj9LF&4wFixQcZjj&~6zA`X&HJ=m&ZrZ@J;SH*|Hq)fE8B1G6m? z7YxQAB8n?3Qy*Bm3~hmwv#oy(h;r#EH}-xTpvr&tvc7F>TxJzdY7uE{_L4n_gj!15bM;(QyR@uQC zHh#}cq)|8YtsGNmivXcX@sky{H?tugI^Bo4nSgHyY9ZybwV|1uEU!5awP#*?;2ISl zG6-}p&EZUN5&9@p^InMcY-yA_hqE$A7jqQbgtbvm|8zQoqto|9R$9qLE6XJU`q_QhIa$HDU&39Ks@m7Dz&2Nni^jz_HTx zqy-|w*QJS76H@3RJp z0f~prVg%ij10Q7wXD5!et7q%=j@Od{KfZzj3O#hW)#h812YK-iB3JJ8@Sz7g%qEFk z*t}&Q+g{OtA>2Bw02}}fKoUUI4(WjzO}V;xzDoFf`A6f6dEjMK#R6&MdGB|r0|Mg+ zj8A|(m0WF5qeA8iqf^LClf6m#oAkDdi?odkQ>}4sv8Bh*U-|Jvt@B_5H>H5(&1=C9 zfDh)QUJkLRnbpzk{X*FTJIK?Uav&i{Oc(#@kc%~yD=zYyXAc&xolhZUWsB^*T4ex~ zM67wmnQBQuEb}SJkU3U6#;DMas%9Z;?wcl5KDZada+`jZ<+!ye&+9prY4{r50m?gs zS0t@&T?r#aN-ca3EB$ERWwdj<<*+wak#2uL_U)vXCTg2lycje0bUu7Vu4%{ZjFmyFd;LY(4`|{h(CeX&8Pzy;kN(@kd@)+ z-knDNzkA^=eQkhsBrTOK!U&IVX^qU5}XUtNWc%msdT{KCOlax6XiSQo}T;d#J6|9r#FE3 zc#8r0ccG66+MSALS^x`JVYa@=imI2=x>M+=P2TowLHszSg}TJx>)ApZ+i-fVE~cd(gq@{26W zB-UQqFEHL?#AHv0P!M_N<3x6w!8<|~G@6|8^y5)Xu~!Vs4(JX%gM<__d%5>dRO7Kr z)qrBh0^LhOB&|LS6l@2ad$&n zkdkNh!iDCAc@Rgvut9(HVavWF#q;eCBr+XTX_&qnq_FSg(V|+vHy}Cp841%tuKS`w zFO{o(HCtZH0OjYn{FFXtwi6$3Q`&`xG^M$ZwN1)6#z}U4L>n$)6Ol$Z29LsxX?KIM z?7)NIN$sY65pwyE%D`bCGw*N2N~H#qzVAk&dqfb=wvhS1ZwcG)Q7|_C1Hp zF#o>4YdUMHuh+2ouTKO*U)7%tA~blNhz^DvjYwemp<5JlRV)SMsMe_*a?9e2$mN8Pas5Whl?nCD$PU-MRN}9?YEWu zp9Ni(gFs^%`I{{Cs+}&jx40kihqM@V<+44tB2$KPt_J=-Y%!dOk@7|op`mX~xmAOX z#4SY{RIh1hVfbe7h>7wg#J;z%s7-}`EU(6J%MWUszq0I3iXSPl&oD86Qd5Pm)Eq7G zIXu$g(oP!}C(`=4n7ciA^83-1AR%=?`172;&xH9y32U=83ooPlRV?JapA`+6y&sj@ z6$j=|AyW|r#(~@P0L*yv*`q;V>Kd9HX4t?-#|koEOi3gcNVJ5qUGB`;t&aSoin7>oD(N|=&NXpU;FN<_SB?oXFMBQYmG^E{K^zg->q)tt9pRsH zAYfq>hLjPm2>Bc*pR&1;@W}g=tRoRBk&uO};EjE-oRW)^AawGc?#>VyUNhf5H)lw& zK>7^xFJECrQj5=oDz~rp`-R722=_>CWz~V-s%RQ?#RVJ@z!slAq@IumD>2Q!2J<1}dKFwqiRmAPT0E#Rzj>>f*!8 zW3GNx$I`1*#A0GZTGKa29BdYwjTl>2SxSQT7lGFH!@|clMe4iU_MRdYk_`-gGRf0TUm!Mw|z*6Y3V|1x1ixV$a--1d(4dw zcDs{GU`5!}UpxbhNF|llxuwtH(`a*o6(=~;%ZbSY3s+iKX1t7T5!+?|&x&;&6%^_& zGuR*A`snfax{IdyT_ipj!H6>4W!pyz1%sNj%s}f#@1A=CQe8FcL%d(Ot$4y?ad;U< zXyl6`WN#!MR{>tH>7cw^BHb`+Ss&K0)N&9UcvU(sqnIo8yHEj2aX|rDctvmh7#~Oj ziG8^&-(~hFy3e&^x7|KvAh{xYfl4lX8XQ3rYTZ#^ELVmn@3?EyA(8%8G5z}c=}<92Bw4L`QvlN=0O z(sppIAvnh&5n3i1vra$a6dynmLMaC>zUq^g$r)&3R;w9?bEkjH5sCwjav&#$X;0N) zp2^J(4ISf<{E9Gp7(pfP`{}nO=QwKRRAcre?El&5CTtZXrZ7f9P+a*~qA*Z$nB?Pb z;j;m_+&_cA*=a4HyFa~dN$fSZ(5Wbm_iElQ>P(Tr*<14EL+|kaCPs6CF(|uR=I(Dz zBnR*TL}0-w79%CPRwUsA<5*p>QzgT$s%&37=Gm5(PkDgX3uIhfC6nCmhYs`r;gM8> zMDzMABk>6Vs(FnOIN^V{BL@4vq3@K5!MLIyTjCd(Ax&BiXkBqpJ`zE4vQ!v3%>K9z zOWoa{!SS~kV$gwe8D_asM*G~Fl)mG7B~{C;E`p^@N{4(B^3+yiJ@@8)81K@+VvP4} zGA)W^d4!YWA?V-R=qyII%Qz0ab0K=2pi6y>h~PS?VoNOS+Dfa1DZ}eN71rMUqUp5^ zv*)PBGr5NR_sZV(N_>S3eh4p{90p`h2wvJ*>ii{ge>_oqp#t? zc;3H5DSo>hU!wO5OZP^LH=P!1G+j|!T}Jh`vXEBc~7po;7 z`vv2S)kpxB29>H3uAM-bOf47CD6S-tn1#uZ!R?jIaY$hH+`Yh(mf-c@968h!x8Wqy z>3hpGxFHJAxoUuXSE%iu(n6D{8YF}Y3-*=f6@yTdGCC_%j<74Lf0Tf9 zc{C8Chh<&fj!y`iJcl5Utp%_T;C~MrA{m!!leVxW{;kDAM9oqOZPCX@EsKR~lCVUQ zOIzOmH@>&>bl(MR4 zsut@fgUvPXPkk-_8(PD^X;tar#11vBot0^R#|1c358cO0lLmq^oJ`0T)~&{XhhFXE z!w>$NQ%W60?_O5|d6ltWzis_R&V!a=sqC-lHy3l=cVr-G_4yDe05}b%1BY3(;KJ0% z$L_X^ExlDSq4E!V%caux?718~9xv$n+j=V;!LJxAygDz{imR!TEAdwn|&0EKfcoq-h?@B?=HVo*+@rET{6H^tL z!>dmKG1o13=E9Q|Dc4X?<;M=5pZU9pq`qISTZZJNn)fNgr{`xMnL_g5AC+}5jQyY_ zHLwy40^bz~b5vSCpChTq%<@%B%4tR z0niM1J8!Ab(R|ty$LD71=pqsk{@pXtEzT1>cebIlh3NaOJK@fD+T469oN@EDrCWHA zMFTF(RSuyo)>K0%nty2WImqlij{+ai!Jvy`QmYcKd}Ps!6seJ8qM`aGjAhEwy!~Q< z6hrrtZb=|G90ul>I?{Zy6of93sJ2jYonclava8jPG?i1+c6d3gy= zJwQFC44F=w!LKK)m3~1+{W3e!tfvINA-i5cw#k=P{Ujf}MoU>`j_5>W(_eiVGqO2c zr=}Be>386kY)KufE!T|CcRWUTSf5&ua%k$sw;de|H_V9kj!F$EIzo=F#WHN7G2Vli z!)BXFe25qfcr~`r`@AyguEUt*3Q`TIt8^1Bk!_Z>B@M>#;9FgsSf2#_33yX5s182SeXChy?CTTYUTF%4=kBIL_53~pV}``=M`+= zb??Nsi|Vd^;}dt*l0YOAdLg%!b|YrXM`Koyx7_0~3H^qWT&Y5Mp9dX~qbPoR^jLd2 zJL3L+s4qZ*Oikt6mPzf!I%Z?}H5~*QbD_|=Ef+54t@t+R?O!WJ?wlcFsU^?ss&*Qw z$;m6KE&Xn>&U-czUSVT=$v8WZ9 zV%k4&BnubCloA5dAfn5Mx#K-ZZPvpW7cH8va5KW{BoLz@UCwQO3s!_2p|GF``HV9T zmwyPEh%8%q;N{%PkmqG~d!%!8`H2V71J0<&Fv&nPH;-`S!?)Y{NFglDx-E*|=QGl0 zHR9|f{_QY6#x!P=PS=Rv=hh;^F-h|G)Egb%N2TlHV40Z<;1>DBqKYKQ51fPTw(^86 zI-Gq#p-ss3P zX=5H$v+iNO!|!cI(c6#ZmROi1_Gem)jBs{2;v9-tous}YIqL(>PPxT>Q!~_89 z{FB`nCiXGCudlBetELx0`TTq9 z%Zuu%CP`?EJV7v#ne)&EUJEn?hn-M(wtz2Liwz#c_PMmVtISKGj^E8j^s3iyR~!99 zMB)kK7<@k^!DR;cfAnwb z6hKl?Il85mT(HCw2)l$YF{}7;plL#mgeBhN3gz7kmk8GU@~!g5E_%ZGvwC-yd7*J~ z@VYFdfCQF%6|!n4DIl)DdDy=8A%Bom)kTu8mPU_}lBC`SyIwWeEe9z}`g*b6kE>aC z5Hag3@U@dcuE5hDfAT8oL-utTv()n6bg4JsIVI7?YRGQY-!H(erqN5~Hs_EMZ-nQi z+Li0KYUn?YhMGnO%IBloo)gdh!|Twoou72-O_3uXnc+wzTFWOygzgXNk&tvV$N{|W zMr&vKO^zGk%(p`inMyQrB(w_aHmnMN`i;ra#%(OK4K=x_Wx<@omZ__>Md;meW9u$ zK-E3A8a3Kr0IFX+b z^cGOCeU&S=a4j5!g>feBg$pi%PWy(E&$#8f@Y>xD-&``40zAT}Ugclit$Ue`ARtEO zqc%zp$$^*$QDA!&ARnaRs$G5|w0v*lS;vVVWD-6z{?!(N8fGyNL9d53;(S~|luS-F z(=(Hq&xWD~chDY3&IUX5b{`D6f%vm56m;E(C?}ce4P*jEixCd^#B0Bs$0sdK(4ND{ zB)N@|gd`WSDsHi??5`szE_+zgs18RpKD>~0E3-eC-|j)RzMb!Bk%?`t4G{Hs5_(IJ zD(zS{F~iI^SPQ^@hbdjtk5L?7auq z0sQbM0)yB+IF8l7o!Isz2Af13fN=<<`CaR1v5E-LfWnCN01mm!(}roYKA6Ew2Y~2( z1Ly1OvAZ(>MYZYk{Utt|N$_qJ%64(4(VMg;7*LW!sXAc2{^|Zp4j3UobXsN3fXN{X zfUNVqcM+eTucsk`-xL*>gLp@)O^k2GjfL;p=BtgiZ?JCH!vWFUtL5zz;764xRsJ&b zU7Hmf7Z;e?6i>hj_vU0WPZBCw0u&6S6Zt|!Uj)41im?G^nKFaLFc#nycYp7UXL13W zJ6LEq6w$4&05t=Hc)+dlrXaVT%IgK>>J&uBX}dsyG<>x`p7P~O0zf?!03r&&t=9t( zb}I%W|6oz1sF<%F%bLymRB7-v81TlZLWJF6I(|y`7Q9I7!=_-62ZsB3es|%=7rdF< zp(W9t9mPwdXYYH|wAeAc&Ay+XOCHzF$ce=bM(#p|yk7>EKf8WRIG0WQA-6SzMHJf+ zh+O4zHn?n8Fmv7hDx>*#}1DPDiG%5DOf%KhBOgMV=&E{u>BwZ|DD!G@P-fJj? z=@1v@Mk zq`D|^OhQ|(aR2TIK03l*KJ^3|lDA&s@K(Q7XA%Z(3$~$LzNd&#A$Nm=qdfhxS&_bs zivFc&(cM6kvb-yN?Qe-U=!?jZ>D-|j#@SMhu}Gu+(o~}(!0~37?fpm8q4gJqGB%6H zk?_sOV7RR$FaHx(3xY53neXw>g>zS-aWe|w+L<+G)vbqN?f4D#b8e3DG~p?;`xzD) zmx-+jP|rF&|L#Y7GaCQ`W1QFL^x2EUe7|>qsBP)5tbOTar^VjDGV9lOb;&|IHR73y-b5U!nj&-4 zO=N|Xehnmidk@Itr)b3gN$k~}f+R_!B|8)6l5e@9PqCPR*>@UV9KqxK{>h>@k^fwXXN(q4sa^>~!tC zbF9arq_J-!ine1=AwsBPD!eTc8=4ezq;FNlxsiDJ^p?gJ$!l2$%1Cs7%_H0p7eneL z8}Fo24Qgk}R*0~&9`Rsn;~~yoVw*u)qno@R3G81D<0YPbuQ05IG%SKQVffg&hbXE0yiB=->s+8SkJlX|9LilkP>|s0kAp00m=c zZc+0~4NL6+n_)cJV$@^>on}-YhpfD7x049xdvrVUR`hyUONZRz@xu2gfKY$4joHi; zK&q>&qhnzeb^iri@Fsv-M5n{&-4$;>*PuE*~6nPGG z6_{!dWOV=ga+t9bqp!VN`kC|7^tSS?akz?`cA3c2H1pu+mMW>c3r>&RNCBdb0hUj2 zV6;T^vI3a#G6Zz9KEe&S5q7;RZjyl#$;X(~vS^MWkLf~jJ7&-!h5o1ayXa$XMPvwH z5S8(;EmY+qnG}*G5kn^f7epkx@`;q@f}ekQdWR_d-ocseXonBYl=(D=$>m((cu2O| zX|uTz_wqIU(3?KB9d9=yjjr-x0{!I#oZ=@7u__nc)ay*y+j>l=)?|eYH-}C^%=a#t zYEl^%;5!;d6!=JHm1!Lk>7s>6JB-jQ)R;I!7kvevVAqrT=jt~{h>A2YP%P!t8(8#| zB{gFo9sQ34Td~#ZdM^BYm`F(j1~Dsd0jnY)5aD`#+WKp@(-*<#wuexmUGrvPIkBWs z%nD}hx`zU=FmXV73dEJ9pqCTl){CyEZBIttTCG{qdZtXj6=Ogz#bTi9KT0Ln*JwNU zdsc>2^Juy6w!JctfRxLq+MF>?cC`=~1>PEbsX&I%i|pmpx&ybjzfaE3pRE-7Pn~ZN zW$@0mxgK`&cK9^`J~t?K?N|^lTb|D-D+2nkTl->)+Cku!|22mlo&)Fhf`04F?=JSH zc-aq5;T_8GU(1P5-~{mSVV@;2p{ey#$ShwIjtl>Mym34CpYV4xe>DTmtXpy zg_3qyCqAn@P_y z&C`;Kn_238=1O6!$=COTh ze;z~rcdZH*R2!PXn}~JG4NAdlu*)BXY*xpiFHN}j+Lp;G?EsZkA{ce{IYeURV(`1< z^J9yxc{2Jt&vxk0NyyogkIV$$V(p7xL#*+8sBGHmy$KdoChjvTW7^YO{#w zsHY`_%nf(mUXvLIrUohyAzme zHoLI(PYWo$z4TFz^jD!QHNmnvKT_MdOT=;L8D4A48gmf2{qg#=3oXGMw8W;T3DI-e z$9!+0uRWKUC-5_}F769ZUi90BBA}L+;Uno_&x1Axte+8j7}<;?11>5MOuu9v^zUaCt_=KEjLGBFq(V4%OD3=6p{t zIhV}nP0e+>A9bdH$aJBm00efsq?E(O{xA>t`pf_= z;F}2X))7!xBoOg7H}XcOrKVy6O25BiO?C?q5Ini4&Rq{QfP%NgZ+9w}7ws)xpLhN- z3g`y9I`A-QkjCk!MxyIHVhan4tmC9_TW_utpkBrxB}Ickhk<-k8+v*+J58%D+yi4I z-pXhS78YfZDWGrw170lO>|Ccd#A(566reYY1pJ!u`0P-C1uJ~g%KYEOLGT8^FX^Ah zGyL}L%>2YU+{*FE_MX8ZZ_5*$kro0VbMFP%f!&N>D6SV-%xx*EM72!!aW(+aTXQ`f zVx;~X(f~|KwHb8|do4Q>FPR%Jn|KyF=Jx$|OL74f*|ExZUN%BLHoG6G5e1(=JNLwo zT4sLcp)wnaL|_mkiF<%Tr2RGA#LQMLxxEcieIM7y4k29o z=HdET&q+~oIZW^TU~sfZDzEI`ep;CUeib3#?+%E3Fu=c{9rbazns0zTEERoc;0& z7(ur^+i&SCawjAA$1}};Z}(>Iuj^5_L%)5L<}%iwT<0z^plz-L?C;)!BtV;Dwl|Uj zjBkL3AY))a0xqU!yEp9C!VxGIq%v6y**s5m<{th7n7f`)j&r;ji{|Gwmd{dF&V4$K z@;-RTt0Yd8eaNHVjO*U2#|Q1fkrT&uSl4?0RrNH(j~8L1qTvb2uoWVr8BXpp&IXnK zz^sU6NZtD=Wt28vnv74_gz4RXp%@BdG`^{a&{6VPGGzJw_>{rSfEOFjFnIbzt;WwN zA&}~T-KkYB&2pAana_o|<|)vQH*|>ImRmT6{HJkH)hmyM8lvzimieZ9>-K0YdMC+W z34F7Pt$CiymT$ySsRk_HdcMDoA*UHq{mXvY<0gVt0apme86ogsT>(QpQe3;rG^-hH z?q!teYM5&}hw>0W3@1Jel2&L1;a9*rZ-ZF!6P*D@{5y0hc@$$%ulaPnG8Up0FE=`4rJ^2JCbqK{m zXIc5?v);%xH|tIlpBb;252@Z9slF&T=>#( zOi7a9Su&AXGEeG#{t;pnxuJ`9?ign%^;g&O*wa>2VAfHH&r@&kprc2d)ppzK)E#0@ za?o3jp@v~tg$Jt>q@^aK8Sy1T7v~+X*mDQ<*hL~VOoCvjY3ddkV)QIZP^}iUORzN> ztPlc_{-w?1Pu?5^X&D(>%kL_f7zk(Ide8XSLWGVG-J|l`3v#R!sWj-()k86?L~kPq zgb=Dn6osxTLPlin^F;Nyt_(FiL_AKL+D`>s^^eu~9LF~d;=AQKr<+d7o`bw@WIk|SoKL(R|(%3F4|6pmZ^7me7elWo9!qbl+xJlss5q1 z&B+R~7032uYJtB|kbD%8@3GeGe+{6L)b}J_af({Q)75ACrQhSBVyQaz3(XgSTntSb zaM)3)q4)g)>$-{+YRxGe{h&}RtbHPa-9~uv$1%;+W93KA`H(gC|Iz5{uGF((rdZ}l@ zw6Sr;DLWLm3c|yjg8b1Ao)ov2r_Z_jU7!rr3mR1mOu@mHt1`6NbtCf&gBbnQpWyWa zJ!mYk4|9JGj3qz&?T?hj!GOtR`+`gT4CpLPovRahM1OmLKkg6M$)m`YFiNPR$KF{l z{`@bKxDruPr~ygpWY`Ufl+7F~9OG75`dD)%G5aX1*HHCVZ&M%!R@{+Yyqsh|SbG+;y6Z$mlHf2I4#`+1F3zECPSNC_%;i4(K*Q9zC4^ zCV5Qpue?nB@$dT2oKN8AfT*-p9%O}6KRN{&x9lk!v{QtBWRp{vrHD16LDHU7$y(E? zfIfvp639A&2ASOyqbb4*syrmF=hFD3r}hQ&C#3-U&IGxQ&aj~$>VrDc$IVo=ZoPLM z=KA@BiIJ!)%(I{uzKc5{zKckNd|kc~3iLn0p~`sy*G5!4XoK!?NI=WH#)NY=+(>%f zo7qj!?@YS*oL^f6QM1m8ZL!$!s4}z$FCH>aA$gCEFEbg(%GdnI zI8++pj$wC*{4NAdUU@;lAX}v~7GK~hWb5@;>Dfny;gRoNMGg*u+Vkm51K%0Vl4(9| zf5Yhfeq6xnVKPxmx9QEtcn%eu$~2G@A+r-v3R3OEy}Kl9bow=f=d=seMAV_WV_*>$?k_DVLRk6x$8W`viN8$LyqRjmaYa z6ENk@M44><#{a%r7%>!4K8PEgy#*YMgTGq12Z7U;T?J7PoI_-;@8l9iQ>kP&`j{>} zwFWT65Tfd8CH}r2;h0jJy8~yP^YL^N4t5(wi_vc;A(nplW43%X-);JGfI_q00Y6N8 zB`_S)Om{~fwljQJT^$z3k?b{Yv$f-z=w-f~UcWvb%95sd(nCLF??xC_3I9pv_s|Ps z2kEaKA6~zhRpMM@x}I}(KbMt&c9%_5KQ`b2#`AMSm#@uQyM2lKO{}da*@^HqZw7z* zG0Ss`T?|bl>q6_m_IB49z51fsSqn!qX%k1dA+kUC`Qzn$)c=kmA&aIYaDNd7Pjou) zQ&A*+ahO6`g#MC&8XpoCCWjHsj!>8d_4$RYlTP2PIr)}-$%|;%3eQIX&-aNRl2o0- zHvY*C?mbbYnLB)e1KmKk=f!~B+=sf?s#YOL-IjP>Jk);nKY^jwPKn!p{tWbgEzK2! zB)jD}(oD3oj4;#TjV-mDh&HnHBX6!uSYf8{MCtpE=Cvc@q+&WYh%w)7!V0oChXPOy zvb>vOWnxaAuxZ6J$z2`TpLb$5kE3jjj-z0MaK8}*oQevm<-_`Vs|id*d&xh?@RqP< z_Vmh^OTXGqh+`%W`W&wx@5-|YelUg(8k)v!2yrZIxK9gZeh~b3HoK(k8xvs%12Rr& zA`|G3%7{psx}J8$J+4(fQVYV2gD_D|M+sMDevH?)t#oFfl+?;Pjqlzt=fH=FWbWiDKU~sfY{*od~HR)6&X2;TWfNqd%e+sGkzLk$-Au+NYq}zkXj=J*>Lhu{p5R!YInKg z1uu87`%RQLMFJ)v!s-&f>-5PttJLVBPGUa<8(_YOP^GdLG zvlIS*zVCdq@hMAv@w5FR^hN{z)4*md3XLwVA$%&iNUHI!n0((ja;G&(vK=QFeGjy9 zT5C9PNin&XE6N8Cks+lyqhU1gh-5pPlOA4&p0tlW-D@L7Xs@xt&UGOZ9(EoVb3*6_ zyTj&sJ7Fo0bZrY;!pAAM4`&tl?)@xjPxJiRr7O2lrZ$fPF2|^Tu8JC4#G?iGk%sqI z7Q;W()%@?-!vqz@(uVv<$tL!qOe24A<7V{!-rL`fe|o%wQ(=J+q&7(@n(}nj4zCWn z5BNWki0m<}Qc6Mq+OUL(X7n<(gn{9J>TWeLszYG1$ z`mDFLoWNo8%%dYbNJtQ6n7AElFwsle@Hb+YTgaWeRd;wmuDQ-%k+91HeX+Wx4Zhp< zuRR%Sj$V-Y?esgs7oeS^Hg8s85f9QS7H#sdLUVT%XJIxN=gNjW^F2t#w!xjy_HKyV zt;~L%$nTV$xSLzGK$SsOcadkuLubC<2sUXBhtX^J+SOqGZe59Six% z@eBFq35DB@%;(!MgMZPZa=WJg7-9^AS-4qj7LhaS3R}J$82vqEb-q!r_K+yy(Ecka zUvlPjXMf`Vp3*n_w|1ZwquRw#Q?rm^YR14Dz5zC3SZ|XP?a#Q;&{gzr9HBnUiD}iVa~1N2W`G*42dYzQX@%Xp3}7_#J2V}1Ik%~ohf|yL*hIIz~t%^lVLFV zAqzET3Eg`GD~cS_`p@|5)8G7yp6PC_0u}U$*RETGp(!tgZFuDk=cn!vP13%d-tUDz793L@5jrOqfe*3b`1vh)%N)ObZQheC zyp>0!%+?e3q1zDF@GUOuQ;3}Z_m_dJU+W!NM4*N0#MRqR-G~3{q|=RDSCGBQVykfzx z);j5SA<<&oZeCNnfX*{ozZrx(DwL2lmxM~hSS{*tX4goy)^um%Ea4u2T0xTlLQMKM z4(_t`cy-nhq#s@y)lTf7t8@YaC=MV>kfg(a+eR2=dhpSFOmyg)Gx_Q-V>d0C>}Pw3 zf6avt%eGK6x(lsfto&8Vg~w&Xy~Vq(Vmno9>GLDj|4zvy!iR3L^g_k0%se&P%$XzsR>xql;jD);!Sm6F@Cgc zwI5_)Vo;fp%xu75RLyl5zRI50`nRY-QJkQ%H_~d$b1xIWjP`EGUO$HPW+MBonY7$M zCBZRDz)VNHvX*y5QPVY{uf}C;wB`dDWi#Ngl-Ev}W)Q8L z7`wWgZ1l#JCjOET+xBFC-w_T5Ss(SZ?uo)X2PqasI6S`Qs4vENqYQ6*z|jIK$& z61~Jh{$@>VcRPD!1in)=`7P+r6Ta?iuNOP3? z*@I&ty)U0HbB7rqz^3R8=lg<4UCoSLm{l|WURB_Q#>hH{#v0t;BsYHNT_* z;(`$I76`3`E;MP@@#WaIT(wXD@1dm%!|3W3NE5vKYNu5hIKL1Y8lSSAvZHgojRpp?zF)j@tml zz?l8aVi%#N)YMgm{XX?)+2bV*4Woqp1m;Kn95r6+RH0RG4gP~HEo8mi1udmeXZv`D z;rLP4O2c|O#`B!UqG~salBvnq_L!g9I*lC!j%R+gr9v^yL;E^xMfg^%ag(Bke#mwV zjA{*fHP-d0-|ZRHK2%_H+G`c*c9&!<#IY6et%(S&)fHoSEbJ#f;uZQUGi$XRy|Ao= zJ`(zEje4l`HEUOPz&Vb7(3sQ--k+YRs6ED|#wIe3{KB|O6{ z691GfYHO*~Tz%$fQ*9hRrXG9q-}3)3hEq<|q?GIC-{fI)WJT4AbN!7O`D{mzfctSYK!48P~coV3_|yqo=vP{RbN zPrUQAdAOqs$MD5nXZT?r#$LxZ^Erv{;xk2J(q@`s%AdXKHYL|TMZDCN4^q!$`9dLA zgN&*l^Tp4aKC+*OW3gS1J*6;J4aMdV;HOv1Sk9`(cl>5|IA4zzm?n;SoB4P&@WTd9 zRq%v--e5k)Qq$V}6p_}%Op1Fk=?83_bN08Gh&uHNUA3t8vF4q+v2uLga|gv5qoi5) z<65&6&H4DEZ*C+k@|!W`gM)M|41-OKQHAxM^bB!V-4*voFqpEY`uVf%m-X@!jJ7?e za=`Df^bM?>u)kK*)|F9&d;$}vy?YW9I9`ZtJ+-vbE}Effi`wT4~KZ^l*c{OYmP%-rYES@H)Igov9Zk+9@kCWYL_tS(Egw=ed_$11A7y&}g zgUOy|fl^RwE5aa-LNIW4WnJ65rQ!o{-%m4aJe5Jv2B+%v3{!5Ydxrz=0Zx@<`etJB z5{txX#fQqW{Ia+ac168fC=d4`6Yz63pWixPo{&36YVmcgnN$-?+d&ttPt#JZ+eB_= z&lTga?GmSlaI=zLd>ia%bP1#;90~TTaQiwpFWSW^VX>1#iBb>^;sDK*#73yxa)%8K zO}-0MEUi(@(`U=9mR8K-o8f;;?`R2xY3c?WP&svXfOF%!6!4!~%jkkLz4uzBchx>FG5w<`%-VKty8(t^~K;Ao>#oa|8DfBJwb z`k>hAs6QuLiptL!$xbaLS`Rr+bYrfcVSYYurkJ-D%@w@7r<8*26R;WB zdQxZM$(-ZyrLi+mm_+}p=mUyjtu*16N53z!lwYO{H(%V3XG$Jq3SR4c8{a9AJuDl{ zH`~Cs@G|w*FT&8IXZ}j*X>ie0qpV=WD=aL2U#=mbcYL^e*XEgK=#k>(*5OTjIi>vV zgS+w0fNldDe-n!45{r0%J5lPW)x7rfz-fAqlzVl38mWxi!msG^A~*Bws(bUE^i|y!JhF(Ple0qj)1`Fu1E>$? zx$Q945}L}|JTdg-8Q4n&aUb);oolcO&+`&KoLP}=Xhl7Yf5tZqOrfVM6%d$3ENH;W z2z+Ovh#~FO3^MhhOfAP&2QExgN&IqN%BE0+>fhu{EN(Gf#j>UkN5hUVsPg<9!#aG< z<6{;Dli&^E&}n-(W;lTXTptRG2{A`pFyx2@hvzS83+55zh3J0;1G#qZ-+Btqt!tLjcOGJ$7|IdPkDU=BRkmWLbd>j`u) z9u1!e^4l9AGS?SEFutnQfddi`&zVG*Uc;W3%e@7M24u|LHsG^%d>de6U?8>%X1Eqv z^b;3xyi7f=rIwd-BIsr46E|!O`AIpgmp+V*D*@?%$Pwg%bVg5>f3%|h zJY_+oSEcE^6{%s3G}`RAm;ii0cwpkJlsTKP4uRe3>Q4QQQsSL5@zP2RV7VS4IDIc6 z=ZZ1&Gy2x{snfy10d`D54HJ5`QM}HlNVDryk|AB(`bpZMktA21JOZ<-rt!&uH`vj! zN|riSH4lO?cE}thRp-ZMVGr$+Ik=f`C=(m<*0Jzh?&$7V5mY=_J>sn31ig!hGCphf zt7*Jeun9XZm&kQtNQ>&ToP)tuaO8eMo43lpr}DYlBzOLdLbO^kXrvQ8Qct!T$# ziea7=l}tgLy(rlDUL=8<4oP*{%fcji51|J?O>yX;_hf2oz+tV4Sf%fJJ&=%F%>S4+ zToz`-@JpL@lgBd=bkBFN-vouY&Yk5!tEu8q2~uLT{&%wz~+pTL!$;Bf{I47=)8JX$LB95*FpSd zLcapqnSJM!p%Lu|cga;xC;iB5aK#LIJ;$#_Eno#uQzI7alUb*qps1B+y~?kBFd}U> z4Lrl))bEOFTq?5Ll@!zxMzo{`tEsDpjvq|+88+Cl2OJx4rH&~4_c;!bhdx=S;g$5* zN^h_q4>7YumlkXE5hgmBha;c-EeDc;k*WWN8%H)gH5`fPto$zJZupP`*e8N#Kv zmMSWjZQhMflb#MSiraV>qC-Gx7+XJk=SXcyjsHa+#0*>DNXcW4EwAwYrMe6SEaPS7 zZhy7itX=)s?&Jhjgh|h}v{Yy{YcNrs6H|`k1uFgq#W`m7Z&MV?r{ThC+K*+pZki_$ zo>PDsIuH#pNKM=KYSvq75ihZu%5pWfbNv4?b=GlFeOns`q(Qp7LAs?oM5Ls{o5kZySQ+YL2hl4t>3{*jbKH^;yf^TQ2BD2AVl%436RLBgVZ{ z>I*qbT1gbaG7tR3UNfc?R9k_42*24vQk|ZL#huH~@;9cZtzV1TIr@ub;AFq@RGP@5 zk=XrE3TDl+m&K7~>ad}aqc_vTA6VJPs|Rl*c;aW&$z-PJJnpJZjt)-IXrcy33U^lGHI zKZMwa+={(h`jf0^^q##6!=zv{I-wG~6b-?Fl1T~Uez@LGdPUCNJcKkgA=Ic|rerM* zb6HoOlrf_1z!lfsg0Ef_T4j2Wl4vlQ*!p@EcvLlOP~B@@C)h4T;sx!{D^_}F(5J9x zg+@=t0<_GJpOroomO)V^u3-ea?DwA`l|$<&C+&o_HhQr0!4OF!Ru$W^BF>=oNU zzU7~^)^!Ee3_+AWSy`rRUfd5UW0LRe*iv}EV7mC;;HSt`i^e5I6El%pp1bB2S7VHh zvQ(P%%iz(QMbbxee#4pSWgm{drOg!~z5AxRQ!C2|Yn zW5P=75@bV0UTX4_F&J;^9?$J+&+&9=QlZ@MZ%PYrV5|Q$D*2~`f%kh!U+a_>Yq}u$ zOd;Vr)C*0*%|)3$GCw(s2&Ed6_gv{dCkZI(Rn zwm8R?zC=ITX?ThO_(^#9O|-(Dz1HLGux+om7hMUF)m9$3pT!yZW*Dn<%x@}tLH8xa z@WZ|*-Cy6SL34Ue=u| zj~Jqi6fZ$A>m3J>+30v^@ zQLuI)KJsG-KCsm)@Sa92OVf^?rRU+QY1Tbff5$tP9+zIXq{?4`0la?lzP+dDZx|am z-=DEjro6vAEksb<)>NsJ_$#`GlD2-}p9s8eR=pTmZM`(Uo(WdJT6%OenTbG-UJnyS z9DAkEyMDfTf#c~LDey}7kWJQQj9P));)Pk%4>VV!4tNK6XRlm(Df0wcY?%Ts*Gy7> zBji7@D2GLAYmCJ6|Mo}4U`S956fmTe6|yRmfo@aa7GWMKK-$ttyu9ert+KJ`MQTl znwKDgEJ~oC2=skNwaOuKt8CeA1)73-sOji>=KEGF>a zD#@Ae*Q{^rNbde37br_%iROOwp^?*67yf5UBT0rXf?%X?kvZd(!lmDvoe~lIZqo6# zs{WUJig9N3i!-s(mpk5VuTPs{Hct3mv!eF{vJ8^Ch@=^&pKEHaQ=SzKoH?^iW*RQj zM5>4@SE--NV({fkKONL@_87RvR3JXCs(Gyl4}B?4Q5=$;L~ zdTC|2(l<)Uzus}jAcR%Ev&p_R)pW13vy*tPLYu}pRp8zfW{WJ*2ECfhJyvtHMACVQ zF0E(4+;7Pb8wR;y?mc@c{&!^4yCKq+oY0ksm#qjNsHPqM_q{on9i*`2@@IOn)z7w< zH)~!{r71Qz4>tL;q#>K{^Vi6b@Z{LG49<>VdDFizTazYitSdIenDU6CMd*i7h@-;! z5UiMV;IFBfi#kJb^BXn8lHkdZz_zgJ=taz)A*QL;yfw_yy~X_=frtN2q6GC76@4Ip zF8y~{?$H;@hAv4_v$P{yAQ0Lq({EXi2|!dY4lfs^Tt2^mmz}slk%awSQaMWyXAT({ zJF4b2UWwES)Z|LFBE@c@JHnACiE$oGWcqdV-mR1wqFPh%YA>J_N7_RY290aX6z#h1 zXq)0&H$fkz2>b&&QR@K~zmPVvq}ts-VGI}}=&vj~^&jC`HzST}?CuXg5kzreaLz1` zSB#h(%2y=>q&7YHxjwv?2Y6KpOR^HxKZ+A!#|kK$l@KmaR+XVqD^5q}j;4*)Dpn1H z@kAWE6SX@bitWM-k{PUGk-|K?w)D0f9WI&C5x3BvdEp!_X@MhqtdX! zZoMt8^{VAuo3uOpvsFY>23JvE#Aiu+<~3n4o;cf5YE83{cf{rqaq62XdB5sADSa ze3R)9=jd#D0j=_%*~kTx2?Y z3zan)vwC7|FHd|WnLV4dm&^%CqQB@LI*JRvK$qlq%!(s-I{jd>(n)A)AQvz4ahW`= zu5^XMvC3CB8BF#qZ10z-POhvVP$wHmW2a2m#xoq|1P?Spyjo#m6usy51^hMrDG2v4 z$yzDke_iBudBe1}eE2ImabUQ!Q1s=MjN=g#$bB3l0vo?GdSdXGTJxSCpFZ_%>%QYvOlXE-N|9x_L zO`q+O0lgnDA|}Nl0g?qV0s;a|5D?;<0?L4@<|mR^syG-T^V<)fOXrDU6jHhbkRU;} zHEPQdUab?<_arRNVM;8V?HOpFFLwEE}8MU+e zM0lhOi?Px&%j{(-OKvyDZPoN`XCbV9MH;u>#!(rcT}P+p_z%-)O<*G~KbMnJl;j<0 z5l!g>vbL`!=2B|Wpl_^qR!#(ebKGN zsa3r2iRtpAg9hpeP28KaN#D zBf!~>?A;u+XwG9I9_IUI74LcZ*TAQptHB1horFl~K(q+0B3)eD@%-#-o;b-rKb$-- zNgpuuwv#(V)E|JTO)G zKq8K8{fxT?muQK1BU(~N)+nNJhxU*6Z-f4wT!@kpeKW+6+ND&f{d=CF_->NyFZ?)V zGji5JR8Rgpl*CUiqb39PjJ1V1r{DUDaPCg8v3{2nSt8f)c@V|&tKOeKXTV?ZCES4x zDwRmAd5NOgDcX66Z`NJ@;In{dK^c9GURLS9RAA2$VZbR7CxaE$m*?Rjv8Qqo_9zoi ziW#6&9_fBZOSHikY2ZKjBo^8FF?X9h|DOtF&TE0)ygtKc(pbt2A0w3Lj{6un`h|s! zBo4+1ooUMMz1hLzRKEh%~N zx1u=VjkeM6#FRd2lJ&*~gD)byj(V1t>fkNWUkCY?dy}$uXDPX$@UB{3lBbW~A={b^ zFSw-Na}U%xqeyWUm*6PtxO{Sa&T=u8OjaNVvv*>9f@SxFiA__MUakJYQv~5uafRMx z+Tpbw4;5L}M2b&7 zYB>#a!~+Jg6*1rY$KpIMDv+7!DEe~5@9Fv9Km4I?vR)IvbGY9ex6b3K`7Fda$%Eda zHrAO2ALZ)A9;!%|X-Cn5SW+UT#*I}{qR(i%Hm=F{jGE>)+TF?(cGTzZ&JDTHD-NtU z&90F~3;``I{aR{8r>{+NV76UM!H#xnly)9W!9nElsw?H`e3ARKVtaJ*>}wN;HQsvJ z5wtf)AoEthV-iT0MQ{eLNMCy`a$B)WVz$JH3__?n*lFQ}lAKyumt<5aEjTOsca%1H zIqQ;#bJ0ATJ_XphPAzaQ@!gw!rC*fWI>Br1N~TsCyX?(FQe#=T%+=>ZnsIj$Xmo3&n6 zGsYbl`1Ek)d{{M*(V?xOu?|2}?&Q16$Ev4L$W7v_>vm%uok+^3>j9hh@1Y2*iRI-O z>l}XqAZ8!CGXT8_(0)7rYdYl3N-Ba68ytZ*XwcTV#3_~kFu{*b zmdS&x8OE#uzrW9#Yt>zVGh!-1mAfNIa!=COF`J8o;%t;X&}GP)EGnHV#v<|>udPW$ z`(w*-+e2oFYHf>g<3Cz}F1N{aZvn+!a*u-sH6XZe&hY=@MvTw7%g~#*FBUX2tTD|6%Ny|{ZUF5pX-u9!UI>suEanI>|(Sy%gb}lmW<~M9_6wBGxPAQ*owF|(&)XA zku5K~yVtF^k1DV>T3D1{9z&)kd8kg95M{$Rj`agR%!yrx>8@IbEA`))2cpZmN#YaV zuV8}@s2JG8@#sguZEIb88jWMUQQCJUflpja6B?_Z)33{@vC$=-BOAJ2*kzd_Yyr5lHK=VLk1q--$6v<_Uil{#y{1rsLYu0 zbA7u)a}6uvU)SO*8-8F@>zlQZp}6_FoZb7rslOdHbD@mI-ZY}wisr61M&HtO0V8pI z6zByM$V&3BE#<2e~6ZN&jV{!gTQ&Kbo@&jJAd>np4=L?x(=qe-EV58fP%aF=U6*0`W#f~6`Zxew#Qz-I z*49>4Q`3C{VHKD$TUT`Sy@*uixo=yJDi55m0SrA^n1=$b6xdN_~x3y!N~{5~47o8^TR z-Wzu*8mQ_WmYCRRzijSh-^2SwNSt$+lt4TfvC|Z}rkrV)3@5cV(qP4-i$rOdh-a>A zk&Gpb{m81BN&{AR)}9DYcDlCgHYeYLYRIKB+8o>S`|i~P#_`uw;?sh>=f6o(SmZ|4 z_izIQXE3B93ku}Cz3pt_>ODBhu7s}8_uR5{$Lcr?&j^EM^l?*%D-B*+y^8;pxlEq7VL=DZEkJzZjy9t?d zHpDy&G%}reqLuuAzeUpxC(v?nvU|T-rx2SPe3U#n?>!lHTR1BUq8Xs1VONNhDIn5N z4GQV*Vj|-v3X{eq65$P|hW_V;jOrpocR?t;mil)&3*pr)&Wq|l>rYvWri&T&_}rdfK6LC;MjK!iUz9uH+gfBJ_Jtp z4hlb6?;|ws1z?R*XQ5yPjzd zy7P3P8X4Yvf^mw(+3wSRX9z$EPcQaj;I}CeB9b1C| zQEU@9S)BVlft964CE)bq#I`I=V!LtqYb?>;8yKHK=R2-njrQx^5XT17?uNyYwE^QZ z_Wr;#!zC`!ljG;oa!Te8^6?oR9W8czam)fJFu77;BL%N| zg0KGGB4NV82z;Po$COU3#*Css&ax)+%sUo|p!QC(H8f)LLcF0{RY-NIw1+-&qV&L^^zGSOY*%Dn zF^cr^k3vaf`WXzKL>8U0d-=tg@jEl>!F_{MMe`ySqGrj&25RjiXJhcPh_>>&A56u9 zV5S6$ROk1F~)TyT+<)5HQ6>lt*J*$;E>$osvvx#PCFvslhDSR` z-oCc;o2GBLv??0Tmkq)vQ=v`bBhSGg1+ASufKQ4Jb3IcL5ccE8>-+Ji`*?>OsF%dr z!;vSnCGd~*)AdR5w{Km*Z(#J{eaC~xn>0>X&{8Z0`V~W8(ftc0zBLekC2|FI1OhYa z=g*(Hd3mtIsT^0|t!WZFfzmz#IyVFFwoqzaG(a3_RarDeu>j zypG$hI*EFqC|lrj0p&%*!5Db1xL?n8Jcj8zw$0$tL#NQ}tQORherUnU(9jSHZ8`yF zEL(~46i_ZN6qf0IIlXqj^HQhXPY@svp2GmtBYd{ssRFcP8A>A<6MynEaG%j+VqxLA z8cJm;Z-k2%IYk~5y)uC57O%6*zI%mong*8u%BjRLoU@1E7vcpsTRj;c0nS zECP@{*Hr><)r(!AGkpYfOLP|v2idw??a$R;}j4=UHJ`rD3%}t!Tg;#aWfa6)0y+A`{%~U)QwJ= zg6lagnhJk|0&7T{p}v2`cb<>k6Z2e)CyCgvzWzDOW9FWpo1tj_Zoe%nZ`L5YJoDqA zzuisv;!jVcSD8eOVI@=O2>y@#$B^-nFUA?$AxT42ANNB_N(v)NODx=|=LGTUa(Oj1 z`F!8r^(L6>nfi2=a9+9lJ68W7qt4QeHI~6>8(P z08*Fs$xtET0k$)*_vR;2*fbRxL~5;>&c1T5=X;K_C|G9$h?#@){+@XrZT~Ek@02T0 z6Fn&G2@fT<9#I}HQC&ZNN!z-cn|ok7G8ZqKRLh!|#40@%W~dt{F*`c#V0Ki*J7slk zjdy?7z^hUVWLUfp%mz3ycI8co&~;~IEe8y{*4y8uI+Z4{-0A2r>j%b9Lcb3Vl$;4+ zpd>%gpTCe4y5hAJD*zBPRe);w=b5+X%cI6EjB%z_zoyM-7ATck9e7E-T=T<)4ixBe z0XlXUmfL~(Rx5yKSWyC#A>WCqDYN#cvz(`8t;=%57FBKS2(UInaJ*pGvwe@cfMJL; zh%GihuiZ2B#}J2Fa7Td*2N`s!g|UHi<0Yx9I|hy+P*ASl7U|j^4@(Si49PDn><8E1 z6t>1c^-E4*dS<{K0}kN{n2G6i(>JFzy2H``$MWSu!PuWOpFawL5T!pXe@}hI_a{&8T0Bi`M%rECc!;IVM13df zDoV+p_y@Dg-kPbQ$HnHuIuTLJ(+ra5ZDYKxW?&o#*-LOQMx}dUmXbc?Mr$`}f=R&3 zhsKUjqGaS~^@p^^ox6Q_7stksWy*mxZQv+_ofe{gGg$Ji4b8`bLL627tWrN#FWK1Y zTMg}t^pvEih5U~-S8QJrivyS!yr&=F$vD0)D2||pxMIv05U`8bTJeTge%JCeX!15M z(?Tn}{Vx1r9xjY+G_%wcE&|z=azMo6XGlz45pzj?W4Sg_e&$)`2&3d@38t=LUE>W; z_wKp$>vh@?e>?wXyFtTc2KH6Y)%TizGAJKd;q0}j^W`-!m$WrCIN9xQ^94!lF|i>7 zZ1}4M!nx9D@c~_#rpEzF2R!ni5JZ!X-aM6sB{kU=kVcHcG2;Av95#;eJx#F#+b67U z;oHxo=^RZ~sWd}+JF2=Vqf9Gh9N0BVnK@SBfpTZ7v6!>HE4xSNyIsRXJ<#+@h2J*I z0%nQtr3r`=8h<4zjzlhwg9|4xhATL@24(H^e+{cdBr3296a6d#(Kn_*zAGo2CJ&%bhPfW%ENptb&87!M!- z_DMsf${^#;Lu&>*+P@i$MA12zNLvL+$9RN>2Z44 zUw#0`Uh+WqaZtk}s9{p;#jL&#@X3%p#sL?5=*$7Yo{duD2ixL@mX;P#w)ZfjYtv~( zcOP@^e=%NfU}8XD%d!Z})FE+}U*_@D1)dkMQg(qfsa+M)rY@aw zaN_r^n`}!ZD^EjNe|>ZWdu$(v6Au%knit!fdj2nS)n5H&-LH>72RWBpuAecpGU;Zk zce?!UVU4%LR4r@GFEgC&8ZlSdNyfQ&6OO}5Q*o6J;fu{qs!{7*&Yl{Yc}rXfAFK-2VsCqm*4>42FK{XZ$bdX z@#pR%AZ_Ig@O$3vo&eBozEtn<5MT(dqzLBdAb{u3$jJB`N_kJ^SQ_Rg6pKXZhXrCG zKH&Yady|_?g+cF6J$4z<*>cd?QE47X3f;6@{Nxq*SoN|E!S2zW17;mWqN|JTI8TCA zu=^uotrPs1741*z2K+}{ejC>Zd8i0OKZROrw&MMb8vG5HDo?ZYowu(oRb>$~73L== ztr&EM{qMEPuI2Hq;wnOEYAt30*KYMwM}dyf({X_3bNK-NRse#g4abBcynaner5cx+`NrTp=H z0LaKL0Dg=BX3l9#&@qMM1w5(T=BmJvodEJ}*K!0P#S8gSl-|FvGr{`>W4{CSKFLh? zSzQ6J&2btRy_&D5^jvlZb2E+G5|zE>kbB7&;P(hXKprx!BEC`wXA1l}3mN?aYrtN5 z8Bp&U!A05m_qU?_>gsCwZ6XhO_{lXl4-YfolL#^nPVsRnU*GN>9v*&d7CGCwSn#p* z*y<8*!R>gg-N!rIb*B`AfWKe*t2vL}MRrT(r1#qR_ZwOEtD!HKa{501S-s>ATsf5) zvs-9wK>>ODgfkIDttDg_ufQukktvbBdWW8Y4(>ps``g`9W{z|p@(%lK+dH|J-XmpTDR8{GiJuS~8C)@W1K%fy~CIeIF$ zcCa)JpJ>nKZfbklmVp<}p25MfyIl0_R#!`>x%{2O~3S6kx^H9(!gz&;bBTQ5! zsm)F#BW29NbAUiJ#+m0P3v1)t2is!}_SJO7rp}WaucPx7PtFZGSR?&Jt#hD$n!ACI zj4=OV-y#qi1cB1enqMIBBZO`i><2(VxelD|WM~p$V0eb~m_MODnzVY?IMVQkLd^-c zx3?SDLk^Mlz-S?FSn>Eg8puxwV#B?oqxz_6e0+Qm=%E?*gP_xCEB2+?Sf(HoD{F1t zes>t!38*8b)Aaiuw?$As?8)y$e3GFF{=}lac!&#K{eeBt*hTP8eBeFp`}P|vbYgD! zpcM2Y0Jr87jr%SYJrjD}xE0p}UI@CgIBV?hm&^26e77S8ivCbuB-p9!<8n%3iSE?R z8A-o;_o7fa%hvbdcCMp8iC*!I^VPh0d>_Er!q{Ne9kt)Rhteno0Qq#Z8p_{08xzI^ zf$3mSV|{oyBJ|CnVd_!G(<6mHVh5-wfEt61BK&Kthas>6_*#Tc&CJN=5R1{j5!{c6 z{9A@Uup8e*@^t$P-!_dFU42;-Z`4kEKRlmN)f~OBkp&WzG-MH~)>dU(g*vod@1!cc|)hgwJXYCt8AUk)>`oZdk;xBxySr3s%&x1nEVW4llnOxg@}S zGA^?UP%75tV`)5{(fW(hWQI+n^zLP@ zW09$b{XUbNG$l-^Q9At-nLps!FwQ`VT`e3D&`I4r@}5Gubu7peyTog)HK_b?U7Yp=h$)pT8|Gw`>aGF`7W{i0ew_u;8g6W z`Ji0d&@k)x4r*u>0BSXx^5VDH9!JYjitJ7BAl%~E8PACy8&hrtr{{VyJ^%tz8$BXc zVDY~`^6dBk&Xff=@t5g$&~phg4>Bf(P&%&2?OuV`_9yLxA&b9l$NuB^Gj+hk)4*r{ zYa@6~HABPavTBte{DTtMy#t-w0iW~)I5$b9SQeK=Lm9c(`znFafFv3r6ac~~CJv4P z5JSa*m3$_KWUbDQ(ALfllr9%+;-SGONSY8D1wOcgPXg{xUT*!~;+%0HIbgp_sH@{* zkO>4WF6y!B*Q0|h%>W8xW)N_pqRLXH{q))txE>Y0GBcs$1BHYT)?qM<`o{wwU3t0| zL0k!)L7UKk5^RI0AVG8r#igY^w-*Qh8s;(D`;Lj6y@BZj>W#RgqxT{Y=hHwj z1fC3af@W{OHUs4b#%G1A&~WysX_o?uR~5XfW6<9K1XU_K`+adl!#MqLP8 zkYo~V0{y6`Hdg~${P9!@M^{XGb8vnMmK1_{YrO5jRTf2I;;}LqY zvmxw3s0sVV$5N(Wrrj(-Ki_ik)Zv_AIh0*?v+9VOOXK$3(Z3%>J|-x!{bpTGa&YHm z`_V%fC6GfqPksiK2WM_G3cb|CUO2XgbS}o`@*v5G!13h=*Zr1r*rg*N7|owKtG)=0iJvG(8$#kfKO( z_eB`8t?BF{a@y{B>izgKZnO!qw%Cz=fce%*+!`a^q(H=L-t=&>Jxq)T>sdH-9_s0@Z(} zp~NcJ0#AKj6Hj)08+%e~$wgrXrcmXPXp!Gd3qibb>888<~ICK-0YpGRxIE!ht2c^6o! z7W0Dk6_PY2p9vZYv<0uc>>LlnpU5W%`EA>JH!89ZA7J*(=B6m@9M7R|3Z1+h1{0k)0 z_h0~)vqa;!9{1)dKbHL47_`xcy z4Y>>5n#Pm~Sp7M&yRaR^xA~ub)5rv(#MTopGU&1Zq;sr=-;ouIrlFcSd3pI9?;{*| zXXFV46Q6Gqf`DM&2VSx-O6~VR%ptuc4Ta+#K;F~p-)Ld)W;xBwU%$y;Mn z3~(a$3pARj&b-kILfy08IR4m>_M-K+a4+6l{#Sb_jW*#R7ggBbR8`r>9wRSwgOpuE ztYGz^?MEI&&0>@Fzo!-^-Q%8wc{KUo{Zn+|O#{)8o``3O8l-fx^S?>OtIj1cagSkB z;>pwDgwY*PG>uTa$n@XbZ7dZ%%we~SQauaa^2DqmP5Mt4LS#=ExRydUZ=mXp^z}Yl zju!_$alFCEih&1v0r?*-0MEDuud{Y>iR?0d0>GWCV4M%G#>AWL&FVq6TB?}u;qcRC z9V^R9JQt~MU!hBSJRh?+M65G$mOq`pg+|&ye;s1oE zteTr7>)u;g%%%Q)&Ccca?gvhM?{^Vab#Q&VCJV_ZrI;@7P3Mj>M&KxDucMk5%+sZr z(OrqVvEQ&z<(9x1;7?GNBN#MYtl5W%??yc^jM}IE<;?i|#;M4XM%}%_MDxjTZ%ey) zAqQ4slME&TD+n)9sm4v<;NWiomwy~m%r2WkOK;~dkT5Hf`;P)Rk`}S0vUI_lxp^fd zU!Rw$xh@)Jmm6%{=oDrzBYjKWtM=6^_bvuzK~@r%WzwdO7Dn?7Mn;X4-M7EV z($BH5en$qSSi%aE781hdm+rpxhYcJ??(b>}LSZkPe%JW2}>q2pa;dTwB!Mav!y(}HScQh{W zFE{PziY+DaEB4)gy<2D^^c{g`E_iO=NoiycPPMSJ>_Kq^+O9LTT2 zVU@tij>7wqj&CDS+3zBkm!+m`B(a>f1jKJSm~jmws-r4~^CZ?##gAMT;@f3wVYE%~ zgkW5u|8ygx!h|T>dYzzB`#EM@X2wc=n+1 zVHQ(%EJ@lOXBzQYIm9?(Ikd@IaLnhWnSF5Un2Z6djcsU0Q^?9E?Q=;U&gsu7);T{p zJ*PNRF&)!(iQ@KLmMn@$_|ddXwFzBJW%fx11kqfLqv(dfHD-k2yPGHN$|UTVAWdSi zos;muT@cFhKP~JbRFSY@oVcG^Uiaha*MK#z9xFe;C&q{?#qNGTw>Sw!eJfoOGNMURji+2a@1IQaCnM7~R4oL{ z+H0oNB=8Y$)DB3X~)z`j)H#FmnGi~J$BSm1PY;G>SlwhQ)j zRswAf4Xcrr6v_x?IkO!t=#^(EzRxEaWgJmM^v^M;OJx!wq6hh?>X1Fg1RE2bVtB4U z>s*V?I$hwJ>M-p+uXwPn(^Lh9B+RSP6mJ6h+YORHbZq$e(s0Gl1PLREr+k4=U^&Q; zFr^0&b^fb=kK@(Q+}kWS)1w1oM$J8MC!z>epm$Q^98(&VQp4v#9{#9mlQ*0h#i9k6jMcS2aav3qtQ$82JsmF_fGy5=J2qwff5a4+P)jJ01@|dGQk7 zx}cm<$E{!32AI~rOr>KY?jy(CM@{tDX&Ik=b&mGe7Kk9roGq9UE1LY)KIx79gNG9!M_FUK{huoG5 zCN+c0-AI7kZVU-@5NuP2_9V>TxTzom`74h1f8CKHX`lBbNowMMh&7va)yDNKh#XX7 z3yQJ)Soz|$+}-=p!$i%a;7`-jL!rgK=8if}U)5~+nUQ*vJe)pX<27nrFWoUx%(g^9>xHo?ed;A%p$qk} z`(L87^1D~w%vcHD!-L3!P4JpJ*)iu)CE_qYxpE|bGLEy#G&U>;=fg>I9hYg>xh4;w zo2FXJD)%_1dZP`5M}Cg2<;!>0tPvd@8lqXvNNkbhi5dt(r$0iyTBh=Y-RH>55GXO+9i}lLK%{WsLa)=gT`YpN%SR;^*BuHO?Cj zW2ZbL+FDQQi|%SRkf_KZuq<8tgM$t`7deP+wjFZGd(Pd-U!A*+pO1_kQb%6+ ziJ?tvYr4B@yU$Ilh>E)zo`sZu9bY4~uBkm(PPsaJ$-BO!ed3az`#(2Tk^5ie(ti<$ z33!3BHez zTIgQvy#Lf^IgbeMSpS-j2Su!4VmMjEFjzVF1^Ei6$mehk8cF7Kw@)8T>zF<_{;VDv z{(MDd!IPw+I=`L6(1oBh9VKJF7k)-n#Y(zV{fq~#`oZT*twR46QFC13yQ3;4QB{ln zf`+EHR(m<^yg{S?|JVo!VOgdE*%-xEcWl^QoMwA+bP}qYi*$=A#8?UhWCW=swuAKv z87XSLw}Wr3H4}-gM`t(;VrGfI6cMAUaAl_M;Rlf$L25Z1k=y3W1l02()5%TZv9pa` zA%yJuiib(ftM+aiUJ1WRnic{q?$4+$V8;fFei-~WT#g5oi5d%n1DHP(VjKf1^$zML`Wev z3kT-K)+k$qc)n4}j3O6#9@Ed4J19#`nuPxybd?7*I8k05)8TGYW1R3vtIP1BcV=z zmGqj9lMO8+dOp?R{CCk#US)_1Ui&;M>Y9uNDa^M!hGSP4-Pe1Tc?e{SjfmtwV{qN09BdbbqJRc0!~NyEjPhlE%)RbRz6{X9IywBhvBpj#YytVnd!FbCtD z0YdRgcrKgoX}(oZIZ9U5XY@5KEBOY_Zk(kB=U;z@<&PtZw8+LQe2SAxza-Pi_4@L= zs9jg6-s*8CBp1H3dGGW>Je{*v>N1ht7d*e-!kVMY zt}`?7PAU!Fw&=0oB;J#L|akR~Nu^AhyEF3R~me9J->q=jT)1lWP z!8o6+>pj2w(zty}i=z>Isej*$9f3qq$o==P#FqW5oAdgT5@y!n{JcDJgsxN8EgIkW|hTR5L27I+smcJDyDS#hijBxN3ot@sRllZ2? z013!V{h&xz=E#+VYx~$j3Vv;r+CKw9^_oO-nimWNo3(b)?Q&VYjO14gA7u*E?3d)G zdC_}vL9U)C94dqEsNUZNzhIx_+;fhJCMQw6FT>gkQ)y3OVOwyrU?e3!_vkqD^+HA;Z{@syI@)c0zK!PWGfp3ar!T+w|PKIfh8(4UtU0rCwq~ zl(=__gEV235}8-P0P%*@PQv$Cu# z!rRy5&EN>r0qJRXH`?ezOMBuk$ElWI{e95lQ>7WZewd}R8^_htp8vq8+;K|EFV6GU zNk?@Uzx?w_mJ2g%`Xl`m%Bq-H^-HC{JD*_S@X8$_j4dZzpSOsT!$C>gp0F7MuSnI}mElvqm;C{?%IR@-pHhVgBGSp^@Tv|XrFY)w>aJiigU6^ww2XPCm-+Hdf`#sH ztN$M~i;~D2FFav^+8qj(A$|Ftjv{_~VnRZMqNu(;1=R1WOnVT)qc9*XSp?u#E%qxK z+S)vhtF8Qsf$^f3P`T5`W)yrqgp5LA$(fi}CWWm$?>+mgJUTO|MSrk`^d>3ARZ1t; z+p_Y8b9|B-X2|K0$w=B^F|Ubt_(ohX5ZYYT$D4@nTBa&yWZFH>H2CedE#PaxtcQQX z*JPXKqhiy7DyFJx?jJvfzd1!MyQI#?_L&iLYtK!dQ{{bD=Oi|&cU$Lsx;;drhcGq6 z@hQ;~d{8seRq(b%nAE{jnnR`3{<%W+dA^*;D9jP@UJ^4a*H#TH!_GGequh$xfu(i< zEgE<0b!YV(9OsBPN}p32%KrX(lgPxN0FrP0xV@yL3iPcG^6b|}F zNO_OC`#d1~v4!$3wvhlTM*v3%*P;U+m%4HDkVJeknSft_fNSLdGzauLpW)LKZo~zJ@kp zmJWKY+vXdme~pyl19(FHA}ngVF_XKz1eIb-U9YUWJf(6WrWTJ^gxZ)7XpjZL|V z*)UhOh@XkjXh!ioTLg1$*sTe5Nm#w0wVEcuRHqO@VGhnCC78&1s^c?y6zi^!_iJ4Z zibt3I<~S{_a8shRA-of><&)hD#r)5?yOzPEOiyFXdr95p;crOK2Mwu1j8SSr2=!7v z@jXyYXINmXAXU^PCA==g(ks|{z>o4d2(y_@$LokMrBVL+HjX^>)8lEA>(+$p<~ilN zw{E^cyI5blYdY67BTLJ%jt&XY#^k_@_+f`RHc5g_CW_FSPbMu2Ft01O8Nq#Qu}+Wl6Poo_x6x7z%F ze7$v8)a$$Ut&}vPNQcr5!qBCFbO}hOfPgY|cXtQ~N|%6i58WctF_J?m-QD%v^V`qf z$GiV{AJ(C)h0EcXFLzw=Ij<9V)YSlz(XJp4iuhL02L_ybY~+Of!ON}e≈z(qi$* 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 +

+ +
+ + +### Select harget hardware + +Ensure the **Jetson** category at the top of the window is checked and that the **Target Hardware** matches your +model of Jetson computer. If the board is not detected, refer to the instructions provided with your Jetson computer +for any additional steps that may be be needed, such as entering bootloader mode. + +### Select SDK version + +Select SDK version `6.2.x` (`6.2.1` is the latest at the time of writing). + +### Additional SDKs + +If desired, you may install additional SDKs. These are not required for ROS 2 Humble, but may be needed for specific +applications you intend to run on your robot. + +### Start the installer + +After selecting the appropriate options, click the green **Continue** button in the lower right of the window. + +## Details and license + +Review the selected components. You may customize which specific components will be installed by checking or +unchecking them. + +
+
+ +
+
+ +Check the license agreement at the bottom of the window and click the green **Continue** button. + +If the **Download folder** and **SDKs install folder** specified at the bottom of the window do not already exist on +your computer you will be prompted to create them. If this happens, click the green **Create** button. + +
+
+ +
+
+ +If you are running on Ubuntu you may be asked to enter your password to run some commands as `root`. + +### Wait for the download and installation to progress + +Wait for JetPack to downloading and install. Depending on your internet connection speed this may take some +time. + +
+
+ +
+
+ +The download and installation progress is shown at the bottom of the screen. If you need to pause the process, you can +press the green **Pause** button and resume the installation at a later time. + +## Flash the Jetson + +:::note + +Some Jetson computers skip this step. Please refer to the instructions for your specific computer. + +For example, **Forcecr** boards use a different set of steps, [documented here](https://www.forecr.io/blogs/installation/jetpack-6-x-installation-for-dsboard-ornx). + +::: + +After the download has proceeded sufficiently, SDK Manager will prompt you to flash your Jetson computer. + +
+
+ +
+
+ +Enter the username and password you intend to use to log into the Jetson computer. By default Clearpath Robotics uses +the username `administrator` and the password `clearpath`. + +When ready, click the green **Flash** button at the bottom of the window. + +## Post-installation configuration + +:::note + +See Clearpath's [computer Jetson setup script documentation](https://github.com/clearpathrobotics/clearpath_computer_installer/blob/jetson-setup/README.md) +for mode details on post-installation configuration. + +::: + +Once the core OS and Jetson APIs are installed the next step is to install the necessary ROS components to allow the +computer to control your robot. + +Connect the Jetson to the internet, log in, and run the following command to download and run Clearpath's +Jetson setup script: + +```bash +wget -c https://raw.githubusercontent.com/clearpathrobotics/clearpath_computer_installer/refs/heads/jetson-setup/jetson-humble-setup.bash && bash -e jetson-humble-setup.bash +``` + +This script will: +- (re-)configure `apt` with addional sources; +- install additional `apt` and `pip` packages needed for Clearpath robots; +- install core ROS components; +- create and build a ROS workspace (`$HOME/colcon_ws`); +- install additional Linux kernel modules; +- configure your robot's initial `/etc/clearpath/robot.yaml` file; and +- optionally reconfigure carrier board USB connections to enable bluetooth (required for teleop). + +### Missing ROS dependencies + +Manually running `rosdep install` in the generated workspace will result in warnings about some missing dependencies. +This is normal; the missing dependencies are for Clearpath platforms that are not supported on Jetson computers. + +If you see warnings about the following dependencies being uninstallable, you may safely ignore them: + +| ROS Package | Debian Package | Notes | +|:--------------------- |:-------------------------------- |:---------------------------------------------------------------------------------------------------------------- | +| `gazebo_ros2_control` | `ros-humble-gazebo-ros2-control` | Needed for simulation support by `ros2_kortex` (Kinova manipulator driver). Not currently available for ARM CPUs | +| `sevcon_traction` | `ros-humble-sevcon-traction` | Needed by Warthog W200, which cannot use an Nvidia Jetson as its primary computer | +| `valence_bms_driver` | `ros-humble-valence-bms-driver` | Needed for Valence batteries, which are not used in Jackal, Dingo, nor Ridgeback | + +## Building additional kernel modules + +At the time of writing, JetPack 6.1 installs the kernel `5.15.148-tegra`. This kernel by default does not include the +`uinput` and `slcan` modules. Clearpath has [pre-built copies](https://github.com/clearpathrobotics/clearpath_computer_installer/tree/jetson-setup) +of these modules for kernel `5.15.148-tegra`. + +If you have a different kernel, or want to build these modules yourself, follow +[Nvidia's developer guide](https://docs.nvidia.com/jetson/archives/r36.4.4/DeveloperGuide/SD/Kernel/KernelCustomization.html). +The essential steps are summarized below, but refer to Nvidia's kernel customization guide for more details. + +:::note + +The following instructions assume you are building the kernel and modules directly on the Jetson. To cross-compile, +refer to Nvidia's developer guide. + +::: + +### Install prerequisites + +Run the following command: + +```bash +sudo apt-get install build-essential bc flex bison libssl-dev zstd +``` + +### Download and extract the kernel sources + +:::note + +At the time of writing, the latest kernel sources are available at https://developer.nvidia.com/embedded/jetson-linux-r3644 + +::: + +Run the following commands: + +```bash +cd $HOME +wget https://developer.nvidia.com/downloads/embedded/l4t/r36_release_v4.4/sources/public_sources.tbz2 +tar xf public_sources.tbz2 +cd Linux_for_Tegra/source +tar xf kernel_src.tbz2 +``` + +### Customize the kernel modules + +To enable the `slcan` and `uinput` modules you must edit the kernel configuration file. + +```bash +echo "CONFIG_CAN_SLCAN=m" >> $HOME/Linux_for_Tegra/source/kernel/kernel-jammy-src/arch/arm64/configs/defconfig +echo "CONFIG_INPUT_UINPUT=m" >> $HOME/Linux_for_Tegra/source/kernel/kernel-jammy-src/arch/arm64/configs/defconfig +``` + +### Build the kernel and modules + +:::note + +This step can take some time. Be patient. + +::: + +Run the following commands to build the kernel and modules: + +```bash +cd $HOME/Linux_for_Tegra/source +mkdir kernel_out +./nvbuild.sh +``` + +### Install the modules + +After the build finishes, run the following commands to install the new modules: + +```bash +cd $HOME/Linux_for_Tegra/source/kernel_out/kernel/kernel-jammy-src +sudo cp drivers/net/can/socat.ko /lib/modules/$(uname -r)/kernel/drivers/net/can/ +sudo cp drivers/input/misc/uinput.ko /lib/modules/$(uname -r)/kernel/drivers/input/misc/ +sudo depmod +sudo modprobe slcan +sudo modprobe uinput +``` + +## Installing firmware updates + +If you need to [install firmware updates](robot#firmware-update) for your robot, you must install the +`clearpath_firmware` package on an `amd64` [offboard computer](offboard_pc); the +`clearpath_firmware` package is not available for ARM processors as a debian package. + +Connect the robot's MCU directly to the offboard computer (using either ethernet or USB, as appropriate for your +model of robot) and run +```bash +ros2 run clearpath_firmware flash +``` +on the offboard computer to update the firmware. diff --git a/docs_versioned_docs/version-ros2humble/ros/installation/offboard_pc.mdx b/docs_versioned_docs/version-ros2humble/ros/installation/offboard_pc.mdx index 8d7e4a79..bd774a62 100644 --- a/docs_versioned_docs/version-ros2humble/ros/installation/offboard_pc.mdx +++ b/docs_versioned_docs/version-ros2humble/ros/installation/offboard_pc.mdx @@ -1,7 +1,7 @@ --- title: Offboard Computer Setup sidebar_label: Offboard Computer -sidebar_position: 3 +sidebar_position: 4 toc_min_heading_level: 2 toc_max_heading_level: 4 --- diff --git a/docs_versioned_docs/version-ros2humble/ros/installation/robot.mdx b/docs_versioned_docs/version-ros2humble/ros/installation/robot.mdx index 678e5252..3d6036ef 100644 --- a/docs_versioned_docs/version-ros2humble/ros/installation/robot.mdx +++ b/docs_versioned_docs/version-ros2humble/ros/installation/robot.mdx @@ -13,13 +13,16 @@ import ComputerNetworkingSetupInstall from "../../components/networking/_compute ## Operating System (OS) {#operating-system} ROS 2 Humble uses Ubuntu 22.04 as its Tier 1 operating system. -Though other operating systems are supported, it is highly recommended to use Ubuntu 22.04. +Though other operating systems are supported, it is highly recommended to use Ubuntu 22.04. The preferred method is using the Clearpath Robotics ISO image, which is covered in this section. :::note The Clearpath Robotics ISO image only targets x86 computers (`amd64` architecture). +For installation on [Nvidia Jetson](https://www.nvidia.com/en-us/autonomous-machines/embedded-systems/) devices +see [Nvidia Installation](nvidia.mdx). + ::: Clearpath provides a lightly customized installation image of Ubuntu 22.04 that has the needed script to setup the robot. diff --git a/docs_versioned_docs/version-ros2jazzy/ros/installation/controller.mdx b/docs_versioned_docs/version-ros2jazzy/ros/installation/controller.mdx index 7509a8ca..1d15d12b 100644 --- a/docs_versioned_docs/version-ros2jazzy/ros/installation/controller.mdx +++ b/docs_versioned_docs/version-ros2jazzy/ros/installation/controller.mdx @@ -1,7 +1,7 @@ --- title: Joystick Controller Pairing sidebar_label: Joystick Controller -sidebar_position: 5 +sidebar_position: 7 toc_min_heading_level: 2 toc_max_heading_level: 4 --- diff --git a/docs_versioned_docs/version-ros2jazzy/ros/installation/nvidia.mdx b/docs_versioned_docs/version-ros2jazzy/ros/installation/nvidia.mdx new file mode 100644 index 00000000..7c3845b3 --- /dev/null +++ b/docs_versioned_docs/version-ros2jazzy/ros/installation/nvidia.mdx @@ -0,0 +1,17 @@ +--- +title: Nvidia Jetson Installation +sidebar_label: Nvidia Jetson Installation +sidebar_position: 3 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +:::note + +Nvidia does not currently support installing Ubuntu 24.04 on Jetson computers. ROS 2 Jazzy cannot +be used on Jetson computers at this time. + +To install Ubuntu 22.04 and ROS 2 Humble on a Jetson computer, see the +[Humble installation guide](/docs/ros2humble/ros/installation/nvidia). + +::: diff --git a/docs_versioned_docs/version-ros2jazzy/ros/installation/offboard_pc.mdx b/docs_versioned_docs/version-ros2jazzy/ros/installation/offboard_pc.mdx index 14456cfe..b12923af 100644 --- a/docs_versioned_docs/version-ros2jazzy/ros/installation/offboard_pc.mdx +++ b/docs_versioned_docs/version-ros2jazzy/ros/installation/offboard_pc.mdx @@ -1,7 +1,7 @@ --- title: Offboard Computer Setup sidebar_label: Offboard Computer -sidebar_position: 4 +sidebar_position: 5 toc_min_heading_level: 2 toc_max_heading_level: 4 --- diff --git a/docs_versioned_docs/version-ros2jazzy/ros/installation/updates.mdx b/docs_versioned_docs/version-ros2jazzy/ros/installation/updates.mdx index 6891555f..6ccffe0b 100644 --- a/docs_versioned_docs/version-ros2jazzy/ros/installation/updates.mdx +++ b/docs_versioned_docs/version-ros2jazzy/ros/installation/updates.mdx @@ -2,7 +2,7 @@ title: Installing Updates sidebar_label: Installing Updates sidebar_position: 1 -toc_min_heading_level: 2 +toc_min_heading_level: 4 toc_max_heading_level: 4 --- diff --git a/docs_versioned_docs/version-ros2jazzy/ros/installation/upgrading.mdx b/docs_versioned_docs/version-ros2jazzy/ros/installation/upgrading.mdx index 61810bce..b863024c 100644 --- a/docs_versioned_docs/version-ros2jazzy/ros/installation/upgrading.mdx +++ b/docs_versioned_docs/version-ros2jazzy/ros/installation/upgrading.mdx @@ -1,7 +1,7 @@ --- title: Upgrading to Jazzy sidebar_label: Upgrading to Jazzy -sidebar_position: 2 +sidebar_position: 6 toc_min_heading_level: 2 toc_max_heading_level: 4 --- From 30b5023bb821e3253862727c1ebaee1270c2f065 Mon Sep 17 00:00:00 2001 From: Chris Iverach-Brereton <59611394+civerachb-cpr@users.noreply.github.com> Date: Fri, 25 Jul 2025 17:26:32 -0400 Subject: [PATCH 25/25] Add a new page for CUDA installation (#449) * Add a new page for CUDA installation * Nvidia Samples -> CUDA Samples * Add CUDA samples to external links, add newline to EOF --- .../ros/installation/cuda.mdx | 112 ++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 docs_versioned_docs/version-ros2jazzy/ros/installation/cuda.mdx diff --git a/docs_versioned_docs/version-ros2jazzy/ros/installation/cuda.mdx b/docs_versioned_docs/version-ros2jazzy/ros/installation/cuda.mdx new file mode 100644 index 00000000..7a739e8f --- /dev/null +++ b/docs_versioned_docs/version-ros2jazzy/ros/installation/cuda.mdx @@ -0,0 +1,112 @@ +--- +title: CUDA Installation +sidebar_label: CUDA Installation +sidebar_position: 8 +toc_min_heading_level: 2 +toc_max_heading_level: 4 +--- + +:::note + +CUDA is a proprietary framework developed by Nvidia. To use CUDA you must have a compatible GPU from Nvidia. + +::: + +## Verify your GPU supports CUDA + +To check that you have an Nvidia GPU, run the following command: + +```bash +lspci | grep -i nvidia +``` + +Check that +1. there is at least one graphics card listed, and +2. that your GPU model [supports CUDA](https://developer.nvidia.com/cuda-gpus) + +## Add Nvidia package sources + +The easiest way to install CUDA is to add Nvidia's `apt` sources to your configuration. Run the following +commands on the robot: + +```bash +wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb +sudo dpkg -i cuda-keyring_1.1-1_all.deb +sudo apt-get update +``` + +## Install CUDA + +:::note + +If you have a realtime Linux kernel installed (`PREEMPT_RT`) you may encounter errors when installing CUDA, as it +does not officially support realtime kernels. To work around these errors add `IGNORE_PREEMPT_RT_PRESENCE=1` +before any `apt` or `apt-get` commands, e.g. +``` +sudo IGNORE_PREEMPT_RT_PRESENCE=1 apt-get install cuda-toolkit +``` + +::: + +To install CUDA, run the following command: +```bash +sudo apt-get install cuda-toolkit +``` + +Optionally you can also install all GDS packages: +```bash +sudo apt-get install nvidia-gds +``` + +Reboot the computer after installing the packages. + +## Configure environment + +:::note + +At the time of writing, CUDA `12.9` is the latest version. The instructions below assume this version is +being installed, but if you installed a different version you will need to modify the instructions +accordingly. + +::: + +After rebooting, it is recommended to modify `$HOME/.bashrc` to update your environment variables to +enable CUDA tools. Add the following to `.bashrc`: + +``` +export PATH=/usr/local/cuda-12.9/bin${PATH:+:${PATH}} +export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/cuda-12.9/lib64 +``` + +After modifying `.bashrc` either close the terminal and re-open it or run `source $HOME/.bashrc` to apply +the changes. + +### CUDA samples + +You can optionally download and build the [CUDA samples](https://github.com/NVIDIA/cuda-samples) to verify +your installation: + +```bash +git clone https://github.com/NVIDIA/cuda-samples.git +cd cuda-samples +mkdir build +cd build +cmake .. +make +``` + +Run the `deviceQuery` sample from the `build` directory to make sure CUDA can run correctly on your system: +```bash +./Samples/1_Utilities/deviceQuery/deviceQuery +``` +You should see `Result = PASS` at the bottom of the output, indicating a CUDA-capable GPU was is +detected and usable. + +Refer the [CUDA samples documentation](https://github.com/NVIDIA/cuda-samples/tree/master?tab=readme-ov-file#samples-list) +for details on additional sample programs. + +## External Links + +- [CUDA installation guide for Linux](https://docs.nvidia.com/cuda/cuda-installation-guide-linux/) +- [CUDA supported GPUs](https://developer.nvidia.com/cuda-gpus) +- [CUDA samples](https://github.com/NVIDIA/cuda-samples)

BY#IuaoVC- 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 z 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≠JBf6Zru6*x-9GdcxCw9 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 PhMms?&k@i5e*6Cb0nCWx literal 0 HcmV?d00001 diff --git a/docs_versioned_docs/version-ros2humble/ros/installation/img/jetpack_flash.png b/docs_versioned_docs/version-ros2humble/ros/installation/img/jetpack_flash.png new file mode 100644 index 0000000000000000000000000000000000000000..8584a6ef50707324489a0097bd38a0a38cacefe8 GIT binary patch literal 251104 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

LuawJ1p0Wz1#0K=C}(=$MK7PoFvC~GD`ruB(L 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ν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 Date: Mon, 14 Jul 2025 08:41:08 -0400 Subject: [PATCH 09/25] Add instructions for using clearpath-computer-setup for configuring the bridge & wifi. Keep the manual netplan setup in separate tabs, as this is still nice to have documented, even if it's not the default procedure. (#436) --- .../_computer_networking_setup_install.mdx | 19 +- .../ros/networking/computer_setup.mdx | 661 +++++++++++++++--- 2 files changed, 562 insertions(+), 118 deletions(-) diff --git a/docs_versioned_docs/version-ros2jazzy/components/networking/_computer_networking_setup_install.mdx b/docs_versioned_docs/version-ros2jazzy/components/networking/_computer_networking_setup_install.mdx index 94e0fa1c..5daa8a78 100644 --- a/docs_versioned_docs/version-ros2jazzy/components/networking/_computer_networking_setup_install.mdx +++ b/docs_versioned_docs/version-ros2jazzy/components/networking/_computer_networking_setup_install.mdx @@ -1,6 +1,15 @@ -Clearpath robots use [`netplan`](https://netplan.io/) to configure all network connections, including wired and -wireless interfaces. The `netplan` package is installed on Ubuntu by default. +The `clearpath_computer_setup` package offers a terminal menu tool for configuring a robot computer. +The main feature of this tool is the ability to generate `netplan` configurations. The `clearpath_computer_setup` +package is available on the [Clearpath package server](../../ros/installation/robot.mdx#clearpath-package-server). -To edit the `netplan` configuration files you will also need a text editor. The `nano` and -`vi` editors are included by default, but additional editors such as `vim` or `emacs` can -also be installed using the `apt` command. +It should be installed on the robot's computer: + +``` +sudo apt install python3-clearpath-computer-setup +``` + +To run the tool, call: + +``` +sudo clearpath-computer-setup +``` diff --git a/docs_versioned_docs/version-ros2jazzy/ros/networking/computer_setup.mdx b/docs_versioned_docs/version-ros2jazzy/ros/networking/computer_setup.mdx index 05614be6..17516202 100644 --- a/docs_versioned_docs/version-ros2jazzy/ros/networking/computer_setup.mdx +++ b/docs_versioned_docs/version-ros2jazzy/ros/networking/computer_setup.mdx @@ -5,130 +5,565 @@ sidebar_position: 2 import ComputerNetworkingSetupInstall from "../../components/networking/_computer_networking_setup_install.mdx"; import StandardClearpathBridgeSetup from "../../components/networking/_standard_clearpath_bridge_setup.mdx"; - - -## Connecting to an Existing Wi-Fi Network {#netplan-wifi} - -Use `netplan` to connect your robot to an existing wireless network. - -First, determine the name of your wireless interface by running `iwconfig` you should see -an entry similar to this: - -``` -wlp59s0 IEEE 802.11 ESSID:off/any - Mode:Managed Access Point: Not-Associated Tx-Power=off - Retry short limit:7 RTS thr:off Fragment thr:off - Power Management:on -``` - -The interface name is in the left column, starting with `w`. - -Once you have identified your interface, edit or create a file -called `/etc/netplan/60-wifi.yaml` containing the following: - -```yaml -network: - wifis: - MY_WIFI_INTERFACE: - optional: true - access-points: - MY_WIFI_SSID: - password: MY_WIFI_PASSWORD - dhcp4: true -``` - -with the following substitutions: -1. Replace `MY_WIFI_INTERFACE` with the name of the interface you identified in the first step, - e.g. `wlp59s0` -2. Replace `MY_WIFI_SSID` with the SSID of your network. -3. Replace `MY_WIFI_PASSWORD` with your network's password. - -For example: - -```yaml -network: - wifis: - wlp59s0: - optional: true - access-points: - BabCom: - password: peekaboo - dhcp4: true -``` +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; -This configuration will connect your robot via DHCP to your WPA2/3 wireless network. If you -need to use a static IP address, modify the file to contain the following: - -```yaml -network: - wifis: - MY_WIFI_INTERFACE: - optional: true - access-points: - MY_WIFI_SSID: - password: MY_WIFI_PASSWORD - dhcp4: false - dhcp4-overrides: - send-hostname: true - addresses: - - MY_STATIC_IP/MY_SUBNET - nameservers: - addresses: - - MY_NAMESERVER -``` +:::note -with the same substitutions noted earlier, plus -1. Replace `MY_STATIC_IP` with the desired static IP address. -2. Replace `MY_SUBNET` with the length of your network's subnet mask (typically `24` or `16`) -3. Replace `MY_NAMESERVER` with the IP address of your DNS server You may add multiple DNS servers - with each one on its own line. - -For example: - -```yaml -network: - wifis: - wlp59s0: - optional: true - access-points: - BabCom: - password: peekaboo - dhcp4: false - dhcp4-overrides: - send-hostname: true - addresses: - - 10.25.0.134/16 - nameservers: - addresses: - - 10.25.0.10 - - 8.8.8.8 - - 8.8.4.4 -``` + -Once you have edited the netplan configuration file, run the following two commands: -1. `sudo netplan --debug generate` -- this will verify that the netplan configuration files can - be read properly. Correct any errors before proceeding. -2. `sudo netplan try` -- this will try running the new configuration, but will automatically - roll back if it doesn't work correctly. -3. `sudo netplan apply` -- this will apply the new configuration to your network interfaces. +::: -:::note +## Connecting to an Existing Wi-Fi Network {#netplan-wifi} -By convention, all Netplan configuration files should be prefixed with two numbers indicating the -order in which the file should be read. Files are read in alphanumeric order, with `00-` prefixes -first and `99-` prefixes last. + + + + Use the `sudo clearpath-computer-setup` command to connect your robot to an existing wireless network. + + ``` + ___ _ _ ___ _ ___ _ + | _ \___| |__ ___| |_ / __|___ _ __ _ __ _ _| |_ ___ _ _ / __| ___| |_ _ _ _ __ + | / _ \ '_ \/ _ \ _| | (__/ _ \ ' \| '_ \ || | _/ -_) '_| \__ \/ -_) _| || | '_ \ + |_|_\___/_.__/\___/\__| \___\___/_|_|_| .__/\_,_|\__\___|_| |___/\___|\__|\_,_| .__/ + |_| |_| + Press Q, Esc, or CTRL+C to go back. + ---------------------------------------------------------------------------------------- + > Netplan Setup + + About + Exit -If multiple files define the same configuration, the last-read file will override the earlier -definitions. + ``` -Once all files have been processed the result is amalgamated to create the system's Netplan -confguration. + Select `Netplan Setup` and press the `ENTER` key. -::: + ``` + _ _ _ _ ___ __ _ _ _ + | \| |___| |_ _ __| |__ _ _ _ / __|___ _ _ / _(_)__ _ _ _ _ _ __ _| |_(_)___ _ _ + | .` / -_) _| '_ \ / _` | ' \ | (__/ _ \ ' \| _| / _` | || | '_/ _` | _| / _ \ ' \ + |_|\_\___|\__| .__/_\__,_|_||_| \___\___/_||_|_| |_\__, |\_,_|_| \__,_|\__|_\___/_||_| + |_| |___/ + Press Q, Esc, or CTRL+C to go back. + ---------------------------------------------------------------------------------------- + Bridge Setup + Ethernet Setup + > Wifi Setup + + Pre-set Configurations + + Read Configuration YAML + Write Configuration YAML + Apply Configuration Changes + View Netplan Configurations + + ``` + + Use the arrow keys to select `Wifi Setup` and press `ENTER`. + + If you have multiple wifi interfaces, use the arrow keys to select the one you wish to configure. If + you only have one interface, it will be seleced automatically. + + ``` + __ ___ ___ _ ___ _ + \ \ / (_) __(_) / __| ___| |_ _ _ _ __ + \ \/\/ /| | _|| | \__ \/ -_) _| || | '_ \ + \_/\_/ |_|_| |_| |___/\___|\__|\_,_| .__/ + |_| + Interface Menu + Press Q, Esc, or CTRL+C to go back. + -------------------------------------------- + > Wi-Fi 'wlp59s0' Setup + + ``` + + Press `ENTER` once you have selected the interface to configure. + + ``` + __ ___ ___ _ ___ _ + \ \ / (_) __(_) / __| ___| |_ _ _ _ __ + \ \/\/ /| | _|| | \__ \/ -_) _| || | '_ \ + \_/\_/ |_|_| |_| |___/\___|\__|\_,_| .__/ + |_| + Press Q, Esc, or CTRL+C to go back. + -------------------------------------------- + > SSID: ssid + Password: password + + Save Settings + Reset Settings + + ``` + + Select `SSID` and press `ENTER`. You will be prompted to enter the SSID of your wireless network. + + ``` + Wi-Fi Network SSID + ------------------ + SSID (ssid): + + ``` + + Then select `Password` and press `ENTER` + + ``` + __ ___ ___ _ ___ _ + \ \ / (_) __(_) / __| ___| |_ _ _ _ __ + \ \/\/ /| | _|| | \__ \/ -_) _| || | '_ \ + \_/\_/ |_|_| |_| |___/\___|\__|\_,_| .__/ + |_| + Press Q, Esc, or CTRL+C to go back. + -------------------------------------------- + > SSID: ssid + Password: password + + Save Settings + Reset Settings + + ``` + + Type in the password for your wireless network and press `ENTER`. The password is case-sensitive. Note that + only `wpa` family encryption is supported using this tool. If your network requires certificates you + must manually configure Netplan. + + ``` + Wi-Fi Network Password + ---------------------- + Password (password): + + ``` + + Type the SSID of your network and press `ENTER`. Note that the SSID is case-sensitive. + + Finally, select `Save Settings` and press the `ENTER` key. + + ``` + __ ___ ___ _ ___ _ + \ \ / (_) __(_) / __| ___| |_ _ _ _ __ + \ \/\/ /| | _|| | \__ \/ -_) _| || | '_ \ + \_/\_/ |_|_| |_| |___/\___|\__|\_,_| .__/ + |_| + Press Q, Esc, or CTRL+C to go back. + -------------------------------------------- + SSID: ssid + Password: password + + > Save Settings + Reset Settings + ``` + + Once you have configured the wireless interfaces, press `Esc` until you return to + the main menu. Select `Write Configuration YAML` and press `ENTER` + + ``` + _ _ _ _ ___ __ _ _ _ + | \| |___| |_ _ __| |__ _ _ _ / __|___ _ _ / _(_)__ _ _ _ _ _ __ _| |_(_)___ _ _ + | .` / -_) _| '_ \ / _` | ' \ | (__/ _ \ ' \| _| / _` | || | '_/ _` | _| / _ \ ' \ + |_|\_\___|\__| .__/_\__,_|_||_| \___\___/_||_|_| |_\__, |\_,_|_| \__,_|\__|_\___/_||_| + |_| |___/ + Press Q, Esc, or CTRL+C to go back. + ---------------------------------------------------------------------------------------- + Bridge Setup + Ethernet Setup + Wifi Setup + + Pre-set Configurations + + Read Configuration YAML + > Write Configuration YAML + Apply Configuration Changes + View Netplan Configurations + + ``` + + Enter the path `/etc/netplan/60-wifi.yaml` and press `ENTER`. + + ``` + After saving, run `Apply` to update Netplan. + -------------------------------------------- + _ _ _ _ ___ __ _ _ _ + | \| |___| |_ _ __| |__ _ _ _ / __|___ _ _ / _(_)__ _ _ _ _ _ __ _| |_(_)___ _ _ + | .` / -_) _| '_ \ / _` | ' \ | (__/ _ \ ' \| _| / _` | || | '_/ _` | _| / _ \ ' \ + |_|\_\___|\__| .__/_\__,_|_||_| \___\___/_||_|_| |_\__, |\_,_|_| \__,_|\__|_\___/_||_| + |_| |___/ + Save YAML: + Enter path to Netplan Configuration YAML + > + + ``` + + Finally, select `Apply Configuration changes` and press `ENTER`. + + ``` + _ _ _ _ ___ __ _ _ _ + | \| |___| |_ _ __| |__ _ _ _ / __|___ _ _ / _(_)__ _ _ _ _ _ __ _| |_(_)___ _ _ + | .` / -_) _| '_ \ / _` | ' \ | (__/ _ \ ' \| _| / _` | || | '_/ _` | _| / _ \ ' \ + |_|\_\___|\__| .__/_\__,_|_||_| \___\___/_||_|_| |_\__, |\_,_|_| \__,_|\__|_\___/_||_| + |_| |___/ + Apply Netplan Configuration: + - changes will not take effect until you + apply the configuration. + - applying changes may take a 15-30 seconds + depending on the system. + - depending on the new changes, + you may be disconnected from the system. + + Press Q, Esc, or CTRL+C to go back. + ---------------------------------------------------------------------------------------- + > Apply Changes + Cancel + + ``` + + Select `Apply Changes` and press `ENTER`. If you are logged into the robot via SSH you may lose your + connection when applying the changes. If this happens, simply open a new terminal and log in again. + + + First, determine the name of your wireless interface by running `iwconfig` you should see + an entry similar to this: + + ``` + wlp59s0 IEEE 802.11 ESSID:off/any + Mode:Managed Access Point: Not-Associated Tx-Power=off + Retry short limit:7 RTS thr:off Fragment thr:off + Power Management:on + ``` + + The interface name is in the left column, starting with `w`. + + Once you have identified your interface, edit or create a file + called `/etc/netplan/60-wifi.yaml` containing the following: + + ```yaml + network: + wifis: + MY_WIFI_INTERFACE: + optional: true + access-points: + MY_WIFI_SSID: + password: MY_WIFI_PASSWORD + dhcp4: true + ``` + + with the following substitutions: + 1. Replace `MY_WIFI_INTERFACE` with the name of the interface you identified in the first step, + e.g. `wlp59s0` + 2. Replace `MY_WIFI_SSID` with the SSID of your network. + 3. Replace `MY_WIFI_PASSWORD` with your network's password. + + For example: + + ```yaml + network: + wifis: + wlp59s0: + optional: true + access-points: + BabCom: + password: peekaboo + dhcp4: true + ``` + + This configuration will connect your robot via DHCP to your WPA2/3 wireless network. If you + need to use a static IP address, modify the file to contain the following: + + ```yaml + network: + wifis: + MY_WIFI_INTERFACE: + optional: true + access-points: + MY_WIFI_SSID: + password: MY_WIFI_PASSWORD + dhcp4: false + dhcp4-overrides: + send-hostname: true + addresses: + - MY_STATIC_IP/MY_SUBNET + nameservers: + addresses: + - MY_NAMESERVER + ``` + + with the same substitutions noted earlier, plus + 1. Replace `MY_STATIC_IP` with the desired static IP address. + 2. Replace `MY_SUBNET` with the length of your network's subnet mask (typically `24` or `16`) + 3. Replace `MY_NAMESERVER` with the IP address of your DNS server You may add multiple DNS servers + with each one on its own line. + + For example: + + ```yaml + network: + wifis: + wlp59s0: + optional: true + access-points: + BabCom: + password: peekaboo + dhcp4: false + dhcp4-overrides: + send-hostname: true + addresses: + - 10.25.0.134/16 + nameservers: + addresses: + - 10.25.0.10 + - 8.8.8.8 + - 8.8.4.4 + ``` + + Once you have edited the netplan configuration file, run the following two commands: + 1. `sudo netplan --debug generate` -- this will verify that the netplan configuration files can + be read properly. Correct any errors before proceeding. + 2. `sudo netplan try` -- this will try running the new configuration, but will automatically + roll back if it doesn't work correctly. + 3. `sudo netplan apply` -- this will apply the new configuration to your network interfaces. + + :::note + + By convention, all Netplan configuration files should be prefixed with two numbers indicating the + order in which the file should be read. Files are read in alphanumeric order, with `00-` prefixes + first and `99-` prefixes last. + + If multiple files define the same configuration, the last-read file will override the earlier + definitions. + + Once all files have been processed the result is amalgamated to create the system's Netplan + confguration. + + ::: + + ## Standard Clearpath Bridge - + + + + Use the `sudo clearpath-computer-setup` command to connect your robot to an existing wireless network. + + ``` + ___ _ _ ___ _ ___ _ + | _ \___| |__ ___| |_ / __|___ _ __ _ __ _ _| |_ ___ _ _ / __| ___| |_ _ _ _ __ + | / _ \ '_ \/ _ \ _| | (__/ _ \ ' \| '_ \ || | _/ -_) '_| \__ \/ -_) _| || | '_ \ + |_|_\___/_.__/\___/\__| \___\___/_|_|_| .__/\_,_|\__\___|_| |___/\___|\__|\_,_| .__/ + |_| |_| + Press Q, Esc, or CTRL+C to go back. + ---------------------------------------------------------------------------------------- + > Netplan Setup + + About + Exit + + ``` + + Select `Netplan Setup` and press the `ENTER` key. + + ``` + _ _ _ _ ___ __ _ _ _ + | \| |___| |_ _ __| |__ _ _ _ / __|___ _ _ / _(_)__ _ _ _ _ _ __ _| |_(_)___ _ _ + | .` / -_) _| '_ \ / _` | ' \ | (__/ _ \ ' \| _| / _` | || | '_/ _` | _| / _ \ ' \ + |_|\_\___|\__| .__/_\__,_|_||_| \___\___/_||_|_| |_\__, |\_,_|_| \__,_|\__|_\___/_||_| + |_| |___/ + Press Q, Esc, or CTRL+C to go back. + ---------------------------------------------------------------------------------------- + > Bridge Setup + Ethernet Setup + Wifi Setup + + Pre-set Configurations + + Read Configuration YAML + Write Configuration YAML + Apply Configuration Changes + View Netplan Configurations + + ``` + + If you do not have a bridge defined, use the arrow keys to select `Bridge Setup` and press `ENTER`. + + ``` + ___ _ _ ___ _ + | _ )_ _(_)__| |__ _ ___ / __| ___| |_ _ _ _ __ + | _ \ '_| / _` / _` / -_) \__ \/ -_) _| || | '_ \ + |___/_| |_\__,_\__, \___| |___/\___|\__|\_,_| .__/ + |___/ |_| + Interface Menu + Press Q, Esc, or CTRL+C to go back. + --------------------------------------------------- + > Add Bridge + Remove Bridge + + ``` + + Use the arrow keys to select `Add Bridge` and press `ENTER`. + + Enter the name of the bridge you want to create. By default the first bridge should be called + `br0`. Press `ENTER` to continue. + + ``` + Bridge interface name must start with 'br' + ------------------------------------------ + Enter name of bridge to add. + > + + ``` + + Select the bridge to edit (`br0` by default) and press `ENTER`. + + ``` + ___ _ _ ___ _ + | _ )_ _(_)__| |__ _ ___ / __| ___| |_ _ _ _ __ + | _ \ '_| / _` / _` / -_) \__ \/ -_) _| || | '_ \ + |___/_| |_\__,_\__, \___| |___/\___|\__|\_,_| .__/ + |___/ |_| + Interface Menu + Press Q, Esc, or CTRL+C to go back. + --------------------------------------------------- + > Bridge 'br0' Setup + + Add Bridge + Remove Bridge + + ``` + + Enable or disable DHCP for IPv4 and IPv6 as desired. + + ``` + ___ _ _ ___ _ + | _ )_ _(_)__| |__ _ ___ / __| ___| |_ _ _ _ __ + | _ \ '_| / _` / _` / -_) \__ \/ -_) _| || | '_ \ + |___/_| |_\__,_\__, \___| |___/\___|\__|\_,_| .__/ + |___/ |_| + Bridge 'br0' Configuration + Press Q, Esc, or CTRL+C to go back. + --------------------------------------------------- + > dhcp4 : [yes] + dhcp6 : [no] + bridged : [[]] + addresses : [[]] + + ``` + + To select what interfaces to bridge together, select `bridged` and press `ENTER`. Use the arrow + keys to select each interface you want to add to the bridge and press the spacebar to check/uncheck it. + + ``` + br0 bridged + Press Q, Esc, or CTRL+C to reset. + Press Enter to accept changes and exit. + --------------------------------------- + > [ ] enp3s0 + [ ] enp4s0 + [ ] wlp59s0 + + Press , for multi-selection and to accept + + ``` + + Press `ENTER` once you have selected all of the desired interfaces to bridge. + + To add static IP addresses to the bridge, select `addresses` and press `ENTER`. + + ``` + ___ _ _ ___ _ + | _ )_ _(_)__| |__ _ ___ / __| ___| |_ _ _ _ __ + | _ \ '_| / _` / _` / -_) \__ \/ -_) _| || | '_ \ + |___/_| |_\__,_\__, \___| |___/\___|\__|\_,_| .__/ + |___/ |_| + Bridge 'br0' Configuration + Press Q, Esc, or CTRL+C to go back. + --------------------------------------------------- + dhcp4 : [yes] + dhcp6 : [no] + bridged : [['enp3s0', 'enp4s0']] + > addresses : [[]] + + ``` + + Select `Add IP Address` and enter `192.168.131.1/24` to create the robot's internal network. + + ``` + Select option to edit, add, or remove bridge IP addresses: + Press Q, Esc, or CTRL+C to go back. + ---------------------------------------------------------- + > Add IP Address + Remove IP Address + + ``` + + Once you have added all desired static IP addresses to the bridge, press `Esc` until you return to + the main menu. Select `Write Configuration YAML` and press `ENTER` + + ``` + _ _ _ _ ___ __ _ _ _ + | \| |___| |_ _ __| |__ _ _ _ / __|___ _ _ / _(_)__ _ _ _ _ _ __ _| |_(_)___ _ _ + | .` / -_) _| '_ \ / _` | ' \ | (__/ _ \ ' \| _| / _` | || | '_/ _` | _| / _ \ ' \ + |_|\_\___|\__| .__/_\__,_|_||_| \___\___/_||_|_| |_\__, |\_,_|_| \__,_|\__|_\___/_||_| + |_| |___/ + Press Q, Esc, or CTRL+C to go back. + ---------------------------------------------------------------------------------------- + Bridge Setup + Ethernet Setup + Wifi Setup + + Pre-set Configurations + + Read Configuration YAML + > Write Configuration YAML + Apply Configuration Changes + View Netplan Configurations + + ``` + + Enter the path `/etc/netplan/50-clearpath-bridge.yaml` and press `ENTER`. + + ``` + After saving, run `Apply` to update Netplan. + -------------------------------------------- + _ _ _ _ ___ __ _ _ _ + | \| |___| |_ _ __| |__ _ _ _ / __|___ _ _ / _(_)__ _ _ _ _ _ __ _| |_(_)___ _ _ + | .` / -_) _| '_ \ / _` | ' \ | (__/ _ \ ' \| _| / _` | || | '_/ _` | _| / _ \ ' \ + |_|\_\___|\__| .__/_\__,_|_||_| \___\___/_||_|_| |_\__, |\_,_|_| \__,_|\__|_\___/_||_| + |_| |___/ + Save YAML: + Enter path to Netplan Configuration YAML + > + + ``` + + Finally, select `Apply Configuration changes` and press `ENTER`. + + ``` + _ _ _ _ ___ __ _ _ _ + | \| |___| |_ _ __| |__ _ _ _ / __|___ _ _ / _(_)__ _ _ _ _ _ __ _| |_(_)___ _ _ + | .` / -_) _| '_ \ / _` | ' \ | (__/ _ \ ' \| _| / _` | || | '_/ _` | _| / _ \ ' \ + |_|\_\___|\__| .__/_\__,_|_||_| \___\___/_||_|_| |_\__, |\_,_|_| \__,_|\__|_\___/_||_| + |_| |___/ + Apply Netplan Configuration: + - changes will not take effect until you + apply the configuration. + - applying changes may take a 15-30 seconds + depending on the system. + - depending on the new changes, + you may be disconnected from the system. + + Press Q, Esc, or CTRL+C to go back. + ---------------------------------------------------------------------------------------- + > Apply Changes + Cancel + + ``` + + Select `Apply Changes` and press `ENTER`. If you are logged into the robot via SSH you may lose your + connection when applying the changes. If this happens, simply open a new terminal and log in again. + + + + + + ## Determining the robot's IP address {#determine-ip-address} From 19b8bae50be562f97ab7c75c32d3cfb545465073 Mon Sep 17 00:00:00 2001 From: jhiggins-cpr <60929523+jhiggins-cpr@users.noreply.github.com> Date: Mon, 14 Jul 2025 10:29:35 -0400 Subject: [PATCH 10/25] Updates standards compliance details (#433) --- .../husky/a300/user_manual_husky.mdx | 102 ++++-------------- 1 file changed, 21 insertions(+), 81 deletions(-) diff --git a/docs_robots/outdoor_robots/husky/a300/user_manual_husky.mdx b/docs_robots/outdoor_robots/husky/a300/user_manual_husky.mdx index 6f92f484..8d9e0185 100644 --- a/docs_robots/outdoor_robots/husky/a300/user_manual_husky.mdx +++ b/docs_robots/outdoor_robots/husky/a300/user_manual_husky.mdx @@ -1701,7 +1701,27 @@ See [Husky A300 Troubleshooting](troubleshooting_husky) for details on Husky tro --- -## Declarations +## Standards Compliance + +- CE-marked + - EN 61326-1:2013 + - EN 301 489-1 V1.9.2 + - EN 61010-1:2010, EN 61010-1:2010/A1:2019/AC:2019-04, EN 61010-1:2010/A1:2019 + - EN 301 489-1 V1.9.2 + - EN 301 893 V2.1.1 + - EN 300 328 V2.2.2 +- FCC Part 15 Subpart B +- FCC Part 18 +- ICES-002 +- ICES-003 + +### Declarations + +This device complies with part 15 of the FCC Rules. Operation is subject to the following two conditions: +(1) This device may not cause harmful interference, and (2) this device must accept any interference received, +including interference that may cause undesired operation. + +CAN ICES-003(A) / NMB-003(A) :::note @@ -1711,86 +1731,6 @@ invalidate the markings and may require additional conformity assessments. ::: -### FCC Supplier's Declaration of Conformity - -**47 CFR § 2.1077 Compliance Information** - -**Husky A300** - -**Responsible Party** - -Rockwell Automation, Inc. -1201 South Second Street -Milwaukee, Wisconsin -53204-2410 - -**Point of Contact** - -Ryan Gariepy, CTO (OTTO Motors and Clearpath Robotics)
-ryan.gariepy@rockwellautomation.com
-1-844-733-6886 - -This device complies with Part 15 of the FCC Rules. - -Operation is subject to the following two conditions: (1) this device may -not cause harmful interference, and (2) this device must accept any -interference received, including interference that may cause undesired operation. - -Contains Transmitter Module FCC ID: PD9AX210NG - -Changes or modifications not expressly approved by Clearpath Robotics Inc. could void -the user's authority to operate the equipment. - -This equipment has been tested and found to comply with the limits for a Class A -digital device, pursuant to Part 15 of the FCC Rules. These limits are designed to provide -reasonable protection against harmful interference when the equipment is operated in a -commercial environment. This product generates, uses, and can radiate radio frequency -energy and, if not installed and used in accordance with the manufacturer's instruction -manual, may cause harmful interference with radio communications. Operation of this -product in a residential area is likely to cause harmful interference, in which case you will -be required to correct the interference at your own expense. - -These limits are designed to provide reasonable protection against harmful interference in -a non-residential installation. However, there is no guarantee that interference will not -occur in a particular installation. -If this equipment does cause harmful interference to radio or television reception, which can -be determined by turning the equipment off and on, the user is encouraged to try to correct -the interference by one or more of the following measures: - - Reorient or relocate the receiving antenna. - - Increase the separation between the equipment and receiver. - - Connect the equipment into an outlet on a circuit different from that which the receiver is connected. - - Consult the dealer or an experienced radio/TV technician for help. - -FCC Radiation Exposure Statement: This product complies with FCC §2.1091(b) for mobile RF exposure limits, -set forth for an uncontrolled environment and is safe for the intended operation as described in this manual. -Per FCC requirements, maintain a distance of more than 8 inches (20 cm) between any person and the host device. - -### Innovation, Science and Economic Development Canada (ISED) Compliance Notice - -Contains Transmitter Module IC: 1000M-AX210NG - -This device contains a license-exempt transmitter/receiver that complies with Innovation, -Science and Economic Development (ISED) Canada's license-exempt RSS(s). Operation is -subject to the following 2 conditions: (1) this device may not cause interference, and -(2) this device must accept any interference, including interference that may cause -undesired operation of the device. - -CAN ICES-003(A) / NMB-003(A)
-CAN ICES-002(A) / NMB-002(A) - -This Class A digital apparatus complies with Canadian ICES-002 and ICES-003. - -Under Industry Canada regulations, this radio transmitter many only operate using an -antenna of a type and maximum (or lesser) gain approved for the transmitter by Industry -Canada. To reduce potential radio interference to other users, the antenna type and its -gain should be so chosen that the equivalent isotropically radiated power (e.i.r.p.) is -not more than the necessary for successful communication. - -ISED Radiation Exposure Statement: This product complies with the Canadian Standard -RSS-102 for portable RF exposure limits, set forth for an uncontrolled environment -and is safe for the intended operation as described in this manual. Per ISED requirements, -maintain a distance of more than 8 inches (20 cm) between any person and the host device. - --- ## Support {#support} From eae9edf7636bb799c4c2c1d14db9bd80f4a60770 Mon Sep 17 00:00:00 2001 From: Tony Baltovski Date: Mon, 14 Jul 2025 14:13:05 -0400 Subject: [PATCH 11/25] Fixed the Garmin 18x GPS default baudrate. (#437) --- .../version-ros2humble/components/yaml/sensors/garmin_18x.mdx | 2 +- .../version-ros2jazzy/components/yaml/sensors/garmin_18x.mdx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs_versioned_docs/version-ros2humble/components/yaml/sensors/garmin_18x.mdx b/docs_versioned_docs/version-ros2humble/components/yaml/sensors/garmin_18x.mdx index 945378bd..9a581fc4 100644 --- a/docs_versioned_docs/version-ros2humble/components/yaml/sensors/garmin_18x.mdx +++ b/docs_versioned_docs/version-ros2humble/components/yaml/sensors/garmin_18x.mdx @@ -21,7 +21,7 @@ gps: nmea_navsat_driver: frame_id: gps_0_link port: "/dev/clearpath/gps" - baud: 115200 + baud: 19200 ``` diff --git a/docs_versioned_docs/version-ros2jazzy/components/yaml/sensors/garmin_18x.mdx b/docs_versioned_docs/version-ros2jazzy/components/yaml/sensors/garmin_18x.mdx index 2c51e390..bd2e557b 100644 --- a/docs_versioned_docs/version-ros2jazzy/components/yaml/sensors/garmin_18x.mdx +++ b/docs_versioned_docs/version-ros2jazzy/components/yaml/sensors/garmin_18x.mdx @@ -21,7 +21,7 @@ gps: nmea_navsat_driver: frame_id: gps_0_link port: "/dev/clearpath/gps" - baud: 115200 + baud: 19200 ``` From 33716ac7868681015549b865f59092a54f0a8ae0 Mon Sep 17 00:00:00 2001 From: Hilary Luo <103377417+hilary-luo@users.noreply.github.com> Date: Mon, 14 Jul 2025 16:27:46 -0400 Subject: [PATCH 12/25] Dingo uses micro-USB cable for flashing (#439) --- .../version-ros2jazzy/components/_clearpath_firmware.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs_versioned_docs/version-ros2jazzy/components/_clearpath_firmware.mdx b/docs_versioned_docs/version-ros2jazzy/components/_clearpath_firmware.mdx index faee52ed..1f05b518 100644 --- a/docs_versioned_docs/version-ros2jazzy/components/_clearpath_firmware.mdx +++ b/docs_versioned_docs/version-ros2jazzy/components/_clearpath_firmware.mdx @@ -171,7 +171,7 @@ sudo apt-get install ros-jazzy-clearpath-firmware The DX100 MCU is mounted near the HMI panel towards the rear of the robot. To access it, remove the antennas and the center channel panel. - Connect the MCU to the onboard computer using a mini-USB cable connected to the port as shown below: + Connect the MCU to the onboard computer using a micro-USB cable connected to the port as shown below: