├── .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 |
--------------------------------------------------------------------------------