Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,11 @@ build-docs = { cmd = "python3 scripts/build_docs.py", depends-on = ["build"] }
[tool.pixi.environments]
docs = { features = ["docs"], solve-group = "default" }

## ruff options

[tool.ruff.lint.isort]
known-first-party = ["imetro_behavior", "imetro_behavior_msgs"]

## ty (type checking) options

[tool.ty.src]
Expand Down
3 changes: 2 additions & 1 deletion src/imetro_behavior/scripts/run_behavior.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,11 @@
# under the License.

import rclpy
from imetro_behavior.executor import BehaviorTreeServer
from rclpy.executors import MultiThreadedExecutor
from rclpy.node import Node

from imetro_behavior.executor import BehaviorTreeServer

if __name__ == "__main__":
rclpy.init()
node = Node("run_behavior")
Expand Down
3 changes: 2 additions & 1 deletion src/imetro_behavior/tests/test_apriltag_behaviors.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,13 @@
import cv2
import pytest
from ament_index_python.packages import get_package_share_path
from imetro_behavior.apriltag_behaviors import DetectAprilTag
from py_trees.blackboard import Blackboard
from py_trees.common import Status
from rclpy.node import Node
from sensor_msgs.msg import CameraInfo, Image

from imetro_behavior.apriltag_behaviors import DetectAprilTag


@pytest.fixture()
def apriltag_behavior(ros_node: Node):
Expand Down
3 changes: 2 additions & 1 deletion src/imetro_behavior/tests/test_basic_behaviors.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,13 @@
# License for the specific language governing permissions and limitations
# under the License.

from imetro_behavior.basic_behaviors import BlackboardMath, WaitForDuration
from py_trees.blackboard import Blackboard
from py_trees.common import Status
from rclpy.duration import Duration
from rclpy.node import Node

from imetro_behavior.basic_behaviors import BlackboardMath, WaitForDuration


def test_wait_for_duration_zero_duration(ros_node: Node) -> None:
behavior = WaitForDuration(name="wait", duration_sec=0.0)
Expand Down
11 changes: 6 additions & 5 deletions src/imetro_behavior/tests/test_control_behaviors.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,17 +19,18 @@
from control_msgs.action import GripperCommand
from controller_manager_msgs.msg import ControllerState
from controller_manager_msgs.srv import ListControllers, SwitchController
from py_trees.blackboard import Blackboard
from py_trees.common import Status
from rcl_interfaces.msg import ParameterType, SetParametersResult
from rcl_interfaces.srv import SetParametersAtomically
from rclpy.node import Node

from imetro_behavior.control_behaviors import (
CommandGripper,
GetRosControllerInfo,
SwitchRosControllers,
UpdateAdmittanceParameters,
)
from py_trees.blackboard import Blackboard
from py_trees.common import Status
from rcl_interfaces.msg import ParameterType, SetParametersResult
from rcl_interfaces.srv import SetParametersAtomically
from rclpy.node import Node


@pytest.fixture()
Expand Down
3 changes: 2 additions & 1 deletion src/imetro_behavior/tests/test_decorators.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,11 @@
# under the License.

import py_trees
from imetro_behavior.decorators import SuccessIfVariableIsFalse, SuccessIfVariableIsTrue
from py_trees.blackboard import Blackboard
from py_trees.common import Status

from imetro_behavior.decorators import SuccessIfVariableIsFalse, SuccessIfVariableIsTrue


def test_success_if_variable_is_true_skips_child() -> None:
child = py_trees.behaviours.Failure(name="child")
Expand Down
3 changes: 2 additions & 1 deletion src/imetro_behavior/tests/test_executor.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,14 @@
from pathlib import Path

import pytest
from imetro_behavior.executor import BehaviorTreeExecutor, BehaviorTreeServer
from py_trees.blackboard import Blackboard
from py_trees.common import Status
from py_trees.ports import BehaviourWithPorts
from rclpy.executors import MultiThreadedExecutor
from rclpy.node import Node

from imetro_behavior.executor import BehaviorTreeExecutor, BehaviorTreeServer


class AlwaysSucceed(BehaviourWithPorts):
"""Test behavior that immediately succeeds. Auto-registered for use in tree XML."""
Expand Down
11 changes: 6 additions & 5 deletions src/imetro_behavior/tests/test_geometry_behaviors.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,12 @@
import numpy as np
import pytest
from geometry_msgs.msg import PoseStamped, TransformStamped
from py_trees.blackboard import Blackboard
from py_trees.common import Status
from rclpy.node import Node
from scipy.spatial.transform import Rotation as R
from tf2_ros import Buffer

