Giter Club home page Giter Club logo

atom's Introduction

ATOM Calibration

A Calibration Framework using the
Atomic Transformations Optimization Method

ATOM is a set of calibration tools for multi-sensor, multi-modal, robotic systems, based on the optimization of atomic transformations as provided by a ROS based robot description. Moreover, ATOM provides several scripts to facilitate all the steps of a calibration procedure.

For instructions on how to install and use, check the documentation:

https://lardemua.github.io/atom_documentation/

Also, you can take a look at the ATOM youtube playlist.

Support

If this work is helpful for you please cite our papers:

  • Oliveira, M., E. Pedrosa, A. Aguiar, D. Rato, F. Santos, P. Dias, V. Santos, ATOM: A general calibration framework for multi-modal, multi-sensor systems, Expert Systems with Applications (2022), 118000, ISSN 0957-4174, https://doi.org/10.1016/j.eswa.2022.118000. Bibtex.

  • Rato, D., M. Oliveira, V. Santos, M. Gomes, A. Sappa, A sensor-to-pattern calibration framework for multi-modal industrial collaborative cells, Journal of Manufacturing Systems (2022), Volume 64, Pages 497-507, ISSN 0278-6125, https://doi.org/10.1016/j.jmsy.2022.07.006. Bibtex.

  • Pedrosa, E., M. Oliveira, N. Lau, and V. Santos, A General Approach to Hand–Eye Calibration Through the Optimization of Atomic Transformations, IEEE Transactions on Robotics (2021) pp. 1–15, DOI: https://doi.org/10.1109/TRO.2021.3062306, 2021. Bibtex.

  • Aguiar, A., M. Oliveira, E. Pedrosa, and F. Santos, A Camera to LiDAR calibration approach through the Optimization of Atomic Transformations, Expert Systems with Applications (2021) p. 114894, ISSN: 0957-4174, DOI: https://doi.org/10.1016/j.eswa.2021.114894, 2021. Bibtex.

  • Oliveira, M., A. Castro, T. Madeira, E. Pedrosa, P. Dias, and V. Santos, A ROS framework for the extrinsic calibration of intelligent vehicles: A multi-sensor, multi-modal approach, Robotics and Autonomous Systems (2020) p. 103558, ISSN: 0921-8890, DOI: https://doi.org/10.1016/j.robot.2020.103558, 2020. Bibtex.

Contributors

  • Miguel Riem Oliveira - University of Aveiro
  • Afonso Castro - University of Aveiro
  • Eurico Pedrosa - University of Aveiro
  • Tiago Madeira - University of Aveiro
  • André Aguiar - INESC TEC
  • Daniela Rato - University of Aveiro

Maintainers

  • Miguel Riem Oliveira - University of Aveiro
  • Daniela Rato - University of Aveiro
  • Manuel Gomes - University of Aveiro

atom's People

Contributors

miguelriemoliveira avatar kazadhum avatar danifpdra avatar aaguiar96 avatar eupedrosa avatar afonsocastro avatar danielcoelho112 avatar manuelgitgomes avatar tiagomfmadeira avatar analtino2021 avatar markushillemann avatar bernardomig avatar kovlo avatar

atom's Issues

Automatic Data Collection

Hi @miguelriemoliveira and @rarrais!

So, while the next meeting doesn't come, I wanted to ask something. So here's where we're currently at in terms of integrating ATOM in this pipeline:

image

To make the data collection a part of the pipeline, I need to make that process automatic, right? So I had an idea, to add an optional argument to the collect_data script that would make it save a collection every X seconds and also add a timeout so that the process ends without user interaction.

But that would be changing the ATOM source code, so I wanted to ask if:

a) Is this a good idea, or worth exploring?
b) If so, do you know if some sort of solution already exists that would solve this?

If you think this is a good idea, I'll create an issue in the original ATOM repo and explore it before the next meeting. I would be working on this fork, of course.

Issue with Rigel update

Hi @MisterOwlPT !

So, that problem I mentioned in our meeting today with Rigel came back, even after pulling again from the flow branch.

After trying to run that compose job, I get the following error message:

