Giter VIP home page Giter VIP logo

arox_docking's Introduction

Autonomous Docking: AROX (Autonomous Robotic Experimentation Platform) -> Inductive Charging Station

unstable License: MIT

Detailed background information is available in my master's thesis (chapter 4.2 "Autonomous Energy Supply").

Video demonstration of the system in the Gazebo simulation: Autonomous Docking with an Inductive Charging Station.

Architecture

Autonomous Energy Supply

(a) Robot facing base station (b) Base station perception based on lidar data (c) Successful detection of base station shape:

  • Assumed: State: CONTAINER_PROXIMITY
    • robot drove near the container, e.g. based on GPS
    • postcondition: robot faces container in certain area

  • State: DETECT_CONTAINER (laser scans, possibly camera)
    • precondition: robot faces container in certain area
    • postcondition: localized container + ramp
  • State: ALIGN_ROBOT_TO_RAMP (defined pose)
    • preconditions:
      • robot in front of container
      • localized container + ramp
      • ramp lowered
    • postcondition: robot aligned in front of ramp
  • State: DRIVE_INTO_CONTAINER
    • preconditions:
      • robot aligned in front of ramp
      • free space in container
    • postcondition: robot inside the container
  • State: LOCALIZE_CHARGING_STATION (laser scans, possibly camera)
    • precondition: robot inside the container
    • postcondition: localized charging station
  • State: ALIGN_ROBOT_TO_CHARGING_STATION (defined pose)
    • precondition: localized charging station
    • postcondition: robot aligned with charging station
  • State: DOCK
    • precondition: robot aligned with charging station
    • postcondition: robot charging

Undocking

  • Assumed: State: INSIDE_CONTAINER
    • postcondition: robot inside the container
  • State: DETECT_ENTRY
    • precondition: robot inside the container
    • postcondition: localized container entry
  • State: DRIVE_OUT_OF_CONTAINER
    • precondition: localized container entry
    • postcondition: robot located in front of the container

Dependencies / Compatible Branches

  • arox_docker: dockerization of the AROX system
  • arox_description: ROS launch files and URDF model for the AROX system
    • branch: feature_flying_sick_tim
  • container_description: ROS launch files and URDF model for the mobile container (charge station)
    • branch: feature_lta_conatiner
  • innok_heros_description: URDF description for Innok Heros robot
    • branch: arox_noetic
  • innok_heros_driver: ROS driver for the Innok Heros robot platform
    • branch: master
  • velodyne_simulator: URDF and gazebo plugin to provide simulated data from Velodyne laser scanners
    • branch: master
  • gazebo_langsenkamp: Langsenkamp world (test field)
    • branch: feature_lta_layout
  • [Since the docker container still uses python2, there is a python2 compatible branch feature/python2_compatible]

Usage

  • run simulation (with GUI): roslaunch arox_description launch_arox_sim.launch gui:=true
  • spawn container: roslaunch container_description spawn.launch
  • spawn AROX: roslaunch arox_description spawn.launch
  • run AROX controllers: roslaunch arox_description run_controllers.launch
  • run docker container named 'arox_docking': aroxstartdocker arox_docking (alias)
    • launch outdoor simulation: roslaunch arox_launch arox_sim_outdoor.launch
  • provide docking / undocking actions: roslauch arox_docking docking.launch
  • start docking / undocking test loop: rosrun arox_docking test_loop.py

Action API

The docking / undocking state machines provide implementations of the SimpleActionServer (cf. http://wiki.ros.org/actionlib).
Docking Example

docking_client = actionlib.SimpleActionClient('dock_to_charging_station', DockAction)
goal = DockGoal()
goal.goal = "custom_goal"
docking_client.wait_for_server()
docking_client.send_goal(goal)

Undocking Example

undocking_client = actionlib.SimpleActionClient('undock_from_charging_station', UndockAction)
goal = UndockGoal()
goal.ramp_alignment_pose = robot_pose  # optional
undocking_client.wait_for_server()
undocking_client.send_goal(goal)

Plan Executor (within Docker Container)

  • access exploration GUI: http://localhost/exploration_gui/
  • run AROX engine: rosrun arox_engine arox_engine.py
  • run AROX planner: rosrun arox_planning arox_planner.py

Control AROX

  • launch keyboard control: rosrun teleop_twist_keyboard teleop_twist_keyboard.py

Visualize Sensor Data and Detection Markers

  • rViz
    • fixed frame: map
    • open the provided config conf.rviz

Open Container (Adjust Joint Position)

  • rostopic pub -1 /container/rampA_position_controller/command std_msgs/Float64 "data: 1.57"

Related Publications

@inproceedings{Bohne:2023,
    author = {Tim Bohne and Gurunatraj Parthasarathy and Benjamin Kisliuk},
    title = {A systematic approach to the development of long-term autonomous robotic systems for agriculture},
    booktitle = {43. GIL-Jahrestagung, Resiliente Agri-Food-Systeme, 13.-14. Februar 2023, Osnabr{\"{u}}ck, Germany},
    series = {{LNI}},
    volume = {{P-330}},
    pages = {285--290},
    publisher = {Gesellschaft f{\"{u}}r Informatik e.V.},
    year = {2023},
    url = {https://dl.gi.de/handle/20.500.12116/40260},
    biburl = {https://dblp.org/rec/conf/gil/BohnePK23.bib},
    bibsource = {dblp computer science bibliography, https://dblp.org}
}

@mastersthesis{Bohne:2022,
    author = {Bohne, Tim},
    year = {2022},
    month = {04},
    title = {Execution Monitoring for Long-Term Autonomous Plant Observation with a Mobile Robot}
}

arox_docking's People

Contributors

tbohne avatar

Stargazers

 avatar

Watchers

 avatar

arox_docking's Issues

Provide 'arox_practice' branch

Provide arox_practice branch where all the necessary changes in order to run the code on the real robot should be done:

  • e.g. sim_time=false in the launch file

Precise docking

  • develop solution that takes care of the very precise alignment in front of the charging station
  • should be started after the rough docking with container detection etc. is done
  • at times the accuracy of the current solution in terms of alignment in front of the charging plate is not good enough

e.g.:
image

Use UTM coordinates instead of map coordinates for the goals

  • that way the localization is able to adjust because both the localization and the goal position is based on UTM
    • can you send move_base_goals as UTM?
    • even if not, you can compare the goal to the robot pos and recognize when they don't match
  • another useful idea:
    • transform the points in the laser scan from base_link to utm and throw away all of them that are for example too far away to be interesting or in the wrong direction

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.