robotpt / cordial Goto Github PK
View Code? Open in Web Editor NEWA framework for coordinating robot behavior.
License: MIT License
A framework for coordinating robot behavior.
License: MIT License
Currently, the GUI uses services, which are blocking until a request is recieved. It would be much nicer to use actions, which can be canceled.
Also, this would allow the timeout logic to be moved from the GUI to be within the manager, which is probably better design.
Currently, nodes take in parameters in several different ways. It would be nice to unify how this is done.
I think it would be good to assign parameters to variables in class constructors, this would be instead of reading the parameters outside of the constructor and passing them into the constructor, which is much more verbose.
It would be great to run the tests repeatedly for a couple hours at night. This will help us to identify flaky tests.
We should make a GUI interface display for people with low vision. This means big text and high contrast.
Github seems to have disabled the set-env
command, we'll need to update our CI to avoid using this command.
Here is the error I found:
Traceback (most recent call last):
File "example_say_and_ask_on_gui.py", line 4, in <module>
from cordial_msgs.srv import Ask, AskRequest
ImportError: cannot import name Ask
A good example is here.
It makes sense to move the GUI's controller into the manager because @emilyxzhou has updated the manager to use ROS actions, giving the manager the ability to cancel requests and update its plan based on feedback from the GUI (such as if the user is interacting with the GUI).
Currently, we call each of the tests individually.
cordial/docker/scripts/test_entrypoint.sh
Line 11 in ce6bb61
It would be nice to use test discovery. Perhaps we can use catkin build
, which will probably require us to expose tests in the CMakeLists.txt
files.
For example pytest-cov
.
This is an important module and locking it in with tests would allow us to have more courage to refactor it.
This approach will make it easier to understand what can be varied in Cordial.
There are two major reasons to run our CI often, even if it's not associated with a push:
Here is one possible way of doing this.
It will be better to have the cordial specific things here.
The readme should mention the following:
It would be nice to add tests here.
Cordial uses Python 2.7, which is no longer supported. ROS1 works with Python 3 (here is a tutorial). It would be great to allow Cordial to support Python 3.x.
The Dockerfile currently builds from an image that has had cordial setup in it. I am not sure that tests the current branch, or the even the latest code in cordial. I think that we should build the full container each time that a push is created (i.e., the Dockerfile should start at the ROS kinetic image, install cordial's dependencies, and build cordial). It will take longer, but there are several reasons to do this:
I suspect that the reason an image with cordial setup is used is because it allows us to move the Dockerfile from the top directory. We can probably get around the issue by copying the projects contents beneath the Dockerfile (maybe using a symbolic link?) in the Github action. If this turns out to be difficult and the Dockerfile needs to be in the top directory, so be it.
One thing to realize is that when you make a Docker image, it is like a freeze of that container at a specific time. Your Dockerfile is not run in pulling the image. You just get the previous result of each line in the Dockerfile - that's what the layers are when you're pulling an image. These layers are like binary files, and that's why it's faster to pull an image than rebuild that image from a Dockerfile. It is because of this that code added to the image and packages installed will be in the same version when you pull the image at a later time as when you created the image originally.
It would be cool to have an automated way of pushing an image of this project to DockerHub. This would make setup with the project faster and easier, as instead of building from a Dockerfile, you could just receive the binary files.
Currently, the following error is raised when there are invalid AWS credentials.
AttributeError: CordialManager instance has no attribute '_aws_client'
It would be nice to make this error more informative by mentioning that the credentials are not working.
This error was mentioned in #18.
We currently use http-server
which is installed with NodeJS and NPM. Python has a built-in http-server, that we can use. This change will require modifying http_server_runner.py
.
For example:
This is probably best done after #5.
This could be mostly unittests. Integration tests would also be great, but might be harder to do. This will probably be similar to #45.
Currently, sounds to be played is sent in one large message with the full sound to play. It would be much nicer if the sound was streamed to be played in smaller chunks (i.e., a second or less of sound). This would allow dialog to be interupted immediately.
The face is one of the largest pieces of code in this repository. I think a lot of the code there is unnecessary and that the organization could be improved significantly.
Currently, topic names are hard-coded into scripts that use them. It would be better to have all of the topics stored as parameters in ROS's parameter server.
This could be accomplished through having a single YAML file which lists all of the topics for this repository; this YAML file would then be loaded into the parameter server. This approach would also make it easier to control which topics should be public and private, as many topics are used internally and should not be publicly exposed.
Currently, we have a few tests, but they need to be run manually and are time-consuming. It would be useful to have continuous integration so that we can be sure that changes to the code or package updates won't break anything.
Here's an example repository using Actions for reference.
Putting all of Cordial's interfaces into one package would make importing messages much easier.
It would be great to add tests here.
For example using pytest-flake8
The integration tests sometimes fail when executed in the Docker-based action, usually with the error message "AttributeError: CordialManager instance has no attribute '_aws_client'". Although this error is resolved upon re-running the action, the tests should be fixed so we can be sure that errors are caused by modifications to the code, and not the tests themselves.
It would be helpful to have documentation that talks about how to set up and use Cordial.
Currently CI triggers only on push events (and soon on scheduled intervals #33). I did this because I could not figure out a way to get the branch name for both pull requests and push events.
GITHUB_REF#refs/heads/
returns the branch name after stripping refs/heads
from it.github.event.pull_request.head.ref
. GITHUB_REF#refs/heads/
returns something with merge
and the PR's number, so that doesn't work.I believe that we'll have have to use conditional logic to avoid having two workflows. Perhaps, this could be an example.
I'm surprised that I'm not able to find a better tool for doing this. I tried this action, which does the same thing as GITHUB_REF#/*
(doesn't work for pull requests or pushes with a /
in the name, e.g., audrow/feature
would be parsed to feature
). Perhaps this is worth trying.
This could be mostly unittests. Integration tests would also be great, but might be harder to do.
It's important to have tests so we can ensure things are in a working state and have multiple people contribute.
rostest
If possible, it would be great to run the examples in CI, so that we can confirm that they're always working (e.g., we can avoid things like #40).
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.