Commit 80da10c0 authored by yoda's avatar yoda

restructured directory structure after migration; added catkin and rosbuild directories in trunk

parents
This diff is collapsed.
Panels:
- Class: rviz/Displays
Help Height: 78
Name: Displays
Property Tree Widget:
Expanded:
- /Global Options1
- /Status1
- /Map1
- /PoseArray1
- /Polygon1
- /Path1
- /Pose1
- /LaserScan1
Splitter Ratio: 0.5
Tree Height: 463
- Class: rviz/Selection
Name: Selection
- Class: rviz/Tool Properties
Expanded:
- /2D Pose Estimate1
- /2D Nav Goal1
- /Publish Point1
Name: Tool Properties
Splitter Ratio: 0.588679
- Class: rviz/Views
Expanded:
- /Current View1
Name: Views
Splitter Ratio: 0.5
- Class: rviz/Time
Experimental: false
Name: Time
SyncMode: 0
SyncSource: LaserScan
Visualization Manager:
Class: ""
Displays:
- Alpha: 0.5
Cell Size: 1
Class: rviz/Grid
Color: 160; 160; 164
Enabled: true
Line Style:
Line Width: 0.03
Value: Lines
Name: Grid
Normal Cell Count: 0
Offset:
X: 0
Y: 0
Z: 0
Plane: XY
Plane Cell Count: 10
Reference Frame: <Fixed Frame>
Value: true
- Alpha: 0.7
Class: rviz/Map
Color Scheme: map
Draw Behind: false
Enabled: true
Name: Map
Topic: /map
Value: true
- Arrow Length: 0.3
Class: rviz/PoseArray
Color: 255; 25; 0
Enabled: true
Name: PoseArray
Topic: /particlecloud
Value: true
- Alpha: 1
Class: rviz/Polygon
Color: 25; 255; 0
Enabled: true
Name: Polygon
Topic: /move_base/global_costmap/footprint_layer/footprint_stamped
Value: true
- Alpha: 1
Buffer Length: 1
Class: rviz/Path
Color: 25; 255; 0
Enabled: true
Name: Path
Topic: /move_base/NavfnROS/plan
Value: true
- Alpha: 1
Axes Length: 1
Axes Radius: 0.1
Class: rviz/Pose
Color: 255; 25; 0
Enabled: true
Head Length: 0.3
Head Radius: 0.1
Name: Pose
Shaft Length: 1
Shaft Radius: 0.05
Shape: Arrow
Topic: /move_base/current_goal
Value: true
- Alpha: 1
Autocompute Intensity Bounds: true
Autocompute Value Bounds:
Max Value: 10
Min Value: -10
Value: true
Axis: Z
Channel Name: intensity
Class: rviz/LaserScan
Color: 255; 255; 255
Color Transformer: Intensity
Decay Time: 0
Enabled: true
Invert Rainbow: false
Max Color: 255; 255; 255
Max Intensity: 999999
Min Color: 0; 0; 0
Min Intensity: -1.46901e-15
Name: LaserScan
Position Transformer: XYZ
Queue Size: 10
Selectable: true
Size (Pixels): 3
Size (m): 0.05
Style: Flat Squares
Topic: /rrbot/laser/scan
Use Fixed Frame: true
Use rainbow: true
Value: true
- Class: rviz/TF
Enabled: true
Frame Timeout: 15
Frames:
All Enabled: true
base_footprint:
Value: true
base_link:
Value: true
hokuyo_link:
Value: true
kinect_back_link:
Value: true
kinect_front_link:
Value: true
map:
Value: true
odom:
Value: true
scout_base_link:
Value: true
struct_base_link:
Value: true
struct_box_link:
Value: true
struct_logo_link:
Value: true
struct_support_link:
Value: true
Marker Scale: 1
Name: TF
Show Arrows: true
Show Axes: true
Show Names: true
Tree:
map:
odom:
base_footprint:
scout_base_link:
base_link:
{}
hokuyo_link:
{}
struct_base_link:
struct_support_link:
struct_box_link:
kinect_back_link:
{}
kinect_front_link:
{}
struct_logo_link:
{}
Update Interval: 0
Value: true
Enabled: true
Global Options:
Background Color: 48; 48; 48
Fixed Frame: map
Frame Rate: 30
Name: root
Tools:
- Class: rviz/Interact
Hide Inactive Objects: true
- Class: rviz/MoveCamera
- Class: rviz/Select
- Class: rviz/FocusCamera
- Class: rviz/Measure
- Class: rviz/SetInitialPose
Topic: /initialpose
- Class: rviz/SetGoal
Topic: /move_base_simple/goal
- Class: rviz/PublishPoint
Single click: true
Topic: /clicked_point
Value: true
Views:
Current:
Class: rviz/Orbit
Distance: 9.47115
Enable Stereo Rendering:
Stereo Eye Separation: 0.06
Stereo Focal Distance: 1
Swap Stereo Eyes: false
Value: false
Focal Point:
X: 0.900957
Y: 0.414081
Z: 4.05656
Name: Current View
Near Clip Distance: 0.01
Pitch: 1.5698
Target Frame: <Fixed Frame>
Value: Orbit (rviz)
Yaw: 4.71358
Saved: ~
Window Geometry:
Displays:
collapsed: false
Height: 744
Hide Left Dock: false
Hide Right Dock: false
QMainWindow State: 000000ff00000000fd0000000400000000000001380000025efc0200000008fb0000001200530065006c0065006300740069006f006e00000001e10000009b0000006400fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c00610079007301000000280000025e000000dd00fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261000000010000010f0000025efc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a0056006900650077007301000000280000025e000000b000fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e10000019700000003000005150000003efc0100000002fb0000000800540069006d0065010000000000000515000002f600fffffffb0000000800540069006d00650100000000000004500000000000000000000002c20000025e00000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000
Selection:
collapsed: false
Time:
collapsed: false
Tool Properties:
collapsed: false
Views:
collapsed: false
Width: 1301
X: 130
Y: 65
#! /usr/bin/env python
import sys
import os.path
import numpy as np
import scipy.misc
import yaml
DEFAULT_INPUT = "mbot_stage.world.inc"
WALL_HEIGHT = 1.0
THRESHOLD = 127 # this comes from libstage/stage.cc (line 106)
def main(argv):
if len(argv)>1:
mappath = argv[1]
(mapdir, mapfile) = os.path.split(mappath)
with open(mappath) as fh:
meta = yaml.load(fh)
incfn = (argv[2] if len(argv)>2 else DEFAULT_INPUT)
# with open(incfn) as fh:
# print fh.read()
name = mapfile
img = os.path.join(mapdir, meta['image'])
raw = scipy.misc.imread(img)
(x0, y0, z0) = meta['origin']
scale = meta['resolution']
(H, W) = raw.shape
empty = raw>THRESHOLD
hidx = np.ma.array(np.arange(W), mask=empty.all(axis=0))
vidx = np.ma.array(np.arange(H), mask=empty.all(axis=1))
topi = vidx.min()
bottomi = vidx.max()
lefti = hidx.min()
righti = hidx.max()
sizex = scale*(righti - lefti + 1)
sizey = scale*(bottomi - topi + 1)
posex = x0 + scale*lefti + sizex/2
posey = y0 + scale*(H-bottomi) + sizey/2
print """
include "%s"
# load an environment bitmap
floorplan
(
name "%s"
bitmap "%s"
size [ %f %f %f ]
pose [ %f %f 0.0 0.0 ]
)
"""%(incfn, name, img, sizex, sizey, WALL_HEIGHT, posex, posey)
else:
print "Usage: %s map.yaml [world_input] > world_output"%(argv[0])
if __name__=='__main__':
main(sys.argv)
# EOF
<package>
<description brief="scout_config">
Configuration files
</description>
<author>Rodrigo Ventura</author>
<license>BSD</license>
<review status="unreviewed" notes=""/>
<url></url>
</package>
navigation:
laser_frame: lrf01
min_dist: 0.5 # not used in control_8
max_dist: 0.5
vref: 0.5
obs_mult: 5 # not used in control_8
lidar_sources:
- scan
- scan_depth
- scan_sonar
Panels:
- Class: rviz/Displays
Help Height: 78
Name: Displays
Property Tree Widget:
Expanded:
- /Global Options1
- /Status1
- /Grid1
- /Map1
- /Polygon1
- /PoseArray1
- /Image1
- /Global Costmap1
- /Local Costmap1
- /LaserScan1
- /Global Plan1
- /Local Plan1
- /DWA_cost_cloud1
- /DWA_traj_cloud1
Splitter Ratio: 0.5
Tree Height: 565
- Class: rviz/Selection
Name: Selection
- Class: rviz/Tool Properties
Expanded:
- /2D Pose Estimate1
- /2D Nav Goal1
- /Publish Point1
Name: Tool Properties
Splitter Ratio: 0.588679
- Class: rviz/Views
Expanded:
- /Current View1
Name: Views
Splitter Ratio: 0.5
- Class: rviz/Time
Experimental: false
Name: Time
SyncMode: 0
SyncSource: LaserScan
Visualization Manager:
Class: ""
Displays:
- Alpha: 0.5
Cell Size: 1
Class: rviz/Grid
Color: 160; 160; 164
Enabled: false
Line Style:
Line Width: 0.03
Value: Lines
Name: Grid
Normal Cell Count: 0
Offset:
X: 0
Y: 0
Z: 0
Plane: XY
Plane Cell Count: 10
Reference Frame: odom
Value: false
- Alpha: 0.7
Class: rviz/Map
Color Scheme: map
Draw Behind: true
Enabled: true
Name: Map
Topic: /map
Value: true
- Alpha: 1
Class: rviz/Polygon
Color: 255; 0; 0
Enabled: true
Name: Polygon
Topic: /move_base/global_costmap/footprint_layer/footprint_stamped
Value: true
- Arrow Length: 0.3
Class: rviz/PoseArray
Color: 255; 25; 0
Enabled: true
Name: PoseArray
Topic: /particlecloud
Value: true
- Class: rviz/Image
Enabled: true
Image Topic: /camera/image_raw
Max Value: 1
Median window: 5
Min Value: 0
Name: Image
Normalize Range: true
Queue Size: 2
Transport Hint: raw
Value: true
- Alpha: 0.5
Class: rviz/Map
Color Scheme: costmap
Draw Behind: false
Enabled: false
Name: Global Costmap
Topic: /move_base/global_costmap/costmap
Value: false
- Alpha: 0.5
Class: rviz/Map
Color Scheme: costmap
Draw Behind: false
Enabled: false
Name: Local Costmap
Topic: /move_base/local_costmap/costmap
Value: false
- Alpha: 1
Autocompute Intensity Bounds: true
Autocompute Value Bounds:
Max Value: 10
Min Value: -10
Value: true
Axis: Z
Channel Name: intensity
Class: rviz/LaserScan
Color: 255; 255; 255
Color Transformer: Intensity
Decay Time: 1
Enabled: false
Invert Rainbow: false
Max Color: 255; 255; 255
Max Intensity: 1
Min Color: 0; 0; 0
Min Intensity: 1
Name: LaserScan
Position Transformer: XYZ
Queue Size: 10
Selectable: false
Size (Pixels): 3
Size (m): 0.1
Style: Points
Topic: /scan
Use Fixed Frame: true
Use rainbow: true
Value: false
- Alpha: 1
Buffer Length: 1
Class: rviz/Path
Color: 25; 255; 0
Enabled: true
Name: Global Plan
Topic: /move_base/DWAPlannerROS/global_plan
Value: true
- Alpha: 1
Buffer Length: 1
Class: rviz/Path
Color: 255; 0; 0
Enabled: true
Name: Local Plan
Topic: /move_base/DWAPlannerROS/local_plan
Value: true
- Class: rviz/TF
Enabled: true
Frame Timeout: 15
Frames:
All Enabled: true
base_footprint:
Value: true
base_laser_link:
Value: true
base_link:
Value: true
lrf01:
Value: true
map:
Value: true
odom:
Value: true
stage_odom:
Value: true
Marker Scale: 1
Name: TF
Show Arrows: true
Show Axes: true
Show Names: true
Tree:
map:
odom:
base_footprint:
base_link:
base_laser_link:
lrf01:
{}
Update Interval: 0
Value: true
- Alpha: 1
Autocompute Intensity Bounds: true
Autocompute Value Bounds:
Max Value: 0
Min Value: 0
Value: true
Axis: Z
Channel Name: intensity
Class: rviz/PointCloud2
Color: 255; 255; 255
Color Transformer: Intensity
Decay Time: 0
Enabled: true
Invert Rainbow: false
Max Color: 255; 255; 255
Max Intensity: 4096
Min Color: 0; 0; 0
Min Intensity: 0
Name: DWA_cost_cloud
Position Transformer: XYZ
Queue Size: 10
Selectable: true
Size (Pixels): 3
Size (m): 0.01
Style: Points
Topic: /move_base/DWAPlannerROS/cost_cloud
Use Fixed Frame: true
Use rainbow: true
Value: true
- Alpha: 1
Autocompute Intensity Bounds: true
Autocompute Value Bounds:
Max Value: 10
Min Value: -10
Value: true
Axis: Z
Channel Name: intensity
Class: rviz/PointCloud2
Color: 255; 255; 255
Color Transformer: ""
Decay Time: 0
Enabled: true
Invert Rainbow: false
Max Color: 255; 255; 255
Max Intensity: 4096
Min Color: 0; 0; 0
Min Intensity: 0
Name: DWA_traj_cloud
Position Transformer: ""
Queue Size: 10
Selectable: true
Size (Pixels): 3
Size (m): 0.01
Style: Points
Topic: /move_base/DWAPlannerROS/trajectory_cloud
Use Fixed Frame: true
Use rainbow: true
Value: true
Enabled: true
Global Options:
Background Color: 48; 48; 48
Fixed Frame: map
Frame Rate: 30
Name: root
Tools:
- Class: rviz/Interact
Hide Inactive Objects: true
- Class: rviz/MoveCamera
- Class: rviz/Select
- Class: rviz/FocusCamera
- Class: rviz/Measure
- Class: rviz/SetInitialPose
Topic: /initialpose
- Class: rviz/SetGoal
Topic: /move_base_simple/goal
- Class: rviz/PublishPoint
Single click: true
Topic: /clicked_point
Value: true
Views:
Current:
Class: rviz/Orbit
Distance: 11.0341
Focal Point:
X: -0.7074
Y: -8.58862
Z: -0.863459
Name: Current View
Near Clip Distance: 0.01
Pitch: 1.0004
Target Frame: <Fixed Frame>
Value: Orbit (rviz)
Yaw: 4.07039
Saved: ~
Window Geometry:
Displays:
collapsed: false
Height: 846
Hide Left Dock: false
Hide Right Dock: false
Image:
collapsed: false
QMainWindow State: 000000ff00000000fd00000004000000000000013c000002c4fc0200000007fb0000001200530065006c0065006300740069006f006e00000001e10000009b0000006400fffffffb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c0061007900730100000028000002c4000000dd00fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261000000010000010f000002c4fc0200000004fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000028000000640000006400fffffffb0000000a0049006d0061006700650100000092000000b60000001600fffffffc0000014e0000019e000000b000fffffffa000000010100000002fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000000ffffffff0000000000000000fb0000000a0056006900650077007301000003a10000010f0000010f00fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e10000019700000003000004b00000003efc0100000002fb0000000800540069006d00650100000000000004b0000002f600fffffffb0000000800540069006d0065010000000000000450000000000000000000000259000002c400000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000
Selection:
collapsed: false
Time:
collapsed: false
Tool Properties:
collapsed: false
Views:
collapsed: false
Width: 1200
X: 58
Y: 24
#Parameters that are common to the local and global costmaps
footprint: [[-0.25, -0.225], [-0.325, 0], [-0.25, 0.225], [0.25, 0.225], [0.325, 0], [0.25, -0.225]]
obstacle_range: 2.5
raytrace_range: 3.0
transform_tolerance: 5.0
map_type: costmap
observation_sources: laser_scan_sensor
laser_scan_sensor: {sensor_frame: lrf01, data_type: LaserScan, topic: scan, marking: true, clearing: true, expected_update_rate: 0.5}
robot_base_frame: base_link
\ No newline at end of file
#----move_base parameters------
#base_local_planner parameters:
DWAPlannerROS:
controller_frequency: 20.0
max_trans_vel: 2.5
min_trans_vel: 0.5
max_vel_x: 2.5
max_vel_y: 0.5
min_vel_x: -0.25
min_vel_y: -0.5
max_rot_vel: 1.57
min_rot_vel: 0.4
acc_lim_th: 0.5
acc_lim_x: 1.0
acc_lim_y: 1.0
sim_time: 1.5
forward_point_distance: 0.325
occdist_scale: 0.01
vx_samples: 15
vy_samples: 15
stop_time_buffer: 0.0
path_distance_bias: 32.0
goal_distance_bias: 12.0
#latch_xy_goal_tolerance: true
max_scaling_factor: 0
oscillation_reset_dist: 0.5
publish_cost_grid_pc: true
publish_traj_pc: true
#global costmap parameters:
global_costmap:
#Largura: 45cm
#Comprimento: 65cm
global_frame: /map
update_frequency: 2.0
publish_frequency: 0.5
static_map: true
#local costmap parameters:
local_costmap:
global_frame: odom
update_frequency: 20.0
publish_frequency: 0.5
static_map: false
rolling_window: true
width: 5.0
height: 5.0
resolution: 0.1
#----end move_base parameters----
This source diff could not be displayed because it is too large. You can view the blob instead.
image: mbot_shape-1px_1mm-c336_236.pgm
resolution: 0.001
origin: [-0.336, -0.237, 0.0]
image: mbot_shape-1px_5mm-c67_47.pgm
resolution: 0.005
origin: [-0.335, -0.235, 0.0]
image: mbot_shell_shape-1px_5mm-c72_64.pgm
resolution: 0.005
origin: [-0.32, -0.36, 0.0]
include "mbot_stage.world.inc"
# load an environment bitmap
floorplan
(
name "EPFL-v02cr_nav.yaml"
bitmap "../scout_maps/EPFL-v02cr_nav.pgm"
size [ 21.150000 46.600000 1.000000 ]
pose [ 13.975000 26.350000 0.0 0.0 ]
)
include "mbot_stage.world.inc"
# load an environment bitmap
floorplan
(
name "EPFLcompleteMapRetouched.yaml"
bitmap "../scout_maps/EPFLcompleteMapRetouched.pgm"
size [ 26.000000 14.300000 1.000000 ]
pose [ 0.050000 0.700000 0.0 0.0 ]
)
include "mbot_stage.world.inc"
# load an environment bitmap
floorplan
(
name "isr6-v03cr.yaml"
bitmap "../scout_maps/isr6-v03cr.pgm"
size [ 28.100000 28.050000 1.000000 ]
pose [ -2.850000 -13.775000 0.0 0.0 ]
)
include "mbot_stage.world.inc"
# load an environment bitmap
floorplan
(
name "isr6-v03cr.yaml"
bitmap "../scout_maps/isr6-v03cr_obstacles.pgm"
size [ 28.100000 28.050000 1.000000 ]
pose [ -2.850000 -13.775000 0.0 0.0 ]
)
define lidar ranger
(
sensor(
range [ 0.0 5.6 ]
fov 240
samples 680
)
# generic model properties
color "black"
size [ 0.05 0.05 0.1 ]
)
define lidar2 ranger
(
sensor(
range [ 0.0 5.9 ]
fov 360
samples 1020
)
# generic model properties
color "black"
size [ 0.05 0.05 0.1 ]
)
define mbot position
(
size [0.650 0.445 0.522]
origin [0 0 0 0]
gui_nose 1
drive "omni"
#lidar(pose [ 0.300 0.000 0.137 0.000 ])
lidar2(pose [ 0.000 0.000 0.137 0.000 ])
# UNSUPPORTED lidar(pose2 [ -0.230 0.000 0.137 180 ])
localization "odom"
)
define floorplan model
(
# sombre, sensible, artistic
color "gray30"
# most maps will need a bounding box
boundary 1
gui_nose 0
gui_grid 0
gui_outline 0
gripper_return 0
fiducial_return 0
laser_return 1
)
# set the resolution of the underlying raytrace model in meters
resolution 0.02
interval_sim 100 # simulation timestep in milliseconds
window
(
size [ 800 800 ]
rotate [ 0.000 0 ]
scale 20
)
# throw in a robot
mbot( pose [ 0 0 0 0 ] name "mbot99" color "blue")
#Odometry calibration parameters
omni:
# wheel motor limits
max_wheel_vel: 1000
max_wheel_accel: 1000
# hand calibration
# (initial)
# calibration_direct: [4.06846501125e-12, -66443.0758988, 14617.4766977, -57108.9555135, 32971.8708389, 14477.6073398, 57198.6139358, 33023.6351531, 14500.3365147]
# calibration_inverse: [9.70498188881e-22, -8.75519426864e-06, 8.74147056362e-06, -1.0026722147e-05, 5.0617955681e-06, 5.05386123939e-06, 2.28352503151e-05, 2.30081616732e-05, 2.29720965427e-05]
# (3-Apr-2014)
# calibration_direct: [4.06523284777e-12, -66392.4833492, 13477.6741199, -57269.7408314, 33064.7002854, 13424.2683159, 57372.9469987, 33124.2863939, 13448.4602759]
# calibration_inverse: [-9.63769750193e-23, -8.73061398116e-06, 8.71490878813e-06, -1.00412973433e-05, 5.04062233221e-06, 5.03155493479e-06, 2.47322594662e-05, 2.48306518828e-05, 2.47859849004e-05]
# (6-Apr-2014)
calibration_direct: [4.06523284777e-12, -66392.4833492, 13275.5090081, -57269.7408314, 33064.7002854, 13222.9042912, 57372.9469987, 33124.2863939, 13246.7333718]
calibration_inverse: [8.7117226439e-22, -8.73061398116e-06, 8.71490878813e-06, -1.00412973433e-05, 5.04062233221e-06, 5.03155493479e-06, 2.5108892859e-05, 2.52087836374e-05, 2.51634364471e-05]
navigation:
min_dist: 0.3
max_dist: 0.5
vref: 0.25
obs_mult: 5
max_lin_accel: 0.2
max_ang_accel: 1.0
rot_ka: 0.5
Panels:
- Class: rviz/Displays
Help Height: 78
Name: Displays
Property Tree Widget:
Expanded:
- /Global Options1
- /Status1
- /LaserScan1
Splitter Ratio: 0.5
Tree Height: 565
- Class: rviz/Selection
Name: Selection
- Class: rviz/Tool Properties
Expanded:
- /2D Pose Estimate1
- /2D Nav Goal1
- /Publish Point1
Name: Tool Properties
Splitter Ratio: 0.588679
- Class: rviz/Views
Expanded:
- /Current View1
Name: Views
Splitter Ratio: 0.5
- Class: rviz/Time
Experimental: false
Name: Time
SyncMode: 0
SyncSource: LaserScan
Visualization Manager:
Class: ""
Displays:
- Alpha: 0.5
Cell Size: 1
Class: rviz/Grid
Color: 160; 160; 164
Enabled: false
Line Style:
Line Width: 0.03
Value: Lines
Name: Grid
Normal Cell Count: 0
Offset:
X: 0
Y: 0
Z: 0
Plane: XY
Plane Cell Count: 10
Reference Frame: <Fixed Frame>
Value: false
- Alpha: 0.7
Class: rviz/Map
Color Scheme: map
Draw Behind: false
Enabled: true
Name: Map
Topic: /map
Value: true
- Alpha: 1
Autocompute Intensity Bounds: true
Autocompute Value Bounds:
Max Value: 10
Min Value: -10
Value: true
Axis: Z
Channel Name: intensity
Class: rviz/LaserScan
Color: 255; 0; 0
Color Transformer: FlatColor
Decay Time: 0
Enabled: true
Invert Rainbow: false
Max Color: 255; 0; 4
Max Intensity: 4096
Min Color: 0; 0; 0
Min Intensity: 0
Name: LaserScan
Position Transformer: XYZ
Queue Size: 10
Selectable: true
Size (Pixels): 3
Size (m): 0.01
Style: Points
Topic: /scan
Use Fixed Frame: true
Use rainbow: true
Value: true
- Class: rviz/TF
Enabled: true
Frame Timeout: 15
Frames:
All Enabled: true
base_link:
Value: true
laser_frame:
Value: true
map:
Value: true
odom:
Value: true
Marker Scale: 1
Name: TF
Show Arrows: true
Show Axes: true
Show Names: true
Tree:
map:
odom:
base_link:
laser_frame:
{}
Update Interval: 0
Value: true
Enabled: true
Global Options:
Background Color: 48; 48; 48
Fixed Frame: map
Frame Rate: 30
Name: root
Tools:
- Class: rviz/Interact
Hide Inactive Objects: true
- Class: rviz/MoveCamera
- Class: rviz/Select
- Class: rviz/FocusCamera
- Class: rviz/Measure
- Class: rviz/SetInitialPose
Topic: /initialpose
- Class: rviz/SetGoal
Topic: /move_base_simple/goal
- Class: rviz/PublishPoint
Single click: true
Topic: /clicked_point
Value: true
Views:
Current:
Angle: 0
Class: rviz/TopDownOrtho
Name: Current View
Near Clip Distance: 0.01
Scale: 51.0574
Target Frame: <Fixed Frame>
Value: TopDownOrtho (rviz)
X: -1.27488
Y: -5.03974
Saved: ~
Window Geometry:
Displays:
collapsed: false
Height: 846
Hide Left Dock: false
Hide Right Dock: true
QMainWindow State: 000000ff00000000fd00000004000000000000013c000002c4fc0200000008fb0000001200530065006c0065006300740069006f006e00000001e10000009b0000006400fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c0061007900730100000028000002c4000000dd00fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261000000010000010f000002c4fc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a005600690065007700730000000028000002c4000000b000fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e10000019700000003000004b00000003efc0100000002fb0000000800540069006d00650100000000000004b0000002f600fffffffb0000000800540069006d006501000000000000045000000000000000000000036e000002c400000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000
Selection:
collapsed: false
Time:
collapsed: false
Tool Properties:
collapsed: false
Views:
collapsed: true
Width: 1200
X: 58
Y: 24
#Odometry calibration parameters
LAMBDA_L: -76113.3333333
LAMBDA_R: 75971.50000
L: 0.34054732
#----move_base parameters------
#base_local_planner parameters:
TrajectoryPlannerROS:
max_vel_x: 0.4
min_vel_x: 0.01
max_rotational_vel: 0.6
min_in_place_rotational_vel: 0.01
escape_vel: -0.1
sim_time: 1.5
path_distance_bias: 0.8
goal_distance_bias: 0.7
vtheta_samples: 50
occdist_scale: 0.01
acc_lim_th: 3.2
acc_lim_x: 2.5
acc_lim_y: 0
holonomic_robot: false
dwa: true
#global costmap parameters:
global_costmap:
obstacle_range: 2.5
raytrace_range: 3.0
inflation_radius: 0.5
robot_radius: 0.225
transform_tolerance: 5.0
map_type: costmap
observation_sources: laser_scan_sensor
laser_scan_sensor: {sensor_frame: laser_frame, data_type: LaserScan, topic: scan, marking: true, clearing: true, expected_update_rate: 0.5}
global_frame: /map
robot_base_frame: base_link
update_frequency: 2.0
publish_frequency: 0.5
static_map: true
lethal_cost_threshold: 100
#local costmap parameters:
local_costmap:
obstacle_range: 2.5
raytrace_range: 3.0
inflation_radius: 0.5
robot_radius: 0.225
transform_tolerance: 5.0
map_type: costmap
observation_sources: laser_scan_sensor
laser_scan_sensor: {sensor_frame: laser_frame, data_type: LaserScan, topic: scan, marking: true, clearing: true, expected_update_rate: 0.5}
global_frame: odom
robot_base_frame: base_link
update_frequency: 20.0
publish_frequency: 0.5
static_map: false
rolling_window: true
width: 5.0
height: 5.0
resolution: 0.1
#Setting the cost threshold to 253 induces the robot to move as close as physically possible to an obstacle
#Use only through move_base_supervisor reconfiguration, if needed.
#lethal_cost_threshold: 253
#----end move_base parameters----
#Odometry calibration parameters
omni:
# wheel motor limits
max_wheel_vel: 20
max_wheel_accel: 10
# hand calibration
calibration_direct: [4.06846501125e-12, -66443.0758988, 14617.4766977, -57108.9555135, 32971.8708389, 14477.6073398, 57198.6139358, 33023.6351531, 14500.3365147]
calibration_inverse: [9.70498188881e-22, -8.75519426864e-06, 8.74147056362e-06, -1.0026722147e-05, 5.0617955681e-06, 5.05386123939e-06, 2.28352503151e-05, 2.30081616732e-05, 2.29720965427e-05]
navigation:
min_dist: 0.3
max_dist: 0.5
vref: 0.15
obs_mult: 5
max_lin_accel: 0.5
max_ang_accel: 0.5
### Configuration ###
from std_msgs.msg import *
from scout_msgs.msg import *
from sensor_msgs.msg import *
#from joy.msg import *
MAX_REFRESH_RATE = 5 # per second
OBS = [
dict(name="Battery", topic="/scout/battery", msg=ScoutBatteryMsg, kind=0),
dict(name="Motion", topic="/scout/motion", msg=ScoutMotionMsg, kind=0),
dict(name="Motors", topic="/scout/motors", msg=ScoutMotorsMsg, kind=0),
# dict(name="Joystick", topic="/joy", msg=Joy, kind=0),
dict(name="Sonars", topic="/scout/sonars", msg=ScoutSonarsMsg, kind=0),
dict(name="LIDAR", topic="/scan", msg=LaserScan, kind=1),
dict(name="Kinect", topic="/kinect/scan", msg=LaserScan, kind=1),
dict(name="Camera", topic="/head_camera/image_raw", msg=Image, kind=6),
]
# EOF
#!/usr/bin/env python
import diagapp
diagapp.DiagApp().main()
# EOF
# setup ROS stuff
PKG_NAME = 'scout_diagnostics'
import roslib; roslib.load_manifest(PKG_NAME)
import rospy
import os
import math
import time
import tempfile
import numpy as np
from cStringIO import StringIO
from Tkinter import *
import ttk
#import PIL.Image, PIL.ImageTk
try:
from gtk import gdk
except ImportError:
rospy.logwarn("Module gtk not found -- Camera display won't work!")
from config import *
def distance(x1, y1, x2, y2):
return math.sqrt( (x1-x2)**2 + (y1-y2)**2 )
class Tmr():
def __init__(self):
self.t = time.clock()
def took(self):
n = time.clock()
d = n-self.t
self.t = n
return "(took %s)"%(d)
class DiagApp(Tk):
REFRESH_DELTA = 1.0/MAX_REFRESH_RATE
#
# Plain labels
#
def labels_setup(self, subwidget, entry):
v = {}
for (r,s) in enumerate(entry["msg"].__slots__):
v[s] = StringVar()
l = Label(subwidget, textvariable=v[s], wraplength=800, relief=SUNKEN, anchor=E, padx=3, pady=3)
Label(subwidget, text=s).grid(row=r, column=0, sticky=E)
l.grid(row=r, column=1, sticky=W+E)
entry["vars"] = v
def labels_handler(self, data, entry):
for s in entry["msg"].__slots__:
val = getattr(data, s)
if entry.has_key("enum") and entry["enum"].has_key(s):
fmt = entry["enum"][s][val]
else:
fmt = "%15.3f"%(val) if type(val) is float else str(val)
entry["vars"][s].set(fmt)
#
# LIDAR kind of scan display
#
scan_scale = 40
scan_origin = (300, int(300-scan_scale*0.15))
def scan_setup(self, subwidget, entry):
c = Canvas(subwidget, width=600, height=600, relief=SUNKEN, bd=3)
c.grid(sticky=W+E+N+S)
subwidget.rowconfigure(0, weight=1)
subwidget.columnconfigure(0, weight=1)
entry["canvas"] = c
c.bind("<Button>", self.scan_wheel)
def scan_wheel(self, event):
if event.num==4:
self.scan_scale *= 1.1
elif event.num==5:
self.scan_scale /= 1.1
elif event.num==3:
self.scan_origin = (event.x, event.y)
def scan_handler(self, data, entry):
SCALE = self.scan_scale
(X0, Y0) = self.scan_origin
RAD = int(SCALE*0.25)
c = entry["canvas"]
c.delete("scan")
c.create_oval(X0-RAD, Y0-RAD, X0+RAD, Y0+RAD, fill="yellow", tags="scan")
c.create_line(X0, Y0, X0, Y0-RAD, tags="scan")
for (xr,yr) in self.create_pointcloud(data):
xc = int(X0 - SCALE*yr)
yc = int(Y0 - SCALE*xr)
c.create_line(xc, yc, xc+1, yc+1, fill="#008", tags="scan")
def create_pointcloud(self, data):
"""Create pointcloud [taken from guidance.py]"""
z = np.array(data.ranges)
a = np.arange(data.angle_min, data.angle_min+data.angle_increment*len(z), data.angle_increment)
raw = np.empty((len(z), 2))
raw[:,0] = z*np.cos(a)
raw[:,1] = z*np.sin(a)
valid = (z>data.range_min)&(z<data.range_max)
return raw[valid]
#
# Stargazer sensor raw output graphical display
#
def stargazer_setup(self, subwidget, entry):
X0, Y0 = 200, 200
c = Canvas(subwidget, width=400, height=400, relief=SUNKEN, bd=3)
c.grid(sticky=W+E+N+S)
c.create_line(X0, Y0, X0+20, Y0)
c.create_line(X0, Y0, X0, Y0-20)
entry["canvas"] = c
def stargazer_handler(self, data, entry):
SCALE = 40
RAD = SCALE*0.25
X0, Y0 = 200, 200
R = -1.55872224698
c = entry["canvas"]
c.delete("robot")
x = X0 + SCALE*data.rawX
y = Y0 - SCALE*data.rawY
u = RAD*math.cos(data.rawOrientation + R)
v = RAD*math.sin(data.rawOrientation + R)
c.create_oval(x-RAD, y-RAD, x+RAD, y+RAD, fill="yellow", tags="robot")
c.create_line(x, y, x+u, y-v, tags="robot")
text = "#%s (%.3f, %.3f, %.3fdeg)"%(data.ID, data.rawX, data.rawY, data.rawOrientation)
c.create_text(x, y + (2*RAD if data.rawY<0 else -2*RAD), text=text, tags="robot")
#
# Event list display
#
def events_setup(self, subwidget, entry):
l = Listbox(subwidget)
l.grid(row=0, column=0, sticky=N+E+S+W)
subwidget.rowconfigure(0, weight=1)
subwidget.columnconfigure(0, weight=1)
vs = Scrollbar(subwidget, command=l.yview, orient=VERTICAL)
vs.grid(row=0, column=1, sticky=N+S)
l["yscrollcommand"] = vs.set
entry["list"] = l
def events_handler(self, data, entry):
l = entry["list"]
for e in data.events:
l.insert(END, "%15s %-25s %s"%(data.timestamp, data.module, e.strip()))
l.see(END)
#
# Image display
#
def image_setup(self, subwidget, entry):
entry["widget"] = subwidget
def image_handler(self, data, entry):
sw = entry["widget"]
if not entry.has_key("window"):
anid = sw.winfo_id()
if anid is None:
return
w = entry["window"] = gdk.window_foreign_new(anid)
gc = entry["gc"] = gdk.GC(w)
else:
w, gc = entry["window"], entry["gc"]
with tempfile.NamedTemporaryFile() as fh:
fh.write(data.data)
fh.flush()
pb = gdk.pixbuf_new_from_file(fh.name)
w.draw_pixbuf(gc, pb, 0, 0, 0, 0)
#
# ROS Image display
#
def ros_image_setup(self, subwidget, entry):
entry["widget"] = subwidget
def ros_image_handler(self, data, entry):
sw = entry["widget"]
if not entry.has_key("window"):
anid = sw.winfo_id()
if anid is None:
return
w = entry["window"] = gdk.window_foreign_new(anid)
gc = entry["gc"] = gdk.GC(w)
else:
w, gc = entry["window"], entry["gc"]
pb = gdk.pixbuf_new_from_data(data.data, gdk.COLORSPACE_RGB, False, 8, data.width, data.height, data.step)
w.draw_pixbuf(gc, pb, 0, 0, 0, 0)
#
# ExecMon list display
#
def execmon_setup(self, subwidget, entry):
l = Listbox(subwidget)
l.grid(row=0, column=0, sticky=N+E+S+W)
subwidget.rowconfigure(0, weight=1)
subwidget.columnconfigure(0, weight=1)
vs = Scrollbar(subwidget, command=l.yview, orient=VERTICAL)
vs.grid(row=0, column=1, sticky=N+S)
l["yscrollcommand"] = vs.set
entry["list"] = l
def execmon_handler(self, data, entry):
l = entry["list"]
s = "F" if data.failure else "-"
l.insert(END, "%15s %s %s"%(data.timestamp, s, data.message))
l.see(END)
# def image_setup(self, subwidget, entry):
# c = Canvas(subwidget)
# c.grid(row=0, column=0, sticky=N+E+S+W)
# subwidget.rowconfigure(0, weight=1)
# subwidget.columnconfigure(0, weight=1)
# entry["canvas"] = c
# def image_handler(self, data, entry):
# c = entry["canvas"]
# t = Tmr()
# sio = StringIO(data.data)
# print "StringIO", t.took()
# img = PIL.Image.open(sio)
# print "Image", img, t.took()
# pim = PIL.ImageTk.PhotoImage(img)
# print "PhotoImage", pim, t.took()
# #c.delete("image")
# c.create_image(0, 0, image=pim, tags="image")
# print "create_image", t.took()
# c.create_text(50, 50, text=pim, tags="image")
# print "create_text", t.took()
# c.update()
# print "and update", t.took()
#
# Kinds of tabs registry
#
KINDS = [
dict(setup=labels_setup, handler=labels_handler, full_update=False),
dict(setup=scan_setup, handler=scan_handler, full_update=False),
dict(setup=stargazer_setup, handler=stargazer_handler, full_update=False),
dict(setup=events_setup, handler=events_handler, full_update=True),
dict(setup=image_setup, handler=image_handler, full_update=False),
dict(setup=execmon_setup, handler=execmon_handler, full_update=True),
dict(setup=ros_image_setup, handler=ros_image_handler, full_update=False),
]
#
# Main methods
#
def setup_gui(self):
global OBS
#self.eval("package require Img")
self.title("Cobot Diagnostics")
self.protocol('WM_DELETE_WINDOW', self.quit)
self.rowconfigure(0, weight=1)
self.columnconfigure(0, weight=1)
nb = ttk.Notebook()
self.visible = 0
def set_visible(ev):
self.visible = nb.index(nb.select())
for entry in OBS:
f = Frame(nb)
nb.add(f, text=entry["name"])
setup = self.KINDS[entry["kind"]]["setup"]
setup(self, f, entry)
nb.grid(sticky=N+E+S+W)
nb.bind("<<NotebookTabChanged>>", set_visible)
def setup_ros(self):
global OBS
rospy.init_node("diagnostics_ui", anonymous=True, disable_signals=True)
for (oid,entry) in enumerate(OBS):
rospy.Subscriber(entry["topic"], entry["msg"],
callback=self.handler, callback_args=oid, queue_size=1)
entry["last"] = rospy.get_time()
def handler(self, data, oid):
global OBS
now = rospy.get_time()
entry = OBS[oid]
kind = self.KINDS[entry["kind"]]
if kind["full_update"] or (oid==self.visible and now-entry["last"]>self.REFRESH_DELTA):
handler = kind["handler"]
handler(self, data, entry)
entry["last"] = now
def main(self):
self.setup_gui()
self.setup_ros()
self.mainloop()
if __name__=="__main__":
DiagApp().main()
# EOF
<package>
<description brief="scout_diagnostics">
Scout diagnostic tools
</description>
<author>Rodrigo Ventura</author>
<license>none</license>
<review status="unreviewed" notes=""/>
<url></url>
<depend package="rospy"/>
<depend package="sensor_msgs"/>
<depend package="scout_msgs"/>
<depend package="joy"/>
</package>
#! /usr/bin/python
import sys
import math
import rospy
import tf
from monarch_msgs.msg import *
LOG_RATE = 0.1
ODOM_PERIOD = 0.25
#LOGFILE = "/dev/stdout"
LOGFILE = "/home/monarch/tmp/mbot_logger.log"
db = {}
def battery_handler(msg, args):
db[args[0]] = msg
def get_voltages():
FMT = "%.1f"
sm = sa = sc = ""
if 'main' in db:
m = db['main']
charger = FMT%(m.charger)
electronics = FMT%(m.electronics)
motors = FMT%(m.motors)
sm = "mot:%s elec:%s chg:%s"%(motors,electronics,charger)
if 'aux' in db:
m = db['aux']
pc1 = FMT%(m.pc1)
pc2 = FMT%(m.pc2)
sa = "pc1:%s pc2:%s"%(pc1,pc2)
if 'charger' in db:
m = db['charger']
pc1_bc = "true" if m.pc1BatteryCharging else "false"
pc2_bc = "true" if m.pc2BatteryCharging else "false"
motors_bc = "true" if m.motorsBatteryCharging else "false"
electronics_bc = "true" if m.electronicsBatteryCharging else "false"
sc = "pc1bc:%s pc2bc:%s motbc:%s elecbc:%s"%(pc1_bc,pc2_bc,motors_bc,electronics_bc)
return "%s %s %s"%(sm,sa,sc)
def get_load():
with open("/proc/loadavg") as fh:
fs = fh.readline().strip().split()
if len(fs)>=3:
return "ldavr:%s:%s:%s"%(fs[0],fs[1],fs[2])
else:
return ""
def log_entry(odom):
t = rospy.get_time()
with open(LOGFILE, "a") as fh:
voltages = get_voltages()
load = get_load()
print >>fh, "%s %s %s odom:%.3f"%(t,voltages,load,odom.distance)
class Odometer:
distance = 0
previous = None
def __init__(self):
self.tfl = tf.TransformListener()
self.timer = rospy.Timer(rospy.Duration(ODOM_PERIOD), self.handler, oneshot=False)
def handler(self, tmr):
try:
position, quaternion = self.tfl.lookupTransform('/map', '/base_link', rospy.Time())
if self.previous is not None:
d = math.sqrt((position[0]-self.previous[0])**2 + (position[1]-self.previous[1])**2)
self.distance += d
self.previous = position
except tf.Exception:
pass
def main(argv):
global LOGFILE
rospy.init_node('mbot_logger', argv=sys.argv)
LOGFILE = rospy.get_param("~logfile", LOGFILE)
rospy.loginfo("Using %s as log file."%(LOGFILE))
rospy.Subscriber("batteries_voltage", BatteriesVoltage, battery_handler, ['main'])
rospy.Subscriber("auxiliary_batteries_voltage", AuxiliaryBatteriesVoltage, battery_handler, ['aux'])
rospy.Subscriber("charger_status", ChargerStatus, battery_handler, ['charger'])
odom = Odometer()
rate = rospy.timer.Rate(LOG_RATE)
rospy.loginfo("Logger node ready.")
while not rospy.is_shutdown():
log_entry(odom)
rate.sleep()
if __name__=='__main__':
main(sys.argv)
# EOF
#! /usr/bin/env python
# merge from plot_batts.py
import sys
import math
import numpy as np
import matplotlib.pyplot as plt
def convert(string):
if string=="true":
return 1
elif string=="false":
return 0
else:
try:
return float(string)
except ValueError:
return string
def load_log(fn):
log = []
with open(fn) as fh:
for ln in fh:
fs = ln.strip().split()
if len(fs)>1:
pairs = []
for item in fs[1:]:
bits = item.split(':', 1)
if len(bits)>1:
pairs.append( (bits[0], convert(bits[1])) )
if len(pairs)>0:
log.append((float(fs[0]), dict(pairs)))
return log
def get_keys(log, keys):
table = [[entry[0]]+[entry[1][k] for k in keys] for entry in log if all([k in entry[1] for k in keys])]
return np.array(table)
def main(argv):
if len(argv)<3 or argv[1]=='help':
print "Usage: %s <command> <log_file>"%(argv[0])
print "Available commands: help, batts, totals"
return
elif argv[1]=='totals':
# compute totals
total_dist = 0
total_time_moving = 0
log = load_log(argv[2])
prev_t = prev_o = None
for (t,db) in log:
if prev_t is None and 'odom' in db:
prev_t = t
prev_o = init_o = db['odom']
elif 'odom' in db:
odom = db['odom']
odiff = odom - prev_o
if odom==0 and prev_o>0:
#print "ODOMETRY RESET: odom=%s prev_o=%s init_o=%s"%(odom,prev_o,init_o)
total_dist += prev_o - init_o
init_o = odom
elif odiff>0:
total_time_moving += t - prev_t
if odiff>25:
#print "ODOMETRY JUMP:", odiff
init_o += odiff
prev_t = t
prev_o = odom
print "Total distance traveled: %f m"%(total_dist)
h = math.floor(total_time_moving / 3600)
m = math.floor((total_time_moving - 3600*h) / 60)
s = total_time_moving - 3600*h - 60*m
print "Total time moving: %dh %dm %fs"%(h,m,s)
print "Average speed: %f m/s"%(total_dist/total_time_moving)
elif argv[1]=='batts':
log = load_log(argv[2])
keys = ['pc1', 'elec', 'mot', 'chg']
data = get_keys(log, keys)
for (i,k) in enumerate(keys):
plt.plot(data[:,0], data[:,i+1], label=k)
plt.legend()
plt.xlabel("time (s)")
plt.ylabel("voltage (V)")
plt.show()
else:
print "Invalid command! Use '%s help' for help"%(argv[0])
if __name__=='__main__':
main(sys.argv)
# EOF
#!/usr/bin/env python
import sys
import os
import argparse
import numpy as np
import rospy
from std_msgs.msg import *
try:
from monarch_situational_awareness.msg import *
from monarch_situational_awareness.srv import *
from sam_helpers.reader import SAMReader
from sam_helpers.writer import SAMWriter
except ImportError:
HAS_SAM = False
else:
HAS_SAM = True
LATCH = False
NAMES = dict(ping='traf_ping', pong='traf_pong', spam='traf_spam')
def ping_handler(msg):
global pub_pong
pub_pong.publish(msg)
def server(params):
global pub_pong
rospy.init_node('traf_server', anonymous=True)
if params.sam:
create_slots_ping(params.local)
sub_ping = SAMReader(NAMES['ping'], ping_handler)
pub_pong = SAMWriter(NAMES['pong'])
else:
sub_ping = rospy.Subscriber(NAMES['ping'], Header, ping_handler)
pub_pong = rospy.Publisher(NAMES['pong'], Header, latch=LATCH)
rospy.loginfo("Ping server node ready in %s mode. Topics/slots: %s and %s"%(("SAM" if params.sam else "ROS"), NAMES['ping'], NAMES['pong']))
rospy.spin()
pong_stats = []
pong_count = None
def pong_handler(msg):
global pong_count, pong_stats
t2 = rospy.get_rostime()
t1 = msg.stamp
dt = (t2-t1).to_sec()
pong_stats.append(dt)
print "seq=%d rtt=%.3f ms"%(msg.seq, 1000*dt)
if pong_count is not None:
if pong_count>1:
pong_count -= 1
else:
rospy.signal_shutdown("done")
def process_stats(stats):
global output_file
if output_file is not None:
with open(output_file, 'w') as fh:
fh.writelines(["%f\n"%(1000*x) for x in stats])
print "Dumped values (in ms) to file", output_file
rttmin = 1000*np.min(stats)
rttmax = 1000*np.max(stats)
rttmed = 1000*np.median(stats)
rttavg = 1000*np.mean(stats)
rttstd = 1000*np.std(stats)
print "RTT min/median/mean/max/stddev = %f / %f / %f / %f / %f ms"%(rttmin, rttmed, rttavg, rttmax, rttstd)
def shutdown_handler():
process_stats(pong_stats)
def client(params):
global pong_count,pong_stats
pong_count = params.count
rospy.init_node('traf_client', anonymous=True)
if params.sam:
create_slots_ping(params.local)
pub_ping = SAMWriter(NAMES['ping'])
sub_pong = SAMReader(NAMES['pong'], pong_handler)
else:
pub_ping = rospy.Publisher(NAMES['ping'], Header, latch=LATCH)
sub_pong = rospy.Subscriber(NAMES['pong'], Header, pong_handler)
rate = rospy.Rate(1)
seq = 1
rospy.on_shutdown(shutdown_handler)
rospy.loginfo("Ping client node ready in %s mode. Topics/slots: %s and %s"%(("SAM" if params.sam else "ROS"), NAMES['ping'], NAMES['pong']))
while not rospy.is_shutdown():
pub_ping.publish( Header(seq=seq, stamp=rospy.get_rostime()) )
seq += 1
rate.sleep()
def spam(params):
rospy.init_node('traf_spammer', anonymous=True)
if params.sam:
create_slots_spam(params.local)
pub_ping = SAMWriter(NAMES['spam'])
else:
pub_ping = rospy.Publisher(NAMES['spam'], String, queue_size=1)
rate = rospy.Rate(100)
garbage = os.urandom(1024**2)
rospy.loginfo("Spammer node ready in %s mode. Topic/slot: %s"%(("SAM" if params.sam else "ROS"), NAMES['spam']))
while not rospy.is_shutdown():
pub_ping.publish( String(garbage) )
rate.sleep()
spam_stats = dict(count=0, bytes=0, first=None, last=None)
def spam_handler(msg):
global spam_stats
now = rospy.get_rostime()
spam_stats['count'] += 1
spam_stats['bytes'] += len(msg.data)
if spam_stats['first'] is None:
spam_stats['first'] = spam_stats['last'] = now
else:
if (now - spam_stats['last']).to_sec()>=1:
mb = 1.0*spam_stats['bytes']/1024**2
dt = (now - spam_stats['first']).to_sec()
print "%d messages, total %f MB, overall %f MB/s"%(spam_stats['count'], mb, mb/dt)
spam_stats['last'] = now
def sink(params):
rospy.init_node('traf_sink', anonymous=True)
if params.sam:
create_slots_spam(params.local)
sub_ping = SAMReader(NAMES['spam'], spam_handler)
else:
sub_ping = rospy.Subscriber(NAMES['spam'], String, spam_handler)
rospy.loginfo("Sink node ready in %s mode. Topic/slot: %s"%(("SAM" if params.sam else "ROS"), NAMES['spam']))
rospy.spin()
def create_slots_ping(local=False):
srv = rospy.ServiceProxy("create_slot", CreateSlot)
srv.wait_for_service()
r1 = srv.call(SlotProperties(NAMES['ping'], "SAM traffic analyser ping", 'std_msgs/Header', not local, LATCH))
r2 = srv.call(SlotProperties(NAMES['pong'], "SAM traffic analyser pong", 'std_msgs/Header', not local, LATCH))
rospy.loginfo("Slots creation response: %s/%s (note: True or False is good)"%(r1.success,r2.success))
srv.close()
def create_slots_spam(local=False):
srv = rospy.ServiceProxy("create_slot", CreateSlot)
srv.wait_for_service()
r3 = srv.call(SlotProperties(NAMES['spam'], "SAM traffic analyser spamming", 'std_msgs/String', not local, LATCH))
rospy.loginfo("Slots creation response: %s (note: True or False is good)"%(r3.success))
srv.close()
def main(argv):
global output_file, NAMES
parser = argparse.ArgumentParser(description="ROS/SAM ping program (SAM %s available)"%("is" if HAS_SAM else "is NOT"))
mgroup = parser.add_mutually_exclusive_group(required=True)
parser.add_argument('--sam', help="use SAM instead of ROS topics", action='store_true')
mgroup.add_argument('--server', help="run in server mode", action='store_true')
mgroup.add_argument('--client', help="run in client mode", action='store_true')
mgroup.add_argument('--spam', help="spam topic (slot) with garbage", action='store_true')
mgroup.add_argument('--sink', help="spam sink (slot)", action='store_true')
parser.add_argument('-o', '--output', help="output text file to dump raw RTT values to")
parser.add_argument('-c', '--count', type=int, help="number of pings to send")
parser.add_argument('-s', '--suffix', help="suffix to topic/slot names")
if HAS_SAM:
parser.add_argument('-l', '--local', help="(for SAM only) register a local slot (instead of shared)", action='store_true')
params = parser.parse_args(rospy.myargv()[1:])
# print params ; return
assert HAS_SAM or not params.sam, "SAM is not available"
output_file = params.output
if params.suffix is not None:
for n in NAMES:
NAMES[n] += '_'+params.suffix
if params.server:
server(params)
elif params.client:
client(params)
elif params.spam:
spam(params)
elif params.sink:
sink(params)
if __name__=='__main__':
main(sys.argv)
# EOF
cmake_minimum_required(VERSION 2.4.6)
include($ENV{ROS_ROOT}/core/rosbuild/rosbuild.cmake)
# Set the build type. Options are:
# Coverage : w/ debug symbols, w/o optimization, w/ code-coverage
# Debug : w/ debug symbols, w/o optimization
# Release : w/o debug symbols, w/ optimization
# RelWithDebInfo : w/ debug symbols, w/ optimization
# MinSizeRel : w/o debug symbols, w/ optimization, stripped binaries
#set(ROS_BUILD_TYPE RelWithDebInfo)
rosbuild_init()
#set the default path for built executables to the "bin" directory
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
#set the default path for built libraries to the "lib" directory
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
#uncomment if you have defined messages
#rosbuild_genmsg()
#uncomment if you have defined services
#rosbuild_gensrv()
#common commands for building c++ executables and libraries
#rosbuild_add_library(${PROJECT_NAME} src/example.cpp)
#target_link_libraries(${PROJECT_NAME} another_library)
#rosbuild_add_boost_directories()
#rosbuild_link_boost(${PROJECT_NAME} thread)
#rosbuild_add_executable(example examples/example.cpp)
#target_link_libraries(example ${PROJECT_NAME})
include $(shell rospack find mk)/cmake.mk
\ No newline at end of file
*Authors*
IPCAM node was created by Rodrigo Ventura and adapted by Joao Mendes. If any problem is found please contact mendes.joao.p@gmail.com
*Purpose*
To aquire data from an ipcamera and publish it on ROS. This node acts as a simple webgrabber that publishes the aquired images on a topic.
*Running*
This node was tested on the following camera models: Vivotek FE8174 and FE8171v, and Axis P1344. Small changes may have to occur in different models.
A launch file (streamer_v2.launch) is already provided and expects two args (ip,stream_num) respectively the IP of the camera and the desired stream (considering that the camera can stream more that one more simultaneously). Notice that the range of IPs where the cameras are working is hardcoded in the launch.
An example of how streamer_v2.launch can be used is found on main_monarch_iw.launch (used throughout the monarch IW in IST).
In order to run the code:
- cd /monarch/code/trunk/rosbuild_ws/ipcam
- roslaunch main_monarch_iw.launch
2 nodes will be launched for camera 92 and 93. Both on stream 3. Check the launch to change the IP or stream of the camera.
Please notice that along with the driver a republisher is also launched. If your software does not required the republisher please edit the launch to reduce computational effort.
* nodes.yaml *
For each set of desired IP and stream a node is launched. The names are /streamer_XX_Y where XX is the last digits of the IP and Y is the number of the stream.
for example: camera with IP 10.10.2.99 publishing stream 3 would be:
/streamer_99_3
similarly the republisher will be named:
/republisher_99_3
* topics.yaml *
The launched topics also follow the same set of name, i.e., /camera_driver_XX_Y/(...)
Where, for exaple, /camera_driver_99_3/stream/compressed is the topic published by /streamer_99_3
** type of message **
The type of the published message is sensor_msgs/CompressedImage. The republisher publishes the messages described in the ros website.
<?xml version="1.0"?>
<launch>
<include file="$(find scout_ipcam)/streamer_v2.launch">
<arg name="ip" value="91"/>
<arg name="stream_num" value="3"/>
</include>
<include file="$(find scout_ipcam)/streamer_v2.launch">
<arg name="ip" value="92"/>
<arg name="stream_num" value="3"/>
</include>
<include file="$(find scout_ipcam)/streamer_v2.launch">
<arg name="ip" value="93"/>
<arg name="stream_num" value="3"/>
</include>
</launch>
<?xml version="1.0"?>
<launch>
<include file="$(find scout_ipcam)/streamer_v2.launch">
<arg name="ip" value="99"/>
<arg name="stream_num" value="1"/>
</include>
<include file="$(find scout_ipcam)/streamer_v2.launch">
<arg name="ip" value="98"/>
<arg name="stream_num" value="3"/>
</include>
<include file="$(find scout_ipcam)/streamer_v2.launch">
<arg name="ip" value="97"/>
<arg name="stream_num" value="3"/>
</include>
</launch>
<package>
<description brief="scout_ipcam">
IP camera streamer
</description>
<author>Rodrigo Ventura</author>
<license>BSD</license>
<review status="unreviewed" notes=""/>
<url></url>
<depend package="rospy"/>
<depend package="sensor_msgs"/>
<depend package="image_transport"/>
</package>
#! /usr/bin/env python
import sys
import streamer
if len(sys.argv)>1:
streamer.main(sys.argv[1])
else:
streamer.main()
# EOF
import sys
import urllib
import urlparse
import cStringIO as StringIO
import Image as PIL
import re
PKG_NAME = 'scout_ipcam'
import roslib; roslib.load_manifest(PKG_NAME)
import rospy
from sensor_msgs.msg import *
DEFAULT_URL = "http://127.0.0.1/video.mjpg"
def main(url=DEFAULT_URL):
cimg = CompressedImage()
cimg.format = 'jpeg'
# ROS initialization
rospy.init_node(PKG_NAME, anonymous=True)
name_topic = "/camera_driver_" + urlparse.urlparse(url).netloc.split(".")[3] + "_" + re.search(r'\d+', urlparse.urlparse(url).path).group() + "/stream/compressed"
if int(re.search(r'\d+', urlparse.urlparse(url).path).group()) == 1:
url="http://"+urlparse.urlparse(url).netloc+"/video.mjpg"
pub = rospy.Publisher(name_topic, CompressedImage)
# Connecting to IP camera and start streaming
rospy.loginfo("Opening source %s for streaming"%(url))
fh = urllib.urlopen(url)
size = None
while not rospy.is_shutdown():
# Read header
while True:
line = fh.readline()
# if line=='':
# return
# line = line.strip()
# print "LINE(%s)='%s'"%(len(line), line)
# rospy.sleep(3)
if line.startswith("Content-Length"):
fs = line.split()
try:
size = int(fs[1])
line = fh.readline()
break
except StandardError:
continue
elif line=='' and size is not None:
break
# print "HEADER END"
# Read image
data = fh.read(size)
# Publish jpeg image
cimg.data = data
pub.publish(cimg)
rospy.sleep(1.0/30)
size = None
if __name__=='__main__':
main()
# EOF
<?xml version="1.0"?>
<launch>
<arg name="ip"/>
<arg name="stream_num"/>
<node name="republisher_$(arg ip)_$(arg stream_num)" pkg="image_transport" type="republish" args="compressed in:=/camera_driver_$(arg ip)_$(arg stream_num)/stream out:=/camera_driver_$(arg ip)_$(arg stream_num)/image" required="true"/>
<node name="streamer_$(arg ip)_$(arg stream_num)" pkg="scout_ipcam" type="streamer" args="http://10.10.2.$(arg ip)/video$(arg stream_num).mjpg"/>
<!-- node pkg="image_view" required="true" name="driver_image_view_$(arg ip)_$(arg stream_num)" type="image_view">
<param name="autosize" value="true" />
<remap from="image" to="/camera_driver_$(arg ip)_$(arg stream_num)/image"/>
</node -->
</launch>
<package>
<description brief="launch">
launch
</description>
<author>ISR-Cobot</author>
<license>BSD</license>
<review status="unreviewed" notes=""/>
<url>http://ros.org/wiki/launch</url>
</package>
<?xml version="1.0"?>
<launch>
<arg name="hokuyo_front" default="/dev/mbot-hokuyo-front"/>
<arg name="hokuyo_back" default="/dev/mbot-hokuyo-back"/>
<node pkg="tf" type="static_transform_publisher" name="lrf01_broadcaster" args="0.3 0 0.1365 0 0 0 base_link lrf01 100" />
<node name="hokuyo01_node" pkg="hokuyo_node" type="hokuyo_node" required="true" output="screen">
<param name="port" type="string" value="$(arg hokuyo_front)"/>
<param name="frame_id" type="string" value="lrf01"/>
<!-- PARAMETERS FOR Hokuyo URG-04LX -->
<param name="min_ang" value="-2.0862138271331787"/>
<param name="max_ang" value="2.0923497676849365"/>
<!-- PARAMETERS FOR Hokuyo UTM-30LX -->
<!-- <param name="min_ang" value="-2.356"/> -->
<!-- <param name="max_ang" value="2.356"/> -->
<!-- PARAMETERS FOR Hokuyo UTM-30LX -->
<!-- <param name="min_ang" value="-2.0"/> -->
<!-- <param name="max_ang" value="2.0"/> -->
</node>
<node pkg="tf" type="static_transform_publisher" name="lrf02_broadcaster" args="-0.23 0 0.1365 3.1415 0 0 base_link lrf02 100" />
<node name="hokuyo02_node" pkg="hokuyo_node" type="hokuyo_node" required="true" output="screen">
<param name="port" type="string" value="$(arg hokuyo_back)"/>
<param name="frame_id" type="string" value="lrf02"/>
<!-- PARAMETERS FOR Hokuyo URG-04LX -->
<param name="min_ang" value="-2.0862138271331787"/>
<param name="max_ang" value="2.0923497676849365"/>
<!-- PARAMETERS FOR Hokuyo UTM-30LX -->
<!-- <param name="min_ang" value="-2.356"/> -->
<!-- <param name="max_ang" value="2.356"/> -->
<!-- PARAMETERS FOR Hokuyo UTM-30LX -->
<!-- <param name="min_ang" value="-2.0"/> -->
<!-- <param name="max_ang" value="2.0"/> -->
</node>
</launch>
<?xml version="1.0"?>
<launch>
<arg name="global_map_server" default="true"/>
<node pkg="amcl" type="amcl" name="amcl">
<!-- Overall filter parameters -->
<param name="min_particles" value="50"/>
<param name="max_particles" value="500"/>
<param name="kld_err" value="0.05"/>
<param name="kld_z" value="0.99"/>
<param name="update_min_d" value="0.2"/>
<param name="update_min_a" value="0.5"/>
<param name="resample_interval" value="1"/>
<param name="transform_tolerance" value="0.5"/>
<param name="recovery_alpha_slow" value="0.0"/>
<param name="recovery_alpha_fast" value="0.0"/>
<!--param name="gui_publish_rate" value="10.0"/-->
<!-- Laser model parameters -->
<param name="laser_max_beams" value="30"/>
<param name="laser_z_hit" value="0.95"/>
<param name="laser_z_short" value="0.05"/>
<param name="laser_z_max" value="0.05"/>
<param name="laser_z_rand" value="0.05"/>
<param name="laser_sigma_hit" value="0.2"/>
<param name="laser_lambda_short" value="0.1"/>
<param name="laser_model_type" value="likelihood_field"/>
<param name="laser_likelihood_max_dist" value="2.0"/>
<!-- Odometry model parameters -->
<param name="odom_model_type" value="omni"/>
<param name="odom_alpha1" value="0.2"/>
<param name="odom_alpha2" value="0.2"/>
<param name="odom_alpha3" value="0.8"/>
<param name="odom_alpha4" value="0.2"/>
<param name="odom_alpha5" value="0.1"/>
<param name="odom_frame_id" value="odom"/>
<!-- remap from="static_map" to="/static_map" if="$(arg global_map_server)"/ -->
<!-- param name="global_frame_id" value="/map" if="$(arg global_map_server)"/ -->
</node>
</launch>
<?xml version="1.0" encoding="utf-8"?>
<launch>
<arg name="global_map_server" default="true"/>
<node pkg="amcl" type="amcl" name="amcl" output="screen">
<!-- Overall filter parameters -->
<param name="min_particles" value="50"/>
<param name="max_particles" value="500"/>
<param name="kld_err" value="0.05"/>
<param name="kld_z" value="0.99"/>
<param name="update_min_d" value="0.2"/>
<param name="update_min_a" value="0.5"/>
<param name="resample_interval" value="1"/>
<param name="transform_tolerance" value="0.5"/>
<param name="recovery_alpha_slow" value="0.0"/>
<param name="recovery_alpha_fast" value="0.0"/>
<!--param name="gui_publish_rate" value="10.0"/-->
<!-- Laser model parameters -->
<param name="laser_max_beams" value="30"/>
<param name="laser_z_hit" value="0.95"/>
<param name="laser_z_short" value="0.05"/>
<param name="laser_z_max" value="0.05"/>
<param name="laser_z_rand" value="0.05"/>
<param name="laser_sigma_hit" value="0.2"/>
<param name="laser_lambda_short" value="0.1"/>
<param name="laser_model_type" value="likelihood_field"/>
<param name="laser_likelihood_max_dist" value="2.0"/>
<!-- Odometry model parameters -->
<param name="odom_model_type" value="omni"/>
<param name="odom_alpha1" value="0.2"/>
<param name="odom_alpha2" value="0.2"/>
<param name="odom_alpha3" value="0.8"/>
<param name="odom_alpha4" value="0.2"/>
<param name="odom_alpha5" value="0.1"/>
<param name="odom_frame_id" value="odom"/>
<remap from="static_map" to="/static_map" if="$(arg global_map_server)"/>
<param name="global_frame_id" value="/map" if="$(arg global_map_server)"/>
<remap from="/scan" to="/rrbot/laser/scan"/>
<!--remap from="map" to="/map"/-->
<!--param name="use_map_topic" value="true"/-->
</node>
</launch>
<?xml version="1.0"?>
<launch>
<include file="$(find openni2_launch)/launch/openni2.launch">
<arg name="depth_registration" value="false" />
<arg name="publish_tf" value="false" />
<arg name="rgb_processing" value="true" />
<arg name="debayer_processing" value="false" />
<arg name="ir_processing" value="false" />
<arg name="depth_processing" value="true" />
<arg name="depth_registered_processing" value="false" />
<arg name="disparity_processing" value="false" />
<arg name="disparity_registered_processing" value="false" />
</include>
<node name="camera_streaming" pkg="web_video_server" type="web_video_server" output="screen">
<!-- remap from="/camera/image_raw" to="camera/rgb/image_raw"/ -->
<param name="~port" type="int" value="8004"/>
</node>
</launch>
<?xml version="1.0"?>
<launch>
<remap from="/tf" to="$(env ROS_NAMESPACE)/tf"/>
<param name="x_init" value="0" type="double" />
<param name="y_init" value="0" type="double" />
<param name="theta_init" value="0" type="double" />
<node pkg="gmapping" type="slam_gmapping" name="slam_gmapping" output="screen">
<!-- remap from="scan" to="/scan"/ -->
<param name="odom_frame" value="odom"/>
<!--
<param name="map_udpate_interval" value="5.0"/>
<param name="maxUrange" value="60.0"/>
<param name="sigma" value="0.05"/>
<param name="kernelSize" value="1"/>
<param name="lstep" value="0.05"/>
<param name="astep" value="0.05"/>
<param name="iterations" value="5"/>
<param name="lsigma" value="0.075"/>
<param name="ogain" value="3.0"/>
<param name="lskip" value="0"/>
<param name="srr" value="0.1"/>
<param name="srt" value="0.2"/>
<param name="str" value="0.1"/>
<param name="stt" value="0.2"/>
<param name="linearUpdate" value="0.5"/>
<param name="angularUpdate" value="0.16"/>
<param name="temporalUpdate" value="1.5"/>
<param name="resampleThreshold" value="0.5"/>
<param name="particles" value="60"/>
<param name="xmin" value="-10.0"/>
<param name="ymin" value="-10.0"/>
<param name="xmax" value="10.0"/>
<param name="ymax" value="10.0"/>
<param name="delta" value="0.05"/>
<param name="llsamplerange" value="0.01"/>
<param name="llsamplestep" value="0.01"/>
<param name="lasamplerange" value="0.005"/>
<param name="lasamplestep" value="0.005"/>
-->
</node>
</launch>
<?xml version="1.0"?>
<launch>
<node name="hokuyo_node" pkg="hokuyo_node" type="hokuyo_node" required="true" output="screen">
<param name="port" type="string" value="/dev/mbot-hokuyo"/>
<param name="frame_id" type="string" value="lrf01"/>
<!-- PARAMETERS FOR Hokuyo URG-04LX -->
<param name="min_ang" value="-2.0862138271331787"/>
<param name="max_ang" value="2.0923497676849365"/>
<!-- PARAMETERS FOR Hokuyo UTM-30LX -->
<!-- <param name="min_ang" value="-2.356"/> -->
<!-- <param name="max_ang" value="2.356"/> -->
<!-- PARAMETERS FOR Hokuyo UTM-30LX -->
<!-- <param name="min_ang" value="-2.0"/> -->
<!-- <param name="max_ang" value="2.0"/> -->
</node>
</launch>
<?xml version="1.0"?>
<launch>
<remap from="/joy" to="my_joy"/>
<node name="joy" pkg="joy" type="joy_node" respawn="true" output="screen"/>
<node name="joydrive" pkg="omni_odometry" type="joydrive" respawn="true" output="screen"/>
</launch>
<?xml version="1.0"?>
<launch>
<!--
<arg name="map" default="$(find scout_maps)/isr6-v03cr.yaml"/>
<arg name="navmap" default="$(find scout_maps)/isr6-v03cr.yaml"/>
<arg name="locations" default="$(find scout_maps)/isr6-v03cr_zones.yaml"/>
<arg name="world" default="$(find scout_config)/mbot_stage-isr6-v03cr.world"/>
-->
<!--
<arg name="map" default="$(find scout_maps)/EPFLcompleteMapRetouched.yaml"/>
<arg name="navmap" default="$(find scout_maps)/EPFLcompleteMapRetouched.yaml"/>
<arg name="locations" default="$(find scout_maps)/EPFLcompleteMapRetouched_zones.yaml"/>
<arg name="world" default="$(find scout_config)/mbot_stage-EPFLcompleteMapRetouched.world"/>
-->
<!--
<arg name="map" default="$(find scout_maps)/EPFL-v02cr.yaml"/>
<arg name="navmap" default="$(find scout_maps)/EPFL-v02cr_nav.yaml"/>
<arg name="locations" default=""/>
<arg name="world" default="$(find scout_config)/mbot_stage-EPFL-v02cr_nav.world"/>
-->
<!-- -->
<arg name="map" default="$(find scout_maps)/EPFL-v03cr.yaml"/>
<arg name="navmap" default="$(find scout_maps)/EPFL-v03cr_nav.yaml"/>
<arg name="locations" default=""/>
<!-- arg name="world" default="$(find scout_config)/mbot_stage-EPFL-v02cr_nav.world"/ -->
<!-- -->
<!--
<arg name="map" default="$(find scout_maps)/isr8-v05cr.yaml"/>
<arg name="navmap" default="$(find scout_maps)/isr8-v05cr-nav.yaml"/>
-->
<!-- Translate args into rosparams -->
<param name="map" type="string" value="$(arg map)"/>
<param name="navmap" type="string" value="$(arg navmap)"/>
<param name="locations" type="string" value="$(arg locations)"/>
<!-- Robot parameters -->
<!-- param name="shape" type="string" value="$(find scout_config)/mbot_shape-1px_5mm-c67_47.yaml"/ -->
<param name="shape" type="string" value="$(find scout_config)/mbot_shell_shape-1px_5mm-c72_64.yaml"/>
<rosparam file="$(find scout_config)/mbot.yaml"/>
<remap from="/tf" to="$(env ROS_NAMESPACE)/tf"/>
<!-- LIDAR nodes : TEMPORARY -->
<!-- include file="2hokuyo.launch"/ -->
<!-- Run the map server -->
<node name="map_server" pkg="map_server" type="map_server" args=" $(arg map)" required="true">
<param name="frame_id" value="/map" />
</node>
<!--- AMCL -->
<include file="amcl.launch"/>
<!-- node pkg="amcl" type="amcl" name="amcl">
<param name="odom_model_type" value="omni"/>
<param name="odom_frame_id" value="/odom"/>
<param name="global_frame_id" value="/map"/>
</node -->
<!-- Navigation -->
<node name="navigation" pkg="scout_navigation" type="navigator">
<param name="~guidance_method" type="string" value="fmm"/>
<param name="~platform_mode" type="string" value="omni"/>
</node>
<!-- Camera streaming -->
<include file="camera.launch"/>
<!-- Web console -->
<node name="webconsole" pkg="scout_webconsole" type="server">
<param name="~home" value="home_mbot.html"/>
<param name="~camera" value="/stream?topic=camera/rgb/image_raw&amp;width=320&amp;height=240&amp;framerate=5"/>
</node>
<!-- Speech synth -->
<node name="speech" pkg="scout_speech" type="server"/>
<!-- Logging -->
<node name="logger" pkg="scout_diagnostics" type="mbot_logger.py"/>
</launch>
<launch>
<node pkg="move_base" type="move_base" respawn="false" name="move_base" output="screen">
<rosparam file="$(find config)/mbot_common_costmap_params.yaml" command="load" ns="global_costmap"/>
<rosparam file="$(find config)/mbot_common_costmap_params.yaml" command="load" ns="local_costmap"/>
<rosparam file="$(find config)/mbot_move_base_params.yaml" command="load"/>
<param name="base_global_planner" type="string" value="navfn/NavfnROS" />
<param name="base_local_planner" type="string" value="dwa_local_planner/DWAPlannerROS" />
<param name="controller_frequency" type="double" value="20.0" />
<!--param name="planner_frequency" type="double" value="0.1"/-->
<!--If the planner frequency is set, the planner will *only* run at that rate.
It can cause erratic behavior between two timesteps, if the goal changes meanwhile and there is no plan.-->
<param name="planner_patience" type="double" value="5.0"/>
<param name="controller_patience" type="double" value="5.0"/>
<remap from="map" to="/map"/>
</node>
</launch>
<?xml version="1.0"?>
<launch>
<!-- -->
<arg name="map" default="$(find scout_maps)/isr6-v03cr.yaml"/>
<arg name="navmap" default="$(find scout_maps)/isr6-v03cr.yaml"/>
<arg name="locations" default="$(find scout_maps)/isr6-v03cr_zones.yaml"/>
<arg name="world" default="$(find scout_config)/mbot_stage-isr6-v03cr_obstacles.world"/>
<!-- -->
<!--
<arg name="map" default="$(find scout_maps)/EPFLcompleteMapRetouched.yaml"/>
<arg name="navmap" default="$(find scout_maps)/EPFLcompleteMapRetouched.yaml"/>
<arg name="locations" default="$(find scout_maps)/EPFLcompleteMapRetouched_zones.yaml"/>
<arg name="world" default="$(find scout_config)/mbot_stage-EPFLcompleteMapRetouched.world"/>
-->
<!--
<arg name="map" default="$(find scout_maps)/EPFL-v02cr.yaml"/>
<arg name="navmap" default="$(find scout_maps)/EPFL-v02cr_nav.yaml"/>
<arg name="locations" default=""/>
<arg name="world" default="$(find scout_config)/mbot_stage-EPFL-v02cr_nav.world"/>
-->
<!--
<arg name="map" default="$(find scout_maps)/isr8-v05cr.yaml"/>
<arg name="navmap" default="$(find scout_maps)/isr8-v05cr-nav.yaml"/>
-->
<!-- Translate args into rosparams -->
<param name="map" type="string" value="$(arg map)"/>
<param name="navmap" type="string" value="$(arg navmap)"/>
<param name="locations" type="string" value="$(arg locations)"/>
<!-- Robot parameters -->
<param name="shape" type="string" value="$(find scout_config)/mbot_shape-1px_5mm-c67_47.yaml"/>
<rosparam file="$(find scout_config)/mbot.yaml"/>
<!-- Stage simulator -->
<node name="stage" pkg="stage_ros" type="stageros" args="$(arg world)">
<remap from="base_scan" to="scan"/>
</node>
<!-- LIDAR position -->
<node pkg="tf" type="static_transform_publisher" name="laser_broadcaster" args="0 0 0 0 0 0 /base_laser_link /laser_frame 100" required="true" />
<!-- Run the map server -->
<node name="map_server" pkg="map_server" type="map_server" args=" $(arg map)" required="true">
<param name="frame_id" value="/map" />
</node>
<!--- AMCL -->
<include file="amcl.launch"/>
<!-- Navigation -->
<node name="navigation" pkg="scout_navigation" type="navigator">
<param name="~guidance_method" type="string" value="fmm"/>
<param name="~platform_mode" type="string" value="omni"/>
</node>
<!-- Web console -->
<node name="webconsole" pkg="scout_webconsole" type="server">
<param name="~home" type="string" value="home_mbot.html"/>
</node>
</launch>
<?xml version="1.0"?>
<launch>
<arg name="global_map_server" default="true"/>
<node pkg="amcl" type="amcl" name="amcl">
<!-- Overall filter parameters -->
<param name="min_particles" value="50"/>
<param name="max_particles" value="500"/>
<param name="kld_err" value="0.05"/>
<param name="kld_z" value="0.99"/>
<param name="update_min_d" value="0.2"/>
<param name="update_min_a" value="0.5"/>
<param name="resample_interval" value="1"/>
<param name="transform_tolerance" value="0.5"/>
<param name="recovery_alpha_slow" value="0.0"/>
<param name="recovery_alpha_fast" value="0.0"/>
<!--param name="gui_publish_rate" value="10.0"/-->
<!-- Laser model parameters -->
<param name="laser_max_beams" value="30"/>
<param name="laser_z_hit" value="0.95"/>
<param name="laser_z_short" value="0.05"/>
<param name="laser_z_max" value="0.05"/>
<param name="laser_z_rand" value="0.05"/>
<param name="laser_sigma_hit" value="0.2"/>
<param name="laser_lambda_short" value="0.1"/>
<param name="laser_model_type" value="likelihood_field"/>
<param name="laser_likelihood_max_dist" value="2.0"/>
<!-- Odometry model parameters -->
<param name="odom_model_type" value="omni"/>
<param name="odom_alpha1" value="0.2"/>
<param name="odom_alpha2" value="0.2"/>
<param name="odom_alpha3" value="0.8"/>
<param name="odom_alpha4" value="0.2"/>
<param name="odom_alpha5" value="0.1"/>
<param name="odom_frame_id" value="odom"/>
<remap from="static_map" to="/static_map" if="$(arg global_map_server)"/>
<param name="global_frame_id" value="map" if="$(arg global_map_server)"/>
</node>
</launch>
<?xml version="1.0"?>
<launch>
<!--include file="$(find launch)/model.launch"/-->
<include file="$(find launch)/omni/navigation.launch"/>
<include file="$(find scout_ipcam)/streamer_fisheye.launch"/>
<include file="$(find track)/launch/track.launch"/>
<!-- Run Kinect -->
<!--include file="$(find launch)/kinect.launch"/-->
</launch>
<?xml version="1.0"?>
<launch>
<!-- Dialogue -->
<include file="$(find launch)/dialog.launch"/>
<node name="main_FSM" pkg="demos" type="robotica2014.py" output="screen"/>
<!-- smach_viewer -->
<!--node pkg="smach_viewer" name="smach_viewer" type="smach_viewer.py"/-->
</launch>
<?xml version="1.0"?>
<launch>
<param name="x_init" value="0" type="double" />
<param name="y_init" value="0" type="double" />
<param name="theta_init" value="0" type="double" />
<!-- <param name="robot_description" command="cat $(find position_estimation)/config/cobot_simpl.xml" /> -->
<!-- Scout drivers -->
<include file="motion.launch"/>
<node name="omni_odometry" pkg="omni_odometry" type="odometry_node">
<param name="publish_odom" value="true"/>
<param name="publish_tf" value="true"/>
</node>
<!-- LIDAR node -->
<include file="../hokuyo.launch"/>
<include file="../model.launch"/>
<!-- Laser position w.r.t. robot -->
<node pkg="tf" type="static_transform_publisher" name="base_laser_link_broadcaster" args="0 0 0 0 0 0 hokuyo_link laser_frame 100" required="true"/>
<!-- Odometry node -->
<include file="$(find scout_odometry)/launch/odometry.launch"/>
<node pkg="gmapping" type="slam_gmapping" name="slam_gmapping"> <!-- output="screen" -->
<remap from="scan" to="/scan"/>
<param name="odom_frame" value="odom"/>
<!-- <param name="base_frame" value="base_link"/> --> <!--sem razao aparente isto nao funciona. o frame do robot tem de ser sempre chamado /base_link -->
<param name="map_udpate_interval" value="5.0"/>
<param name="maxUrange" value="60.0"/>
<param name="sigma" value="0.05"/>
<param name="kernelSize" value="1"/>
<param name="lstep" value="0.05"/>
<param name="astep" value="0.05"/>
<param name="iterations" value="5"/>
<param name="lsigma" value="0.075"/>
<param name="ogain" value="3.0"/>
<param name="lskip" value="0"/>
<param name="srr" value="0.1"/>
<param name="srt" value="0.2"/>
<param name="str" value="0.1"/>
<param name="stt" value="0.2"/>
<param name="linearUpdate" value="0.5"/>
<param name="angularUpdate" value="0.16"/>
<param name="temporalUpdate" value="1.5"/>
<param name="resampleThreshold" value="0.5"/>
<param name="particles" value="60"/>
<param name="xmin" value="-10.0"/>
<param name="ymin" value="-10.0"/>
<param name="xmax" value="10.0"/>
<param name="ymax" value="10.0"/>
<param name="delta" value="0.05"/>
<param name="llsamplerange" value="0.01"/>
<param name="llsamplestep" value="0.01"/>
<param name="lasamplerange" value="0.005"/>
<param name="lasamplestep" value="0.005"/>
</node>
<!-- node name="rviz" type="rviz" pkg="rviz"/ -->
</launch>
<?xml version="1.0"?>
<launch>
<!-- LIDAR position -->
<node pkg="tf" type="static_transform_publisher" name="link1_broadcaster" args="0.17 0 0 0 0 0 /base_link /laser_frame 100" required="true" />
<!-- LIDAR node -->
<node name="hokuyo" pkg="hokuyo_node" type="hokuyo_node" required="true" output="screen">
<param name="port" type="string" value="/dev/ttyACM0"/>
<param name="frame_id" type="string" value="/laser_frame"/>
</node>
<!-- Odometry node -->
<!-- include file="$(find scout_odometry)/launch/odometry.launch"/ -->
<node pkg="tf" type="static_transform_publisher" name="nil_odometry" args="0 0 0 0 0 0 /odom /base_link 100" required="true" />
<!--- Hector SLAM mapping -->
<include file="$(find hector_mapping)/launch/mapping_default.launch">
<arg name="base_frame" value="base_link"/>
<arg name="odom_frame" value="odom"/>
</include>
</launch>
<?xml version="1.0"?>
<launch>
<!-- Robot Model -->
<!--include file="$(find launch)/model.launch"/-->
<!-- Navigation -->
<include file="navigation.launch"/>
<!-- Run Kinect -->
<include file="$(find launch)/kinect.launch"/>
<!-- Speech -->
<node name="speech" pkg="speech" type="server"/>
</launch>
<?xml version="1.0"?>
<launch>
<include file="motion.launch"/>
<include file="$(find cobot_grasp)/launch/grasping.launch"/>
</launch>
<?xml version="1.0"?>
<launch>
<rosparam file="../../config/omni.yaml"/>
<!-- Omni motor driver nodes -->
<node name="omni_driver" pkg="omni_driver" type="motors"/>
<node name="omni_motion" pkg="omni_odometry" type="motion_node"/>
<!-- Joystick operation -->
<node name="joy" pkg="joy" type="joy_node" respawn="true" output="screen"/>
<node name="joydrive" pkg="omni_odometry" type="joydrive" respawn="true" output="screen"/>
<!-- Motors temperature monitoring -->
<include file="temperature.launch"/>
</launch>
<?xml version="1.0"?>
<launch>
<arg name="map" default="$(find maps)/isr6-v03cr.yaml"/>
<arg name="navmap" default="$(find maps)/isr6-v03cr.yaml"/>
<!--arg name="map" default="$(find maps)/isr8-v03cr_full.yaml"/-->
<!--arg name="navmap" default="$(find maps)/isr8-v03cr_full.yaml"/-->
<arg name="use_move_base" default="false"/>
<param name="map" type="string" value="$(arg map)"/>
<param name="navmap" type="string" value="$(arg navmap)"/>
<rosparam file="$(find config)/omni.yaml"/>
<!-- Cobot Model and tfs -->
<include file="$(find launch)/model.launch"/>
<!-- LIDAR position -->
<node pkg="tf" type="static_transform_publisher" name="laser_broadcaster" args="0 0 0 0 0 0 /hokuyo_link /laser_frame 100" required="true" />
<!-- LIDAR node -->
<node name="hokuyo" pkg="hokuyo_node" type="hokuyo_node" required="true" output="screen">
<param name="port" type="string" value="/dev/ttyACM3"/>
<param name="frame_id" type="string" value="/laser_frame"/>
<!-- PARAMETERS FOR Hokuyo URG-04LX -->
<!-- param name="min_ang" value="-2.086214"/ -->
<!-- param name="max_ang" value="2.092350"/ -->
<!-- PARAMETERS FOR Hokuyo UTM-30LX -->
<param name="min_ang" value="-2.356"/>
<param name="max_ang" value="2.356"/>
<!-- PARAMETERS FOR Hokuyo UTM-30LX -->
<!-- <param name="min_ang" value="-2.0"/> -->
<!-- <param name="max_ang" value="2.0"/> -->
</node>
<!-- Motion nodes -->
<include file="$(find launch)/omni/motion.launch"/>
<!-- Odometry node -->
<node name="omni_odometry" pkg="omni_odometry" type="odometry_node">
<param name="publish_odom" value="true"/>
<param name="publish_tf" value="true"/>
</node>
<!-- Scan matching (experimental); NOTE: to enable, set publish_tf to false above-->
<!-- include file="scan_matching.launch"/ -->
<!-- Run the map server -->
<node name="map_server" pkg="map_server" type="map_server" args=" $(arg map)" required="true">
<param name="frame_id" value="/map" />
</node>
<!--- AMCL -->
<include file="$(find launch)/omni/amcl.launch"/>
<!-- node pkg="amcl" type="amcl" name="amcl">
<param name="odom_model_type" value="omni"/>
<param name="odom_frame_id" value="/odom"/>
<param name="global_frame_id" value="/map"/>
</node -->
<!-- Navigation -->
<group unless="$(arg use_move_base)">
<node name="navigation" pkg="scout_navigation" type="navigator">
<param name="~guidance_method" type="string" value="fmm"/>
<param name="~platform_mode" type="string" value="omni"/>
</node>
</group>
<group if="$(arg use_move_base)">
<include file="move_base.launch"/>
<node name="navigation" pkg="scout_navigation" type="navigator" output="screen">
<remap from="omni/cmd_vel" to="cmd_vel"/>
<param name="~guidance_method" type="string" value="move_base"/>
<param name="~platform_mode" type="string" value="omni"/>
</node>
</group>
<!-- Web console -->
<node name="webconsole" pkg="webconsole" type="server">
<param name="~camera" value="/stream?topic=/fisheye_camera/image_raw"/>
</node>
<!-- INOP: node name="camera_server" pkg="mjpeg_server" type="mjpeg_server" output="screen">
<param name="~port" type="int" value="8004"/>
</node -->
</launch>
<?xml version="1.0"?>
<launch>
<!-- Navigation -->
<include file="navigation.launch"/>
<!-- Run Kinect -->
<include file="$(find launch)/kinect.launch"/>
<!-- Speech -->
<node name="speech" pkg="speech" type="server"/>
<!-- Manipulation -->
<include file="$(find launch)/advanced.launch"/>
<!-- Track Colors -->
<include file="$(find scout_ipcam)/streamer_fisheye.launch"/>
<include file="$(find track)/launch/track.launch"/>
<!-- Bell Recognizer -->
<include file="$(find launch)/bell_recog.launch"/>
<!-- CorkTec house rmeote control -->
<!--node name="bt_remote" pkg="bt_remote" type="bt_remote_node.py" respawn="true"/-->
<!-- Rviz -->
<!--node pkg="rviz" name="rviz" type="rviz" args="-d $(find launch)/../config/cobot_rviz.rviz"/-->
<!-- GUI -->
<node name="gui" pkg="scout_gui" type="main.py">
<!-- hack to force GUI to open on head's display -->
<env name="DISPLAY" value=":0"/>
<!-- param name="map" type="string" value="$(arg map)"/ -->
</node>
</launch>
<?xml version="1.0"?>
<launch>
<node name="scan_matching" pkg="laser_scan_matcher" type="laser_scan_matcher_node" output="screen">
<param name="fixed_frame" value="odom"/>
<param name="base_frame" value="base_link"/>
<param name="use_imu" value="false"/>
<param name="use_odom" value="true"/>
<param name="use_vel" value="false"/>
<param name="publish_tf" value="true"/>
<param name="publish_pose" value="false"/>
</node>
</launch>
<?xml version="1.0"?>
<launch>
<!-- Temperature monitoring -->
<node name="temperature_monitoring" pkg="rosserial_python" type="serial_node.py" args="/dev/ttyUSBarduino"/>
</launch>
<?xml version="1.0"?>
<launch>
<include file="$(find launch)/ar_pose_cobot.launch"/>
<include file="$(find cobot_grasp)/launch/grasping.launch"/>
<!-- Run Kinect -->
<!--include file="$(find launch)/kinect.launch"/-->
</launch>
<?xml version="1.0"?>
<launch>
<param name="use_sim_time" type="bool" value="true"/>
<!-- <arg name="map" default="$(find maps)/map6PisoHector+Gmapping30mLaser_crop.yaml"/> -->
<arg name="map" default="$(find maps)/isr6-v03cr.yaml"/>
<!-- arg name="map" default="$(find maps)/isr8-v02cr.yaml"/ -->
<!-- arg name="map" default="$(find maps)/pc1-v03rr.yaml"/ -->
<!-- arg name="map" default="$(find maps)/ipol-2r.yaml"/ -->
<param name="map" type="string" value="$(arg map)"/>
<!-- Run the map server -->
<node name="map_server" pkg="map_server" type="map_server" args=" $(arg map)" required="true"/>
<arg name="odometry_frame_id" default="odom" />
<arg name="base_frame_id" default="base_link" />
<arg name="laser_frame_id" default="laser_frame" />
<node pkg="tf" type="static_transform_publisher" name="base_laser_link_broadcaster" args="0.15 0 0 0 0 0 $(arg base_frame_id) $(arg laser_frame_id) 100" required="true" />
<!--- AMCL -->
<!-- DOES NOT WORK ON HYDRO: include file="$(find amcl)/examples/amcl_diff.launch"/ -->
<node pkg="amcl" type="amcl" name="amcl" output="screen">
</node>
<!-- Web console -->
<node name="webconsole" pkg="webconsole" type="server">
<param name="map" type="string" value="$(arg map)"/>
<!-- remap from="scan" to="/kinect/scan"/ -->
</node>
</launch>
<launch>
<arg name="global_map_server" default="true"/>
<node pkg="amcl" type="amcl" name="amcl">
<!-- Overall filter parameters -->
<param name="min_particles" value="50"/>
<param name="max_particles" value="500"/>
<param name="kld_err" value="0.05"/>
<param name="kld_z" value="0.99"/>
<param name="update_min_d" value="0.2"/>
<param name="update_min_a" value="0.5"/>
<param name="resample_interval" value="1"/>
<param name="transform_tolerance" value="0.5"/>
<param name="recovery_alpha_slow" value="0.0"/>
<param name="recovery_alpha_fast" value="0.0"/>
<!--param name="gui_publish_rate" value="10.0"/-->
<!-- Laser model parameters -->
<param name="laser_max_beams" value="30"/>
<param name="laser_z_hit" value="0.95"/>
<param name="laser_z_short" value="0.05"/>
<param name="laser_z_max" value="0.05"/>
<param name="laser_z_rand" value="0.05"/>
<param name="laser_sigma_hit" value="0.2"/>
<param name="laser_lambda_short" value="0.1"/>
<param name="laser_model_type" value="likelihood_field"/>
<param name="laser_likelihood_max_dist" value="2.0"/>
<!-- Odometry model parameters -->
<param name="odom_model_type" value="diff"/>
<param name="odom_alpha1" value="0.2"/>
<param name="odom_alpha2" value="0.2"/>
<param name="odom_alpha3" value="0.8"/>
<param name="odom_alpha4" value="0.2"/>
<param name="odom_alpha5" value="0.1"/>
<param name="odom_frame_id" value="odom"/>
<remap from="static_map" to="/static_map" if="$(arg global_map_server)"/>
<param name="global_frame_id" value="/map" if="$(arg global_map_server)"/>
</node>
</launch>
<launch>
<node name="ar_pose" pkg="ar_pose" type="ar_single" respawn="false"
output="screen">
<remap from="/camera/image_raw" to="/camera/rgb/image_raw" />
<remap from="/camera/camera_info" to="/camera/rgb/camera_info" />
<param name="marker_pattern" type="string"
value="$(find ar_pose)/data/4x4/4x4_95.patt"/>
<param name="marker_width" type="double" value="60.0"/>
<param name="marker_center_x" type="double" value="0.0"/>
<param name="marker_center_y" type="double" value="0.0"/>
<param name="threshold" type="int" value="100"/>
<param name="use_history" type="bool" value="true"/>
<param name="publish_tf" type="bool" value="false"/>
<param name="reverse_transform" type="bool" value="false"/>
</node>
</launch>
<launch>
<node name="bell_recognition" pkg="bell_recognition" type="bell_recog.py" output="screen">
</node>
</launch>
<?xml version="1.0"?>
<launch>
<node name="camera" pkg="usb_cam" type="usb_cam_node" output="screen">
<param name="~pixel_format" type="string" value="yuyv"/>
<param name="~image_width" type="int" value="320"/>
<param name="~image_height" type="int" value="240"/>
<!-- changed to better match 50Hz lamp flickering (thanks, Gwenn) -->
<param name="~framerate" type="int" value="10"/>
</node>
<node name="camera_server" pkg="mjpeg_server" type="mjpeg_server" output="screen">
<param name="~port" type="int" value="8004"/>
</node>
</launch>
<launch>
<node name="talker" pkg="sound_play" type="soundplay_node.py" />
<node name="nlp_component" pkg="dialog" type="nlp_component.py" output="screen">
</node>
<node name="asr_component" pkg="dialog" type="asr_component.py" output="screen">
<param name="dict" value="$(find dialog)/config/3076.dic" />
<param name="fsg" value="$(find dialog)/config/3076.fsg"/>
</node>
<node name="voice_component" pkg="dialog" type="voice_component.py" output="screen">
<param name="voice" value="voice_kal_diphone"/>
<!-- <param name="wavepath" value="$(find dialog)/sounds"/> -->
<param name="voice_topic" value="/voice_component/voice_component_input"/>
</node>
<node name="dialog_component" pkg="dialog" type="dialog_component.py" output="screen">
</node>
</launch>
<?xml version="1.0"?>
<launch>
<param name="use_sim_time" type="bool" value="true"/>
<param name="x_init" value="0" type="double" />
<param name="y_init" value="0" type="double" />
<param name="theta_init" value="0" type="double" />
<!-- <param name="robot_description" command="cat $(find position_estimation)/config/cobot_simpl.xml" /> -->
<!-- Scout drivers -->
<!-- include file="scout-remote.launch"/ -->
<!-- LIDAR node -->
<!-- include file="hokuyo.launch"/ -->
<!-- Odometry node -->
<!-- include file="$(find scout_odometry)/launch/odometry.launch"/ -->
<arg name="odometry_frame_id" default="odom" />
<arg name="base_frame_id" default="base_link" />
<arg name="laser_frame_id" default="laser_frame" />
<node pkg="tf" type="static_transform_publisher" name="base_laser_link_broadcaster" args="0.15 0 0 0 0 0 $(arg base_frame_id) $(arg laser_frame_id) 100" required="true" />
<node pkg="gmapping" type="slam_gmapping" name="slam_gmapping"> <!-- output="screen" -->
<remap from="scan" to="/scan"/>
<param name="odom_frame" value="odom"/>
<!-- <param name="base_frame" value="base_link"/> --> <!--sem razao aparente isto nao funciona. o frame do robot tem de ser sempre chamado /base_link -->
<param name="map_udpate_interval" value="5.0"/>
<param name="maxUrange" value="60.0"/>
<param name="sigma" value="0.05"/>
<param name="kernelSize" value="1"/>
<param name="lstep" value="0.05"/>
<param name="astep" value="0.05"/>
<param name="iterations" value="5"/>
<param name="lsigma" value="0.075"/>
<param name="ogain" value="3.0"/>
<param name="lskip" value="0"/>
<param name="srr" value="0.1"/>
<param name="srt" value="0.2"/>
<param name="str" value="0.1"/>
<param name="stt" value="0.2"/>
<param name="linearUpdate" value="0.5"/>
<param name="angularUpdate" value="0.16"/>
<param name="temporalUpdate" value="1.5"/>
<param name="resampleThreshold" value="0.5"/>
<param name="particles" value="60"/>
<param name="xmin" value="-10.0"/>
<param name="ymin" value="-10.0"/>
<param name="xmax" value="10.0"/>
<param name="ymax" value="10.0"/>
<param name="delta" value="0.05"/>
<param name="llsamplerange" value="0.01"/>
<param name="llsamplestep" value="0.01"/>
<param name="lasamplerange" value="0.005"/>
<param name="lasamplestep" value="0.005"/>
</node>
</launch>
<?xml version="1.0"?>
<launch>
<param name="x_init" value="0" type="double" />
<param name="y_init" value="0" type="double" />
<param name="theta_init" value="0" type="double" />
<!-- <param name="robot_description" command="cat $(find position_estimation)/config/cobot_simpl.xml" /> -->
<!-- Scout drivers -->
<include file="scout-remote.launch"/>
<!-- LIDAR node -->
<include file="hokuyo.launch"/>
<!-- Laser position w.r.t. robot -->
<node pkg="tf" type="static_transform_publisher" name="base_laser_link_broadcaster" args="0.15 0 0 0 0 0 base_link laser_frame 100" required="true"/>
<!-- Odometry node -->
<include file="$(find scout_odometry)/launch/odometry.launch"/>
<node pkg="gmapping" type="slam_gmapping" name="slam_gmapping"> <!-- output="screen" -->
<remap from="scan" to="/scan"/>
<param name="odom_frame" value="odom"/>
<!-- <param name="base_frame" value="base_link"/> --> <!--sem razao aparente isto nao funciona. o frame do robot tem de ser sempre chamado /base_link -->
<param name="map_udpate_interval" value="5.0"/>
<param name="maxUrange" value="60.0"/>
<param name="sigma" value="0.05"/>
<param name="kernelSize" value="1"/>
<param name="lstep" value="0.05"/>
<param name="astep" value="0.05"/>
<param name="iterations" value="5"/>
<param name="lsigma" value="0.075"/>
<param name="ogain" value="3.0"/>
<param name="lskip" value="0"/>
<param name="srr" value="0.1"/>
<param name="srt" value="0.2"/>
<param name="str" value="0.1"/>
<param name="stt" value="0.2"/>
<param name="linearUpdate" value="0.5"/>
<param name="angularUpdate" value="0.16"/>
<param name="temporalUpdate" value="1.5"/>
<param name="resampleThreshold" value="0.5"/>
<param name="particles" value="60"/>
<param name="xmin" value="-10.0"/>
<param name="ymin" value="-10.0"/>
<param name="xmax" value="10.0"/>
<param name="ymax" value="10.0"/>
<param name="delta" value="0.05"/>
<param name="llsamplerange" value="0.01"/>
<param name="llsamplestep" value="0.01"/>
<param name="lasamplerange" value="0.005"/>
<param name="lasamplestep" value="0.005"/>
</node>
</launch>
<?xml version="1.0"?>
<launch>
<!-- LIDAR position -->
<node pkg="tf" type="static_transform_publisher" name="link1_broadcaster" args="0.15 -0.02 0 0 0 0 /base_link /laser_frame 100" required="true" />
<!-- LIDAR node -->
<node name="hokuyo" pkg="hokuyo_node" type="hokuyo_node" required="true" output="screen">
<param name="port" type="string" value="/dev/ttyACM3"/>
<param name="frame_id" type="string" value="/laser_frame"/>
</node>
<!-- Odometry node -->
<include file="$(find scout_odometry)/launch/odometry.launch"/>
<!--- Hector SLAM mapping -->
<include file="$(find hector_mapping)/launch/mapping_default.launch">
<arg name="base_frame" value="base_link"/>
<arg name="odom_frame" value="odom"/>
</include>
</launch>
<?xml version="1.0"?>
<launch>
<node name="hokuyo" pkg="hokuyo_node" type="hokuyo_node" required="true" output="screen">
<param name="port" type="string" value="/dev/ttyACM3"/>
<param name="frame_id" type="string" value="/laser_frame"/>
<!-- PARAMETERS FOR Hokuyo URG-04LX -->
<!-- <param name="min_ang" value="-2.086214"/> -->
<!-- <param name="max_ang" value="2.092350"/> -->
<!-- PARAMETERS FOR Hokuyo UTM-30LX -->
<param name="min_ang" value="-2.356"/>
<param name="max_ang" value="2.356"/>
<!-- PARAMETERS FOR Hokuyo UTM-30LX -->
<!-- <param name="min_ang" value="-2.0"/> -->
<!-- <param name="max_ang" value="2.0"/> -->
</node>
</launch>
<?xml version="1.0"?>
<launch>
<param name="katana_type" type="string" value="$(env KATANA_TYPE)" />
<include file="$(find launch)/model.launch"/>
<rosparam command="load" file="$(find katana)/config/katana_arm_controllers.yaml" />
<!-- katana node -->
<node pkg="katana" type="katana" name="katana" output="screen">
<remap from="/joint_states" to="/katana_joint_states"/>
<param name="use_serial" type="bool" value="true" />
<!-- for /dev/ttyS0: -->
<param name="serial_port" type="int" value="0" />
<param name="config_file_path" type="string" value="$(find kni)/KNI_4.3.0/configfiles300/katana6M180.cfg" />
<!--<param name="simulation" type="bool" value="true" /> -->
</node>
</launch>
<?xml version="1.0"?>
<launch>
<!-- start keyboard tele op node -->
<node pkg="katana_teleop" type="katana_teleop_key" name="katana_teleop_key" output="screen"/>
</launch>
<!-- Entry point for using OpenNI devices -->
<launch>
<!-- "camera" should uniquely identify the device. All topics are pushed down
into the "camera" namespace, and it is prepended to tf frame ids. -->
<arg name="camera" default="camera" />
<arg name="tf_prefix" default="" />
<arg name="rgb_frame_id" default="$(arg tf_prefix)/$(arg camera)_rgb_optical_frame" />
<arg name="depth_frame_id" default="$(arg tf_prefix)/$(arg camera)_depth_optical_frame" />
<!-- device_id can have the following formats:
"B00367707227042B": Use device with given serial number
"#1" : Use first device found
"2@3" : Use device on USB bus 2, address 3
"2@0" : Use first device found on USB bus 2
-->
<arg name="device_id" default="A00366811297045A" />
<!-- By default, calibrations are stored to file://${ROS_HOME}/camera_info/${NAME}.yaml,
where ${NAME} is of the form "[rgb|depth]_[serial#]", e.g. "depth_B00367707227042B".
See camera_info_manager docs for calibration URL details. -->
<arg name="rgb_camera_info_url" default="" />
<arg name="depth_camera_info_url" default="" />
<!-- Use OpenNI's factory-calibrated depth->RGB registration? -->
<arg name="depth_registration" default="false" />
<!-- Arguments for remapping all device namespaces -->
<arg name="rgb" default="rgb" />
<arg name="ir" default="ir" />
<arg name="depth" default="depth" />
<arg name="depth_registered" default="depth_registered" />
<arg name="projector" default="projector" />
<!-- Optionally suppress loading the driver nodelet and/or publishing the default tf
tree. Useful if you are playing back recorded raw data from a bag, or are
supplying a more accurate tf tree from calibration. -->
<arg name="load_driver" default="true" />
<arg name="publish_tf" default="true" />
<!-- Processing Modules -->
<arg name="rgb_processing" default="true"/>
<arg name="ir_processing" default="true"/>
<arg name="depth_processing" default="true"/>
<arg name="depth_registered_processing" default="true"/>
<arg name="disparity_processing" default="true"/>
<arg name="disparity_registered_processing" default="true"/>
<arg name="hw_registered_processing" default="true" />
<arg name="sw_registered_processing" default="true" />
<!-- Disable bond topics by default -->
<arg name="bond" default="false" /> <!-- DEPRECATED, use respawn arg instead -->
<arg name="respawn" default="$(arg bond)" />
<!-- Worker threads for the nodelet manager -->
<arg name="num_worker_threads" default="4" />
<!-- Push down all topics/nodelets into "camera" namespace -->
<group ns="$(arg camera)">
<!-- Start nodelet manager in top-level namespace -->
<arg name="manager" value="$(arg camera)_nodelet_manager" />
<arg name="debug" default="false" /> <!-- Run manager in GDB? -->
<include file="$(find rgbd_launch)/launch/includes/manager.launch.xml">
<arg name="name" value="$(arg manager)" />
<arg name="debug" value="$(arg debug)" />
<arg name="num_worker_threads" value="$(arg num_worker_threads)" />
</include>
<!-- Load driver -->
<include if="$(arg load_driver)"
file="$(find openni_launch)/launch/includes/device.launch.xml">
<!-- Could really use some syntactic sugar for this -->
<arg name="manager" value="$(arg manager)" />
<arg name="device_id" value="$(arg device_id)" />
<arg name="rgb_frame_id" value="$(arg rgb_frame_id)" />
<arg name="depth_frame_id" value="$(arg depth_frame_id)" />
<arg name="rgb_camera_info_url" value="$(arg rgb_camera_info_url)" />
<arg name="depth_camera_info_url" value="$(arg depth_camera_info_url)" />
<arg name="depth_registration" value="$(arg depth_registration)" />
<arg name="rgb" value="$(arg rgb)" />
<arg name="ir" value="$(arg ir)" />
<arg name="depth" value="$(arg depth)" />
<arg name="depth_registered" value="$(arg depth_registered)" />
<arg name="projector" value="$(arg projector)" />
<arg name="respawn" value="$(arg respawn)" />
</include>
<!-- Load standard constellation of processing nodelets -->
<include file="$(find rgbd_launch)/launch/includes/processing.launch.xml">
<arg name="manager" value="$(arg manager)" />
<arg name="rgb" value="$(arg rgb)" />
<arg name="ir" value="$(arg ir)" />
<arg name="depth" value="$(arg depth)" />
<arg name="depth_registered" value="$(arg depth_registered)" />
<arg name="projector" value="$(arg projector)" />
<arg name="respawn" value="$(arg respawn)" />
<arg name="rgb_processing" value="$(arg rgb_processing)" />
<arg name="ir_processing" value="$(arg ir_processing)" />
<arg name="depth_processing" value="$(arg depth_processing)" />
<arg name="depth_registered_processing" value="$(arg depth_registered_processing)" />
<arg name="disparity_processing" value="$(arg disparity_processing)" />
<arg name="disparity_registered_processing" value="$(arg disparity_registered_processing)" />
<arg name="hw_registered_processing" value="$(arg hw_registered_processing)" />
<arg name="sw_registered_processing" value="$(arg sw_registered_processing)" />
</include>
</group> <!-- camera -->
<!-- Load reasonable defaults for the relative pose between cameras -->
<include if="$(arg publish_tf)"
file="$(find rgbd_launch)/launch/kinect_frames.launch">
<arg name="camera" value="$(arg camera)" />
<arg name="tf_prefix" value="$(arg tf_prefix)" />
</include>
</launch>
<?xml version="1.0"?>
<launch>
<!-- MAP CHOICE HERE -->
<!--arg name="map" default="$(find maps)/map6PisoHector+Gmapping30mLaser_crop.yaml"/-->
<arg name="map" default="$(find maps)/isr6-v03cr.yaml"/>
<!-- arg name="map" default="$(find maps)/isr8-v02cr.yaml"/ -->
<!-- arg name="map" default="$(find maps)/pc1-v03rr.yaml"/ -->
<!-- arg name="map" default="$(find maps)/ipol-2r.yaml"/ -->
<arg name="use_move_base" default="false"/>
<param name="map" type="string" value="$(arg map)"/>
<rosparam file="../config/scout.yaml"/>
<!-- Scout drivers -->
<include file="scout-remote.launch"/>
<!-- LIDAR node -->
<include file="hokuyo.launch"/>
<!-- Run the map server -->
<node name="map_server" pkg="map_server" type="map_server" args=" $(arg map)" required="true">
<param name="frame_id" value="/map" />
</node>
<!-- Laser position w.r.t. robot -->
<node pkg="tf" type="static_transform_publisher" name="base_laser_link_broadcaster" args="0.15 0 0 0 0 0 base_link laser_frame 100" required="true"/>
<!-- Odometry node -->
<include file="$(find scout_odometry)/launch/odometry.launch"/>
<!--- AMCL -->
<!-- Use this for Groovy: -->
<!-- include file="$(find amcl)/examples/amcl_diff.launch"/ -->
<!-- Use this for Hydro: -->
<include file="amcl.launch"/>
<!-- Navigation -->
<group unless="$(arg use_move_base)">
<node name="navigation" pkg="scout_navigation" type="navigator">
<param name="guidance_method" type="string" value="fmm"/>
</node>
</group>
<group if="$(arg use_move_base)">
<node name="scout_move_base_interface" pkg="scout_driver" type="scout_move_base_interface"/>
<include file="move_base.launch"/>
<node name="navigation" pkg="scout_navigation" type="navigator" output="screen">
<param name="guidance_method" type="string" value="move_base"/>
</node>
</group>
<!-- Speech synth -->
<node name="speech" pkg="speech" type="server"/>
<!-- Web console -->
<node name="webconsole" pkg="webconsole" type="server">
<!-- param name="map" type="string" value="$(arg map)"/ -->
<!-- remap from="scan" to="/kinect/scan"/ -->
</node>
<!-- GUI -->
<node name="gui" pkg="scout_gui" type="main.py">
<!-- hack to force GUI to open on head's display -->
<env name="DISPLAY" value=":0"/>
<!-- param name="map" type="string" value="$(arg map)"/ -->
</node>
<!-- Kinect laser -->
<include file="$(find openni_launch)/launch/openni.launch"/>
<!-- <include file="$(find pointcloud_to_laserscan)/launch/kinect_laser.launch"/> -->
<!-- Katana Arm -->
<include file="katana.launch"/>
</launch>
<?xml version="1.0"?>
<launch>
<param name="robot_description" command="$(find xacro)/xacro.py '$(find cobot_description)/urdf/cobot.urdf.xacro'" />
<node pkg="tf" type="static_transform_publisher" name="scout_to_base_static_transform" args="0 0 0 0 0 0 base_link scout_base_link 100" />
<!--node pkg="tf" type="static_transform_publisher" name="kinect_calibrate_static_transform" args="-0.008 0.009 0.013 0.070 -0.049 0.035 kinect_back_link camera_link 100" /-->
<node pkg="tf" type="static_transform_publisher" name="kinect_calibrate_static_transform" args="0 0 0 0 0 0 kinect_back_link camera_link 100" />
<node pkg="robot_state_publisher" type="state_publisher" name="robot_state_publisher" />
<node pkg="omni_wheel_tf" type="publish_jointstate" name="publish_jointstate" output="screen">
<remap from="joint_states" to="omni_joint_states"/>
</node>
<node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher">
<param name="/use_gui" value="false"/>
<param name="/publish_default_positions" value="true"/>
<rosparam param="source_list">[katana_joint_states, omni_joint_states]</rosparam>
<rosparam command="load" file="$(find cobot_description)/config/zeros.yaml"/>
</node>
</launch>
<launch>
<node pkg="move_base" type="move_base" respawn="false" name="move_base" output="screen">
<rosparam file="../config/scout_move_base_params.yaml" command="load"/>
<param name="base_global_planner" type="string" value="navfn/NavfnROS" />
<param name="controller_frequency" type="double" value="20.0" />
<!--Controller frequency needs to be at least 20! Otherwise we get strange behavior.-->
<!--param name="planner_frequency" type="double" value="0.1"/-->
<!--If the planner frequency is set, the planner will *only* run at that rate.
It can cause erratic behavior between two timesteps, if the goal changes meanwhile and there is no plan.-->
<param name="planner_patience" type="double" value="5.0"/>
<param name="controller_patience" type="double" value="1.0"/>
<remap from="map" to="/map"/>
</node>
</launch>
<?xml version="1.0"?>
<launch>
<!-- MAP CHOICE HERE -->
<!--arg name="map" default="$(find maps)/map6PisoHector+Gmapping30mLaser_crop.yaml"/-->
<!-- arg name="map" default="$(find maps)/isr6-v03cr.yaml"/ -->
<arg name="map" default="$(find maps)/rockincamp14-2cr.yaml"/>
<!-- arg name="map" default="$(find maps)/isr8-v02cr.yaml"/ -->
<!-- arg name="map" default="$(find maps)/pc1-v03rr.yaml"/ -->
<!-- arg name="map" default="$(find maps)/ipol-2r.yaml"/ -->
<arg name="use_move_base" default="false"/>
<param name="map" type="string" value="$(arg map)"/>
<rosparam file="../config/scout.yaml"/>
<!-- Scout drivers -->
<include file="scout-remote.launch"/>
<!-- LIDAR node -->
<include file="hokuyo.launch"/>
<!-- Run the map server -->
<node name="map_server" pkg="map_server" type="map_server" args=" $(arg map)" required="true">
<param name="frame_id" value="/map" />
</node>
<!-- Laser position w.r.t. robot -->
<node pkg="tf" type="static_transform_publisher" name="base_laser_link_broadcaster" args="0.15 0 0 0 0 0 base_link laser_frame 100" required="true"/>
<!-- Odometry node -->
<include file="$(find scout_odometry)/launch/odometry.launch"/>
<!--- AMCL -->
<!-- Use this for Groovy: -->
<!-- include file="$(find amcl)/examples/amcl_diff.launch"/ -->
<!-- Use this for Hydro: -->
<include file="amcl.launch"/>
<!-- Navigation -->
<group unless="$(arg use_move_base)">
<node name="navigation" pkg="scout_navigation" type="navigator">
<param name="guidance_method" type="string" value="fmm"/>
</node>
</group>
<group if="$(arg use_move_base)">
<node name="scout_move_base_interface" pkg="scout_driver" type="scout_move_base_interface"/>
<include file="move_base.launch"/>
<node name="navigation" pkg="scout_navigation" type="navigator" output="screen">
<param name="guidance_method" type="string" value="move_base"/>
</node>
</group>
<!-- Speech synth -->
<node name="speech" pkg="speech" type="server"/>
<!-- Web console -->
<node name="webconsole" pkg="webconsole" type="server">
<!-- param name="map" type="string" value="$(arg map)"/ -->
<!-- remap from="scan" to="/kinect/scan"/ -->
</node>
<!-- GUI -->
<node name="gui" pkg="scout_gui" type="main.py">
<!-- hack to force GUI to open on head's display -->
<env name="DISPLAY" value=":0"/>
<!-- param name="map" type="string" value="$(arg map)"/ -->
</node>
<!-- Kinect laser -->
<!-- <include file="$(find pointcloud_to_laserscan)/launch/kinect_laser.launch"/> -->
<!-- Katana Arm -->
<!-- include file="katana.launch"/ -->
</launch>
<launch>
<machine name="scout" address="scout" user="scout" env-loader="/home/scout/scout/scripts/scout-env.sh" timeout="30"/>
<node machine="scout" name="motors" pkg="scout_driver" type="motors" respawn="true">
<!-- does not work yet -->
<param name="accel" type="int" value="12"/>
</node>
<node machine="scout" name="sensors" pkg="scout_driver" type="sensors"/>
<node machine="scout" name="joy" pkg="joy" type="joy_node" respawn="true"/>
<node machine="scout" name="joydrive" pkg="scout_driver" type="joydrive" respawn="true"/>
</launch>
<launch>
<node name="motors" pkg="scout_driver" type="motors" respawn="true" output="screen"/>
<node name="sensors" pkg="scout_driver" type="sensors" output="screen"/>
<node name="joy" pkg="joy" type="joy_node" respawn="true" output="screen"/>
<node name="joydrive" pkg="scout_driver" type="joydrive" respawn="true" output="screen"/>
</launch>
<launch>
<node name="sick" pkg="sicktoolbox_wrapper" type="sicklms" required="true" output="screen">
<param name="port" type="string" value="/dev/ttyUSB0"/>
<param name="frame_id" type="string" value="/laser_frame"/>
<!-- <param name="resolution" type="double" value="1.0"/> -->
</node>
</launch>
<launch>
<node pkg="stage" type="stageros" name="stageros" args=" $(find maps)/isr6-stage.world">
<remap from="odom" to="/odom" />
<remap from="base_scan" to="/scan" />
<remap from="base_pose_ground_truth" to="/base_pose_ground_truth" />
<remap from="cmd_vel" to="/cmd_vel" />
</node>
<param name="use_sim_time" type="bool" value="true" />
<arg name="map" default="$(find maps)/isr6-v03cr.yaml"/>
<!-- arg name="map" default="$(find maps)/isr8-v02cr.yaml"/ -->
<!-- arg name="map" default="$(find maps)/pc1-v03rr.yaml"/ -->
<!-- arg name="map" default="$(find maps)/ipol-2r.yaml"/ -->
<arg name="use_move_base" default="true"/>
<param name="map" type="string" value="$(arg map)"/>
<rosparam file="../config/scout.yaml"/>
<!-- Run the map server -->
<node name="map_server" pkg="map_server" type="map_server" args=" $(arg map)" required="true">
<param name="frame_id" value="/map" />
</node>
<!-- Laser position w.r.t. robot -->
<node pkg="tf" type="static_transform_publisher" name="base_laser_link_broadcaster" args="0.15 0 0 0 0 0 base_link laser_frame 100" required="true"/>
<!--- AMCL -->
<!-- Use this for Groovy: -->
<!-- include file="$(find amcl)/examples/amcl_diff.launch"/ -->
<!-- Use this for Hydro: -->
<include file="amcl.launch"/>
<!-- Navigation -->
<group unless="$(arg use_move_base)">
<node name="navigation" pkg="scout_navigation" type="navigator">
<param name="guidance_method" type="string" value="fmm"/>
</node>
</group>
<group if="$(arg use_move_base)">
<node name="scout_move_base_interface" pkg="scout_driver" type="scout_move_base_interface"/>
<include file="move_base.launch"/>
<node name="navigation" pkg="scout_navigation" type="navigator" output="screen">
<param name="guidance_method" type="string" value="move_base"/>
</node>
</group>
<!-- Speech synth -->
<node name="speech" pkg="speech" type="server"/>
<!-- Web console -->
<node name="webconsole" pkg="webconsole" type="server">
<!-- param name="map" type="string" value="$(arg map)"/ -->
<!-- remap from="scan" to="/kinect/scan"/ -->
</node>
<!-- GUI -->
<node name="gui" pkg="scout_gui" type="main.py">
<!-- hack to force GUI to open on head's display -->
<env name="DISPLAY" value=":0"/>
<!-- param name="map" type="string" value="$(arg map)"/ -->
</node>
</launch>
#! /usr/bin/python
import mapapp
mapapp.main()
# EOF
This diff is collapsed.
This diff is collapsed.
image: EPFL-sections.gif
resolution: 0.050000
origin: [0.000000, 0.000000, 0.000000]
negate: 0
occupied_thresh: 0.65
free_thresh: 0.196
zones:
corridor1: 9
corridor2: 11
corridor3: 15
corridor4: 7
labcentre: 6
labboard: 18
labdesk: 14
labdoor: 4
kitchenboard: 8
kitchencup: 3
kitchendoor: 5
officeali: 12
officejose: 13
officerodrigo: 2
image: EPFL-sections.pgm
resolution: 0.050000
origin: [0.000000, 0.000000, 0.000000]
negate: 0
occupied_thresh: 0.65
free_thresh: 0.196
zones:
corridor1: 9
corridor2: 11
corridor3: 15
corridor4: 7
labcentre: 6
labboard: 18
labdesk: 14
labdoor: 4
kitchenboard: 8
kitchencup: 3
kitchendoor: 5
officeali: 12
officejose: 13
officerodrigo: 2
This diff is collapsed.
image: EPFL-v02cr.pgm
resolution: 0.050000
origin: [0.000000, 0.000000, 0.000000]
negate: 0
occupied_thresh: 0.65
free_thresh: 0.196
This diff is collapsed.
image: EPFL-v02cr_nav.pgm
resolution: 0.050000
origin: [0.000000, 0.000000, 0.000000]
negate: 0
occupied_thresh: 0.65
free_thresh: 0.196
This diff is collapsed.
image: EPFL-v03cr.pgm
resolution: 0.050000
origin: [0.000000, 0.000000, 0.000000]
negate: 0
occupied_thresh: 0.65
free_thresh: 0.196
This diff is collapsed.
image: EPFL-v03cr_nav.pgm
resolution: 0.050000
origin: [0.000000, 0.000000, 0.000000]
negate: 0
occupied_thresh: 0.65
free_thresh: 0.196
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment