├── .gitignore ├── CMakeLists.txt ├── LICENSE ├── README.md ├── config └── pioneer.yaml ├── launch ├── p3dx-gazebo-empty-lattice-ppursuit.launch ├── p3dx-gazebo-empty-teleop-keyboard.launch ├── p3dx-gazebo-empty.launch └── pure_pursuit.launch ├── package.xml └── rviz └── pioneer-control.rviz /.gitignore: -------------------------------------------------------------------------------- 1 | # Emacs droppings 2 | *~ 3 | -------------------------------------------------------------------------------- /CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 2.8.3) 2 | project(lattice_navigation_demos) 3 | 4 | ## Find catkin macros and libraries 5 | ## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz) 6 | ## is used, also find other catkin packages 7 | find_package(catkin REQUIRED) 8 | 9 | catkin_package() 10 | 11 | ############# 12 | ## Install ## 13 | ############# 14 | 15 | # all install targets should use catkin DESTINATION variables 16 | # See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html 17 | 18 | ## Mark other files for installation (e.g. launch and bag files, etc.) 19 | install(DIRECTORY launch rviz 20 | DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} 21 | ) 22 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 LARICS Lab 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # README # 2 | 3 | Launch and configuration files for demonstrating nonholonomic navigation using the [lattice_planner package](https://github.com/larics/lattice_planner.git). 4 | 5 | Currently, the package allows you to spawn a Pioneer P3-DX robot in an empty Gazebo world and control it by providing navigation goals. 6 | 7 | ## Installation ## 8 | 9 | The package has been tested with ROS Kinetic on Ubuntu 16.04. 10 | 11 | In addition to `ros-kinetic-desktop-full`, the following packages must be available in your workspace: 12 | 13 | * [p2os](https://github.com/allenh1/p2os) - URDF model of the P3-DX 14 | * [lattice_planner](https://github.com/larics/lattice_planner) - the lattice path planner 15 | * [agv_control_msgs](https://github.com/larics/agv_control_msgs) - path planner dependency 16 | * [pure_pursuit](https://github.com/larics/pure_pursuit) - path following algorithm 17 | 18 | The [lattice_planner](https://github.com/larics/lattice_planner) package also requires the [matio library](https://sourceforge.net/projects/matio/) for loading lattice parameters from `.mat` files: 19 | ``` 20 | sudo apt install libmatio-dev 21 | ``` 22 | The [pure_pursuit](https://github.com/larics/pure_pursuit) path following package requires the [ackermann_msgs ROS package](http://wiki.ros.org/ackermann_msgs) for publishing Ackermann steering commands, which can be installed from the official ROS repo: 23 | ``` 24 | sudo apt install ros-kinetic-ackermann-msgs 25 | ``` 26 | 27 | Make sure to `catkin_make` or `catkin build` the package and sourcing `setup.bash` for your workspace before running the demo. 28 | 29 | ## Running the demo ## 30 | 31 | ``` 32 | roslaunch lattice_navigation_demos p3dx-gazebo-empty-lattice-ppursuit.launch 33 | ``` 34 | 35 | You can set navigation goals through `rviz`. Currently, both the planner and the path following algorithm have some limitations which are documented in their respective README files. 36 | 37 | ## Citing ## 38 | 39 | These packages have been developed within our research on AGV coordination in warehouses. The path planner implementation is described in the following paper: 40 | ``` 41 | @ARTICLE{7571170, 42 | author={I. Draganjac and D. Miklić and Z. Kovačić and G. Vasiljević and S. Bogdan}, 43 | journal={IEEE Transactions on Automation Science and Engineering}, 44 | title={Decentralized Control of Multi-AGV Systems in Autonomous Warehousing Applications}, 45 | year={2016}, 46 | volume={13}, 47 | number={4}, 48 | pages={1433-1447}, 49 | keywords={}, 50 | doi={10.1109/TASE.2016.2603781}, 51 | ISSN={1545-5955}, 52 | month={Oct},} 53 | ``` 54 | 55 | 56 | -------------------------------------------------------------------------------- /config/pioneer.yaml: -------------------------------------------------------------------------------- 1 | # Parameters for the Pioneer P3-DX robot 2 | 3 | lookahead_distance: 0.5 4 | max_linear_velocity: 0.5 5 | max_rotational_velocity: 0.5 6 | position_tolerance: 0.05 7 | map_frame_id: pioneer/map 8 | robot_frame_id: pioneer/base_link 9 | lookahead_frame_id: pioneer/lookahead 10 | 11 | -------------------------------------------------------------------------------- /launch/p3dx-gazebo-empty-lattice-ppursuit.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 19 | 20 | 21 | 22 | 23 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /launch/p3dx-gazebo-empty-teleop-keyboard.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /launch/p3dx-gazebo-empty.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 19 | 20 | -------------------------------------------------------------------------------- /launch/pure_pursuit.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | lattice_navigation_demos 4 | 0.9.0 5 | Navigation demos using the lattice planner. 6 | 7 | Damjan Miklic 8 | 9 | MIT 10 | 11 | catkin 12 | teleop_twist_keyboard 13 | agv_control_msgs 14 | lattice_planner 15 | pure_pursuit 16 | p2os_urdf 17 | fake_localization 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /rviz/pioneer-control.rviz: -------------------------------------------------------------------------------- 1 | Panels: 2 | - Class: rviz/Displays 3 | Help Height: 89 4 | Name: Displays 5 | Property Tree Widget: 6 | Expanded: 7 | - /Odometry1 8 | - /TF1 9 | - /TF1/Frames1 10 | Splitter Ratio: 0.816860437 11 | Tree Height: 445 12 | - Class: rviz/Selection 13 | Name: Selection 14 | - Class: rviz/Tool Properties 15 | Expanded: 16 | - /2D Pose Estimate1 17 | - /2D Nav Goal1 18 | - /Publish Point1 19 | Name: Tool Properties 20 | Splitter Ratio: 0.588679016 21 | - Class: rviz/Views 22 | Expanded: 23 | - /Current View1 24 | Name: Views 25 | Splitter Ratio: 0.5 26 | - Class: rviz/Time 27 | Experimental: false 28 | Name: Time 29 | SyncMode: 0 30 | SyncSource: "" 31 | Visualization Manager: 32 | Class: "" 33 | Displays: 34 | - Alpha: 0.5 35 | Cell Size: 1 36 | Class: rviz/Grid 37 | Color: 160; 160; 164 38 | Enabled: true 39 | Line Style: 40 | Line Width: 0.0299999993 41 | Value: Lines 42 | Name: Grid 43 | Normal Cell Count: 0 44 | Offset: 45 | X: 10 46 | Y: 10 47 | Z: 0 48 | Plane: XY 49 | Plane Cell Count: 20 50 | Reference Frame: 51 | Value: true 52 | - Alpha: 0.699999988 53 | Class: rviz/Map 54 | Color Scheme: map 55 | Draw Behind: false 56 | Enabled: true 57 | Name: Map 58 | Topic: /map 59 | Unreliable: false 60 | Value: true 61 | - Alpha: 1 62 | Class: rviz/RobotModel 63 | Collision Enabled: false 64 | Enabled: true 65 | Links: 66 | All Links Enabled: true 67 | Expand Joint Details: false 68 | Expand Link Details: false 69 | Expand Tree: false 70 | Link Tree Style: Links in Alphabetic Order 71 | back_sonar: 72 | Alpha: 1 73 | Show Axes: false 74 | Show Trail: false 75 | Value: true 76 | base_link: 77 | Alpha: 1 78 | Show Axes: false 79 | Show Trail: false 80 | Value: true 81 | center_hubcap: 82 | Alpha: 1 83 | Show Axes: false 84 | Show Trail: false 85 | Value: true 86 | center_wheel: 87 | Alpha: 1 88 | Show Axes: false 89 | Show Trail: false 90 | Value: true 91 | front_sonar: 92 | Alpha: 1 93 | Show Axes: false 94 | Show Trail: false 95 | Value: true 96 | p3dx_left_hubcap: 97 | Alpha: 1 98 | Show Axes: false 99 | Show Trail: false 100 | Value: true 101 | p3dx_left_wheel: 102 | Alpha: 1 103 | Show Axes: false 104 | Show Trail: false 105 | Value: true 106 | p3dx_right_hubcap: 107 | Alpha: 1 108 | Show Axes: false 109 | Show Trail: false 110 | Value: true 111 | p3dx_right_wheel: 112 | Alpha: 1 113 | Show Axes: false 114 | Show Trail: false 115 | Value: true 116 | swivel: 117 | Alpha: 1 118 | Show Axes: false 119 | Show Trail: false 120 | Value: true 121 | top_plate: 122 | Alpha: 1 123 | Show Axes: false 124 | Show Trail: false 125 | Value: true 126 | Name: RobotModel 127 | Robot Description: robot_description 128 | TF Prefix: "" 129 | Update Interval: 0 130 | Value: true 131 | Visual Enabled: true 132 | - Angle Tolerance: 0.100000001 133 | Class: rviz/Odometry 134 | Color: 255; 25; 0 135 | Enabled: true 136 | Keep: 1 137 | Length: 1 138 | Name: Odometry 139 | Position Tolerance: 0.100000001 140 | Topic: /pioneer/odom 141 | Value: true 142 | - Alpha: 1 143 | Axes Length: 1 144 | Axes Radius: 0.100000001 145 | Class: rviz/Pose 146 | Color: 85; 170; 0 147 | Enabled: true 148 | Head Length: 0.300000012 149 | Head Radius: 0.100000001 150 | Name: Goal 151 | Shaft Length: 1 152 | Shaft Radius: 0.0500000007 153 | Shape: Arrow 154 | Topic: /goal 155 | Unreliable: false 156 | Value: true 157 | - Alpha: 1 158 | Buffer Length: 1 159 | Class: rviz/Path 160 | Color: 255; 85; 255 161 | Enabled: true 162 | Head Diameter: 0.300000012 163 | Head Length: 0.200000003 164 | Length: 0.300000012 165 | Line Style: Lines 166 | Line Width: 0.0299999993 167 | Name: Path 168 | Offset: 169 | X: 0 170 | Y: 0 171 | Z: 0 172 | Pose Style: None 173 | Radius: 0.0299999993 174 | Shaft Diameter: 0.100000001 175 | Shaft Length: 0.100000001 176 | Topic: /plan 177 | Unreliable: false 178 | Value: true 179 | - Class: rviz/TF 180 | Enabled: true 181 | Frame Timeout: 15 182 | Frames: 183 | All Enabled: false 184 | pioneer/back_sonar: 185 | Value: false 186 | pioneer/base_link: 187 | Value: true 188 | pioneer/center_hubcap: 189 | Value: false 190 | pioneer/center_wheel: 191 | Value: false 192 | pioneer/front_sonar: 193 | Value: false 194 | pioneer/lookahead: 195 | Value: true 196 | pioneer/map: 197 | Value: false 198 | pioneer/odom: 199 | Value: false 200 | pioneer/p3dx_left_hubcap: 201 | Value: false 202 | pioneer/p3dx_left_wheel: 203 | Value: false 204 | pioneer/p3dx_right_hubcap: 205 | Value: false 206 | pioneer/p3dx_right_wheel: 207 | Value: false 208 | pioneer/top_plate: 209 | Value: false 210 | Marker Scale: 1 211 | Name: TF 212 | Show Arrows: true 213 | Show Axes: true 214 | Show Names: true 215 | Tree: 216 | pioneer/map: 217 | pioneer/odom: 218 | pioneer/base_link: 219 | pioneer/back_sonar: 220 | {} 221 | pioneer/front_sonar: 222 | {} 223 | pioneer/lookahead: 224 | {} 225 | pioneer/top_plate: 226 | {} 227 | Update Interval: 0 228 | Value: true 229 | Enabled: true 230 | Global Options: 231 | Background Color: 48; 48; 48 232 | Fixed Frame: pioneer/map 233 | Frame Rate: 30 234 | Name: root 235 | Tools: 236 | - Class: rviz/Interact 237 | Hide Inactive Objects: true 238 | - Class: rviz/MoveCamera 239 | - Class: rviz/Select 240 | - Class: rviz/FocusCamera 241 | - Class: rviz/Measure 242 | - Class: rviz/SetInitialPose 243 | Topic: /initialpose 244 | - Class: rviz/SetGoal 245 | Topic: /goal 246 | - Class: rviz/PublishPoint 247 | Single click: true 248 | Topic: /clicked_point 249 | Value: true 250 | Views: 251 | Current: 252 | Angle: -0.00999999978 253 | Class: rviz/TopDownOrtho 254 | Enable Stereo Rendering: 255 | Stereo Eye Separation: 0.0599999987 256 | Stereo Focal Distance: 1 257 | Swap Stereo Eyes: false 258 | Value: false 259 | Name: Current View 260 | Near Clip Distance: 0.00999999978 261 | Scale: 22.6345558 262 | Target Frame: 263 | Value: TopDownOrtho (rviz) 264 | X: 7.04571486 265 | Y: 4.65152216 266 | Saved: ~ 267 | Window Geometry: 268 | Displays: 269 | collapsed: false 270 | Height: 737 271 | Hide Left Dock: false 272 | Hide Right Dock: false 273 | QMainWindow State: 000000ff00000000fd00000004000000000000016a00000257fc0200000007fb0000001200530065006c0065006300740069006f006e00000001e10000009b0000006400fffffffb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c006100790073010000002800000257000000dd00fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261000000010000010f00000257fc0200000004fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000028000000f20000006400fffffffb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000028000000a30000000000000000fb0000000a0056006900650077007301000001200000015f000000b000fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e10000019700000003000003be0000003efc0100000002fb0000000800540069006d00650100000000000003be0000030000fffffffb0000000800540069006d00650100000000000004500000000000000000000001390000025700000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000 274 | Selection: 275 | collapsed: false 276 | Time: 277 | collapsed: false 278 | Tool Properties: 279 | collapsed: false 280 | Views: 281 | collapsed: false 282 | Width: 958 283 | X: 2257 284 | Y: 163 285 | --------------------------------------------------------------------------------