from imetro_behavior.geometry_behaviors import (
AlignPoseToNearestAxis,
CreatePoseStamped,
Expand All @@ -35,11 +41,6 @@
TwistAboutPose,
YamlPoseToPoseStamped,
)
from py_trees.blackboard import Blackboard
from py_trees.common import Status
from rclpy.node import Node
from scipy.spatial.transform import Rotation as R
from tf2_ros import Buffer


@pytest.fixture()
Expand Down
3 changes: 2 additions & 1 deletion src/imetro_behavior/tests/test_joint_behaviors.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,12 @@
from pathlib import Path

import pytest
from imetro_behavior.joint_behaviors import JointNamesAndPositionsFromYaml
from py_trees.blackboard import Blackboard
from py_trees.common import Status
from rclpy.node import Node

from imetro_behavior.joint_behaviors import JointNamesAndPositionsFromYaml


@pytest.fixture()
def yaml_joint_behavior(ros_node: Node, tmp_path: Path, mocker) -> JointNamesAndPositionsFromYaml:
Expand Down
22 changes: 11 additions & 11 deletions src/imetro_behavior/tests/test_moveit_behaviors.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,17 +19,6 @@
import pytest
from ament_index_python.packages import get_package_share_path
from geometry_msgs.msg import PoseStamped, TransformStamped
from imetro_behavior.moveit_behaviors import (
ExecuteTrajectoryBehavior,
ModifyCollisions,
PlanArcPath,
PlanCartesian,
PlanningSceneFromRobotDescription,
PlanToJointState,
PlanToPose,
RequestPlanningScene,
RequestTrajectoryApproval,
)
from moveit_msgs.action import ExecuteTrajectory
from moveit_msgs.msg import (
AllowedCollisionEntry,
Expand All @@ -49,6 +38,17 @@
from shape_msgs.msg import SolidPrimitive
from tf2_ros import Buffer

from imetro_behavior.moveit_behaviors import (
ExecuteTrajectoryBehavior,
ModifyCollisions,
PlanArcPath,
PlanCartesian,
PlanningSceneFromRobotDescription,
PlanToJointState,
PlanToPose,
RequestPlanningScene,
RequestTrajectoryApproval,
)
from imetro_behavior_msgs.action import PreviewTrajectory


Expand Down
3 changes: 2 additions & 1 deletion src/imetro_behavior/tests/test_nav_behaviors.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,13 @@
# under the License.

from geometry_msgs.msg import PoseStamped
from imetro_behavior.nav_behaviors import NavigateToPoseBehavior
from nav2_msgs.action import NavigateToPose
from py_trees.blackboard import Blackboard
from py_trees.common import Status
from rclpy.node import Node

from imetro_behavior.nav_behaviors import NavigateToPoseBehavior


def test_navigate_to_pose_create_goal(ros_node: Node) -> None:
behavior = NavigateToPoseBehavior(name="navigate", action_name="/navigate_to_pose")
Expand Down
9 changes: 5 additions & 4 deletions src/imetro_behavior/tests/test_ros_behaviors.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,6 @@
import pytest
from action_msgs.msg import GoalStatus
from control_msgs.action import GripperCommand
from imetro_behavior.ros_behaviors.action_client import RosActionClientBase
from imetro_behavior.ros_behaviors.perception import GetSyncedImagePointCloudDepth
from imetro_behavior.ros_behaviors.service_client import CallTriggerService
from imetro_behavior.ros_behaviors.subscriber_base import GetStringTopic
from py_trees.common import Status
from py_trees.ports import NoDataAvailable
from rclpy.duration import Duration
Expand All @@ -31,6 +27,11 @@
from std_msgs.msg import String
from std_srvs.srv import Trigger

from imetro_behavior.ros_behaviors.action_client import RosActionClientBase
from imetro_behavior.ros_behaviors.perception import GetSyncedImagePointCloudDepth
from imetro_behavior.ros_behaviors.service_client import CallTriggerService
from imetro_behavior.ros_behaviors.subscriber_base import GetStringTopic


class TrackingActionBehavior(RosActionClientBase):
"""Minimal concrete action behavior that records what process_result() receives."""
Expand Down