WARNING - Press CTRL-C / CTRL-Z to stop execution
Connecting to providers
Created Docker network 'rigel-simulation-6b59b5ee-2252-11ee-8d75-eb3be3b61acc'
Created ROS master 'master-6b59b5ee-2252-11ee-8d75-eb3be3b61acc'
Traceback (most recent call last):
  File "/home/diogo/.cache/pypoetry/virtualenvs/rigel-qWiewPfQ-py3.8/bin/rigel", line 6, in <module>
    sys.exit(main())
  File "/home/diogo/rigel/rigel/main.py", line 50, in main
    cli()
  File "/home/diogo/.cache/pypoetry/virtualenvs/rigel-qWiewPfQ-py3.8/lib/python3.8/site-packages/click/core.py", line 1130, in __call__
    return self.main(*args, **kwargs)
  File "/home/diogo/.cache/pypoetry/virtualenvs/rigel-qWiewPfQ-py3.8/lib/python3.8/site-packages/click/core.py", line 1055, in main
    rv = self.invoke(ctx)
  File "/home/diogo/.cache/pypoetry/virtualenvs/rigel-qWiewPfQ-py3.8/lib/python3.8/site-packages/click/core.py", line 1657, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/home/diogo/.cache/pypoetry/virtualenvs/rigel-qWiewPfQ-py3.8/lib/python3.8/site-packages/click/core.py", line 1657, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/home/diogo/.cache/pypoetry/virtualenvs/rigel-qWiewPfQ-py3.8/lib/python3.8/site-packages/click/core.py", line 1404, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/home/diogo/.cache/pypoetry/virtualenvs/rigel-qWiewPfQ-py3.8/lib/python3.8/site-packages/click/core.py", line 760, in invoke
    return __callback(*args, **kwargs)
  File "/home/diogo/rigel/rigel/cli/command.py", line 23, in callback
    f(self, *f_args, **f_kwargs)
  File "/home/diogo/rigel/rigel/cli/run.py", line 25, in job
    orchestrator.run_job(job)
  File "/home/diogo/rigel/rigel/orchestrator.py", line 222, in run_job
    self.execute(execution_plan)
  File "/home/diogo/rigel/rigel/orchestrator.py", line 199, in execute
    stage.execute(
  File "/home/diogo/rigel/rigel/executor.py", line 219, in execute
    job.start()
  File "/home/diogo/rigel/rigel/plugins/core/compose/plugin.py", line 224, in start
    self.bringup_ros_nodes()
  File "/home/diogo/rigel/rigel/plugins/core/compose/plugin.py", line 108, in bringup_ros_nodes
    container = self.run_package_container(test_component, master_ip)
  File "/home/diogo/rigel/rigel/plugins/core/compose/plugin.py", line 140, in run_package_container
    kwargs['volumes'] = self.convert_volumes(kwargs['volumes'])
  File "/home/diogo/rigel/rigel/plugins/core/compose/plugin.py", line 92, in convert_volumes
    result.append(tuple(volume.split(':')))
AttributeError: 'tuple' object has no attribute 'split'

If there's anything different I should be doing since the update to this branch, let me know! 😄

Local testing of ATOM image via Rigel

The third goal here is to get Rigel to automatically test the generated docker image locally, using:

rigel run job test

Or, if the "test" sequence only has the test job:

rigel run sequence test

Error with Rigel's RoboMaker Plugin

Hi @MisterOwlPT!

I've got some doubts as to how to use the RoboMaker plugin for Rigel.

  1. The template I have for the Rigelfile is from way back when I started working with Rigel. Having gone through many updates, is there anything I should know about that has changed?

  2. In order to only run one container (in this case, only the robot-app), so I simply not include the other one?

Besides these questions, I've tried using the plugin a couple of times and I've ran into an traceback message that I don't understand (I've removed the ECR link from the message):

WARNING - Press CTRL-C / CTRL-Z to stop execution
Connecting to providers
Attempting login with ECR '********************************'

