Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

blacknode-controllers

This repository is the controller layer. Components operate on stable robot and perception capabilities and remain independent of vendor drivers. Motion components begin disabled until their contracts, mock providers, and safety tests are implemented.

Each component keeps its transport-neutral contract separate from the adapters that put it on a wire. A ROS 2 adapter declares a versioned dependency on blacknode-ros2/core and never the other way round, so a second transport can be added later as a sibling adapter.

Components

Component Default ROS 2 adapter nodes
joint-control on JointMotionProfile, ROS2JointState, ROS2SetJoint, ROS2ManualMove, ROS2MotionDashboard
mobile-base off BaseSafetyGate, ROS2BaseMove, ROS2BaseStop, ROS2LaserScanCheck, ROS2OdomState
policy on PolicyRuntime, PolicySafetyGate
nav2, manipulation, command-arbitration, safety-supervisors off contracts only, not yet implemented

joint-control

Drives any robot exposing sensor_msgs/msg/JointState: topics, joint name, and units are all inputs, so robot specifics live in templates rather than in the nodes. transport=auto prefers native rclpy and falls back to rosbridge.

Motion is gated. ROS2SetJoint does nothing until armed=true; while disarmed it still reads live pose, so the preview shows real numbers and the exact target it would command. Armed moves sync to the current pose first, clamp to any limits published on the config topic, and stream a heartbeat so the robot driver's own timeout still applies.

JointMotionProfile selects and previews direct, linear, trapezoidal, or minimum_jerk point-to-point motion. It reports the calculated duration, sample count, peak velocity, and peak acceleration and outputs a canonical profile contract for ROS2SetJoint. The motion node remains the only component that can publish, so profiling does not bypass its disarmed gate or limits. linear remains the default on saved and unwired ROS2SetJoint nodes.

ROS2ManualMove releases or holds torque for hand positioning and owns the live joint monitor; ROS2MotionDashboard renders either its live pose or a one-time before/after motion result. Both are managed live services: inspect them with get_editor_runtime_status and stop them with stop_editor_runtime_services. Releasing torque disables actuator holding power, so support the arm before doing it.

Template: Move a Robot Joint (components/joint-control/adapters/ros2/templates/).

About

Navigation, manipulation, policy execution, command arbitration, and safety controller components for Blacknode.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages