new obelisk_typing.py file created to store all relevant types for type checking and dynamic typing use-cases like in ObeliskNode. for consistency, all types are now specified as TypeVars to prevent ambiguity about what fields the types may have.
major upgrades to ObeliskNode. Now, the core idea for configuring these nodes is that callback groups, timers, publishers, and subscribers can be configured by what is called a configuration string. This is a stringified version of the information contained in some configuration yaml file that the user supplies to launch files to bring up Obelisk nodes. This massively simplifies the creation of expected publisher/subscriber combinations in each type of node, like controllers, estimators, etc.
allow user to manually allow non-Obelisk publishers/subscribers if they really want to for maximum flexibility
removed workaround script in pixi.toml for downgrading pytest. Easier to just specify the pytest version as a non-pypi dependency.
Obelisk Modules
[x] ObeliskController
[x] ObeliskEstimator
[x] ObeliskSensor
[x] ObeliskRobot
[x] ObeliskSim(ObeliskRobot)
Maintenance/Code
[x] Separate tests into semantically different test functions cleanly - currently pretty messy
[x] Bulk up test cases with language model suggestions
[x] Remove JointEncoder in favor of just JointEncoders
[x] Consider making it the standard to initialize the value of stateful quantities in on_configure instead of __init__
[x] Remove x_hat from the attributes of the ObeliskController. Let the user manage the internals themselves.
[x] Change default ROS config string param names to be have suffix settings instead of config_str.
[x] Comment out auto sensor list publisher/subscriber creation in ObeliskRobot and ObeliskSensor
Future
[ ] Add a required_fields argument to all component creation functions to enforce conditionally required fields. This is useful for, e.g., when we want to help the user make a bunch of publishers from a list of config strings.
[ ] Potential TODO: Add checks that restrict the message types of publishers/subscribers depending on the ObeliskNode type (for instance, in the ObeliskController, we should restrict that the publisher can only publisher ObeliskControlMsg types)
Continues the work of #20.
Additional changes besides main tasks:
obelisk_typing.py
file created to store all relevant types for type checking and dynamic typing use-cases like inObeliskNode
. for consistency, all types are now specified asTypeVar
s to prevent ambiguity about what fields the types may have.ObeliskNode
. Now, the core idea for configuring these nodes is that callback groups, timers, publishers, and subscribers can be configured by what is called a configuration string. This is a stringified version of the information contained in some configuration yaml file that the user supplies to launch files to bring up Obelisk nodes. This massively simplifies the creation of expected publisher/subscriber combinations in each type of node, like controllers, estimators, etc.workaround
script inpixi.toml
for downgradingpytest
. Easier to just specify thepytest
version as a non-pypi dependency.Obelisk Modules
Maintenance/Code
JointEncoder
in favor of justJointEncoders
on_configure
instead of__init__
x_hat
from the attributes of theObeliskController
. Let the user manage the internals themselves.settings
instead ofconfig_str
.ObeliskRobot
andObeliskSensor
Future
required_fields
argument to all component creation functions to enforce conditionally required fields. This is useful for, e.g., when we want to help the user make a bunch of publishers from a list of config strings.ObeliskNode
type (for instance, in theObeliskController
, we should restrict that the publisher can only publisherObeliskControlMsg
types)