Login Succeeded
Logged in with success to ECR '********************************'
Authenticated with AWS RoboMaker.
Found existing robot application 'rigel_robomaker_robot_application'
Traceback (most recent call last):
  File "/home/diogo/.cache/pypoetry/virtualenvs/rigel-qWiewPfQ-py3.8/bin/rigel", line 6, in <module>
    sys.exit(main())
  File "/home/diogo/rigel/rigel/main.py", line 50, in main
    cli()
  File "/home/diogo/.cache/pypoetry/virtualenvs/rigel-qWiewPfQ-py3.8/lib/python3.8/site-packages/click/core.py", line 1130, in __call__
    return self.main(*args, **kwargs)
  File "/home/diogo/.cache/pypoetry/virtualenvs/rigel-qWiewPfQ-py3.8/lib/python3.8/site-packages/click/core.py", line 1055, in main
    rv = self.invoke(ctx)
  File "/home/diogo/.cache/pypoetry/virtualenvs/rigel-qWiewPfQ-py3.8/lib/python3.8/site-packages/click/core.py", line 1657, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/home/diogo/.cache/pypoetry/virtualenvs/rigel-qWiewPfQ-py3.8/lib/python3.8/site-packages/click/core.py", line 1657, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/home/diogo/.cache/pypoetry/virtualenvs/rigel-qWiewPfQ-py3.8/lib/python3.8/site-packages/click/core.py", line 1404, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/home/diogo/.cache/pypoetry/virtualenvs/rigel-qWiewPfQ-py3.8/lib/python3.8/site-packages/click/core.py", line 760, in invoke
    return __callback(*args, **kwargs)
  File "/home/diogo/rigel/rigel/cli/command.py", line 23, in callback
    f(self, *f_args, **f_kwargs)
  File "/home/diogo/rigel/rigel/cli/run.py", line 25, in job
    orchestrator.run_job(job)
  File "/home/diogo/rigel/rigel/orchestrator.py", line 222, in run_job
    self.execute(execution_plan)
  File "/home/diogo/rigel/rigel/orchestrator.py", line 199, in execute
    stage.execute(
  File "/home/diogo/rigel/rigel/executor.py", line 218, in execute
    job.setup()
  File "/home/diogo/rigel/rigel/plugins/aws/robomaker/plugin.py", line 257, in setup
    self.__simulation_job = self.create_simulation_job()
  File "/home/diogo/rigel/rigel/plugins/aws/robomaker/plugin.py", line 192, in create_simulation_job
    simulation_job = self.__robomaker_client.create_simulation_job(**kwargs)
  File "/home/diogo/.cache/pypoetry/virtualenvs/rigel-qWiewPfQ-py3.8/lib/python3.8/site-packages/botocore/client.py", line 530, in _api_call
    return self._make_api_call(operation_name, kwargs)
  File "/home/diogo/.cache/pypoetry/virtualenvs/rigel-qWiewPfQ-py3.8/lib/python3.8/site-packages/botocore/client.py", line 919, in _make_api_call
    request_dict = self._convert_to_request_dict(
  File "/home/diogo/.cache/pypoetry/virtualenvs/rigel-qWiewPfQ-py3.8/lib/python3.8/site-packages/botocore/client.py", line 990, in _convert_to_request_dict
    request_dict = self._serializer.serialize_to_request(
  File "/home/diogo/.cache/pypoetry/virtualenvs/rigel-qWiewPfQ-py3.8/lib/python3.8/site-packages/botocore/validate.py", line 381, in serialize_to_request
    raise ParamValidationError(report=report.generate_report())
botocore.exceptions.ParamValidationError: Parameter validation failed:
Invalid length for parameter dataSources, value: 0, valid min length: 1

For reference, here's the Rigelfile section regarding the RoboMaker plugin:

robomaker:
    plugin: "rigel.plugins.aws.RoboMakerPlugin"
    with:
      iam_role: "{{ vars.AWS_IAM_ROLE }}"
      output_location: "rigel-robomaker-logs"
      simulation_duration: 600

      robot_application:
        ecr: "{{ vars.AWS_ECR }}/atom_image:latest"
        command: ["roslaunch", "t2rgb_bringup", "app_launch.launch", "motion_sequence_file:=/home/rigeluser/ros_workspace/src/t2rgb/movement_sequences/movement_sequence.json", "output_folder:=/home/rigeluser/ros_workspace/src/t2rgb/datasets/new_dataset", "overwrite:=true"]
        
        environment:
          - "GAZEBO_MASTER_URI=http://ROBOMAKER_SIM_APP_IP:11345"
          - "ROS_IP=ROBOMAKER_ROBOT_APP_IP"
          - "ROS_MASTER_URI=http://ROBOMAKER_ROBOT_APP_IP:11311"
        
        ports:
          - !!python/tuple [9090, 9090]
        
        tools:
          -
            name: 'terminal'
            command: "{{ vars.robomaker_tool_terminal_cmd }}"
            stream_output_to_cloud_watch: True
            stream_ui: True
          
          -
            name: 'rviz'
            command: "{{ vars.robomaker_tool_rviz_cmd}}"
            stream_output_to_cloud_watch: True
            stream_ui: True
          
          -
            name: 'gzclient'
            command: "{{ vars.robomaker_tool_gazebo_cmd}}"
            stream_output_to_cloud_watch: True
            stream_ui: True

      vpc_config:
        subnets:
          - "subnet-0c31fe89fff4cda00"
          - "subnet-0229c1b42075fddf3"
        security_groups:
          - "sg-06f70b36208dde8bc"
        assign_public_ip: True

Thank you once again for your help!

Tool for packaging ROS with Github Actions

Hello @Kazadhum!

I have heard you were trying to implement CI to ROS.

I saw this tool than (supposedly) can do this with GitHub Actions! It's here!

I have never tested it, so I cannot attest to the validity of the tool, but feel free to investigate it, if you so desire.

Build ATOM image using Rigel

Second goal is to have Rigel create a Docker image for ATOM, using:

rigel run job build

Or, with the sequence properly defined:

rigel run sequence deploy

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.