This repository has been archived by the owner on Dec 1, 2020. It is now read-only.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Feature/pm 524 Generalize motor controller #284
base: develop
Are you sure you want to change the base?
Feature/pm 524 Generalize motor controller #284
Changes from 12 commits
6abd775
c8f3af5
f07ebf8
1db4b01
7cf1336
9d320e5
fffab68
ae33d44
00e9bad
2e1b2f4
ef553b9
a60801f
087227e
9d8bc65
81423e5
5e73645
f0c296f
ea89e8e
03c994a
df36bbf
5edecb5
58fbd2f
855e436
e68a574
0a1c16a
c49c6b3
0fbe358
4f66858
b48674d
81f0db4
41257c8
79a93a3
1e55adb
ea171c0
9b5cc5c
File filter
Filter by extension
Conversations
Jump to
There are no files selected for viewing
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What if my motor controller does not have either an absolute or incremental encoder?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I thought about this; the incremental/absolute encoders are a characteristic of Joint rather than of the motor controller, so it would make more sense to move such specifications there. That would require me to subclass Joint into different types, which I preferred to avoid, especially since our current three options for motor controllers will probably be connected to both types of encoders. I think such a refactor of the joint class is better postponed to a moment in the future where an encoder is actually connected to something other than a motor controller.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hmm on second thought, I could move the calculations using both encoders downstream to the motor controller. Then these would simplify to getPosition() and getVelocity(). Downside would be that these calculations would be that this code would probably be duplicate in each different MotorController class, but that might again be resolvable by inheriting from a MultipleEncodersMotorControllers class that implements these methods common for motor controllers with both encoders.
That was a nice spam of hersenspinsels, let me know if it makes any sense and what you think.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Decided that since the 3 motor controllers currently under consideration all have both an incremental and an absolute encoder, this change is not very useful for now. It won't be difficult to implement later on when such a motor controller is actually put to use.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What if a motor controller isn't a slave or doesn't use the master-slave structure.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Added a docstring to explain
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This also seems like a very specific function that should not be inside the motor controller class. When I read this method call I cannot tell what it would do generally on most controllers.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Added a docstring with explanation. This method is relevant as long as a motor controller has both an incremental and an absolute encoder.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What if my motor controller does not need a cycle time, but it does need something else for initialization. That would require adding more parameters and therefore breaking the contract.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think you could alternatively pass something like that to the constructor as well, but I guess that wouldn't be very need since you need it nowhere else. I think I am going to :ostrich: this problem since it is highly dependent on how exactly the startup of another motor controller would work, which is a bit difficult to predict. I will see if I get useful enough insight from the ODrive and the Ingenia to make general statements about this. Otherwise, I think I will leave it up to future generations to redesign this a bit.