add docker image and modefiy readme
Signed-off-by: jiangfan wu <jiangfanwu@stu.xjtu.edu.cn>
This commit is contained in:
parent
6c0a589102
commit
f9cd3a52fc
|
|
@ -0,0 +1,57 @@
|
|||
# enviroment core
|
||||
|
||||
ARG OWNER=326737089@qq.com
|
||||
ARG ROOT_CONTAINER=$OWNER/${ROS_DISTRO}-enviroment-core
|
||||
|
||||
FROM ubuntu as intermediate
|
||||
|
||||
# install git
|
||||
RUN apt-get update
|
||||
RUN apt-get install -y git
|
||||
|
||||
# add credentials on build
|
||||
ARG SSH_PRIVATE_KEY
|
||||
RUN mkdir /root/.ssh/
|
||||
RUN echo "${SSH_PRIVATE_KEY}" > /root/.ssh/id_rsa
|
||||
RUN chmod 600 /root/.ssh/id_rsa
|
||||
|
||||
# Add git providers to known_hosts
|
||||
RUN touch /root/.ssh/known_hosts
|
||||
RUN ssh-keyscan github.com >> /root/.ssh/known_hosts
|
||||
|
||||
RUN git clone --branch master git@github.com:tuw-robotics/rosaria.git p3dx/src/rosaria
|
||||
RUN git clone --branch master git@github.com:tuw-robotics/tuw_p3dx.git p3dx/src/tuw_p3dx
|
||||
|
||||
FROM $ROOT_CONTAINER
|
||||
USER root
|
||||
|
||||
ENV PRJ_DIR=${MY_HOME}/projects/p3dx
|
||||
|
||||
RUN apt-get update && apt-get -y upgrade
|
||||
|
||||
# Install locale and set
|
||||
RUN apt-get install -y iputils-ping bash-completion
|
||||
|
||||
COPY --chown=${MY_USER}:${MY_USER} --from=intermediate /p3dx ${PRJ_DIR}
|
||||
COPY --chown=${MY_USER}:${MY_USER} --from=intermediate /root/.ssh ${MY_HOME}/.ssh
|
||||
|
||||
RUN /bin/bash -c '. /opt/ros/${ROS_DISTRO}/setup.bash; cd ${PRJ_DIR}/; rosdep update; rosdep install -i --from-path src --rosdistro noetic -y'
|
||||
# ros-${ROS_DISTRO}-hokuyo-node
|
||||
USER ${MY_USER}
|
||||
|
||||
|
||||
|
||||
RUN /bin/bash -c '. /opt/ros/${ROS_DISTRO}/setup.bash; cd ${PRJ_DIR}; catkin_make'
|
||||
RUN echo 'source ${PRJ_DIR}/devel/setup.bash' >> ~/.bashrc
|
||||
RUN echo 'roslaunch tuw_p3dx aria_twist.launch' >> ~/.bash_history
|
||||
# clean apt
|
||||
USER root
|
||||
RUN rm -rf ${MY_HOME}/.ros
|
||||
#RUN apt-get autoclean && apt-get autoremove && rm -rf /var/lib/apt/lists/*
|
||||
|
||||
USER ${MY_USER}
|
||||
WORKDIR ${PRJ_DIR}
|
||||
ENV HOME=${MY_HOME}
|
||||
COPY --chown=${MY_USER}:${MY_USER} ./cloud.sh /
|
||||
ENTRYPOINT ["/cloud.sh"]
|
||||
CMD [/bin/bash]
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
#!/bin/bash
|
||||
#script to run with a host network
|
||||
#export ROS_MASTER_URI=http://$(hostname --ip-address):11311
|
||||
#export ROS_HOSTNAME=$(hostname --ip-address)
|
||||
# setup ros environment
|
||||
source "/opt/ros/$ROS_DISTRO/setup.bash"
|
||||
source "${PRJ_DIR}/devel/setup.bash"
|
||||
roslaunch tuw_multi_robot_demo Cloud.launch room:=cave nr_of_robots:=3
|
||||
|
|
@ -1,195 +0,0 @@
|
|||
cmake_minimum_required(VERSION 2.8.3)
|
||||
project(tuw_multi_robot_demo)
|
||||
|
||||
## Compile as C++11, supported in ROS Kinetic and newer
|
||||
# add_compile_options(-std=c++11)
|
||||
|
||||
## Find catkin macros and libraries
|
||||
## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
|
||||
## is used, also find other catkin packages
|
||||
find_package(catkin REQUIRED)
|
||||
|
||||
## System dependencies are found with CMake's conventions
|
||||
# find_package(Boost REQUIRED COMPONENTS system)
|
||||
|
||||
|
||||
## Uncomment this if the package has a setup.py. This macro ensures
|
||||
## modules and global scripts declared therein get installed
|
||||
## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html
|
||||
# catkin_python_setup()
|
||||
|
||||
################################################
|
||||
## Declare ROS messages, services and actions ##
|
||||
################################################
|
||||
|
||||
## To declare and build messages, services or actions from within this
|
||||
## package, follow these steps:
|
||||
## * Let MSG_DEP_SET be the set of packages whose message types you use in
|
||||
## your messages/services/actions (e.g. std_msgs, actionlib_msgs, ...).
|
||||
## * In the file package.xml:
|
||||
## * add a build_depend tag for "message_generation"
|
||||
## * add a build_depend and a run_depend tag for each package in MSG_DEP_SET
|
||||
## * If MSG_DEP_SET isn't empty the following dependency has been pulled in
|
||||
## but can be declared for certainty nonetheless:
|
||||
## * add a run_depend tag for "message_runtime"
|
||||
## * In this file (CMakeLists.txt):
|
||||
## * add "message_generation" and every package in MSG_DEP_SET to
|
||||
## find_package(catkin REQUIRED COMPONENTS ...)
|
||||
## * add "message_runtime" and every package in MSG_DEP_SET to
|
||||
## catkin_package(CATKIN_DEPENDS ...)
|
||||
## * uncomment the add_*_files sections below as needed
|
||||
## and list every .msg/.srv/.action file to be processed
|
||||
## * uncomment the generate_messages entry below
|
||||
## * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...)
|
||||
|
||||
## Generate messages in the 'msg' folder
|
||||
# add_message_files(
|
||||
# FILES
|
||||
# Message1.msg
|
||||
# Message2.msg
|
||||
# )
|
||||
|
||||
## Generate services in the 'srv' folder
|
||||
# add_service_files(
|
||||
# FILES
|
||||
# Service1.srv
|
||||
# Service2.srv
|
||||
# )
|
||||
|
||||
## Generate actions in the 'action' folder
|
||||
# add_action_files(
|
||||
# FILES
|
||||
# Action1.action
|
||||
# Action2.action
|
||||
# )
|
||||
|
||||
## Generate added messages and services with any dependencies listed here
|
||||
# generate_messages(
|
||||
# DEPENDENCIES
|
||||
# std_msgs # Or other packages containing msgs
|
||||
# )
|
||||
|
||||
################################################
|
||||
## Declare ROS dynamic reconfigure parameters ##
|
||||
################################################
|
||||
|
||||
## To declare and build dynamic reconfigure parameters within this
|
||||
## package, follow these steps:
|
||||
## * In the file package.xml:
|
||||
## * add a build_depend and a run_depend tag for "dynamic_reconfigure"
|
||||
## * In this file (CMakeLists.txt):
|
||||
## * add "dynamic_reconfigure" to
|
||||
## find_package(catkin REQUIRED COMPONENTS ...)
|
||||
## * uncomment the "generate_dynamic_reconfigure_options" section below
|
||||
## and list every .cfg file to be processed
|
||||
|
||||
## Generate dynamic reconfigure parameters in the 'cfg' folder
|
||||
# generate_dynamic_reconfigure_options(
|
||||
# cfg/DynReconf1.cfg
|
||||
# cfg/DynReconf2.cfg
|
||||
# )
|
||||
|
||||
###################################
|
||||
## catkin specific configuration ##
|
||||
###################################
|
||||
## The catkin_package macro generates cmake config files for your package
|
||||
## Declare things to be passed to dependent projects
|
||||
## INCLUDE_DIRS: uncomment this if your package contains header files
|
||||
## LIBRARIES: libraries you create in this project that dependent projects also need
|
||||
## CATKIN_DEPENDS: catkin_packages dependent projects also need
|
||||
## DEPENDS: system dependencies of this project that dependent projects also need
|
||||
catkin_package(
|
||||
# INCLUDE_DIRS include
|
||||
# LIBRARIES tuw_multi_robot_demo
|
||||
# CATKIN_DEPENDS other_catkin_pkg
|
||||
# DEPENDS system_lib
|
||||
)
|
||||
|
||||
###########
|
||||
## Build ##
|
||||
###########
|
||||
|
||||
## Specify additional locations of header files
|
||||
## Your package locations should be listed before other locations
|
||||
include_directories(
|
||||
# include
|
||||
# ${catkin_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
## Declare a C++ library
|
||||
# add_library(${PROJECT_NAME}
|
||||
# src/${PROJECT_NAME}/tuw_multi_robot_demo.cpp
|
||||
# )
|
||||
|
||||
## Add cmake target dependencies of the library
|
||||
## as an example, code may need to be generated before libraries
|
||||
## either from message generation or dynamic reconfigure
|
||||
# add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
|
||||
|
||||
## Declare a C++ executable
|
||||
## With catkin_make all packages are built within a single CMake context
|
||||
## The recommended prefix ensures that target names across packages don't collide
|
||||
# add_executable(${PROJECT_NAME}_node src/tuw_multi_robot_demo_node.cpp)
|
||||
|
||||
## Rename C++ executable without prefix
|
||||
## The above recommended prefix causes long target names, the following renames the
|
||||
## target back to the shorter version for ease of user use
|
||||
## e.g. "rosrun someones_pkg node" instead of "rosrun someones_pkg someones_pkg_node"
|
||||
# set_target_properties(${PROJECT_NAME}_node PROPERTIES OUTPUT_NAME node PREFIX "")
|
||||
|
||||
## Add cmake target dependencies of the executable
|
||||
## same as for the library above
|
||||
# add_dependencies(${PROJECT_NAME}_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
|
||||
|
||||
## Specify libraries to link a library or executable target against
|
||||
# target_link_libraries(${PROJECT_NAME}_node
|
||||
# ${catkin_LIBRARIES}
|
||||
# )
|
||||
|
||||
#############
|
||||
## Install ##
|
||||
#############
|
||||
|
||||
# all install targets should use catkin DESTINATION variables
|
||||
# See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html
|
||||
|
||||
## Mark executable scripts (Python etc.) for installation
|
||||
## in contrast to setup.py, you can choose the destination
|
||||
# install(PROGRAMS
|
||||
# scripts/my_python_script
|
||||
# DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
|
||||
# )
|
||||
|
||||
## Mark executables and/or libraries for installation
|
||||
# install(TARGETS ${PROJECT_NAME} ${PROJECT_NAME}_node
|
||||
# ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
|
||||
# LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
|
||||
# RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
|
||||
# )
|
||||
|
||||
## Mark cpp header files for installation
|
||||
# install(DIRECTORY include/${PROJECT_NAME}/
|
||||
# DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
|
||||
# FILES_MATCHING PATTERN "*.h"
|
||||
# PATTERN ".svn" EXCLUDE
|
||||
# )
|
||||
|
||||
## Mark other files for installation (e.g. launch and bag files, etc.)
|
||||
# install(FILES
|
||||
# # myfile1
|
||||
# # myfile2
|
||||
# DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
|
||||
# )
|
||||
|
||||
#############
|
||||
## Testing ##
|
||||
#############
|
||||
|
||||
## Add gtest based cpp test target and link libraries
|
||||
# catkin_add_gtest(${PROJECT_NAME}-test test/test_tuw_multi_robot_demo.cpp)
|
||||
# if(TARGET ${PROJECT_NAME}-test)
|
||||
# target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME})
|
||||
# endif()
|
||||
|
||||
## Add folders to be run by python nosetests
|
||||
# catkin_add_nosetests(test)
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -1,6 +0,0 @@
|
|||
map_topic: "/map"
|
||||
map_inflation: 0.1
|
||||
segments_topic: "/segments"
|
||||
segment_length: 0.6
|
||||
opt_crossings: 0.2
|
||||
opt_end_segments: 0.5
|
||||
|
|
@ -1,6 +0,0 @@
|
|||
map_topic: "/map"
|
||||
map_smoothing: 5
|
||||
segments_topic: "/segments"
|
||||
segment_length: 0.7
|
||||
crossingOptimization: 0.2
|
||||
endSegmentOptimization: 0.4
|
||||
|
|
@ -1 +0,0 @@
|
|||
robot_names: ["robot_0","robot_1","robot_2"]
|
||||
Binary file not shown.
|
|
@ -1,6 +0,0 @@
|
|||
image: map.pgm
|
||||
resolution: 0.032
|
||||
origin: [-8.000000, -8.000000, 0.000000]
|
||||
negate: 0
|
||||
occupied_thresh: 0.65
|
||||
free_thresh: 0.196
|
||||
|
|
@ -1,167 +0,0 @@
|
|||
define hokuyolaser ranger
|
||||
(
|
||||
sensor(
|
||||
# laser-specific properties
|
||||
# factory settings for LMS200
|
||||
range [ 0.0 5.0 ]
|
||||
fov 270.0
|
||||
samples 270
|
||||
)
|
||||
model
|
||||
(
|
||||
# generic model properties
|
||||
size [ 0.07 0.07 0.05 ] # dimensions from LMS200 data sheet
|
||||
color "blue"
|
||||
obstacle_return 0
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
define floorplan model
|
||||
(
|
||||
# sombre, sensible, artistic
|
||||
color "gray30"
|
||||
|
||||
# most maps will need a bounding box
|
||||
boundary 1
|
||||
|
||||
gui_nose 0
|
||||
gui_grid 0
|
||||
|
||||
obstacle_return 1
|
||||
gui_outline 0
|
||||
gripper_return 0
|
||||
fiducial_return 0
|
||||
laser_return 1
|
||||
)
|
||||
|
||||
|
||||
define background model
|
||||
(
|
||||
# sombre, sensible, artistic
|
||||
color "red"
|
||||
|
||||
# most maps will need a bounding box
|
||||
boundary 1
|
||||
|
||||
gui_nose 0
|
||||
gui_grid 0
|
||||
|
||||
obstacle_return 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 [ 635.000 666.000 ] # in pixels
|
||||
scale 36.995 # pixels per meter
|
||||
center [ 0 0 ]
|
||||
rotate [ 0 0 ]
|
||||
|
||||
show_data 1 # 1=on 0=off
|
||||
)
|
||||
|
||||
# load an environment bitmap
|
||||
|
||||
floorplan
|
||||
(
|
||||
name "cave"
|
||||
bitmap "map.pgm"
|
||||
size [16.0 16.0 0]
|
||||
pose [ 0 0 0 0 ]
|
||||
)
|
||||
|
||||
define pioneer_base position
|
||||
(
|
||||
color "red" # Default color.
|
||||
drive "diff" # Differential steering model.
|
||||
gui_nose 0 # Draw a nose on the robot so we can see which way it points
|
||||
obstacle_return 0 # Can hit things.
|
||||
ranger_return 0.5 # reflects sonar beams
|
||||
blob_return 1 # Seen by blobfinders
|
||||
fiducial_return 1 # Seen as "1" fiducial finders
|
||||
|
||||
localization "gps"
|
||||
localization_origin [0 0 0 0] # Start odometry at (0, 0, 0).
|
||||
|
||||
# alternative odometric localization with simple error model
|
||||
# localization "odom" # Change to "gps" to have impossibly perfect, global odometry
|
||||
# odom_error [ 0.05 0.05 0.1 ] # Odometry error or slip in X, Y and Theta
|
||||
# (Uniform random distribution)
|
||||
|
||||
# four DOF kinematics limits
|
||||
# [ xmin xmax ymin ymax zmin zmax amin amax ]
|
||||
velocity_bounds [-1 1 0 0 0 0 -45.0 45.0 ]
|
||||
acceleration_bounds [-1.0 1.0 0 0 0 0 -45 45.0 ]
|
||||
)
|
||||
|
||||
define pioneer2dx_base_no_sonar pioneer_base
|
||||
(
|
||||
# actual size
|
||||
size [0.44 0.38 0.22] # sizes from MobileRobots' web site
|
||||
|
||||
# the pioneer's center of rotation is offset from its center of area
|
||||
origin [-0.04 0 0 0]
|
||||
|
||||
# draw a nose on the robot so we can see which way it points
|
||||
gui_nose 0
|
||||
|
||||
# estimated mass in KG
|
||||
mass 23.0
|
||||
)
|
||||
|
||||
# as above, but with front sonar only
|
||||
define pioneer2dx_no_sonar pioneer2dx_base_no_sonar
|
||||
(
|
||||
# simplified Body shape:
|
||||
block(
|
||||
points 8
|
||||
point[0] [-0.2 0.12]
|
||||
point[1] [-0.2 -0.12]
|
||||
point[2] [-0.12 -0.2555]
|
||||
point[3] [0.12 -0.2555]
|
||||
point[4] [0.2 -0.12]
|
||||
point[5] [0.2 0.12]
|
||||
point[6] [0.12 0.2555]
|
||||
point[7] [-0.12 0.2555]
|
||||
z [0 0.22]
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
pioneer2dx_no_sonar
|
||||
(
|
||||
# can refer to the robot by this name
|
||||
name "robot_0"
|
||||
color "red"
|
||||
pose [ -6 -6 0 45 ]
|
||||
hokuyolaser(pose [ 0.225 0.000 -0.15 0.000 ])
|
||||
)
|
||||
|
||||
pioneer2dx_no_sonar
|
||||
(
|
||||
# can refer to the robot by this name
|
||||
name "robot_1"
|
||||
color "blue"
|
||||
pose [ 0 -6 0 45 ]
|
||||
hokuyolaser(pose [ 0.225 0.000 -0.15 0.000 ])
|
||||
)
|
||||
|
||||
pioneer2dx_no_sonar
|
||||
(
|
||||
# can refer to the robot by this name
|
||||
name "robot_2"
|
||||
color "green"
|
||||
pose [ 6 6 0 45 ]
|
||||
hokuyolaser(pose [ 0.225 0.000 -0.15 0.000 ])
|
||||
)
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
use_segment_as_goal: true
|
||||
allow_endpoint_off_segments: true
|
||||
path_optimization_segment_no: 0
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
use_segment_as_goal: false
|
||||
allow_endpoint_off_segments: true
|
||||
path_optimization_segment_no: 1
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
use_segment_as_goal: true
|
||||
allow_endpoint_off_segments: true
|
||||
path_optimization_segment_no: 0
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
use_segment_as_goal: false
|
||||
allow_endpoint_off_segments: true
|
||||
path_optimization_segment_no: 1
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
robot_names: ["robot_0"]
|
||||
robot_radius: [0.35]
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
robot_names: ["r1"]
|
||||
robot_radius: [0.45]
|
||||
use_segment_as_goal: false
|
||||
allow_endpoint_off_segments: true
|
||||
path_optimization_segment_no: 1
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
robot_name: r0
|
||||
use_segment_as_goal: true
|
||||
allow_endpoint_off_segments: true
|
||||
path_optimization_segment_no: 0
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
robot_name: robot_0
|
||||
use_segment_as_goal: true
|
||||
allow_endpoint_off_segments: true
|
||||
path_optimization_segment_no: 0
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
use_segment_as_goal: false
|
||||
allow_endpoint_off_segments: true
|
||||
path_optimization_segment_no: 1
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
use_segment_as_goal: false
|
||||
allow_endpoint_off_segments: true
|
||||
path_optimization_segment_no: 1
|
||||
|
|
@ -1,160 +0,0 @@
|
|||
Panels:
|
||||
- Class: rviz/Displays
|
||||
Help Height: 78
|
||||
Name: Displays
|
||||
Property Tree Widget:
|
||||
Expanded:
|
||||
- /Global Options1
|
||||
- /Status1
|
||||
- /MultiRobotInfo1
|
||||
- /RobotGoalArray1
|
||||
Splitter Ratio: 0.5
|
||||
Tree Height: 549
|
||||
- Class: rviz/Selection
|
||||
Name: Selection
|
||||
- Class: rviz/Tool Properties
|
||||
Expanded:
|
||||
- /2D Pose Estimate1
|
||||
- /2D Nav Goal1
|
||||
- /Publish Point1
|
||||
- /Goal Selector1
|
||||
Name: Tool Properties
|
||||
Splitter Ratio: 0.5886790156364441
|
||||
- Class: rviz/Views
|
||||
Expanded:
|
||||
- /Current View1
|
||||
Name: Views
|
||||
Splitter Ratio: 0.5
|
||||
- Class: rviz/Time
|
||||
Experimental: false
|
||||
Name: Time
|
||||
SyncMode: 0
|
||||
SyncSource: ""
|
||||
Preferences:
|
||||
PromptSaveOnExit: true
|
||||
Visualization Manager:
|
||||
Class: ""
|
||||
Displays:
|
||||
- Alpha: 0.5
|
||||
Cell Size: 1
|
||||
Class: rviz/Grid
|
||||
Color: 160; 160; 164
|
||||
Enabled: true
|
||||
Line Style:
|
||||
Line Width: 0.029999999329447746
|
||||
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.699999988079071
|
||||
Class: rviz/Map
|
||||
Color Scheme: map
|
||||
Draw Behind: false
|
||||
Enabled: true
|
||||
Name: Map
|
||||
Topic: /map
|
||||
Unreliable: false
|
||||
Use Timestamp: false
|
||||
Value: true
|
||||
- Class: VoronoiGraph
|
||||
Enabled: true
|
||||
History Length: 1
|
||||
Name: VoronoiGraph
|
||||
Path Color: 50; 51; 204
|
||||
Path Points Scale: 0.10000000149011612
|
||||
Topic: /segments
|
||||
Unreliable: false
|
||||
Value: true
|
||||
- Class: MultiRobotInfo
|
||||
Color Pose: 204; 51; 0
|
||||
Enabled: false
|
||||
Keep Alive (s): 5
|
||||
Keep Measurements: 5
|
||||
Name: MultiRobotInfo
|
||||
Robots:
|
||||
{}
|
||||
Scale Pose: 1
|
||||
Topic: /robot_info
|
||||
Unreliable: false
|
||||
Value: false
|
||||
- Class: RobotGoalArray
|
||||
Color Pose: 78; 154; 6
|
||||
Enabled: true
|
||||
Name: RobotGoalArray
|
||||
Scale Pose: 1
|
||||
Topic: goals
|
||||
Unreliable: false
|
||||
Value: true
|
||||
Enabled: true
|
||||
Global Options:
|
||||
Background Color: 48; 48; 48
|
||||
Default Light: true
|
||||
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
|
||||
- Class: Goal Selector
|
||||
No. robtos: 3
|
||||
Robot Goals:
|
||||
{}
|
||||
Robot Names:
|
||||
Robot 0: robot_0
|
||||
Robot 1: robot_1
|
||||
Robot 2: robot_2
|
||||
Value: true
|
||||
Views:
|
||||
Current:
|
||||
Angle: 0
|
||||
Class: rviz/TopDownOrtho
|
||||
Enable Stereo Rendering:
|
||||
Stereo Eye Separation: 0.05999999865889549
|
||||
Stereo Focal Distance: 1
|
||||
Swap Stereo Eyes: false
|
||||
Value: false
|
||||
Invert Z Axis: false
|
||||
Name: Current View
|
||||
Near Clip Distance: 0.009999999776482582
|
||||
Scale: 14.808070182800293
|
||||
Target Frame: <Fixed Frame>
|
||||
Value: TopDownOrtho (rviz)
|
||||
X: 1.6745421886444092
|
||||
Y: 0.623544454574585
|
||||
Saved: ~
|
||||
Window Geometry:
|
||||
Displays:
|
||||
collapsed: false
|
||||
Height: 846
|
||||
Hide Left Dock: false
|
||||
Hide Right Dock: false
|
||||
QMainWindow State: 000000ff00000000fd000000040000000000000156000002b0fc0200000008fb0000001200530065006c0065006300740069006f006e00000001e10000009b0000005c00fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c006100790073010000003d000002b0000000c900fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261000000010000010f000002b0fc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a00560069006500770073000000003d000002b0000000a400fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e10000019700000003000004b00000003efc0100000002fb0000000800540069006d00650100000000000004b00000025600fffffffb0000000800540069006d0065010000000000000450000000000000000000000354000002b000000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000
|
||||
Selection:
|
||||
collapsed: false
|
||||
Time:
|
||||
collapsed: false
|
||||
Tool Properties:
|
||||
collapsed: false
|
||||
Views:
|
||||
collapsed: false
|
||||
Width: 1200
|
||||
X: 601
|
||||
Y: 131
|
||||
|
|
@ -1,23 +0,0 @@
|
|||
<?xml version="1.0"?>
|
||||
|
||||
<launch>
|
||||
|
||||
|
||||
<arg name="room" default="cave" />
|
||||
<arg name="file" default="goals000.txt" />
|
||||
<arg name="run_once" default="true" />
|
||||
<arg name="loop_rate" default="1.0" />
|
||||
|
||||
<!-- Use this parameters if you like to run over a patch of goal file starting with goals000.txt to goals999.txt
|
||||
<arg name="file" default="goals" />
|
||||
<arg name="run_once" default="false" />
|
||||
<arg name="loop_rate" default="1.0" />
|
||||
-->
|
||||
|
||||
<!-- This node only reads the dxf and stores it a graph in a folder structrue usabe by the graph_generator -->
|
||||
<node pkg="tuw_multi_robot_goal_generator" type="goals_server" name="goals_server">
|
||||
<param name="file_name" value="$(find tuw_multi_robot_demo)/cfg/goals/$(arg room)/$(arg file)" />
|
||||
<param name="run_once" value="$(arg run_once)" />
|
||||
<param name="loop_rate" value="$(arg loop_rate)" />
|
||||
</node>
|
||||
</launch>
|
||||
|
|
@ -1,13 +0,0 @@
|
|||
<?xml version="1.0"?>
|
||||
|
||||
<launch>
|
||||
<!-- a map server must publish the map of the room <gridmal> first -->
|
||||
<arg name="cfg" default="cave" />
|
||||
<arg name="custom_graph_path" default="" /> <!-- used only on dxf generated graphs with the full path name such as /home/.../cache/graph -->
|
||||
|
||||
<node pkg="tuw_voronoi_graph" type="tuw_voronoi_graph_node" name="graph_generator" output="screen">
|
||||
<param name="graph_cache_path" value="$(find tuw_multi_robot_demo)/cfg/graph/$(arg cfg)/cache/" />
|
||||
<param name="custom_graph_path" value="$(arg custom_graph_path)" />
|
||||
<rosparam command="load" file="$(find tuw_multi_robot_demo)/cfg/graph/$(arg cfg)/graph.yaml"/>
|
||||
</node>
|
||||
</launch>
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
<?xml version="1.0"?>
|
||||
|
||||
<launch>
|
||||
<arg name="room" default="cave" />
|
||||
|
||||
<node pkg="map_server" type="map_server" name="map_server" args="$(find tuw_multi_robot_demo)/cfg/maps/$(arg room)/map.yaml"/>
|
||||
</launch>
|
||||
|
|
@ -1,32 +0,0 @@
|
|||
<?xml version="1.0"?>
|
||||
|
||||
<launch>
|
||||
<arg name="cfg" default="default" />
|
||||
<arg name="use_gdb" default="false" />
|
||||
<arg name="priority_rescheduling" default="true" />
|
||||
<arg name="speed_rescheduling" default="true" />
|
||||
<arg name="collision_resolver" default="2" />
|
||||
<arg name="publish_routing_table" default="true" />
|
||||
|
||||
|
||||
<group if="$(arg use_gdb)">
|
||||
<node launch-prefix="gdb -ex run --args" pkg="tuw_multi_robot_router" type="tuw_multi_robot_router_node" name="multi_robot_router" output="screen">
|
||||
<param name="priority_rescheduling" value="$(arg priority_rescheduling)" />
|
||||
<param name="speed_rescheduling" value="$(arg speed_rescheduling)" />
|
||||
<param name="collision_resolver" value="$(arg collision_resolver)" />
|
||||
<param name="publish_routing_table" value="$(arg publish_routing_table)" />
|
||||
<rosparam command="load" file="$(find tuw_multi_robot_demo)/cfg/multi_robot_planner/$(arg cfg)/multi_robot.yaml" />
|
||||
</node>
|
||||
</group>
|
||||
<group unless="$(arg use_gdb)">
|
||||
<node pkg="tuw_multi_robot_router" type="tuw_multi_robot_router_node" name="multi_robot_router" output="screen">
|
||||
<param name="priority_rescheduling" value="$(arg priority_rescheduling)" />
|
||||
<param name="speed_rescheduling" value="$(arg speed_rescheduling)" />
|
||||
<param name="collision_resolver" value="$(arg collision_resolver)" />
|
||||
<param name="publish_routing_table" value="$(arg publish_routing_table)" />
|
||||
<rosparam command="load" file="$(find tuw_multi_robot_demo)/cfg/multi_robot_planner/$(arg cfg)/multi_robot.yaml" />
|
||||
</node>
|
||||
</group>
|
||||
</launch>
|
||||
|
||||
|
||||
|
|
@ -1,6 +0,0 @@
|
|||
<?xml version="1.0"?>
|
||||
<launch>
|
||||
<arg name="cfg" default="default"/>
|
||||
<node pkg="rviz" type="rviz" name="rviz" args="-d $(find tuw_multi_robot_demo)/cfg/rviz/$(arg cfg).rviz" output="screen"/>
|
||||
<!--<node pkg="rviz" type="rviz" name="rviz" output="screen"/> -->
|
||||
</launch>
|
||||
|
|
@ -1,6 +0,0 @@
|
|||
<?xml version="1.0"?>
|
||||
|
||||
<launch>
|
||||
<arg name="room" default="cave"/>
|
||||
<node pkg="stage_ros" type="stageros" name="stageros" args="$(find tuw_multi_robot_demo)/cfg/maps/$(arg room)/stage.world" output="screen"/>
|
||||
</launch>
|
||||
|
|
@ -1,37 +0,0 @@
|
|||
header:
|
||||
seq: 0
|
||||
stamp:
|
||||
secs: 0
|
||||
nsecs: 0
|
||||
frame_id: ''
|
||||
poses:
|
||||
- id: ''
|
||||
position:
|
||||
x: -7.0
|
||||
y: 1.0
|
||||
z: 0.0
|
||||
orientation:
|
||||
x: 0.0
|
||||
y: 0.0
|
||||
z: 0.0
|
||||
w: 0.0
|
||||
- id: ''
|
||||
position:
|
||||
x: -4.0
|
||||
y: -4.0
|
||||
z: 0.0
|
||||
orientation:
|
||||
x: 0.0
|
||||
y: 0.0
|
||||
z: 0.0
|
||||
w: 0.0
|
||||
- id: ''
|
||||
position:
|
||||
x: 6.0
|
||||
y: -3.0
|
||||
z: 0.0
|
||||
orientation:
|
||||
x: 0.0
|
||||
y: 0.0
|
||||
z: 0.0
|
||||
w: 0.0
|
||||
|
|
@ -1,11 +0,0 @@
|
|||
<launch>
|
||||
|
||||
<arg name="robot_name" default="p3dx" />
|
||||
<arg name="cfg" default="default" />
|
||||
|
||||
<node pkg="tuw_voronoi_map" type="tuw_voronoi_map_generator" name="tuw_segment_multi_robot_planner" output="screen">
|
||||
<param name="map_name" value="voronoi_map"/>
|
||||
</node>
|
||||
|
||||
|
||||
</launch>
|
||||
|
|
@ -1,64 +0,0 @@
|
|||
<?xml version="1.0"?>
|
||||
<package>
|
||||
<name>tuw_multi_robot_demo</name>
|
||||
<version>0.0.0</version>
|
||||
<description>Contains launch and config files to run a sample demo. </description>
|
||||
|
||||
<!-- One maintainer tag required, multiple allowed, one person per tag -->
|
||||
<!-- Example: -->
|
||||
<!-- <maintainer email="jane.doe@example.com">Jane Doe</maintainer> -->
|
||||
<maintainer email="benjamin.binder@tuwien.ac.at">Benjamin Binder</maintainer>
|
||||
<maintainer email="markus.bader@tuwien.ac.at">Markus Bader</maintainer>
|
||||
<maintainer email="florian.beck@tuwien.ac.at">Florian Beck</maintainer>
|
||||
|
||||
|
||||
<!-- One license tag required, multiple allowed, one license per tag -->
|
||||
<!-- Commonly used license strings: -->
|
||||
<!-- BSD, MIT, Boost Software License, GPLv2, GPLv3, LGPLv2.1, LGPLv3 -->
|
||||
<license>BSD</license>
|
||||
|
||||
|
||||
<!-- Url tags are optional, but multiple are allowed, one per tag -->
|
||||
<!-- Optional attribute type can be: website, bugtracker, or repository -->
|
||||
<!-- Example: -->
|
||||
<!-- <url type="website">http://wiki.ros.org/tuw_multi_robot_demo</url> -->
|
||||
|
||||
|
||||
<!-- Author tags are optional, multiple are allowed, one per tag -->
|
||||
<!-- Authors do not have to be maintainers, but could be -->
|
||||
<!-- Example: -->
|
||||
<!-- <author email="jane.doe@example.com">Jane Doe</author> -->
|
||||
<author email="benjamin.binder@tuwien.ac.at">Benjamin Binder</author>
|
||||
|
||||
|
||||
<!-- The *depend tags are used to specify dependencies -->
|
||||
<!-- Dependencies can be catkin packages or system dependencies -->
|
||||
<!-- Examples: -->
|
||||
<!-- Use depend as a shortcut for packages that are both build and exec dependencies -->
|
||||
<!-- <depend>roscpp</depend> -->
|
||||
<!-- Note that this is equivalent to the following: -->
|
||||
<!-- <build_depend>roscpp</build_depend> -->
|
||||
<!-- <exec_depend>roscpp</exec_depend> -->
|
||||
<!-- Use build_depend for packages you need at compile time: -->
|
||||
<!-- <build_depend>message_generation</build_depend> -->
|
||||
<!-- Use build_export_depend for packages you need in order to build against this package: -->
|
||||
<!-- <build_export_depend>message_generation</build_export_depend> -->
|
||||
<!-- Use buildtool_depend for build tool packages: -->
|
||||
<!-- <buildtool_depend>catkin</buildtool_depend> -->
|
||||
<!-- Use exec_depend for packages you need at runtime: -->
|
||||
<!-- <exec_depend>message_runtime</exec_depend> -->
|
||||
<!-- Use test_depend for packages you need only for testing: -->
|
||||
<!-- <test_depend>gtest</test_depend> -->
|
||||
<!-- Use doc_depend for packages you need only for building documentation: -->
|
||||
<!-- <doc_depend>doxygen</doc_depend> -->
|
||||
<buildtool_depend>catkin</buildtool_depend>
|
||||
<run_depend>map_server</run_depend>
|
||||
<run_depend>stage_ros</run_depend>
|
||||
|
||||
|
||||
<!-- The export tag contains other, unspecified, tags -->
|
||||
<export>
|
||||
<!-- Other tools can request additional information be placed here -->
|
||||
|
||||
</export>
|
||||
</package>
|
||||
|
|
@ -1,203 +0,0 @@
|
|||
cmake_minimum_required(VERSION 2.8.3)
|
||||
project(tuw_multi_robot_goal_generator)
|
||||
|
||||
## Compile as C++11, supported in ROS Kinetic and newer
|
||||
# add_compile_options(-std=c++11)
|
||||
add_compile_options(-std=c++17)
|
||||
|
||||
## Find catkin macros and libraries
|
||||
## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
|
||||
## is used, also find other catkin packages
|
||||
find_package(catkin REQUIRED COMPONENTS
|
||||
nav_msgs
|
||||
roscpp
|
||||
tuw_geometry
|
||||
tuw_multi_robot_msgs
|
||||
)
|
||||
|
||||
## System dependencies are found with CMake's conventions
|
||||
find_package(Boost REQUIRED COMPONENTS system)
|
||||
|
||||
|
||||
## Uncomment this if the package has a setup.py. This macro ensures
|
||||
## modules and global scripts declared therein get installed
|
||||
## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html
|
||||
# catkin_python_setup()
|
||||
|
||||
################################################
|
||||
## Declare ROS messages, services and actions ##
|
||||
################################################
|
||||
|
||||
## To declare and build messages, services or actions from within this
|
||||
## package, follow these steps:
|
||||
## * Let MSG_DEP_SET be the set of packages whose message types you use in
|
||||
## your messages/services/actions (e.g. std_msgs, actionlib_msgs, ...).
|
||||
## * In the file package.xml:
|
||||
## * add a build_depend tag for "message_generation"
|
||||
## * add a build_depend and a exec_depend tag for each package in MSG_DEP_SET
|
||||
## * If MSG_DEP_SET isn't empty the following dependency has been pulled in
|
||||
## but can be declared for certainty nonetheless:
|
||||
## * add a exec_depend tag for "message_runtime"
|
||||
## * In this file (CMakeLists.txt):
|
||||
## * add "message_generation" and every package in MSG_DEP_SET to
|
||||
## find_package(catkin REQUIRED COMPONENTS ...)
|
||||
## * add "message_runtime" and every package in MSG_DEP_SET to
|
||||
## catkin_package(CATKIN_DEPENDS ...)
|
||||
## * uncomment the add_*_files sections below as needed
|
||||
## and list every .msg/.srv/.action file to be processed
|
||||
## * uncomment the generate_messages entry below
|
||||
## * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...)
|
||||
|
||||
## Generate messages in the 'msg' folder
|
||||
# add_message_files(
|
||||
# FILES
|
||||
# Message1.msg
|
||||
# Message2.msg
|
||||
# )
|
||||
|
||||
## Generate services in the 'srv' folder
|
||||
# add_service_files(
|
||||
# FILES
|
||||
# Service1.srv
|
||||
# Service2.srv
|
||||
# )
|
||||
|
||||
## Generate actions in the 'action' folder
|
||||
# add_action_files(
|
||||
# FILES
|
||||
# Action1.action
|
||||
# Action2.action
|
||||
# )
|
||||
|
||||
## Generate added messages and services with any dependencies listed here
|
||||
# generate_messages(
|
||||
# DEPENDENCIES
|
||||
# nav_msgs# tuw_multi_robot_msgs
|
||||
# )
|
||||
|
||||
################################################
|
||||
## Declare ROS dynamic reconfigure parameters ##
|
||||
################################################
|
||||
|
||||
## To declare and build dynamic reconfigure parameters within this
|
||||
## package, follow these steps:
|
||||
## * In the file package.xml:
|
||||
## * add a build_depend and a exec_depend tag for "dynamic_reconfigure"
|
||||
## * In this file (CMakeLists.txt):
|
||||
## * add "dynamic_reconfigure" to
|
||||
## find_package(catkin REQUIRED COMPONENTS ...)
|
||||
## * uncomment the "generate_dynamic_reconfigure_options" section below
|
||||
## and list every .cfg file to be processed
|
||||
|
||||
## Generate dynamic reconfigure parameters in the 'cfg' folder
|
||||
# generate_dynamic_reconfigure_options(
|
||||
# cfg/DynReconf1.cfg
|
||||
# cfg/DynReconf2.cfg
|
||||
# )
|
||||
|
||||
###################################
|
||||
## catkin specific configuration ##
|
||||
###################################
|
||||
## The catkin_package macro generates cmake config files for your package
|
||||
## Declare things to be passed to dependent projects
|
||||
## INCLUDE_DIRS: uncomment this if your package contains header files
|
||||
## LIBRARIES: libraries you create in this project that dependent projects also need
|
||||
## CATKIN_DEPENDS: catkin_packages dependent projects also need
|
||||
## DEPENDS: system dependencies of this project that dependent projects also need
|
||||
catkin_package(
|
||||
INCLUDE_DIRS include
|
||||
LIBRARIES tuw_multi_robot_goal_generator
|
||||
CATKIN_DEPENDS nav_msgs roscpp tuw_geometry tuw_multi_robot_msgs
|
||||
# DEPENDS system_lib
|
||||
)
|
||||
|
||||
###########
|
||||
## Build ##
|
||||
###########
|
||||
|
||||
## Specify additional locations of header files
|
||||
## Your package locations should be listed before other locations
|
||||
include_directories(
|
||||
include
|
||||
${catkin_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
## Declare a C++ library
|
||||
# add_library(${PROJECT_NAME}
|
||||
# src/${PROJECT_NAME}/tuw_multi_robot_goal_generator.cpp
|
||||
# )
|
||||
|
||||
## Add cmake target dependencies of the library
|
||||
## as an example, code may need to be generated before libraries
|
||||
## either from message generation or dynamic reconfigure
|
||||
# add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
|
||||
|
||||
## Declare a C++ executable
|
||||
## With catkin_make all packages are built within a single CMake context
|
||||
## The recommended prefix ensures that target names across packages don't collide
|
||||
add_executable(goals_random src/multi_robot_goal_generator_node.cpp)
|
||||
add_executable(goals_saver src/multi_robot_goal_saver_node.cpp src/multi_robot_goal_handler.cpp)
|
||||
add_executable(goals_server src/multi_robot_goal_server_node.cpp src/multi_robot_goal_handler.cpp)
|
||||
|
||||
## Rename C++ executable without prefix
|
||||
## The above recommended prefix causes long target names, the following renames the
|
||||
## target back to the shorter version for ease of user use
|
||||
## e.g. "rosrun someones_pkg node" instead of "rosrun someones_pkg someones_pkg_node"
|
||||
# set_target_properties(${PROJECT_NAME}_node PROPERTIES OUTPUT_NAME node PREFIX "")
|
||||
|
||||
## Add cmake target dependencies of the executable
|
||||
## same as for the library above
|
||||
# add_dependencies(${PROJECT_NAME}_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
|
||||
|
||||
## Specify libraries to link a library or executable target against
|
||||
target_link_libraries(goals_random ${catkin_LIBRARIES} )
|
||||
target_link_libraries(goals_saver ${catkin_LIBRARIES} )
|
||||
target_link_libraries(goals_server ${catkin_LIBRARIES} )
|
||||
|
||||
#############
|
||||
## Install ##
|
||||
#############
|
||||
|
||||
# all install targets should use catkin DESTINATION variables
|
||||
# See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html
|
||||
|
||||
## Mark executable scripts (Python etc.) for installation
|
||||
## in contrast to setup.py, you can choose the destination
|
||||
# install(PROGRAMS
|
||||
# scripts/my_python_script
|
||||
# DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
|
||||
# )
|
||||
|
||||
## Mark executables and/or libraries for installation
|
||||
# install(TARGETS ${PROJECT_NAME} ${PROJECT_NAME}_node
|
||||
# ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
|
||||
# LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
|
||||
# RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
|
||||
# )
|
||||
|
||||
## Mark cpp header files for installation
|
||||
# install(DIRECTORY include/${PROJECT_NAME}/
|
||||
# DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
|
||||
# FILES_MATCHING PATTERN "*.h"
|
||||
# PATTERN ".svn" EXCLUDE
|
||||
# )
|
||||
|
||||
## Mark other files for installation (e.g. launch and bag files, etc.)
|
||||
# install(FILES
|
||||
# # myfile1
|
||||
# # myfile2
|
||||
# DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
|
||||
# )
|
||||
|
||||
#############
|
||||
## Testing ##
|
||||
#############
|
||||
|
||||
## Add gtest based cpp test target and link libraries
|
||||
# catkin_add_gtest(${PROJECT_NAME}-test test/test_tuw_multi_robot_goal_generator.cpp)
|
||||
# if(TARGET ${PROJECT_NAME}-test)
|
||||
# target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME})
|
||||
# endif()
|
||||
|
||||
## Add folders to be run by python nosetests
|
||||
# catkin_add_nosetests(test)
|
||||
|
|
@ -1,41 +0,0 @@
|
|||
#ifndef TUW_RANDOM_GOAL_GENERATOR_NODE_H
|
||||
#define TUW_RANDOM_GOAL_GENERATOR_NODE_H
|
||||
|
||||
#include <ros/ros.h>
|
||||
#include "nav_msgs/OccupancyGrid.h"
|
||||
#include "tuw_multi_robot_msgs/RobotGoalsArray.h"
|
||||
#include "tuw_geometry/grid_map.h"
|
||||
|
||||
/**
|
||||
* class to cover the ros communication
|
||||
**/
|
||||
class RadomGoalGeneratorNode {
|
||||
public:
|
||||
RadomGoalGeneratorNode ( ros::NodeHandle & n ); /// Constructor
|
||||
void publish (); /// publishes the motion commands
|
||||
void callback(const nav_msgs::OccupancyGrid::ConstPtr& msg);
|
||||
private:
|
||||
ros::NodeHandle n_;
|
||||
ros::NodeHandle n_param_;
|
||||
ros::Subscriber sub_map_;
|
||||
ros::Publisher pub_goals_;
|
||||
ros::Publisher pub_map_goals_;
|
||||
tuw::GridMap<int8_t> map_;
|
||||
tuw::GridMap<int8_t> map_goals_;
|
||||
int max_resample_; /// retries/max_resample steps to find a free spot for a goal [m]
|
||||
int nr_of_available_robots_; /// parameter count
|
||||
double distance_boundary_; /// parameter [m]
|
||||
double distance_between_robots_; /// parameter [m]
|
||||
double distance_to_map_border_; /// parameter [m]
|
||||
std::string robot_name_prefix_; /// parameter
|
||||
std::string frame_id_; /// parameter
|
||||
tuw_multi_robot_msgs::RobotGoalsArray robot_goals_array_;
|
||||
nav_msgs::OccupancyGrid msg_map_goals_;
|
||||
nav_msgs::OccupancyGrid::ConstPtr msg_map_;
|
||||
|
||||
void updateNrOfRobots(size_t nr_of_robots);
|
||||
|
||||
};
|
||||
|
||||
#endif // TUW_RANDOM_GOAL_GENERATOR_NODE_H
|
||||
|
||||
|
|
@ -1,35 +0,0 @@
|
|||
#ifndef TUW_MULTI_ROBOT_GOAL_HANDLER
|
||||
#define TUW_MULTI_ROBOT_GOAL_HANDLER
|
||||
|
||||
#include <ros/ros.h>
|
||||
#include "tuw_multi_robot_msgs/RobotGoalsArray.h"
|
||||
|
||||
/**
|
||||
* class to cover the ros communication
|
||||
**/
|
||||
class GoalHandlerNode {
|
||||
public:
|
||||
enum Mode {
|
||||
READ = 0,
|
||||
WRITE = 1
|
||||
};
|
||||
|
||||
GoalHandlerNode ( ros::NodeHandle & n, Mode mode );
|
||||
void callback ( const tuw_multi_robot_msgs::RobotGoalsArray& msg );
|
||||
void publish ();
|
||||
private:
|
||||
ros::NodeHandle n_;
|
||||
ros::NodeHandle n_param_;
|
||||
ros::Subscriber sub_goals_;
|
||||
double loop_rate_; /// paramter
|
||||
bool time_now_; /// parameter
|
||||
bool run_once_; /// parameter
|
||||
std::string file_name_; /// parameter
|
||||
ros::Publisher pub_goals_;
|
||||
tuw_multi_robot_msgs::RobotGoalsArray msg_;
|
||||
int counter_;
|
||||
|
||||
void publishGoal ( );
|
||||
|
||||
};
|
||||
#endif // TUW_MULTI_ROBOT_GOAL_HANDLER
|
||||
|
|
@ -1,75 +0,0 @@
|
|||
<?xml version="1.0"?>
|
||||
<package format="2">
|
||||
<name>tuw_multi_robot_goal_generator</name>
|
||||
<version>0.0.0</version>
|
||||
<description>The tuw_multi_robot_goal_generator package was designed to generate, store, and read goal lists for the tuw_multi_robot_router.
|
||||
The goal_saver is able to store publish goal msgs of type tuw_multi_robot_msgs::RobotGoalsArray in a human readable form.
|
||||
The goal_server is able to read and publish this msgs and to read patches of saved goals for testing.
|
||||
The goals_random node subscribes to the occupancy grid and is able to auto generate valid goals for testing.
|
||||
</description>
|
||||
|
||||
<!-- One maintainer tag required, multiple allowed, one person per tag -->
|
||||
<!-- Example: -->
|
||||
<!-- <maintainer email="jane.doe@example.com">Jane Doe</maintainer> -->
|
||||
<maintainer email="markus.bader@tuwien.ac.at">Markus Bader</maintainer>
|
||||
|
||||
|
||||
<!-- One license tag required, multiple allowed, one license per tag -->
|
||||
<!-- Commonly used license strings: -->
|
||||
<!-- BSD, MIT, Boost Software License, GPLv2, GPLv3, LGPLv2.1, LGPLv3 -->
|
||||
<license>BSD</license>
|
||||
|
||||
|
||||
<!-- Url tags are optional, but multiple are allowed, one per tag -->
|
||||
<!-- Optional attribute type can be: website, bugtracker, or repository -->
|
||||
<!-- Example: -->
|
||||
<!-- <url type="website">http://wiki.ros.org/tuw_multi_robot_goal_generator</url> -->
|
||||
|
||||
|
||||
<!-- Author tags are optional, multiple are allowed, one per tag -->
|
||||
<!-- Authors do not have to be maintainers, but could be -->
|
||||
<!-- Example: -->
|
||||
<author email="markus.bader@tuwien.ac.at">Markus Bader</author>
|
||||
|
||||
|
||||
<!-- The *depend tags are used to specify dependencies -->
|
||||
<!-- Dependencies can be catkin packages or system dependencies -->
|
||||
<!-- Examples: -->
|
||||
<!-- Use depend as a shortcut for packages that are both build and exec dependencies -->
|
||||
<!-- <depend>roscpp</depend> -->
|
||||
<!-- Note that this is equivalent to the following: -->
|
||||
<!-- <build_depend>roscpp</build_depend> -->
|
||||
<!-- <exec_depend>roscpp</exec_depend> -->
|
||||
<!-- Use build_depend for packages you need at compile time: -->
|
||||
<!-- <build_depend>message_generation</build_depend> -->
|
||||
<!-- Use build_export_depend for packages you need in order to build against this package: -->
|
||||
<!-- <build_export_depend>message_generation</build_export_depend> -->
|
||||
<!-- Use buildtool_depend for build tool packages: -->
|
||||
<!-- <buildtool_depend>catkin</buildtool_depend> -->
|
||||
<!-- Use exec_depend for packages you need at runtime: -->
|
||||
<!-- <exec_depend>message_runtime</exec_depend> -->
|
||||
<!-- Use test_depend for packages you need only for testing: -->
|
||||
<!-- <test_depend>gtest</test_depend> -->
|
||||
<!-- Use doc_depend for packages you need only for building documentation: -->
|
||||
<!-- <doc_depend>doxygen</doc_depend> -->
|
||||
<buildtool_depend>catkin</buildtool_depend>
|
||||
<build_depend>nav_msgs</build_depend>
|
||||
<build_depend>roscpp</build_depend>
|
||||
<build_depend>tuw_geometry</build_depend>
|
||||
<build_depend>tuw_multi_robot_msgs</build_depend>
|
||||
<build_export_depend>nav_msgs</build_export_depend>
|
||||
<build_export_depend>roscpp</build_export_depend>
|
||||
<build_export_depend>tuw_geometry</build_export_depend>
|
||||
<build_export_depend>tuw_multi_robot_msgs</build_export_depend>
|
||||
<exec_depend>nav_msgs</exec_depend>
|
||||
<exec_depend>roscpp</exec_depend>
|
||||
<exec_depend>tuw_geometry</exec_depend>
|
||||
<exec_depend>tuw_multi_robot_msgs</exec_depend>
|
||||
|
||||
|
||||
<!-- The export tag contains other, unspecified, tags -->
|
||||
<export>
|
||||
<!-- Other tools can request additional information be placed here -->
|
||||
|
||||
</export>
|
||||
</package>
|
||||
|
|
@ -1,136 +0,0 @@
|
|||
#include "ros/ros.h"
|
||||
#include <random>
|
||||
#include "tuw_geometry/utils.h"
|
||||
#include "tuw_multi_robot_goal_generator/multi_robot_goal_generator.h"
|
||||
#include <algorithm>
|
||||
|
||||
|
||||
|
||||
RadomGoalGeneratorNode::RadomGoalGeneratorNode ( ros::NodeHandle & n )
|
||||
: n_ ( n ),
|
||||
n_param_ ( "~" ) {
|
||||
int nr_of_robots = 0;
|
||||
if ( ! n_param_.getParam ( "nr_of_robots", nr_of_robots ) ) {
|
||||
ROS_ERROR ( "nr_of_robots is not set" );
|
||||
return;
|
||||
}
|
||||
|
||||
n_param_.param<int> ( "nr_of_available_robots", nr_of_available_robots_, -1 );
|
||||
n_param_.param<std::string> ( "frame_id", frame_id_, "map" );
|
||||
n_param_.param<std::string> ( "robot_name_prefix", robot_name_prefix_, "robot_" );
|
||||
n_param_.param<double> ( "distance_boundary", distance_boundary_, 0.5 );
|
||||
n_param_.param<double> ( "distance_between_robots", distance_between_robots_, 2. );
|
||||
n_param_.param<double> ( "distance_to_map_border", distance_to_map_border_, 0.2 );
|
||||
n_param_.param<int> ( "max_resample", max_resample_, 1000 );
|
||||
|
||||
updateNrOfRobots ( nr_of_robots );
|
||||
pub_goals_ = n.advertise<tuw_multi_robot_msgs::RobotGoalsArray> ( "goals", 1, true );
|
||||
pub_map_goals_ = n.advertise<nav_msgs::OccupancyGrid> ( "valid_goal_locations", 1, true );
|
||||
sub_map_ = n.subscribe ( "map", 1, &RadomGoalGeneratorNode::callback, this );
|
||||
}
|
||||
|
||||
void RadomGoalGeneratorNode::updateNrOfRobots ( size_t nr_of_robots ) {
|
||||
ROS_INFO ( "nr_of_robots: %i", ( int ) nr_of_robots );
|
||||
ROS_INFO ( "using prefix: %s", robot_name_prefix_.c_str() );
|
||||
robot_goals_array_.robots.clear();
|
||||
if((nr_of_available_robots_ > 0) && (nr_of_available_robots_ < nr_of_robots)){
|
||||
ROS_ERROR( "nr_of_robots must be equal or less then nr_of_available_robots" );
|
||||
return;
|
||||
}
|
||||
robot_goals_array_.robots.resize ( nr_of_robots );
|
||||
if(nr_of_available_robots_ < 0){
|
||||
ROS_INFO( "nr_of_available_robots < 0 and therefore ignored" );
|
||||
for ( size_t i = 0; i < nr_of_robots; i++ ) {
|
||||
tuw_multi_robot_msgs::RobotGoals &robot_check_points = robot_goals_array_.robots[i];
|
||||
robot_check_points.robot_name = robot_name_prefix_ + std::to_string ( i );
|
||||
}
|
||||
} else {
|
||||
std::set<std::string> available_robots;
|
||||
for ( size_t i = 0; i < nr_of_available_robots_; i++ ) {
|
||||
available_robots.insert(robot_name_prefix_ + std::to_string ( i ));
|
||||
}
|
||||
for ( size_t i = 0; i < nr_of_robots; i++ ) {
|
||||
tuw_multi_robot_msgs::RobotGoals &robot_check_points = robot_goals_array_.robots[i];
|
||||
int offset = rand() % available_robots.size();
|
||||
std::set<std::string>::iterator it = available_robots.begin();
|
||||
std::advance(it,offset);
|
||||
robot_check_points.robot_name = *it;
|
||||
available_robots.erase(it);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void RadomGoalGeneratorNode::callback ( const nav_msgs::OccupancyGrid::ConstPtr& msg ) {
|
||||
msg_map_ = msg;
|
||||
publish () ;
|
||||
ros::shutdown();
|
||||
}
|
||||
|
||||
void RadomGoalGeneratorNode::publish () {
|
||||
map_.init ( msg_map_->info, msg_map_->data );
|
||||
msg_map_goals_.header = msg_map_->header;
|
||||
msg_map_goals_.info = msg_map_->info;
|
||||
msg_map_goals_.data.resize ( msg_map_->data.size() );
|
||||
map_goals_.init ( msg_map_goals_.info, msg_map_goals_.data );
|
||||
std::copy ( msg_map_->data.begin(), msg_map_->data.end(), msg_map_goals_.data.begin() );
|
||||
map_goals_.erode ( distance_boundary_ );
|
||||
//std::cout << map_.infoHeader() << std::endl;
|
||||
//std::cout << tuw::format(map_.Mw2m()) << std::endl;
|
||||
//std::cout << tuw::format(map_.Mm2w()) << std::endl;
|
||||
std::random_device rd; //Will be used to obtain a seed for the random number engine
|
||||
std::mt19937 gen ( rd() ); //Standard mersenne_twister_engine seeded with rd()
|
||||
std::uniform_real_distribution<> dis_x ( map_.min_x(), map_.max_x() );
|
||||
std::uniform_real_distribution<> dis_y ( map_.min_y(), map_.max_y() );
|
||||
std::uniform_real_distribution<> dis_alpha ( -M_PI, M_PI );
|
||||
|
||||
int total_retries = 0;
|
||||
int max_retries = 0;
|
||||
for ( tuw_multi_robot_msgs::RobotGoals &robot: robot_goals_array_.robots ) {
|
||||
tuw::Pose2D pw;
|
||||
int retries = 0;
|
||||
bool valid_pose = false;
|
||||
do {
|
||||
pw.set ( dis_x ( gen ), dis_y ( gen ), 0 );
|
||||
if ( map_goals_.isFree ( pw.position() ) ) {
|
||||
if ( ( pw.x() > map_goals_.min_x() + distance_to_map_border_ ) && ( pw.x() < map_goals_.max_x() - distance_to_map_border_ ) && ( pw.y() > map_goals_.min_y() + distance_to_map_border_ ) && ( pw.y() < map_goals_.max_y() - distance_to_map_border_) ) {
|
||||
valid_pose = true;
|
||||
}
|
||||
}
|
||||
retries++;
|
||||
} while ( !valid_pose && ( retries < max_resample_ ) );
|
||||
total_retries += retries;
|
||||
if ( retries < max_resample_ ) {
|
||||
pw.theta() = dis_alpha ( gen );
|
||||
//std::cout << pw << std::endl; //Each call to dis(gen) generates a new random double
|
||||
robot.destinations.resize ( 1 );
|
||||
map_goals_.circle ( pw.position(), distance_between_robots_, map_goals_.SPACE_OCCUPIED, -1 );
|
||||
geometry_msgs::Pose &p = robot.destinations[0];
|
||||
pw.copyToROSPose ( p );
|
||||
} else {
|
||||
ROS_WARN ( "Max retries on finding new free space for goals for robot: %s", robot.robot_name.c_str() );
|
||||
}
|
||||
if ( max_retries < retries ) {
|
||||
max_retries = retries;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
robot_goals_array_.header.frame_id = frame_id_;
|
||||
robot_goals_array_.header.stamp = ros::Time::now();
|
||||
pub_goals_.publish ( robot_goals_array_ );
|
||||
|
||||
pub_map_goals_.publish ( msg_map_goals_ );
|
||||
ROS_INFO ( "Goal msg published: %i max retries and %i total retries on finding free space ", max_retries, total_retries );
|
||||
}
|
||||
|
||||
|
||||
int main ( int argc, char **argv ) {
|
||||
ros::init ( argc, argv, "RandomGoalGenerator" );
|
||||
ros::NodeHandle n;
|
||||
RadomGoalGeneratorNode node ( n );
|
||||
ros::spin();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -1,188 +0,0 @@
|
|||
#include "ros/ros.h"
|
||||
#include <random>
|
||||
#include <algorithm>
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
|
||||
#include <ros/ros.h>
|
||||
#include "tuw_multi_robot_goal_generator/multi_robot_goal_handler.h"
|
||||
#include <boost/algorithm/string.hpp>
|
||||
#include <boost/date_time/posix_time/posix_time.hpp>
|
||||
#include "tuw_geometry/utils.h"
|
||||
|
||||
|
||||
GoalHandlerNode::GoalHandlerNode ( ros::NodeHandle & n, Mode mode )
|
||||
: n_ ( n ), n_param_ ( "~" ), counter_(0) {
|
||||
n_param_.param<std::string> ( "file_name", file_name_, "/tmp/goals999.txt" );
|
||||
|
||||
n_param_.param<bool> ( "run_once", run_once_, "false" );
|
||||
if (mode == READ) {
|
||||
n_param_.param<double> ( "loop_rate", loop_rate_, 1.0 );
|
||||
n_param_.param<bool> ( "time_now", time_now_, "true" );
|
||||
pub_goals_ = n.advertise<tuw_multi_robot_msgs::RobotGoalsArray> ( "goals", 1 );
|
||||
}
|
||||
if (mode == WRITE) {
|
||||
sub_goals_ = n.subscribe ( "goals", 1, &GoalHandlerNode::callback, this );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void GoalHandlerNode::callback ( const tuw_multi_robot_msgs::RobotGoalsArray& msg ) {
|
||||
ROS_INFO ( "GoalHandlerNode::callback" );
|
||||
msg_ = msg;
|
||||
|
||||
std::string frame_id_; /// parameter
|
||||
std::ofstream file;
|
||||
char file_name[0x1FF];
|
||||
if(run_once_){
|
||||
sprintf(file_name, "%s", file_name_.c_str());
|
||||
} else {
|
||||
sprintf(file_name, "%s%03i.txt", file_name_.c_str(), counter_);
|
||||
}
|
||||
file.open ( file_name );
|
||||
ROS_INFO ( "Write file %s", file_name );
|
||||
file << "tuw_multi_robot_msgs::RobotGoalsArray @" << boost::posix_time::to_iso_extended_string ( ros::Time::now().toBoost() ) << std::endl;
|
||||
file << "frame_id: " << msg_.header.frame_id << std::endl;
|
||||
file << std::setprecision ( std::numeric_limits<float>::digits10 + 1 );
|
||||
file << std::setw ( 12 ) << msg_.header.stamp.sec << ", " << std::setw ( 12 ) << msg_.header.stamp.nsec << std::endl;
|
||||
for ( size_t i = 0; i < msg_.robots.size(); i++ ) {
|
||||
const tuw_multi_robot_msgs::RobotGoals &robot = msg_.robots[i];
|
||||
file << robot.robot_name << std::endl;
|
||||
for ( size_t j = 0; j < robot.destinations.size(); j++ ) {
|
||||
const geometry_msgs::Pose p = robot.destinations[j];
|
||||
file << std::setw ( 12 ) << p.position.x << ", " << std::setw ( 12 ) << p.position.y << ", " << std::setw ( 12 ) << p.position.z << ", ";
|
||||
file << std::setw ( 12 ) << p.orientation.x << ", " << std::setw ( 12 ) << p.orientation.y << ", " << std::setw ( 12 ) << p.orientation.z << ", " << std::setw ( 12 ) << p.orientation.w << std::endl;
|
||||
}
|
||||
}
|
||||
file.close();
|
||||
counter_++;
|
||||
if(run_once_) ros::shutdown();
|
||||
}
|
||||
void GoalHandlerNode::publish () {
|
||||
ros::Rate loop_rate(loop_rate_);
|
||||
do {
|
||||
publishGoal();
|
||||
ros::spinOnce();
|
||||
loop_rate.sleep();
|
||||
} while ( ros::ok() && (run_once_ == false));
|
||||
}
|
||||
|
||||
void GoalHandlerNode::publishGoal ( ) {
|
||||
char file_name[0x1FF];
|
||||
if(run_once_){
|
||||
sprintf(file_name, "%s", file_name_.c_str());
|
||||
} else {
|
||||
sprintf(file_name, "%s%03i.txt", file_name_.c_str(), counter_);
|
||||
}
|
||||
|
||||
std::ifstream file ( file_name );
|
||||
if ( !file.good() ) {
|
||||
ROS_ERROR ( "File: %s does not exist!", file_name );
|
||||
run_once_ = true;
|
||||
return;
|
||||
}
|
||||
if ( !file.is_open() ) {
|
||||
ROS_ERROR ( "Can't open file %s!", file_name );
|
||||
return;
|
||||
}
|
||||
ROS_INFO ( "Reading file %s", file_name );
|
||||
|
||||
std::vector<std::string> columns;
|
||||
std::string line;
|
||||
// Titel
|
||||
if ( getline ( file,line ) ) {
|
||||
boost::erase_all ( line, " " );
|
||||
boost::split ( columns, line, boost::is_any_of ( "@ " ) );
|
||||
if ( ( columns.size() > 0 ) && boost::iequals ( columns[0],"tuw_multi_robot_msgs::RobotGoalsArray" ) ) {
|
||||
ROS_DEBUG ( "Start reading tuw_multi_robot_msgs::RobotGoalsArray" );
|
||||
} else {
|
||||
ROS_ERROR ( "Missing keyword tuw_multi_robot_msgs::RobotGoalsArray" );
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
ROS_ERROR ( "No header in File: %s!", file_name );
|
||||
return;
|
||||
}
|
||||
// Header
|
||||
if ( getline ( file,line ) ) {
|
||||
boost::erase_all ( line, " " );
|
||||
boost::split ( columns, line, boost::is_any_of ( ":" ) );
|
||||
if ( ( columns.size() == 2 ) && boost::iequals ( columns[0],"frame_id" ) ) {
|
||||
msg_.header.frame_id = columns[1];
|
||||
} else {
|
||||
ROS_ERROR ( "Missing keyword frame_id or frame_id value" );
|
||||
}
|
||||
} else {
|
||||
ROS_ERROR ( "No header in File: %s!", file_name );
|
||||
return;
|
||||
}
|
||||
// Timestamp
|
||||
if ( getline ( file,line ) ) {
|
||||
boost::erase_all ( line, " " );
|
||||
boost::split ( columns, line, boost::is_any_of ( "," ) );
|
||||
if ( columns.size() == 2 ) {
|
||||
msg_.header.stamp.sec = std::stol ( columns[0] );
|
||||
msg_.header.stamp.nsec = std::stol ( columns[1] );
|
||||
} else {
|
||||
ROS_INFO ( "Can't read timestamp" );
|
||||
}
|
||||
} else {
|
||||
ROS_ERROR ( "No Timestamp in File: %s!", file_name );
|
||||
return;
|
||||
}
|
||||
// Goals
|
||||
tuw_multi_robot_msgs::RobotGoals::_destinations_type *destinations = NULL;
|
||||
msg_.robots.clear();
|
||||
while ( getline ( file,line ) ) {
|
||||
boost::erase_all ( line, " " );
|
||||
boost::split ( columns, line, boost::is_any_of ( "," ) );
|
||||
// Robot name
|
||||
if ( columns.size() == 1 ) {
|
||||
if ( columns[0].size() > 0 ) {
|
||||
tuw_multi_robot_msgs::RobotGoals robot;
|
||||
robot.robot_name = line;
|
||||
msg_.robots.push_back ( robot );
|
||||
destinations = &msg_.robots.back().destinations;
|
||||
} else {
|
||||
ROS_ERROR ( "robot name to short!" );
|
||||
return;
|
||||
}
|
||||
}
|
||||
if ( ( columns.size() == 7 ) && ( destinations != NULL ) ) {
|
||||
geometry_msgs::Pose p;
|
||||
p.position.x = std::stod ( columns[0] );
|
||||
p.position.y = std::stod ( columns[1] );
|
||||
p.position.z = std::stod ( columns[2] );
|
||||
p.orientation.x = std::stod ( columns[3] );
|
||||
p.orientation.y = std::stod ( columns[4] );
|
||||
p.orientation.z = std::stod ( columns[5] );
|
||||
p.orientation.w = std::stod ( columns[6] );
|
||||
destinations->push_back ( p );
|
||||
}
|
||||
if ( ( columns.size() == 4 ) && ( destinations != NULL ) ) {
|
||||
geometry_msgs::Pose p;
|
||||
p.position.x = std::stod ( columns[0] );
|
||||
p.position.y = std::stod ( columns[1] );
|
||||
p.position.z = std::stod ( columns[2] );
|
||||
double alpha = std::stod ( columns[3] );
|
||||
tuw::EulerYawToQuaternion ( alpha, p.orientation );
|
||||
destinations->push_back ( p );
|
||||
}
|
||||
}
|
||||
if(time_now_){
|
||||
msg_.header.stamp = ros::Time::now();
|
||||
}
|
||||
|
||||
ros::Time timeout = ros::Time::now() + ros::Duration(10);
|
||||
int nr_of_subscribers = pub_goals_.getNumSubscribers();
|
||||
while (ros::Time::now() < timeout && (nr_of_subscribers <= 0)){
|
||||
ROS_INFO ( "NumSubscribers: %i", nr_of_subscribers );
|
||||
ros::Duration(0.1).sleep();
|
||||
nr_of_subscribers = pub_goals_.getNumSubscribers();
|
||||
}
|
||||
ROS_INFO ( "NumSubscribers: %i", nr_of_subscribers );
|
||||
pub_goals_.publish ( msg_ );
|
||||
|
||||
file.close();
|
||||
counter_++;
|
||||
}
|
||||
|
|
@ -1,11 +0,0 @@
|
|||
#include <ros/ros.h>
|
||||
#include "tuw_multi_robot_goal_generator/multi_robot_goal_handler.h"
|
||||
|
||||
|
||||
int main ( int argc, char **argv ) {
|
||||
ros::init ( argc, argv, "GoalSaver" );
|
||||
ros::NodeHandle n;
|
||||
GoalHandlerNode node ( n , GoalHandlerNode::WRITE);
|
||||
ros::spin();
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -1,11 +0,0 @@
|
|||
#include <ros/ros.h>
|
||||
#include "tuw_multi_robot_goal_generator/multi_robot_goal_handler.h"
|
||||
|
||||
|
||||
int main ( int argc, char **argv ) {
|
||||
ros::init ( argc, argv, "GoalServer" );
|
||||
ros::NodeHandle n;
|
||||
GoalHandlerNode node ( n, GoalHandlerNode::READ);
|
||||
node.publish();
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -1,269 +0,0 @@
|
|||
cmake_minimum_required(VERSION 2.8.3)
|
||||
project(tuw_multi_robot_router)
|
||||
|
||||
## Compile as C++11, supported in ROS Kinetic and newer
|
||||
add_compile_options(-std=c++14)
|
||||
|
||||
## Find catkin macros and libraries
|
||||
## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
|
||||
## is used, also find other catkin packages
|
||||
find_package(catkin REQUIRED COMPONENTS
|
||||
dynamic_reconfigure
|
||||
geometry_msgs
|
||||
nav_msgs
|
||||
roscpp
|
||||
tf
|
||||
tuw_multi_robot_msgs
|
||||
tuw_voronoi_graph
|
||||
)
|
||||
|
||||
## System dependencies are found with CMake's conventions
|
||||
# find_package(Boost REQUIRED COMPONENTS system)
|
||||
find_package(Eigen3 QUIET)
|
||||
|
||||
set(_opencv_version 4)
|
||||
find_package(OpenCV 4 QUIET)
|
||||
if(NOT OpenCV_FOUND)
|
||||
message(STATUS "Did not find OpenCV 4, trying OpenCV 3")
|
||||
set(_opencv_version 3)
|
||||
endif()
|
||||
|
||||
find_package(OpenCV ${_opencv_version} REQUIRED
|
||||
COMPONENTS
|
||||
opencv_core
|
||||
opencv_imgproc
|
||||
opencv_imgcodecs
|
||||
CONFIG
|
||||
)
|
||||
|
||||
if(NOT EIGEN3_FOUND)
|
||||
find_package(cmake_modules REQUIRED)
|
||||
find_package(Eigen REQUIRED)
|
||||
set(Eigen3_INCLUDE_DIRS ${EIGEN_INCLUDE_DIRS})
|
||||
endif()
|
||||
|
||||
# Note that eigen 3.2 (on Ubuntu Wily) only provides EIGEN3_INCLUDE_DIR,
|
||||
# not EIGEN3_INCLUDE_DIRS, so we have to set the latter from the former.
|
||||
if(NOT Eigen3_INCLUDE_DIRS)
|
||||
set(Eigen3_INCLUDE_DIRS ${EIGEN3_INCLUDE_DIR})
|
||||
endif()
|
||||
|
||||
|
||||
#check for OpenMP
|
||||
#find_package(OpenMP)
|
||||
#if(OPENMP_FOUND)
|
||||
#message (STATUS "OpenMP found ${OpenMP_INCLUDE_DIRS}")
|
||||
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
|
||||
#set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}" )
|
||||
#else(OPENMP_FOUND)
|
||||
#message (STATUS "OpenMP not found")
|
||||
#endif()
|
||||
|
||||
|
||||
|
||||
|
||||
## Uncomment this if the package has a setup.py. This macro ensures
|
||||
## modules and global scripts declared therein get installed
|
||||
## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html
|
||||
# catkin_python_setup()
|
||||
|
||||
################################################
|
||||
## Declare ROS messages, services and actions ##
|
||||
################################################
|
||||
|
||||
## To declare and build messages, services or actions from within this
|
||||
## package, follow these steps:
|
||||
## * Let MSG_DEP_SET be the set of packages whose message types you use in
|
||||
## your messages/services/actions (e.g. std_msgs, actionlib_msgs, ...).
|
||||
## * In the file package.xml:
|
||||
## * add a build_depend tag for "message_generation"
|
||||
## * add a build_depend and a run_depend tag for each package in MSG_DEP_SET
|
||||
## * If MSG_DEP_SET isn't empty the following dependency has been pulled in
|
||||
## but can be declared for certainty nonetheless:
|
||||
## * add a run_depend tag for "message_runtime"
|
||||
## * In this file (CMakeLists.txt):
|
||||
## * add "message_generation" and every package in MSG_DEP_SET to
|
||||
## find_package(catkin REQUIRED COMPONENTS ...)
|
||||
## * add "message_runtime" and every package in MSG_DEP_SET to
|
||||
## catkin_package(CATKIN_DEPENDS ...)
|
||||
## * uncomment the add_*_files sections below as needed
|
||||
## and list every .msg/.srv/.action file to be processed
|
||||
## * uncomment the generate_messages entry below
|
||||
## * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...)
|
||||
|
||||
## Generate messages in the 'msg' folder
|
||||
# add_message_files(
|
||||
# FILES
|
||||
# Message1.msg
|
||||
# Message2.msg
|
||||
# )
|
||||
|
||||
## Generate services in the 'srv' folder
|
||||
# add_service_files(
|
||||
# FILES
|
||||
# Service1.srv
|
||||
# Service2.srv
|
||||
# )
|
||||
|
||||
## Generate actions in the 'action' folder
|
||||
# add_action_files(
|
||||
# FILES
|
||||
# Action1.action
|
||||
# Action2.action
|
||||
# )
|
||||
|
||||
## Generate added messages and services with any dependencies listed here
|
||||
# generate_messages(
|
||||
# DEPENDENCIES
|
||||
# geometry_msgs# nav_msgs
|
||||
# )
|
||||
|
||||
################################################
|
||||
## Declare ROS dynamic reconfigure parameters ##
|
||||
################################################
|
||||
|
||||
## To declare and build dynamic reconfigure parameters within this
|
||||
## package, follow these steps:
|
||||
## * In the file package.xml:
|
||||
## * add a build_depend and a run_depend tag for "dynamic_reconfigure"
|
||||
## * In this file (CMakeLists.txt):
|
||||
## * add "dynamic_reconfigure" to
|
||||
## find_package(catkin REQUIRED COMPONENTS ...)
|
||||
## * uncomment the "generate_dynamic_reconfigure_options" section below
|
||||
## and list every .cfg file to be processed
|
||||
|
||||
## Generate dynamic reconfigure parameters in the 'cfg' folder
|
||||
generate_dynamic_reconfigure_options(
|
||||
cfg/router.cfg
|
||||
# cfg/DynReconf1.cfg
|
||||
# cfg/DynReconf2.cfg
|
||||
)
|
||||
###################################
|
||||
## catkin specific configuration ##
|
||||
###################################
|
||||
## The catkin_package macro generates cmake config files for your package
|
||||
## Declare things to be passed to dependent projects
|
||||
## INCLUDE_DIRS: uncomment this if you package contains header files
|
||||
## LIBRARIES: libraries you create in this project that dependent projects also need
|
||||
## CATKIN_DEPENDS: catkin_packages dependent projects also need
|
||||
## DEPENDS: system dependencies of this project that dependent projects also need
|
||||
catkin_package(
|
||||
# INCLUDE_DIRS include
|
||||
# LIBRARIES tuw_multi_robot_router
|
||||
CATKIN_DEPENDS dynamic_reconfigure geometry_msgs nav_msgs roscpp tf tuw_multi_robot_msgs tuw_voronoi_graph
|
||||
# DEPENDS system_lib
|
||||
)
|
||||
|
||||
###########
|
||||
## Build ##
|
||||
###########
|
||||
|
||||
## Specify additional locations of header files
|
||||
## Your package locations should be listed before other locations
|
||||
include_directories(
|
||||
include
|
||||
${catkin_INCLUDE_DIRS}
|
||||
${Eigen3_INCLUDE_DIRS}
|
||||
${dynamic_reconfigure_PACKAGE_PATH}/cmake/cfgbuild.cmake
|
||||
)
|
||||
|
||||
## Declare a C++ library
|
||||
add_library(${PROJECT_NAME}
|
||||
src/router.cpp
|
||||
src/srr_utils.cpp
|
||||
src/point_expander.cpp
|
||||
src/multi_robot_router.cpp
|
||||
src/multi_robot_router_threaded_srr.cpp
|
||||
src/single_robot_router.cpp
|
||||
src/segment_expander.cpp
|
||||
src/route_coordinator_timed.cpp
|
||||
src/traceback.cpp
|
||||
src/robot_info.cpp
|
||||
src/route_generator.cpp
|
||||
src/backtracking_resolution.cpp
|
||||
src/avoidance_resolution.cpp
|
||||
src/empty_resolution.cpp
|
||||
src/priority_scheduler.cpp
|
||||
src/potential_calculator.cpp
|
||||
src/speed_scheduler.cpp
|
||||
src/route_coordinator.cpp
|
||||
)
|
||||
target_link_libraries(${PROJECT_NAME} ${catkin_LIBRARIES} ${OpenCV_LIBRARIES})
|
||||
|
||||
add_executable(tuw_multi_robot_router_node src/router_node.cpp)
|
||||
target_link_libraries(tuw_multi_robot_router_node
|
||||
${catkin_LIBRARIES}
|
||||
${PROJECT_NAME}
|
||||
)
|
||||
## Add cmake target dependencies of the library
|
||||
## as an example, code may need to be generated before libraries
|
||||
## either from message generation or dynamic reconfigure
|
||||
add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS} ${PROJECT_NAME}_gencfg)
|
||||
|
||||
## Declare a C++ executable
|
||||
## With catkin_make all packages are built within a single CMake context
|
||||
## The recommended prefix ensures that target names across packages don't collide
|
||||
# add_executable(${PROJECT_NAME}_node src/tuw_global_router_node.cpp)
|
||||
|
||||
## Rename C++ executable without prefix
|
||||
## The above recommended prefix causes long target names, the following renames the
|
||||
## target back to the shorter version for ease of user use
|
||||
## e.g. "rosrun someones_pkg node" instead of "rosrun someones_pkg someones_pkg_node"
|
||||
# set_target_properties(${PROJECT_NAME}_node PROPERTIES OUTPUT_NAME node PREFIX "")
|
||||
|
||||
## Add cmake target dependencies of the executable
|
||||
## same as for the library above
|
||||
# add_dependencies(${PROJECT_NAME}_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
|
||||
|
||||
## Specify libraries to link a library or executable target against
|
||||
# target_link_libraries(${PROJECT_NAME}_node
|
||||
# ${catkin_LIBRARIES}
|
||||
# )
|
||||
|
||||
#############
|
||||
## Install ##
|
||||
#############
|
||||
|
||||
# all install targets should use catkin DESTINATION variables
|
||||
# See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html
|
||||
|
||||
## Mark executable scripts (Python etc.) for installation
|
||||
## in contrast to setup.py, you can choose the destination
|
||||
# install(PROGRAMS
|
||||
# scripts/my_python_script
|
||||
# DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
|
||||
# )
|
||||
|
||||
## Mark executables and/or libraries for installation
|
||||
# install(TARGETS ${PROJECT_NAME} ${PROJECT_NAME}_node
|
||||
# ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
|
||||
# LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
|
||||
# RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
|
||||
# )
|
||||
|
||||
## Mark cpp header files for installation
|
||||
# install(DIRECTORY include/${PROJECT_NAME}/
|
||||
# DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
|
||||
# FILES_MATCHING PATTERN "*.h"
|
||||
# PATTERN ".svn" EXCLUDE
|
||||
# )
|
||||
|
||||
## Mark other files for installation (e.g. launch and bag files, etc.)
|
||||
# install(FILES
|
||||
# # myfile1
|
||||
# # myfile2
|
||||
# DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
|
||||
# )
|
||||
|
||||
#############
|
||||
## Testing ##
|
||||
#############
|
||||
|
||||
## Add gtest based cpp test target and link libraries
|
||||
# catkin_add_gtest(${PROJECT_NAME}-test test/test_tuw_global_planner.cpp)
|
||||
# if(TARGET ${PROJECT_NAME}-test)
|
||||
# target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME})
|
||||
# endif()
|
||||
|
||||
## Add folders to be run by python nosetests
|
||||
# catkin_add_nosetests(test)
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
tuw_global_planner
|
||||
tuw_voronoi_map
|
||||
voronoi_segmentation
|
||||
simple_velocity_controller
|
||||
tuw_voronoi_rviz
|
||||
stage (Testcases)
|
||||
tuw_multi_robot_utils
|
||||
grid_map
|
||||
|
|
@ -1,21 +0,0 @@
|
|||
grid_map_topic: /voronoi_map
|
||||
|
||||
grid_map_visualizations:
|
||||
- name: map
|
||||
type: occupancy_grid
|
||||
params:
|
||||
layer: map
|
||||
data_min: 0
|
||||
data_max: 128
|
||||
- name: distfield
|
||||
type: occupancy_grid
|
||||
params:
|
||||
layer: distfield
|
||||
data_min: 0
|
||||
data_max: 128
|
||||
- name: voronoi
|
||||
type: occupancy_grid
|
||||
params:
|
||||
layer: voronoi
|
||||
data_min: 0
|
||||
data_max: 128
|
||||
|
|
@ -1,21 +0,0 @@
|
|||
grid_map_topic: /voronoi_map
|
||||
|
||||
grid_map_visualizations:
|
||||
- name: map
|
||||
type: occupancy_grid
|
||||
params:
|
||||
layer: map
|
||||
data_min: 0
|
||||
data_max: 128
|
||||
- name: distfield
|
||||
type: occupancy_grid
|
||||
params:
|
||||
layer: distfield
|
||||
data_min: 0
|
||||
data_max: 220
|
||||
- name: voronoi
|
||||
type: occupancy_grid
|
||||
params:
|
||||
layer: voronoi
|
||||
data_min: 0
|
||||
data_max: 128
|
||||
|
|
@ -1,21 +0,0 @@
|
|||
grid_map_topic: /voronoi_map
|
||||
|
||||
grid_map_visualizations:
|
||||
- name: map
|
||||
type: occupancy_grid
|
||||
params:
|
||||
layer: map
|
||||
data_min: 0
|
||||
data_max: 128
|
||||
- name: distfield
|
||||
type: occupancy_grid
|
||||
params:
|
||||
layer: distfield
|
||||
data_min: 0
|
||||
data_max: 220
|
||||
- name: voronoi
|
||||
type: occupancy_grid
|
||||
params:
|
||||
layer: voronoi
|
||||
data_min: 0
|
||||
data_max: 128
|
||||
|
|
@ -1,21 +0,0 @@
|
|||
grid_map_topic: /voronoi_map
|
||||
|
||||
grid_map_visualizations:
|
||||
- name: map
|
||||
type: occupancy_grid
|
||||
params:
|
||||
layer: map
|
||||
data_min: 0
|
||||
data_max: 128
|
||||
- name: distfield
|
||||
type: occupancy_grid
|
||||
params:
|
||||
layer: distfield
|
||||
data_min: 0
|
||||
data_max: 220
|
||||
- name: voronoi
|
||||
type: occupancy_grid
|
||||
params:
|
||||
layer: voronoi
|
||||
data_min: 0
|
||||
data_max: 128
|
||||
|
|
@ -1,21 +0,0 @@
|
|||
grid_map_topic: /voronoi_map
|
||||
|
||||
grid_map_visualizations:
|
||||
- name: map
|
||||
type: occupancy_grid
|
||||
params:
|
||||
layer: map
|
||||
data_min: 0
|
||||
data_max: 128
|
||||
- name: distfield
|
||||
type: occupancy_grid
|
||||
params:
|
||||
layer: distfield
|
||||
data_min: 0
|
||||
data_max: 220
|
||||
- name: voronoi
|
||||
type: occupancy_grid
|
||||
params:
|
||||
layer: voronoi
|
||||
data_min: 0
|
||||
data_max: 128
|
||||
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
|
|
@ -1,6 +0,0 @@
|
|||
image: map.pgm
|
||||
resolution: 0.050000
|
||||
origin: [-15.000000, -15.000000, 0.000000]
|
||||
negate: 0
|
||||
occupied_thresh: 0.65
|
||||
free_thresh: 0.196
|
||||
|
|
@ -1,159 +0,0 @@
|
|||
define hokuyolaser ranger
|
||||
(
|
||||
sensor(
|
||||
# laser-specific properties
|
||||
# factory settings for LMS200
|
||||
range [ 0.0 5.0 ]
|
||||
fov 270.0
|
||||
samples 270
|
||||
)
|
||||
model
|
||||
(
|
||||
# generic model properties
|
||||
size [ 0.07 0.07 0.05 ] # dimensions from LMS200 data sheet
|
||||
color "blue"
|
||||
obstacle_return 0
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
define floorplan model
|
||||
(
|
||||
# sombre, sensible, artistic
|
||||
color "gray30"
|
||||
|
||||
# most maps will need a bounding box
|
||||
boundary 1
|
||||
|
||||
gui_nose 0
|
||||
gui_grid 0
|
||||
|
||||
obstacle_return 1
|
||||
gui_outline 0
|
||||
gripper_return 0
|
||||
fiducial_return 0
|
||||
laser_return 1
|
||||
)
|
||||
|
||||
|
||||
define background model
|
||||
(
|
||||
# sombre, sensible, artistic
|
||||
color "red"
|
||||
|
||||
# most maps will need a bounding box
|
||||
boundary 1
|
||||
|
||||
gui_nose 0
|
||||
gui_grid 0
|
||||
|
||||
obstacle_return 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 10 # simulation timestep in milliseconds
|
||||
|
||||
|
||||
window
|
||||
(
|
||||
size [ 1500.000 1500.000 ]
|
||||
|
||||
rotate [ 0.000 0 ]
|
||||
scale 50
|
||||
|
||||
show_data 1 # 1=on 0=off
|
||||
)
|
||||
|
||||
# load an environment bitmap
|
||||
|
||||
floorplan
|
||||
(
|
||||
name "test_1"
|
||||
bitmap "map.pgm"
|
||||
size [16.0 16.0 0]
|
||||
pose [ 0 0 0 0 ]
|
||||
)
|
||||
|
||||
define pioneer_base position
|
||||
(
|
||||
color "red" # Default color.
|
||||
drive "diff" # Differential steering model.
|
||||
gui_nose 0 # Draw a nose on the robot so we can see which way it points
|
||||
obstacle_return 0 # Can hit things.
|
||||
ranger_return 0.5 # reflects sonar beams
|
||||
blob_return 1 # Seen by blobfinders
|
||||
fiducial_return 1 # Seen as "1" fiducial finders
|
||||
|
||||
localization "gps"
|
||||
localization_origin [0 0 0 0] # Start odometry at (0, 0, 0).
|
||||
|
||||
# alternative odometric localization with simple error model
|
||||
# localization "odom" # Change to "gps" to have impossibly perfect, global odometry
|
||||
# odom_error [ 0.05 0.05 0.1 ] # Odometry error or slip in X, Y and Theta
|
||||
# (Uniform random distribution)
|
||||
|
||||
# four DOF kinematics limits
|
||||
# [ xmin xmax ymin ymax zmin zmax amin amax ]
|
||||
velocity_bounds [-1 1 0 0 0 0 -45.0 45.0 ]
|
||||
acceleration_bounds [-1.0 1.0 0 0 0 0 -45 45.0 ]
|
||||
)
|
||||
|
||||
define pioneer2dx_base_no_sonar pioneer_base
|
||||
(
|
||||
# actual size
|
||||
size [0.44 0.38 0.22] # sizes from MobileRobots' web site
|
||||
|
||||
# the pioneer's center of rotation is offset from its center of area
|
||||
origin [-0.04 0 0 0]
|
||||
|
||||
# draw a nose on the robot so we can see which way it points
|
||||
gui_nose 0
|
||||
|
||||
# estimated mass in KG
|
||||
mass 23.0
|
||||
)
|
||||
|
||||
# as above, but with front sonar only
|
||||
define pioneer2dx_no_sonar pioneer2dx_base_no_sonar
|
||||
(
|
||||
# simplified Body shape:
|
||||
block(
|
||||
points 8
|
||||
point[0] [-0.2 0.12]
|
||||
point[1] [-0.2 -0.12]
|
||||
point[2] [-0.12 -0.2555]
|
||||
point[3] [0.12 -0.2555]
|
||||
point[4] [0.2 -0.12]
|
||||
point[5] [0.2 0.12]
|
||||
point[6] [0.12 0.2555]
|
||||
point[7] [-0.12 0.2555]
|
||||
z [0 0.22]
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
pioneer2dx_no_sonar
|
||||
(
|
||||
# can refer to the robot by this name
|
||||
name "robot_0"
|
||||
color "red"
|
||||
pose [ -7 -7 0 45 ]
|
||||
hokuyolaser(pose [ 0.225 0.000 -0.15 0.000 ])
|
||||
)
|
||||
|
||||
pioneer2dx_no_sonar
|
||||
(
|
||||
# can refer to the robot by this name
|
||||
name "robot_1"
|
||||
color "blue"
|
||||
pose [ 7 7 0 45 ]
|
||||
hokuyolaser(pose [ 0.225 0.000 -0.15 0.000 ])
|
||||
)
|
||||
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
|
||||
<!DOCTYPE boost_serialization>
|
||||
<boost_serialization signature="serialization::archive" version="12">
|
||||
<MapInfo class_id="0" tracking_level="0" version="0">
|
||||
<mapName>map</mapName>
|
||||
<distanceMapName>distfield</distanceMapName>
|
||||
<voronoiMapName>voronoi</voronoiMapName>
|
||||
<resolution>5.000000075e-02</resolution>
|
||||
<cols>600</cols>
|
||||
<rows>600</rows>
|
||||
<origin_cols>2.235174179e-07</origin_cols>
|
||||
<origin_rows>2.235174179e-07</origin_rows>
|
||||
</MapInfo>
|
||||
</boost_serialization>
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
|
|
@ -1,7 +0,0 @@
|
|||
image: map.pgm
|
||||
resolution: 0.0889
|
||||
origin: [-87.000000, -33.000000, 0.000000]
|
||||
negate: 0
|
||||
occupied_thresh: 0.65
|
||||
free_thresh: 0.196
|
||||
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
|
||||
<!DOCTYPE boost_serialization>
|
||||
<boost_serialization signature="serialization::archive" version="12">
|
||||
<MapInfo class_id="0" tracking_level="0" version="0">
|
||||
<mapName>map</mapName>
|
||||
<distanceMapName>distfield</distanceMapName>
|
||||
<voronoiMapName>voronoi</voronoiMapName>
|
||||
<resolution>8.889999986e-02</resolution>
|
||||
<cols>1654</cols>
|
||||
<rows>1169</rows>
|
||||
<origin_cols>-1.347970009e+01</origin_cols>
|
||||
<origin_rows>1.896204948e+01</origin_rows>
|
||||
</MapInfo>
|
||||
</boost_serialization>
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -1,7 +0,0 @@
|
|||
image: map.pgm
|
||||
resolution: 0.010000
|
||||
origin: [0.400000, 1.00000, 0.000000]
|
||||
negate: 0
|
||||
occupied_thresh: 0.65
|
||||
free_thresh: 0.196
|
||||
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
|
||||
<!DOCTYPE boost_serialization>
|
||||
<boost_serialization signature="serialization::archive" version="12">
|
||||
<MapInfo class_id="0" tracking_level="0" version="0">
|
||||
<mapName>map</mapName>
|
||||
<distanceMapName>distfield</distanceMapName>
|
||||
<voronoiMapName>voronoi</voronoiMapName>
|
||||
<resolution>9.999999776e-03</resolution>
|
||||
<cols>3737</cols>
|
||||
<rows>2338</rows>
|
||||
<origin_cols>1.908499908e+01</origin_cols>
|
||||
<origin_rows>1.268999958e+01</origin_rows>
|
||||
</MapInfo>
|
||||
</boost_serialization>
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
|
|
@ -1,6 +0,0 @@
|
|||
image: map.pgm
|
||||
resolution: 0.050000
|
||||
origin: [-15.000000, -15.000000, 0.000000]
|
||||
negate: 0
|
||||
occupied_thresh: 0.65
|
||||
free_thresh: 0.196
|
||||
|
|
@ -1,167 +0,0 @@
|
|||
define hokuyolaser ranger
|
||||
(
|
||||
sensor(
|
||||
# laser-specific properties
|
||||
# factory settings for LMS200
|
||||
range [ 0.0 5.0 ]
|
||||
fov 270.0
|
||||
samples 270
|
||||
)
|
||||
model
|
||||
(
|
||||
# generic model properties
|
||||
size [ 0.07 0.07 0.05 ] # dimensions from LMS200 data sheet
|
||||
color "blue"
|
||||
obstacle_return 0
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
define floorplan model
|
||||
(
|
||||
# sombre, sensible, artistic
|
||||
color "gray30"
|
||||
|
||||
# most maps will need a bounding box
|
||||
boundary 1
|
||||
|
||||
gui_nose 0
|
||||
gui_grid 0
|
||||
|
||||
obstacle_return 1
|
||||
gui_outline 0
|
||||
gripper_return 0
|
||||
fiducial_return 0
|
||||
laser_return 1
|
||||
)
|
||||
|
||||
|
||||
define background model
|
||||
(
|
||||
# sombre, sensible, artistic
|
||||
color "red"
|
||||
|
||||
# most maps will need a bounding box
|
||||
boundary 1
|
||||
|
||||
gui_nose 0
|
||||
gui_grid 0
|
||||
|
||||
obstacle_return 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 10 # simulation timestep in milliseconds
|
||||
|
||||
|
||||
window
|
||||
(
|
||||
size [ 1500.000 1500.000 ]
|
||||
|
||||
rotate [ 0.000 0 ]
|
||||
scale 50
|
||||
|
||||
show_data 1 # 1=on 0=off
|
||||
)
|
||||
|
||||
# load an environment bitmap
|
||||
|
||||
floorplan
|
||||
(
|
||||
name "test_1"
|
||||
bitmap "map.pgm"
|
||||
size [16.0 16.0 0]
|
||||
pose [ 0 0 0 0 ]
|
||||
)
|
||||
|
||||
define pioneer_base position
|
||||
(
|
||||
color "red" # Default color.
|
||||
drive "diff" # Differential steering model.
|
||||
gui_nose 0 # Draw a nose on the robot so we can see which way it points
|
||||
obstacle_return 0 # Can hit things.
|
||||
ranger_return 0.5 # reflects sonar beams
|
||||
blob_return 1 # Seen by blobfinders
|
||||
fiducial_return 1 # Seen as "1" fiducial finders
|
||||
|
||||
localization "gps"
|
||||
localization_origin [0 0 0 0] # Start odometry at (0, 0, 0).
|
||||
|
||||
# alternative odometric localization with simple error model
|
||||
# localization "odom" # Change to "gps" to have impossibly perfect, global odometry
|
||||
# odom_error [ 0.05 0.05 0.1 ] # Odometry error or slip in X, Y and Theta
|
||||
# (Uniform random distribution)
|
||||
|
||||
# four DOF kinematics limits
|
||||
# [ xmin xmax ymin ymax zmin zmax amin amax ]
|
||||
velocity_bounds [-1 1 0 0 0 0 -45.0 45.0 ]
|
||||
acceleration_bounds [-1.0 1.0 0 0 0 0 -45 45.0 ]
|
||||
)
|
||||
|
||||
define pioneer2dx_base_no_sonar pioneer_base
|
||||
(
|
||||
# actual size
|
||||
size [0.44 0.38 0.22] # sizes from MobileRobots' web site
|
||||
|
||||
# the pioneer's center of rotation is offset from its center of area
|
||||
origin [-0.04 0 0 0]
|
||||
|
||||
# draw a nose on the robot so we can see which way it points
|
||||
gui_nose 0
|
||||
|
||||
# estimated mass in KG
|
||||
mass 23.0
|
||||
)
|
||||
|
||||
# as above, but with front sonar only
|
||||
define pioneer2dx_no_sonar pioneer2dx_base_no_sonar
|
||||
(
|
||||
# simplified Body shape:
|
||||
block(
|
||||
points 8
|
||||
point[0] [-0.2 0.12]
|
||||
point[1] [-0.2 -0.12]
|
||||
point[2] [-0.12 -0.2555]
|
||||
point[3] [0.12 -0.2555]
|
||||
point[4] [0.2 -0.12]
|
||||
point[5] [0.2 0.12]
|
||||
point[6] [0.12 0.2555]
|
||||
point[7] [-0.12 0.2555]
|
||||
z [0 0.22]
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
pioneer2dx_no_sonar
|
||||
(
|
||||
# can refer to the robot by this name
|
||||
name "robot_0"
|
||||
color "red"
|
||||
pose [ -6.5 -6.5 0 45 ]
|
||||
hokuyolaser(pose [ 0.225 0.000 -0.15 0.000 ])
|
||||
)
|
||||
|
||||
pioneer2dx_no_sonar
|
||||
(
|
||||
# can refer to the robot by this name
|
||||
name "robot_1"
|
||||
color "blue"
|
||||
pose [ 7 7 0 45 ]
|
||||
hokuyolaser(pose [ 0.225 0.000 -0.15 0.000 ])
|
||||
)
|
||||
|
||||
pioneer2dx_no_sonar
|
||||
(
|
||||
# can refer to the robot by this name
|
||||
name "robot_2"
|
||||
color "green"
|
||||
pose [ -1 -0.5 0 45 ]
|
||||
hokuyolaser(pose [ 0.225 0.000 -0.15 0.000 ])
|
||||
)
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
|
||||
<!DOCTYPE boost_serialization>
|
||||
<boost_serialization signature="serialization::archive" version="12">
|
||||
<MapInfo class_id="0" tracking_level="0" version="0">
|
||||
<mapName>map</mapName>
|
||||
<distanceMapName>distfield</distanceMapName>
|
||||
<voronoiMapName>voronoi</voronoiMapName>
|
||||
<resolution>5.000000075e-02</resolution>
|
||||
<cols>600</cols>
|
||||
<rows>600</rows>
|
||||
<origin_cols>2.235174179e-07</origin_cols>
|
||||
<origin_rows>2.235174179e-07</origin_rows>
|
||||
</MapInfo>
|
||||
</boost_serialization>
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
|
|
@ -1,6 +0,0 @@
|
|||
image: map.pgm
|
||||
resolution: 0.050000
|
||||
origin: [-15.000000, -15.000000, 0.000000]
|
||||
negate: 0
|
||||
occupied_thresh: 0.65
|
||||
free_thresh: 0.196
|
||||
|
|
@ -1,159 +0,0 @@
|
|||
define hokuyolaser ranger
|
||||
(
|
||||
sensor(
|
||||
# laser-specific properties
|
||||
# factory settings for LMS200
|
||||
range [ 0.0 5.0 ]
|
||||
fov 270.0
|
||||
samples 270
|
||||
)
|
||||
model
|
||||
(
|
||||
# generic model properties
|
||||
size [ 0.07 0.07 0.05 ] # dimensions from LMS200 data sheet
|
||||
color "blue"
|
||||
obstacle_return 0
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
define floorplan model
|
||||
(
|
||||
# sombre, sensible, artistic
|
||||
color "gray30"
|
||||
|
||||
# most maps will need a bounding box
|
||||
boundary 1
|
||||
|
||||
gui_nose 0
|
||||
gui_grid 0
|
||||
|
||||
obstacle_return 1
|
||||
gui_outline 0
|
||||
gripper_return 0
|
||||
fiducial_return 0
|
||||
laser_return 1
|
||||
)
|
||||
|
||||
|
||||
define background model
|
||||
(
|
||||
# sombre, sensible, artistic
|
||||
color "red"
|
||||
|
||||
# most maps will need a bounding box
|
||||
boundary 1
|
||||
|
||||
gui_nose 0
|
||||
gui_grid 0
|
||||
|
||||
obstacle_return 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 10 # simulation timestep in milliseconds
|
||||
|
||||
|
||||
window
|
||||
(
|
||||
size [ 1500.000 1500.000 ]
|
||||
|
||||
rotate [ 0.000 0 ]
|
||||
scale 50
|
||||
|
||||
show_data 1 # 1=on 0=off
|
||||
)
|
||||
|
||||
# load an environment bitmap
|
||||
|
||||
floorplan
|
||||
(
|
||||
name "test_1"
|
||||
bitmap "map.pgm"
|
||||
size [16.0 16.0 0]
|
||||
pose [ 0 0 0 0 ]
|
||||
)
|
||||
|
||||
define pioneer_base position
|
||||
(
|
||||
color "red" # Default color.
|
||||
drive "diff" # Differential steering model.
|
||||
gui_nose 0 # Draw a nose on the robot so we can see which way it points
|
||||
obstacle_return 0 # Can hit things.
|
||||
ranger_return 0.5 # reflects sonar beams
|
||||
blob_return 1 # Seen by blobfinders
|
||||
fiducial_return 1 # Seen as "1" fiducial finders
|
||||
|
||||
localization "gps"
|
||||
localization_origin [0 0 0 0] # Start odometry at (0, 0, 0).
|
||||
|
||||
# alternative odometric localization with simple error model
|
||||
# localization "odom" # Change to "gps" to have impossibly perfect, global odometry
|
||||
# odom_error [ 0.05 0.05 0.1 ] # Odometry error or slip in X, Y and Theta
|
||||
# (Uniform random distribution)
|
||||
|
||||
# four DOF kinematics limits
|
||||
# [ xmin xmax ymin ymax zmin zmax amin amax ]
|
||||
velocity_bounds [-1 1 0 0 0 0 -45.0 45.0 ]
|
||||
acceleration_bounds [-1.0 1.0 0 0 0 0 -45 45.0 ]
|
||||
)
|
||||
|
||||
define pioneer2dx_base_no_sonar pioneer_base
|
||||
(
|
||||
# actual size
|
||||
size [0.44 0.38 0.22] # sizes from MobileRobots' web site
|
||||
|
||||
# the pioneer's center of rotation is offset from its center of area
|
||||
origin [-0.04 0 0 0]
|
||||
|
||||
# draw a nose on the robot so we can see which way it points
|
||||
gui_nose 0
|
||||
|
||||
# estimated mass in KG
|
||||
mass 23.0
|
||||
)
|
||||
|
||||
# as above, but with front sonar only
|
||||
define pioneer2dx_no_sonar pioneer2dx_base_no_sonar
|
||||
(
|
||||
# simplified Body shape:
|
||||
block(
|
||||
points 8
|
||||
point[0] [-0.2 0.12]
|
||||
point[1] [-0.2 -0.12]
|
||||
point[2] [-0.12 -0.2555]
|
||||
point[3] [0.12 -0.2555]
|
||||
point[4] [0.2 -0.12]
|
||||
point[5] [0.2 0.12]
|
||||
point[6] [0.12 0.2555]
|
||||
point[7] [-0.12 0.2555]
|
||||
z [0 0.22]
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
pioneer2dx_no_sonar
|
||||
(
|
||||
# can refer to the robot by this name
|
||||
name "robot_0"
|
||||
color "red"
|
||||
pose [ -4.2 -5 0 90 ]
|
||||
hokuyolaser(pose [ 0.225 0.000 -0.15 0.000 ])
|
||||
)
|
||||
|
||||
pioneer2dx_no_sonar
|
||||
(
|
||||
# can refer to the robot by this name
|
||||
name "robot_1"
|
||||
color "blue"
|
||||
pose [ 4 5 0 -90 ]
|
||||
hokuyolaser(pose [ 0.225 0.000 -0.15 0.000 ])
|
||||
)
|
||||
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
|
||||
<!DOCTYPE boost_serialization>
|
||||
<boost_serialization signature="serialization::archive" version="12">
|
||||
<MapInfo class_id="0" tracking_level="0" version="0">
|
||||
<mapName>map</mapName>
|
||||
<distanceMapName>distfield</distanceMapName>
|
||||
<voronoiMapName>voronoi</voronoiMapName>
|
||||
<resolution>5.000000075e-02</resolution>
|
||||
<cols>600</cols>
|
||||
<rows>600</rows>
|
||||
<origin_cols>2.235174179e-07</origin_cols>
|
||||
<origin_rows>2.235174179e-07</origin_rows>
|
||||
</MapInfo>
|
||||
</boost_serialization>
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
|
|
@ -1,6 +0,0 @@
|
|||
image: map.pgm
|
||||
resolution: 0.050000
|
||||
origin: [-15.000000, -15.000000, 0.000000]
|
||||
negate: 0
|
||||
occupied_thresh: 0.65
|
||||
free_thresh: 0.196
|
||||
|
|
@ -1,169 +0,0 @@
|
|||
define hokuyolaser ranger
|
||||
(
|
||||
sensor(
|
||||
# laser-specific properties
|
||||
# factory settings for LMS200
|
||||
range [ 0.0 5.0 ]
|
||||
fov 270.0
|
||||
samples 270
|
||||
)
|
||||
model
|
||||
(
|
||||
# generic model properties
|
||||
size [ 0.07 0.07 0.05 ] # dimensions from LMS200 data sheet
|
||||
color "blue"
|
||||
obstacle_return 0
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
define floorplan model
|
||||
(
|
||||
# sombre, sensible, artistic
|
||||
color "gray30"
|
||||
|
||||
# most maps will need a bounding box
|
||||
boundary 1
|
||||
|
||||
gui_nose 0
|
||||
gui_grid 0
|
||||
|
||||
obstacle_return 1
|
||||
gui_outline 0
|
||||
gripper_return 0
|
||||
fiducial_return 0
|
||||
laser_return 1
|
||||
)
|
||||
|
||||
|
||||
define background model
|
||||
(
|
||||
# sombre, sensible, artistic
|
||||
color "red"
|
||||
|
||||
# most maps will need a bounding box
|
||||
boundary 1
|
||||
|
||||
gui_nose 0
|
||||
gui_grid 0
|
||||
|
||||
obstacle_return 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 10 # simulation timestep in milliseconds
|
||||
|
||||
|
||||
window
|
||||
(
|
||||
size [ 1500.000 1500.000 ]
|
||||
|
||||
rotate [ 0.000 0 ]
|
||||
scale 50
|
||||
|
||||
show_data 1 # 1=on 0=off
|
||||
)
|
||||
|
||||
|
||||
# load an environment bitmap
|
||||
|
||||
floorplan
|
||||
(
|
||||
name "test_1"
|
||||
bitmap "map.pgm"
|
||||
size [16.0 16.0 0]
|
||||
pose [ 0 0 0 0 ]
|
||||
)
|
||||
|
||||
define pioneer_base position
|
||||
(
|
||||
color "red" # Default color.
|
||||
drive "diff" # Differential steering model.
|
||||
gui_nose 0 # Draw a nose on the robot so we can see which way it points
|
||||
obstacle_return 0 # Can hit things.
|
||||
ranger_return 0.5 # reflects sonar beams
|
||||
blob_return 1 # Seen by blobfinders
|
||||
fiducial_return 1 # Seen as "1" fiducial finders
|
||||
|
||||
localization "gps"
|
||||
localization_origin [0 0 0 0] # Start odometry at (0, 0, 0).
|
||||
|
||||
# alternative odometric localization with simple error model
|
||||
# localization "odom" # Change to "gps" to have impossibly perfect, global odometry
|
||||
# odom_error [ 0.05 0.05 0.1 ] # Odometry error or slip in X, Y and Theta
|
||||
# (Uniform random distribution)
|
||||
|
||||
# four DOF kinematics limits
|
||||
# [ xmin xmax ymin ymax zmin zmax amin amax ]
|
||||
velocity_bounds [-1 1 0 0 0 0 -45.0 45.0 ]
|
||||
acceleration_bounds [-1.0 1.0 0 0 0 0 -45 45.0 ]
|
||||
)
|
||||
|
||||
define pioneer2dx_base_no_sonar pioneer_base
|
||||
(
|
||||
# actual size
|
||||
size [0.44 0.38 0.22] # sizes from MobileRobots' web site
|
||||
|
||||
# the pioneer's center of rotation is offset from its center of area
|
||||
origin [-0.04 0 0 0]
|
||||
|
||||
# draw a nose on the robot so we can see which way it points
|
||||
gui_nose 0
|
||||
|
||||
# estimated mass in KG
|
||||
mass 23.0
|
||||
)
|
||||
|
||||
# as above, but with front sonar only
|
||||
define pioneer2dx_no_sonar pioneer2dx_base_no_sonar
|
||||
(
|
||||
# simplified Body shape:
|
||||
block(
|
||||
points 8
|
||||
point[0] [-0.2 0.12]
|
||||
point[1] [-0.2 -0.12]
|
||||
point[2] [-0.12 -0.2555]
|
||||
point[3] [0.12 -0.2555]
|
||||
point[4] [0.2 -0.12]
|
||||
point[5] [0.2 0.12]
|
||||
point[6] [0.12 0.2555]
|
||||
point[7] [-0.12 0.2555]
|
||||
z [0 0.22]
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
pioneer2dx_no_sonar
|
||||
(
|
||||
# can refer to the robot by this name
|
||||
name "robot_0"
|
||||
color "red"
|
||||
pose [ -5 -6.2 0 0 ]
|
||||
hokuyolaser(pose [ 0.225 0.000 -0.15 0.000 ])
|
||||
)
|
||||
|
||||
pioneer2dx_no_sonar
|
||||
(
|
||||
# can refer to the robot by this name
|
||||
name "robot_1"
|
||||
color "blue"
|
||||
pose [ -3 -6.2 0 0 ]
|
||||
hokuyolaser(pose [ 0.225 0.000 -0.15 0.000 ])
|
||||
)
|
||||
|
||||
pioneer2dx_no_sonar
|
||||
(
|
||||
# can refer to the robot by this name
|
||||
name "robot_2"
|
||||
color "green"
|
||||
pose [ 5 -6.2 0 180 ]
|
||||
hokuyolaser(pose [ 0.225 0.000 -0.15 0.000 ])
|
||||
)
|
||||
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
|
||||
<!DOCTYPE boost_serialization>
|
||||
<boost_serialization signature="serialization::archive" version="12">
|
||||
<MapInfo class_id="0" tracking_level="0" version="0">
|
||||
<mapName>map</mapName>
|
||||
<distanceMapName>distfield</distanceMapName>
|
||||
<voronoiMapName>voronoi</voronoiMapName>
|
||||
<resolution>5.000000075e-02</resolution>
|
||||
<cols>600</cols>
|
||||
<rows>600</rows>
|
||||
<origin_cols>2.235174179e-07</origin_cols>
|
||||
<origin_rows>2.235174179e-07</origin_rows>
|
||||
</MapInfo>
|
||||
</boost_serialization>
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -1,6 +0,0 @@
|
|||
image: map.pgm
|
||||
resolution: 0.050000
|
||||
origin: [-8.100000, -4.200000, 0.000000]
|
||||
negate: 0
|
||||
occupied_thresh: 0.65
|
||||
free_thresh: 0.196
|
||||
|
|
@ -1,169 +0,0 @@
|
|||
define hokuyolaser ranger
|
||||
(
|
||||
sensor(
|
||||
# laser-specific properties
|
||||
# factory settings for LMS200
|
||||
range [ 0.0 5.0 ]
|
||||
fov 270.0
|
||||
samples 270
|
||||
)
|
||||
model
|
||||
(
|
||||
# generic model properties
|
||||
size [ 0.07 0.07 0.05 ] # dimensions from LMS200 data sheet
|
||||
color "blue"
|
||||
obstacle_return 0
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
define floorplan model
|
||||
(
|
||||
# sombre, sensible, artistic
|
||||
color "gray30"
|
||||
|
||||
# most maps will need a bounding box
|
||||
boundary 1
|
||||
|
||||
gui_nose 0
|
||||
gui_grid 0
|
||||
|
||||
obstacle_return 1
|
||||
gui_outline 0
|
||||
gripper_return 0
|
||||
fiducial_return 0
|
||||
laser_return 1
|
||||
)
|
||||
|
||||
|
||||
define background model
|
||||
(
|
||||
# sombre, sensible, artistic
|
||||
color "red"
|
||||
|
||||
# most maps will need a bounding box
|
||||
boundary 1
|
||||
|
||||
gui_nose 0
|
||||
gui_grid 0
|
||||
|
||||
obstacle_return 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 10 # simulation timestep in milliseconds
|
||||
|
||||
|
||||
window
|
||||
(
|
||||
size [ 1500.000 1500.000 ]
|
||||
|
||||
rotate [ 0.000 0 ]
|
||||
scale 50
|
||||
|
||||
show_data 1 # 1=on 0=off
|
||||
)
|
||||
|
||||
|
||||
# load an environment bitmap
|
||||
|
||||
floorplan
|
||||
(
|
||||
name "test_1"
|
||||
bitmap "map.pgm"
|
||||
size [16.15 7.85 0]
|
||||
pose [0.15 0.1 0 0 ]
|
||||
)
|
||||
|
||||
define pioneer_base position
|
||||
(
|
||||
color "red" # Default color.
|
||||
drive "diff" # Differential steering model.
|
||||
gui_nose 0 # Draw a nose on the robot so we can see which way it points
|
||||
obstacle_return 0 # Can hit things.
|
||||
ranger_return 0.5 # reflects sonar beams
|
||||
blob_return 1 # Seen by blobfinders
|
||||
fiducial_return 1 # Seen as "1" fiducial finders
|
||||
|
||||
localization "gps"
|
||||
localization_origin [0 0 0 0] # Start odometry at (0, 0, 0).
|
||||
|
||||
# alternative odometric localization with simple error model
|
||||
# localization "odom" # Change to "gps" to have impossibly perfect, global odometry
|
||||
# odom_error [ 0.05 0.05 0.1 ] # Odometry error or slip in X, Y and Theta
|
||||
# (Uniform random distribution)
|
||||
|
||||
# four DOF kinematics limits
|
||||
# [ xmin xmax ymin ymax zmin zmax amin amax ]
|
||||
velocity_bounds [-1 1 0 0 0 0 -45.0 45.0 ]
|
||||
acceleration_bounds [-1.0 1.0 0 0 0 0 -45 45.0 ]
|
||||
)
|
||||
|
||||
define pioneer2dx_base_no_sonar pioneer_base
|
||||
(
|
||||
# actual size
|
||||
size [0.44 0.38 0.22] # sizes from MobileRobots' web site
|
||||
|
||||
# the pioneer's center of rotation is offset from its center of area
|
||||
origin [-0.04 0 0 0]
|
||||
|
||||
# draw a nose on the robot so we can see which way it points
|
||||
gui_nose 0
|
||||
|
||||
# estimated mass in KG
|
||||
mass 23.0
|
||||
)
|
||||
|
||||
# as above, but with front sonar only
|
||||
define pioneer2dx_no_sonar pioneer2dx_base_no_sonar
|
||||
(
|
||||
# simplified Body shape:
|
||||
block(
|
||||
points 8
|
||||
point[0] [-0.2 0.12]
|
||||
point[1] [-0.2 -0.12]
|
||||
point[2] [-0.12 -0.2555]
|
||||
point[3] [0.12 -0.2555]
|
||||
point[4] [0.2 -0.12]
|
||||
point[5] [0.2 0.12]
|
||||
point[6] [0.12 0.2555]
|
||||
point[7] [-0.12 0.2555]
|
||||
z [0 0.22]
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
pioneer2dx_no_sonar
|
||||
(
|
||||
# can refer to the robot by this name
|
||||
name "robot_0"
|
||||
color "red"
|
||||
pose [ 0 0 0 0 ]
|
||||
hokuyolaser(pose [ 0.225 0.000 -0.15 0.000 ])
|
||||
)
|
||||
|
||||
pioneer2dx_no_sonar
|
||||
(
|
||||
# can refer to the robot by this name
|
||||
name "robot_1"
|
||||
color "blue"
|
||||
pose [ -5 -2 0 0 ]
|
||||
hokuyolaser(pose [ 0.225 0.000 -0.15 0.000 ])
|
||||
)
|
||||
|
||||
pioneer2dx_no_sonar
|
||||
(
|
||||
# can refer to the robot by this name
|
||||
name "robot_2"
|
||||
color "green"
|
||||
pose [ 5 -2 0 180 ]
|
||||
hokuyolaser(pose [ 0.225 0.000 -0.15 0.000 ])
|
||||
)
|
||||
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
|
||||
<!DOCTYPE boost_serialization>
|
||||
<boost_serialization signature="serialization::archive" version="12">
|
||||
<MapInfo class_id="0" tracking_level="0" version="0">
|
||||
<mapName>map</mapName>
|
||||
<distanceMapName>distfield</distanceMapName>
|
||||
<voronoiMapName>voronoi</voronoiMapName>
|
||||
<resolution>5.000000075e-02</resolution>
|
||||
<cols>330</cols>
|
||||
<rows>167</rows>
|
||||
<origin_cols>1.500001252e-01</origin_cols>
|
||||
<origin_rows>-2.499993704e-02</origin_rows>
|
||||
</MapInfo>
|
||||
</boost_serialization>
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
|
|
@ -1,6 +0,0 @@
|
|||
image: map.pgm
|
||||
resolution: 0.050000
|
||||
origin: [-15.000000, -15.000000, 0.000000]
|
||||
negate: 0
|
||||
occupied_thresh: 0.65
|
||||
free_thresh: 0.196
|
||||
|
|
@ -1,159 +0,0 @@
|
|||
define hokuyolaser ranger
|
||||
(
|
||||
sensor(
|
||||
# laser-specific properties
|
||||
# factory settings for LMS200
|
||||
range [ 0.0 5.0 ]
|
||||
fov 270.0
|
||||
samples 270
|
||||
)
|
||||
model
|
||||
(
|
||||
# generic model properties
|
||||
size [ 0.07 0.07 0.05 ] # dimensions from LMS200 data sheet
|
||||
color "blue"
|
||||
obstacle_return 0
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
define floorplan model
|
||||
(
|
||||
# sombre, sensible, artistic
|
||||
color "gray30"
|
||||
|
||||
# most maps will need a bounding box
|
||||
boundary 1
|
||||
|
||||
gui_nose 0
|
||||
gui_grid 0
|
||||
|
||||
obstacle_return 1
|
||||
gui_outline 0
|
||||
gripper_return 0
|
||||
fiducial_return 0
|
||||
laser_return 1
|
||||
)
|
||||
|
||||
|
||||
define background model
|
||||
(
|
||||
# sombre, sensible, artistic
|
||||
color "red"
|
||||
|
||||
# most maps will need a bounding box
|
||||
boundary 1
|
||||
|
||||
gui_nose 0
|
||||
gui_grid 0
|
||||
|
||||
obstacle_return 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 10 # simulation timestep in milliseconds
|
||||
|
||||
|
||||
window
|
||||
(
|
||||
size [ 1500.000 1500.000 ]
|
||||
|
||||
rotate [ 0.000 0 ]
|
||||
scale 50
|
||||
|
||||
show_data 1 # 1=on 0=off
|
||||
)
|
||||
|
||||
# load an environment bitmap
|
||||
|
||||
floorplan
|
||||
(
|
||||
name "test_1"
|
||||
bitmap "map.pgm"
|
||||
size [16.0 16.0 0]
|
||||
pose [ 0 0 0 0 ]
|
||||
)
|
||||
|
||||
define pioneer_base position
|
||||
(
|
||||
color "red" # Default color.
|
||||
drive "diff" # Differential steering model.
|
||||
gui_nose 0 # Draw a nose on the robot so we can see which way it points
|
||||
obstacle_return 0 # Can hit things.
|
||||
ranger_return 0.5 # reflects sonar beams
|
||||
blob_return 1 # Seen by blobfinders
|
||||
fiducial_return 1 # Seen as "1" fiducial finders
|
||||
|
||||
localization "gps"
|
||||
localization_origin [0 0 0 0] # Start odometry at (0, 0, 0).
|
||||
|
||||
# alternative odometric localization with simple error model
|
||||
# localization "odom" # Change to "gps" to have impossibly perfect, global odometry
|
||||
# odom_error [ 0.05 0.05 0.1 ] # Odometry error or slip in X, Y and Theta
|
||||
# (Uniform random distribution)
|
||||
|
||||
# four DOF kinematics limits
|
||||
# [ xmin xmax ymin ymax zmin zmax amin amax ]
|
||||
velocity_bounds [-1 1 0 0 0 0 -45.0 45.0 ]
|
||||
acceleration_bounds [-1.0 1.0 0 0 0 0 -45 45.0 ]
|
||||
)
|
||||
|
||||
define pioneer2dx_base_no_sonar pioneer_base
|
||||
(
|
||||
# actual size
|
||||
size [0.44 0.38 0.22] # sizes from MobileRobots' web site
|
||||
|
||||
# the pioneer's center of rotation is offset from its center of area
|
||||
origin [-0.04 0 0 0]
|
||||
|
||||
# draw a nose on the robot so we can see which way it points
|
||||
gui_nose 0
|
||||
|
||||
# estimated mass in KG
|
||||
mass 23.0
|
||||
)
|
||||
|
||||
# as above, but with front sonar only
|
||||
define pioneer2dx_no_sonar pioneer2dx_base_no_sonar
|
||||
(
|
||||
# simplified Body shape:
|
||||
block(
|
||||
points 8
|
||||
point[0] [-0.2 0.12]
|
||||
point[1] [-0.2 -0.12]
|
||||
point[2] [-0.12 -0.2555]
|
||||
point[3] [0.12 -0.2555]
|
||||
point[4] [0.2 -0.12]
|
||||
point[5] [0.2 0.12]
|
||||
point[6] [0.12 0.2555]
|
||||
point[7] [-0.12 0.2555]
|
||||
z [0 0.22]
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
pioneer2dx_no_sonar
|
||||
(
|
||||
# can refer to the robot by this name
|
||||
name "robot_0"
|
||||
color "red"
|
||||
pose [ -2.9 -4 0 90 ]
|
||||
hokuyolaser(pose [ 0.225 0.000 -0.15 0.000 ])
|
||||
)
|
||||
|
||||
pioneer2dx_no_sonar
|
||||
(
|
||||
# can refer to the robot by this name
|
||||
name "robot_1"
|
||||
color "blue"
|
||||
pose [ 2.4 5 0 -90 ]
|
||||
hokuyolaser(pose [ 0.225 0.000 -0.15 0.000 ])
|
||||
)
|
||||
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
|
||||
<!DOCTYPE boost_serialization>
|
||||
<boost_serialization signature="serialization::archive" version="12">
|
||||
<MapInfo class_id="0" tracking_level="0" version="0">
|
||||
<mapName>map</mapName>
|
||||
<distanceMapName>distfield</distanceMapName>
|
||||
<voronoiMapName>voronoi</voronoiMapName>
|
||||
<resolution>5.000000075e-02</resolution>
|
||||
<cols>600</cols>
|
||||
<rows>600</rows>
|
||||
<origin_cols>2.235174179e-07</origin_cols>
|
||||
<origin_rows>2.235174179e-07</origin_rows>
|
||||
</MapInfo>
|
||||
</boost_serialization>
|
||||
|
||||
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue