Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Partial joints #68

Merged
merged 3 commits into from
Jul 18, 2020
Merged

Conversation

v-lopez
Copy link
Contributor

@v-lopez v-lopez commented Jun 17, 2020

Fixes #31
Fixes #37

@codecov-commenter
Copy link

codecov-commenter commented Jun 17, 2020

Codecov Report

Merging #68 into master will increase coverage by 2.66%.
The diff coverage is n/a.

Impacted file tree graph

@@            Coverage Diff             @@
##           master      #68      +/-   ##
==========================================
+ Coverage   33.12%   35.78%   +2.66%     
==========================================
  Files          12       14       +2     
  Lines        1123     1358     +235     
  Branches      740      879     +139     
==========================================
+ Hits          372      486     +114     
+ Misses        103       91      -12     
- Partials      648      781     +133     
Flag Coverage Δ
#unittests 35.78% <ø> (+2.66%) ⬆️
Impacted Files Coverage Δ
...include/joint_trajectory_controller/trajectory.hpp 46.66% <0.00%> (-20.00%) ⬇️
...int_trajectory_controller/test/test_trajectory.cpp 24.71% <0.00%> (-1.66%) ⬇️
...ers/joint_trajectory_controller/src/trajectory.cpp 54.11% <0.00%> (ø)
.../joint_state_controller/joint_state_controller.hpp 100.00% <0.00%> (ø)
...jectory_controller/joint_trajectory_controller.hpp 100.00% <0.00%> (ø)
...te_controller/test/test_joint_state_controller.cpp 19.65% <0.00%> (ø)
...te_controller/test/test_joint_state_controller.hpp 100.00% <0.00%> (ø)
...ory_controller/test/test_trajectory_controller.cpp 23.48% <0.00%> (+1.47%) ⬆️
...ory_controller/src/joint_trajectory_controller.cpp 45.10% <0.00%> (+3.41%) ⬆️
...ectory_controller/test/test_trajectory_actions.cpp 38.49% <0.00%> (+8.24%) ⬆️
... and 1 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update d2e940a...188c0e4. Read the comment docs.

@bmagyar bmagyar requested review from bmagyar and Karsten1987 and removed request for bmagyar June 26, 2020 08:56
@v-lopez
Copy link
Contributor Author

v-lopez commented Jun 29, 2020

@ddengster Could I get your take on these changes?

Copy link
Contributor

@ddengster ddengster left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the PR and sorry for the late reply. In general the only bug to fix is the joint->get_position() call.

const auto & joint_state = registered_joint_state_handles_[index];
for (auto & it : trajectory_msg->points) {
// Assume hold position with 0 velocity and acceleration for missing joints
it.positions.push_back(joint_state->get_position());
Copy link
Contributor

@ddengster ddengster Jul 1, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This function is called on a separate thread from the main JTC updating loop, you'll get some kind of race condition if you call joint_state->get_position() here.

traj_external_point_ptr_->update(msg); is where we sync up, we could put some kind of coordination there or delay it until the first parsing of the message (this is how I did immediate playbacks of trajectory messages where messages are sent with time 0). Perhaps we could use a boolean per joint to indicate whether to retain the last known joint position.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for noticing this, it is indeed a problem.

Furthermore, On the topic callback we update the trajectory without acquiring the trajectory_mtx_ which is another race condition.

Probably when we receive a trajectory (whether from topic or action) on an "auxiliary thread" we should do some basic checks to ensure that we can accept it, and store it somewhere protected by a mutex.

Then on the next update call on the "main thread", we should process it, fill the partial goals and do whatever needs to be done.

Something along these lines I believe would fix these issues.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've pushed a fix for these issues on this same branch. 188c0e4

@bmagyar bmagyar merged commit 3c6c176 into ros-controls:master Jul 18, 2020
fmauch pushed a commit to fmauch/ros2_controllers that referenced this pull request Feb 23, 2022
@fmauch fmauch mentioned this pull request Feb 23, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
4 participants