From 33c8f828b000b3580262deaeefee38641d042290 Mon Sep 17 00:00:00 2001 From: Florian Vahl <git@flova.de> Date: Fri, 11 Aug 2023 22:02:08 +0200 Subject: [PATCH 01/74] Cleanup motion --- bitbots_animation_server/launch/test.launch | 10 +- bitbots_dynamic_kick/launch/test.launch | 24 +- bitbots_dynamic_kick/launch/viz.launch | 15 +- .../test/rostests/test_kick_runs.launch | 15 - .../test/rostests/test_kick_runs.py | 53 -- bitbots_dynup/launch/test.launch | 12 +- .../test/rostests/test_dynup_runs.launch | 12 - .../test/rostests/test_dynup_runs.py | 48 -- bitbots_hcm/bitbots_hcm/fall_classifier.py | 5 +- .../bitbots_hcm/humanoid_control_module.py | 76 +- bitbots_hcm/launch/test.launch | 6 +- bitbots_hcm/package.xml | 7 +- bitbots_head_mover/CMakeLists.txt | 87 ++ bitbots_head_mover/config/head_config.yml | 234 ++++++ bitbots_head_mover/launch/head_mover.launch | 10 + .../launch/head_mover_standalone.launch | 19 + bitbots_head_mover/launch/test.launch | 61 ++ bitbots_head_mover/package.xml | 39 + bitbots_head_mover/src/move_head.cpp | 788 ++++++++++++++++++ .../config/odometry_config_default.yaml | 7 + bitbots_quintic_walk/launch/test.launch | 19 +- .../test/rostests/test_walk.launch | 11 - .../test/rostests/test_walk.py | 179 ---- .../test/rostests/test_walk_runs.launch | 12 - .../test/rostests/test_walk_runs.py | 24 - bitbots_rl_motion/launch/test.launch | 17 +- 26 files changed, 1369 insertions(+), 421 deletions(-) delete mode 100644 bitbots_dynamic_kick/test/rostests/test_kick_runs.launch delete mode 100755 bitbots_dynamic_kick/test/rostests/test_kick_runs.py delete mode 100644 bitbots_dynup/test/rostests/test_dynup_runs.launch delete mode 100755 bitbots_dynup/test/rostests/test_dynup_runs.py create mode 100644 bitbots_head_mover/CMakeLists.txt create mode 100644 bitbots_head_mover/config/head_config.yml create mode 100644 bitbots_head_mover/launch/head_mover.launch create mode 100644 bitbots_head_mover/launch/head_mover_standalone.launch create mode 100644 bitbots_head_mover/launch/test.launch create mode 100644 bitbots_head_mover/package.xml create mode 100644 bitbots_head_mover/src/move_head.cpp create mode 100644 bitbots_odometry/config/odometry_config_default.yaml delete mode 100644 bitbots_quintic_walk/test/rostests/test_walk.launch delete mode 100755 bitbots_quintic_walk/test/rostests/test_walk.py delete mode 100644 bitbots_quintic_walk/test/rostests/test_walk_runs.launch delete mode 100755 bitbots_quintic_walk/test/rostests/test_walk_runs.py diff --git a/bitbots_animation_server/launch/test.launch b/bitbots_animation_server/launch/test.launch index 831b0e4e9..b58faa1b6 100644 --- a/bitbots_animation_server/launch/test.launch +++ b/bitbots_animation_server/launch/test.launch @@ -7,9 +7,9 @@ <include file="$(find-pkg-share bitbots_ros_control)/launch/ros_control.launch" /> </group> - <group> - <include file="$(find-pkg-share bitbots_utils)/launch/base.launch" /> - </group> - <node pkg="bitbots_animation_server" exec="animation_node" output="screen" launch-prefix="$(var taskset)"/> - <node name="animation_hcm_bridge" pkg="bitbots_animation_server" exec="animation_hcm_bridge.py" output="screen" launch-prefix="$(var taskset)"/> + <include file="$(find-pkg-share bitbots_bringup)/launch/base.launch" /> + <include file="$(find-pkg-share bitbots_utils)/launch/motion_base.launch" /> + + <node pkg="bitbots_animation_server" exec="animation_node" output="screen" launch-prefix="$(var taskset)"/> + <node name="animation_hcm_bridge" pkg="bitbots_animation_server" exec="animation_hcm_bridge.py" output="screen" launch-prefix="$(var taskset)"/> </launch> \ No newline at end of file diff --git a/bitbots_dynamic_kick/launch/test.launch b/bitbots_dynamic_kick/launch/test.launch index 8bb2a48c4..13f1d8621 100644 --- a/bitbots_dynamic_kick/launch/test.launch +++ b/bitbots_dynamic_kick/launch/test.launch @@ -6,14 +6,30 @@ <let if="$(env IS_ROBOT false)" name="taskset" value="taskset -c 3,4"/> <let unless="$(env IS_ROBOT false)" name="taskset" value=""/> - <include file="$(find-pkg-share bitbots_utils)/launch/base.launch" > + <include file="$(find-pkg-share bitbots_bringup)/launch/base.launch" > <arg name="sim" value="$(var sim)"/> </include> + <include file="$(find-pkg-share bitbots_utils)/launch/motion_base.launch" > + <arg name="sim" value="$(var sim)"/> + </include> + + <!-- launch the base footprint --> + <node pkg="humanoid_base_footprint" exec="base_footprint" output="screen"> + <param name="support_state_topics" value="[walk_support_state, dynamic_kick_support_state]"/> + <param name="use_sim_time" value="$(var sim)"/> + </node> + + <!-- launch the odometry --> + <include file="$(find-pkg-share bitbots_odometry)/launch/odometry.launch"> + <arg name="sim" value="$(var sim)"/> + </include> + + <group unless="$(var sim)"> <group unless="$(var viz)"> <include file="$(find-pkg-share bitbots_ros_control)/launch/ros_control.launch" /> - <node pkg="bitbots_dynamic_kick" exec="KickNode" output="screen" launch-prefix="$(var taskset)"> --> + <node pkg="bitbots_dynamic_kick" exec="KickNode" output="screen" launch-prefix="$(var taskset)"> <remap from="/kick_motor_goals" to="/DynamixelController/command"/> <param from="$(find-pkg-share bitbots_dynamic_kick)/config/kick_config.yaml" /> </node> @@ -21,14 +37,14 @@ </group> <group if="$(var sim)"> - <node pkg="bitbots_dynamic_kick" exec="KickNode" output="screen" launch-prefix="$(var taskset)"> --> + <node pkg="bitbots_dynamic_kick" exec="KickNode" output="screen" launch-prefix="$(var taskset)"> <remap from="/kick_motor_goals" to="/DynamixelController/command"/> <param from="$(find-pkg-share bitbots_dynamic_kick)/config/kick_sim_config.yaml" /> </node> </group> <group if="$(var viz)"> - <node pkg="bitbots_dynamic_kick" exec="KickNode" output="screen" launch-prefix="$(var taskset)"> --> + <node pkg="bitbots_dynamic_kick" exec="KickNode" output="screen" launch-prefix="$(var taskset)"> <param from="$(find-pkg-share bitbots_dynamic_kick)/config/kick_sim_config.yaml" /> </node> <node pkg="bitbots_utils" exec="motor_goals_viz_helper.py" output="screen" args="--kick" /> diff --git a/bitbots_dynamic_kick/launch/viz.launch b/bitbots_dynamic_kick/launch/viz.launch index 4bdc594e9..bab163ae9 100644 --- a/bitbots_dynamic_kick/launch/viz.launch +++ b/bitbots_dynamic_kick/launch/viz.launch @@ -1,8 +1,21 @@ <launch> - <include file="$(find-pkg-share bitbots_utils)/launch/base.launch" /> + <include file="$(find-pkg-share bitbots_bringup)/launch/base.launch" /> + + <include file="$(find-pkg-share bitbots_utils)/launch/motion_base.launch" /> + + <!-- launch the base footprint --> + <node pkg="humanoid_base_footprint" exec="base_footprint" output="screen"> + <param name="support_state_topics" value="[walk_support_state, dynamic_kick_support_state]"/> + </node> + + <!-- launch the odometry --> + <include file="$(find-pkg-share bitbots_odometry)/launch/odometry.launch" /> + <node name="rviz2" pkg="rviz2" exec="rviz2" output="screen" args="-d $(find-pkg-share wolfgang_description)/config/wolfgang.rviz" /> + <node name="motor_goals_viz_helper" pkg="bitbots_utils" exec="motor_goals_viz_helper.py" args="--kick" /> + <node pkg="bitbots_dynamic_kick" exec="KickNode" output="screen"> <param from="$(find-pkg-share bitbots_dynamic_kick)/config/kick_config.yaml" /> </node> diff --git a/bitbots_dynamic_kick/test/rostests/test_kick_runs.launch b/bitbots_dynamic_kick/test/rostests/test_kick_runs.launch deleted file mode 100644 index 88f597557..000000000 --- a/bitbots_dynamic_kick/test/rostests/test_kick_runs.launch +++ /dev/null @@ -1,15 +0,0 @@ -<?xml version="1.0"?> -<launch> - <include file="$(find-pkg-share bitbots_bringup)/launch/base.launch" > - <arg name="sim" value="true"/> - </include> - - <param name="use_sim_time" value="false" /> - - <node name="dynamic_kick" pkg="bitbots_dynamic_kick" exec="KickNode" output="screen"> - <rosparam command="load" file="$(find-pkg-share bitbots_dynamic_kick)/config/kick_config.yaml" /> - <rosparam command="load" file="$(find-pkg-share bitbots_dynamic_kick)/config/kick_config_unstable.yaml" /> - </node> - - <test pkg="bitbots_dynamic_kick" exec="test_kick_runs.py" test-name="kick_runs" time-limit="300" /> -</launch> diff --git a/bitbots_dynamic_kick/test/rostests/test_kick_runs.py b/bitbots_dynamic_kick/test/rostests/test_kick_runs.py deleted file mode 100755 index 3b04c3a7f..000000000 --- a/bitbots_dynamic_kick/test/rostests/test_kick_runs.py +++ /dev/null @@ -1,53 +0,0 @@ -#!/usr/bin/env python3 -from bitbots_test.test_case import RosNodeTestCase -from bitbots_test.mocks import MockSubscriber -from actionlib_msgs.msg import GoalStatus -from bitbots_msgs.msg import KickAction, KickGoal, JointCommand -from geometry_msgs.msg import Quaternion -from rclpy.action import ActionClient -import rclpy -from rclpy.node import Node - - -class KickRunsTestCase(RosNodeTestCase): - def single_run(self, goal): - def done_cb(state, result): - assert state == GoalStatus.SUCCEEDED, "Kick was not successful" - self.kick_succeeded = True - - self.kick_succeeded = False - - sub = MockSubscriber('kick_motor_goals', JointCommand) - self.with_assertion_grace_period(lambda: self.assertNodeRunning("dynamic_kick"), 20) - client = ActionClient(self, KickAction, 'dynamic_kick') - assert client.wait_for_server(), "Kick action server not running" - - client.send_goal_async(goal) - client.done_cb = done_cb - client.wait_for_result() - sub.wait_until_connected() - sub.assertMessageReceived() - assert self.kick_succeeded, "Kick was not successful" - - def test_normal_kick(self): - goal = KickGoal() - goal.header.stamp = self.get_clock().now() - goal.header.frame_id = "base_footprint" - goal.ball_position.x = 0.2 - goal.kick_direction = Quaternion(0, 0, 0, 1) - goal.kick_speed = 1.0 - self.single_run(goal) - - def test_unstable_kick(self): - goal = KickGoal() - goal.header.stamp = self.get_clock().now() - goal.header.frame_id = "base_footprint" - goal.ball_position.x = 0.2 - goal.kick_direction = Quaternion(0, 0, 0, 1) - goal.kick_speed = 1.0 - goal.unstable = True - self.single_run(goal) - -if __name__ == '__main__': - from bitbots_test import run_rostests - run_rostests(KickRunsTestCase) diff --git a/bitbots_dynup/launch/test.launch b/bitbots_dynup/launch/test.launch index d3cf6bc85..8afbc0104 100644 --- a/bitbots_dynup/launch/test.launch +++ b/bitbots_dynup/launch/test.launch @@ -8,12 +8,14 @@ <let if="$(env IS_ROBOT false)" name="taskset" value="taskset -c 3,4"/> <let unless="$(env IS_ROBOT false)" name="taskset" value=""/> - <group> - <include file="$(find-pkg-share bitbots_utils)/launch/base.launch" > + <include file="$(find-pkg-share bitbots_bringup)/launch/base.launch" > + <arg name="sim" value="$(var sim)"/> + <arg name="robot_type" value="$(var robot_type)"/> + </include> + + <include file="$(find-pkg-share bitbots_utils)/launch/motion_base.launch" > <arg name="sim" value="$(var sim)"/> - <arg name="robot_type" value="$(var robot_type)"/> - </include> - </group> + </include> <group unless="$(var sim)"> <group unless="$(var viz)"> diff --git a/bitbots_dynup/test/rostests/test_dynup_runs.launch b/bitbots_dynup/test/rostests/test_dynup_runs.launch deleted file mode 100644 index 2ae5ab423..000000000 --- a/bitbots_dynup/test/rostests/test_dynup_runs.launch +++ /dev/null @@ -1,12 +0,0 @@ -<?xml version="1.0"?> -<launch> - <include file="$(find-pkg-share bitbots_utils)/launch/base.launch" /> - - <rosparam command="load" file="$(find-pkg-share bitbots_dynup)/config/dynup_sim.yaml" /> - - <node name="dynup" pkg="bitbots_dynup" exec="DynupNode" output="screen" /> - - <node name="motors_helper" pkg="bitbots_utils" exec="motor_goals_viz_helper.py" args="--dynup" /> - - <test pkg="bitbots_dynup" exec="test_dynup_runs.py" test-name="dynup_runs" time-limit="300" /> -</launch> diff --git a/bitbots_dynup/test/rostests/test_dynup_runs.py b/bitbots_dynup/test/rostests/test_dynup_runs.py deleted file mode 100755 index 29b4ede94..000000000 --- a/bitbots_dynup/test/rostests/test_dynup_runs.py +++ /dev/null @@ -1,48 +0,0 @@ -#!/usr/bin/env python3 -from bitbots_test.test_case import RosNodeTestCase -from bitbots_test.mocks import MockSubscriber -from actionlib_msgs.msg import GoalStatus -from bitbots_msgs.msg import DynUpAction, DynUpGoal, JointCommand -from rclpy.action import ActionClient - - -class DynupRunsTestCase(RosNodeTestCase): - def one_run(self, direction): - def done_cb(state, result): - assert state == GoalStatus.SUCCEEDED, "Dynup was not successful" - self.kick_succeeded = True - - self.kick_succeeded = False - - sub = MockSubscriber('dynup_motor_goals', JointCommand) - self.with_assertion_grace_period(lambda: self.assertNodeRunning("dynup"), 20) - client = ActionClient(self, DynUpAction, 'dynup') - assert client.wait_for_server(), "Dynup action server not running" - - goal = DynUpGoal() - goal.direction = direction - client.send_goal_async(goal) - client.done_cb = done_cb - client.wait_for_result() - sub.wait_until_connected() - sub.assertMessageReceived() - assert self.kick_succeeded, "Dynup was not successful" - - def test_walkready(self): - self.one_run("walkready") - - def test_front(self): - self.one_run("front") - - def test_back(self): - self.one_run("back") - - def test_rise(self): - self.one_run("rise") - - def test_descend(self): - self.one_run("descend") - -if __name__ == '__main__': - from bitbots_test import run_rostests - run_rostests(DynupRunsTestCase) diff --git a/bitbots_hcm/bitbots_hcm/fall_classifier.py b/bitbots_hcm/bitbots_hcm/fall_classifier.py index 13500ab2b..254b354e8 100644 --- a/bitbots_hcm/bitbots_hcm/fall_classifier.py +++ b/bitbots_hcm/bitbots_hcm/fall_classifier.py @@ -7,6 +7,7 @@ from geometry_msgs.msg import Point import math import numpy as np +from ros2_numpy import numpify class FallClassifier: @@ -52,7 +53,7 @@ def smooth_classify(self, imu, joint_state, cop_l, cop_r): return result -def get_data_from_msgs(imu_msg, joint_state_msg, cop_l_msg, cop_r_msg, imu_raw=True, imu_orient=True, joint_states=True, +def get_data_from_msgs(imu_msg: Imu, joint_state_msg: JointState, cop_l_msg, cop_r_msg, imu_raw=True, imu_orient=True, joint_states=True, imu_fused=True, cop=True): data = [] if imu_raw: @@ -63,7 +64,7 @@ def get_data_from_msgs(imu_msg, joint_state_msg, cop_l_msg, cop_r_msg, imu_raw=T data.append(imu_msg.angular_velocity.y) data.append(imu_msg.angular_velocity.z) if imu_orient: - euler = transforms3d.euler.quat2euler([imu_msg.orientation.w, imu_msg.orientation.x, imu_msg.orientation.y, imu_msg.orientation.z]) + euler = transforms3d.euler.quat2euler(numpify(imu_msg.orientation)[[3, 0, 1, 2]]) data.append(euler[0]) data.append(euler[1]) data.append(euler[2]) diff --git a/bitbots_hcm/bitbots_hcm/humanoid_control_module.py b/bitbots_hcm/bitbots_hcm/humanoid_control_module.py index 1c9826357..c29f27ef7 100755 --- a/bitbots_hcm/bitbots_hcm/humanoid_control_module.py +++ b/bitbots_hcm/bitbots_hcm/humanoid_control_module.py @@ -1,37 +1,34 @@ #!/usr/bin/env python3 -import numpy + +import os +import threading import rclpy -from rclpy.duration import Duration -from rclpy.node import Node +from ament_index_python import get_package_share_directory +from bitbots_hcm.hcm_dsd.hcm_blackboard import HcmBlackboard +from bitbots_msgs.action import Dynup +from bitbots_msgs.msg import FootPressure +from bitbots_utils.utils import get_parameters_from_ros_yaml +from builtin_interfaces.msg import Time as TimeMsg +from diagnostic_msgs.msg import DiagnosticArray +from dynamic_stack_decider.dsd import DSD +from geometry_msgs.msg import PointStamped +from humanoid_league_msgs.action import PlayAnimation +from humanoid_league_msgs.msg import RobotControlState, Audio +from humanoid_league_speaker.speaker import speak +from rcl_interfaces.msg import Parameter as ParameterMsg from rclpy.action import ActionClient +from rclpy.duration import Duration from rclpy.executors import MultiThreadedExecutor +from rclpy.node import Node from rclpy.parameter import Parameter +from rclpy.serialization import deserialize_message from rclpy.time import Time - -from geometry_msgs.msg import PointStamped - -from std_msgs.msg import Bool +from ros2_numpy import numpify from sensor_msgs.msg import Imu, JointState -from diagnostic_msgs.msg import DiagnosticArray +from std_msgs.msg import Bool -from humanoid_league_msgs.msg import RobotControlState, Audio -from humanoid_league_msgs.action import PlayAnimation -from humanoid_league_speaker.speaker import speak -from bitbots_msgs.msg import FootPressure -from bitbots_msgs.action import Dynup - -from bitbots_hcm.hcm_dsd.hcm_blackboard import HcmBlackboard -from dynamic_stack_decider.dsd import DSD -import os -import threading -from bitbots_utils.utils import get_parameters_from_ros_yaml -from ament_index_python import get_package_share_directory -from rcl_interfaces.msg import Parameter as ParameterMsg -from rclpy.serialization import deserialize_message -from builtin_interfaces.msg import Time as TimeMsg class HardwareControlManager: - def __init__(self, use_sim_time, simulation_active, visualization_active): rclpy.init(args=None) node_name = "hcm_py" @@ -56,11 +53,9 @@ def __init__(self, use_sim_time, simulation_active, visualization_active): self.spin_thread = threading.Thread(target=multi_executor.spin, args=(), daemon=True) self.spin_thread.start() - self.blackboard = None - # --- Initialize Node --- # Otherwise messages will get lost, bc the init is not finished - self.node.get_clock().sleep_for(Duration(seconds=0.1)) + self.node.get_clock().sleep_for(Duration(seconds=0.5)) self.node.get_logger().debug("Starting hcm") self.simulation_active = self.node.get_parameter("simulation_active") # dsd @@ -171,33 +166,28 @@ def set_cop(self, cop_msg_serialized, left): self.blackboard.cop_r_msg = deserialize_message(cop_msg_serialized, PointStamped) def set_pressure_left(self, pressure_msg_serialized): - msg = deserialize_message(pressure_msg_serialized, FootPressure) + msg: FootPressure = deserialize_message(pressure_msg_serialized, FootPressure) self.blackboard.pressures[0] = msg.left_front self.blackboard.pressures[1] = msg.left_back self.blackboard.pressures[2] = msg.right_front self.blackboard.pressures[3] = msg.right_back def set_pressure_right(self, pressure_msg_serialized): - msg = deserialize_message(pressure_msg_serialized, FootPressure) + msg: FootPressure = deserialize_message(pressure_msg_serialized, FootPressure) self.blackboard.pressures[4] = msg.left_front self.blackboard.pressures[5] = msg.left_back self.blackboard.pressures[6] = msg.right_front self.blackboard.pressures[7] = msg.right_back def set_imu(self, imu_msg_serialized): - msg = deserialize_message(imu_msg_serialized, Imu) - - self.blackboard.accel = numpy.array( - [msg.linear_acceleration.x, msg.linear_acceleration.y, msg.linear_acceleration.z]) - self.blackboard.gyro = numpy.array([msg.angular_velocity.x, msg.angular_velocity.y, msg.angular_velocity.z]) - self.blackboard.quaternion = numpy.array( - ([msg.orientation.x, msg.orientation.y, msg.orientation.z, msg.orientation.w])) - - self.blackboard.smooth_gyro = numpy.multiply(self.blackboard.smooth_gyro, 0.95) + numpy.multiply( - self.blackboard.gyro, 0.05) - self.blackboard.smooth_accel = numpy.multiply(self.blackboard.smooth_accel, 0.99) + numpy.multiply( - self.blackboard.accel, 0.01) - self.blackboard.not_much_smoothed_gyro = numpy.multiply(self.blackboard.not_much_smoothed_gyro, - 0.5) + numpy.multiply(self.blackboard.gyro, 0.5) + msg: Imu = deserialize_message(imu_msg_serialized, Imu) + + self.blackboard.accel = numpify(msg.linear_acceleration) + self.blackboard.gyro = numpify(msg.angular_velocity) + self.blackboard.quaternion = numpify(msg.orientation) + + self.blackboard.smooth_gyro = 0.95 * self.blackboard.smooth_gyro + 0.05 * self.blackboard.gyro + self.blackboard.smooth_accel = 0.99 * self.blackboard.smooth_accel + 0.01 * self.blackboard.accel + self.blackboard.not_much_smoothed_gyro = 0.5 * self.blackboard.not_much_smoothed_gyro + 0.5 * self.blackboard.gyro self.blackboard.imu_msg = msg diff --git a/bitbots_hcm/launch/test.launch b/bitbots_hcm/launch/test.launch index 262385450..b27fdb66d 100644 --- a/bitbots_hcm/launch/test.launch +++ b/bitbots_hcm/launch/test.launch @@ -1,7 +1,11 @@ <launch> <arg name="sim" default="false" description="Disables checks for hardware, since we are in simulation."/> - <include file="$(find-pkg-share bitbots_utils)/launch/base.launch"> + <include file="$(find-pkg-share bitbots_bringup)/launch/base.launch"> + <arg name="sim" value="$(var sim)"/> + </include> + + <include file="$(find-pkg-share bitbots_utils)/launch/motion_base.launch" > <arg name="sim" value="$(var sim)"/> </include> diff --git a/bitbots_hcm/package.xml b/bitbots_hcm/package.xml index 48f0b36c5..6f07ddc82 100644 --- a/bitbots_hcm/package.xml +++ b/bitbots_hcm/package.xml @@ -23,13 +23,14 @@ <depend>geometry_msgs</depend> <depend>humanoid_league_msgs</depend> <depend>pybind11-dev</depend> + <depend>python3-numpy</depend> + <depend>python3-sklearn</depend> + <depend>python3-transforms3d</depend> <depend>rclpy</depend> + <depend>ros2_numpy</depend> <depend>ros2_python_extension</depend> <depend>sensor_msgs</depend> <depend>std_msgs</depend> - <depend>python3-sklearn</depend> - <depend>python3-transforms3d</depend> - <depend>python3-numpy</depend> <export> <bitbots_documentation> diff --git a/bitbots_head_mover/CMakeLists.txt b/bitbots_head_mover/CMakeLists.txt new file mode 100644 index 000000000..cd2564639 --- /dev/null +++ b/bitbots_head_mover/CMakeLists.txt @@ -0,0 +1,87 @@ +cmake_minimum_required(VERSION 3.8) +project(bitbots_head_mover) + +if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") + add_compile_options(-Wall -Wextra -Wpedantic) +endif() + +# find dependencies +find_package(ament_cmake REQUIRED) +find_package(backward_ros REQUIRED) +find_package(bio_ik REQUIRED) +find_package(bio_ik_msgs REQUIRED) +find_package(bitbots_msgs REQUIRED) +find_package(generate_parameter_library REQUIRED) +find_package(humanoid_league_msgs REQUIRED) +find_package(moveit_core REQUIRED) +find_package(moveit_msgs REQUIRED) +find_package(moveit_ros_planning REQUIRED) +find_package(moveit_ros_planning_interface REQUIRED) +find_package(rclcpp REQUIRED) +find_package(sensor_msgs REQUIRED) +find_package(std_msgs REQUIRED) +find_package(tf2_geometry_msgs REQUIRED) +find_package(tf2_kdl REQUIRED) +find_package(tf2_ros REQUIRED) + +set(CMAKE_BUILD_TYPE Debug) + +# uncomment the following section in order to fill in +# further dependencies manually. +# find_package(<dependency> REQUIRED) +generate_parameter_library( + head_parameters # cmake target name for the parameter library + config/head_config.yml) + +add_executable(move_head src/move_head.cpp) +target_link_libraries(move_head + rclcpp::rclcpp + head_parameters +) + + +ament_target_dependencies( + move_head +#head_capsule +backward_ros +bio_ik +bio_ik_msgs +bitbots_msgs +generate_parameter_library +humanoid_league_msgs +moveit_core +moveit_msgs +moveit_ros_planning +moveit_ros_planning_interface +rclcpp +sensor_msgs +std_msgs +tf2_geometry_msgs +tf2_kdl +tf2_ros + + +) + +install(TARGETS + move_head + DESTINATION lib/${PROJECT_NAME}) +if(BUILD_TESTING) + find_package(ament_lint_auto REQUIRED) + # the following line skips the linter which checks for copyrights + # comment the line when a copyright and license is added to all source files + set(ament_cmake_copyright_FOUND TRUE) + # the following line skips cpplint (only works in a git repo) + # comment the line when this package is in a git repo and when + # a copyright and license is added to all source files + set(ament_cmake_cpplint_FOUND TRUE) + ament_lint_auto_find_test_dependencies() +endif() + +install(DIRECTORY config + DESTINATION share/${PROJECT_NAME}) + +install(DIRECTORY launch + DESTINATION share/${PROJECT_NAME}) + +ament_package() diff --git a/bitbots_head_mover/config/head_config.yml b/bitbots_head_mover/config/head_config.yml new file mode 100644 index 000000000..69feb1be9 --- /dev/null +++ b/bitbots_head_mover/config/head_config.yml @@ -0,0 +1,234 @@ +move_head: + # Max values for the head position + max_acceleration_pan: + type: double + default_value: 14.0 + description: "Max acceleration for pan" + validation: + bounds<>: [-1, 20] + + max_acceleration_tilt: + type: double + default_value: 14.0 + description: "Max acceleration for tilt" + validation: + bounds<>: [-1, 20] + + max_pan: + type: double_array + default_value: [-2.35, 2.35] + description: "Max values for the head position (in radians)" + validation: + fixed_size<>: 2 + element_bounds<>: [-3.14, 3.14] + + max_tilt: + type: double_array + default_value: [-1.2, 0.2] + description: "Max values for the head position (in radians)" + validation: + fixed_size<>: 2 + + look_at: + tilt_speed: + type: double + default_value: 6.0 + validation: + bounds<>: [0.0, 8.0] + pan_speed: + type: double + default_value: 6.0 + validation: + bounds<>: [0.0, 8.0] + + # Search pattern for ball + search_pattern: + # search pattern speed + tilt_speed: + type: double + default_value: 3.0 + + pan_speed: + type: double + default_value: 3.0 + + # Max values for the search pattern + pan_max: + type: double_array + default_value: [135.0, -135.0] + description: "Maximum pan values for the search pattern (in degrees)" + validation: + fixed_size<>: 2 + + tilt_max: + type: double_array + default_value: [-10.0, -60.0] + description: "Maximum tilt values for the search pattern (in degrees)" + validation: + fixed_size<>: 2 + + # Number of scan lines for the search pattern + scan_lines: + type: int + default_value: 2 + description: "Number of scan lines for the search pattern" + validation: + gt_eq<>: [1] + + # Reduces last scanline by that factor so that robot does not collide + reduce_last_scanline: + type: double + default_value: 0.2 + description: "Reduces last scanline by that factor so that robot does not collide" + validation: + bounds<>: [0.0, 1.0] + + search_pattern_penalty: + tilt_speed: + type: double + default_value: 1.0 + + pan_speed: + type: double + default_value: 2.0 + + pan_max: + type: double_array + default_value: [-30.0, 30.0] + description: "Maximum pan values for the search pattern (in degrees)" + validation: + fixed_size<>: 2 + + tilt_max: + type: double_array + default_value: [-7.0, -30.0] + description: "Maximum tilt values for the search pattern (in degrees)" + validation: + fixed_size<>: 2 + + scan_lines: + type: int + default_value: 2 + validation: + gt_eq<>: [1] + + reduce_last_scanline: + type: double + default_value: 0.2 + description: "Reduces last scanline by that factor so that robot does not collide" + validation: + bounds<>: [0.0, 1.0] + + search_pattern_field_features: + tilt_speed: + type: double + default_value: 3.0 + + pan_speed: + type: double + default_value: 3.0 + + pan_max: + type: double_array + default_value: [-135.0, 135.0] + description: "Maximum pan values for the search pattern (in degrees)" + validation: + fixed_size<>: 2 + + tilt_max: + type: double_array + default_value: [-10.0, -60.0] + description: "Maximum tilt values for the search pattern (in degrees)" + validation: + fixed_size<>: 2 + + scan_lines: + type: int + default_value: 2 + validation: + gt_eq<>: [1] + + reduce_last_scanline: + type: double + default_value: 0.2 + description: "Reduces last scanline by that factor so that robot does not collide" + validation: + bounds<>: [0.0, 1.0] + + front_search_pattern: + tilt_speed: + type: double + default_value: 3.0 + + pan_speed: + type: double + default_value: 3.0 + + pan_max: + type: double_array + default_value: [ 0.0, 0.0 ] + description: "Maximum pan values for the search pattern (in degrees)" + validation: + fixed_size<>: 2 + + tilt_max: + type: double_array + default_value: [ -10.0, -70.0 ] + description: "Maximum tilt values for the search pattern (in degrees)" + validation: + fixed_size<>: 2 + + scan_lines: + type: int + default_value: 2 + validation: + gt_eq<>: [1] + + reduce_last_scanline: + type: double + default_value: 0.0 + description: "Reduces last scanline by that factor so that robot does not collide" + validation: + bounds<>: [0.0, 1.0] + + look_forward: + tilt_speed: + type: double + default_value: 3.0 + + pan_speed: + type: double + default_value: 3.0 + + pan_max: + type: double_array + default_value: [ 0.0, 0.0 ] + description: "Maximum pan values for the search pattern (in degrees)" + validation: + fixed_size<>: 2 + + tilt_max: + type: double_array + default_value: [ -7.0, -7.0 ] + description: "Maximum tilt values for the search pattern (in degrees)" + validation: + fixed_size<>: 2 + + scan_lines: + type: int + default_value: 2 + validation: + gt_eq<>: [1] + + reduce_last_scanline: + type: double + default_value: 0.0 + description: "Reduces last scanline by that factor so that robot does not collide" + validation: + bounds<>: [0.0, 1.0] + + position_reached_threshold: + type: double + default_value: 5.0 + description: "Threshold (in degrees) when a head position is reached and + the next position will be triggered" diff --git a/bitbots_head_mover/launch/head_mover.launch b/bitbots_head_mover/launch/head_mover.launch new file mode 100644 index 000000000..51a2aa9f6 --- /dev/null +++ b/bitbots_head_mover/launch/head_mover.launch @@ -0,0 +1,10 @@ +<launch> + <arg name="tf_prefix" default=""/> + <arg name="sim" default="false" /> + + <let unless="$(env IS_ROBOT false)" name="taskset" value=""/> + + <node pkg="bitbots_head_mover" exec="move_head" output="screen" respawn="true"> + <param name="use_sim_time" value="$(var sim)" /> + </node> +</launch> diff --git a/bitbots_head_mover/launch/head_mover_standalone.launch b/bitbots_head_mover/launch/head_mover_standalone.launch new file mode 100644 index 000000000..74e7a8a3c --- /dev/null +++ b/bitbots_head_mover/launch/head_mover_standalone.launch @@ -0,0 +1,19 @@ +<?xml version="1.0"?> +<launch> + <arg name="depends_only" default="false" /> + <arg name="sim" default="false" /> + + <include file="$(find-pkg-share bitbots_bringup)/launch/base.launch"> + <arg name="sim" value="$(var sim)"/> + </include> + + <include file="$(find-pkg-share bitbots_utils)/launch/motion_base.launch" > + <arg name="sim" value="$(var sim)"/> + </include> + + <include file="$(find-pkg-share bitbots_head_mover)/launch/head_mover.launch"> + <arg name="depends_only" value="$(var depends_only)"/> + <param name="use_sim_time" value="$(var sim)" /> + </include> + +</launch> diff --git a/bitbots_head_mover/launch/test.launch b/bitbots_head_mover/launch/test.launch new file mode 100644 index 000000000..7c7ea5954 --- /dev/null +++ b/bitbots_head_mover/launch/test.launch @@ -0,0 +1,61 @@ +<launch> + <arg name="sim" default="false"/> + <arg name="viz" default="false"/> + <arg name="depends_only" default="false" /> + <arg name="tf_prefix" default=""/> + + <group unless="$(var sim)"> + <group unless="$(var viz)"> + <include file="$(find-pkg-share bitbots_ros_control)/launch/ros_control.launch" /> + </group> + </group> + + <include file="$(find-pkg-share bitbots_bringup)/launch/base.launch" > + <arg name="sim" value="$(var sim)"/> + </include> + + <include file="$(find-pkg-share bitbots_utils)/launch/motion_base.launch" > + <arg name="sim" value="$(var sim)"/> + </include> + + <!-- launch the base footprint --> + <node pkg="humanoid_base_footprint" exec="base_footprint" output="screen"> + <param name="support_state_topics" value="[walk_support_state, dynamic_kick_support_state]"/> + <param name="use_sim_time" value="$(var sim)"/> + </node> + + <!-- launch the odometry --> + <include file="$(find-pkg-share bitbots_odometry)/launch/odometry.launch"> + <arg name="sim" value="$(var sim)"/> + </include> + + <include file="$(find-pkg-share bitbots_ball_filter)/launch/ball_filter.launch" > + <arg name="sim" value="$(var sim)"/> + </include> + + <group if="$(var viz)"> + <!-- translate joint goals to joint states --> + <node pkg="bitbots_utils" exec="motor_goals_viz_helper.py" args="--head"/> + <!-- fake IMU needed for odometry--> + <node pkg="bitbots_utils" exec="dummy_imu.py"/> + <!-- add some visualization tools --> + <include file="$(find-pkg-share humanoid_league_interactive_marker)/launch/interactive_marker.launch" /> + <!-- create fake tf from map to robot --> + <node pkg="tf2_ros" exec="static_transform_publisher" name="static_map2odom_tf" args="--x -0.0 --y -0.0 --z 0.0 --qx 0.0 --qy 0.0 --qz 0.0 --qw 1.0 --frame-id map --child-frame-id odom" /> + </group> + + <group unless="$(var viz)"> + <include file="$(find-pkg-share bitbots_vision)/launch/vision_startup.launch" > + <arg name="sim" value="$(var sim)"/> + </include> + <include file="$(find-pkg-share soccer_ipm)/launch/transformer.launch" > + <arg name="sim" value="$(var sim)"/> + </include> + </group> + + <group unless="$(var depends_only)"> + <include file="$(find-pkg-share bitbots_head_mover)/launch/head_mover.launch" > + <arg name="sim" value="$(var sim)"/> + </include> + </group> +</launch> diff --git a/bitbots_head_mover/package.xml b/bitbots_head_mover/package.xml new file mode 100644 index 000000000..78a22f9e3 --- /dev/null +++ b/bitbots_head_mover/package.xml @@ -0,0 +1,39 @@ +<?xml version="1.0"?> +<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?> +<package format="3"> + <name>bitbots_head_mover</name> + <version>1.0.0</version> + <description> The bitbots_head_mover handles the head movement. + The body behavior sends commands for different head movement + patterns. It can also use an action to look at a specific + point on the field, e.g. to track the ball.</description> + <maintainer email="valerie.bartel@uni-hamburg.de">Valerie Bartel</maintainer> + <maintainer email="info@bit-bots.de">Hamburg Bit-Bots</maintainer> + <author email="info@bit-bots.de">Hamburg Bit-Bots</author> + + <license>MIT</license> + + <buildtool_depend>ament_cmake</buildtool_depend> + + <depend>backward_ros</depend> + <depend>bio_ik_msgs</depend> + <depend>bio_ik</depend> + <depend>bitbots_msgs</depend> + <depend>generate_parameter_library</depend> + <depend>humanoid_league_msgs</depend> + <depend>moveit_core</depend> + <depend>moveit_ros_planning_interface</depend> + <depend>moveit_ros_planning</depend> + <depend>moveit_ros</depend> + <depend>rclcpp</depend> + <depend>sensor_msgs</depend> + <depend>std_msgs</depend> + <depend>tf2_geometry_msgs</depend> + <depend>tf2_ros</depend> + + <test_depend>ament_lint_auto</test_depend> + <test_depend>ament_lint_common</test_depend> + <export> + <build_type>ament_cmake</build_type> + </export> +</package> diff --git a/bitbots_head_mover/src/move_head.cpp b/bitbots_head_mover/src/move_head.cpp new file mode 100644 index 000000000..85ad660a4 --- /dev/null +++ b/bitbots_head_mover/src/move_head.cpp @@ -0,0 +1,788 @@ +#include <chrono> +#include <cmath> +#include <iostream> +#include <memory> +#include <string> +#include <vector> + +#include <rclcpp/clock.hpp> +#include <rclcpp/logger.hpp> +#include <rclcpp/rclcpp.hpp> +#include <rclcpp/time.hpp> + +#include <bitbots_msgs/msg/joint_command.hpp> +#include <geometry_msgs/msg/pose_stamped.hpp> +#include <geometry_msgs/msg/pose_with_covariance_stamped.hpp> +#include <humanoid_league_msgs/msg/head_mode.hpp> +#include <sensor_msgs/msg/joint_state.hpp> +#include <std_msgs/msg/string.hpp> + +#include <bio_ik/bio_ik.h> +#include <moveit/planning_scene/planning_scene.h> +#include <moveit/planning_scene_monitor/planning_scene_monitor.h> +#include <moveit/robot_model_loader/robot_model_loader.h> +#include <moveit/robot_state/conversions.h> +#include <tf2/convert.h> +#include <tf2_ros/buffer.h> +#include <tf2_ros/transform_listener.h> +#include <bio_ik_msgs/msg/ik_response.hpp> +#include <tf2_geometry_msgs/tf2_geometry_msgs.hpp> + +#include "head_parameters.hpp" + +#include <bitbots_msgs/action/look_at.hpp> +#include <rclcpp_action/rclcpp_action.hpp> + +#include <rclcpp/experimental/executors/events_executor/events_executor.hpp> + +using std::placeholders::_1; +using namespace std::chrono_literals; + +namespace move_head { +using LookAtGoal = bitbots_msgs::action::LookAt; +using LookAtGoalHandle = rclcpp_action::ServerGoalHandle<LookAtGoal>; + +class HeadMover { + std::shared_ptr<rclcpp::Node> node_; + + // declare subscriber and publisher + rclcpp::Subscription<humanoid_league_msgs::msg::HeadMode>::SharedPtr + head_mode_subscriber_; + rclcpp::Subscription<sensor_msgs::msg::JointState>::SharedPtr + joint_state_subscriber_; + + rclcpp::Publisher<bitbots_msgs::msg::JointCommand>::SharedPtr + position_publisher_; + + // declare tf + std::shared_ptr<tf2_ros::Buffer> tf_buffer_; + + std::shared_ptr<tf2_ros::TransformListener> tf_listener_; + + // declare variables + humanoid_league_msgs::msg::HeadMode head_mode_; + sensor_msgs::msg::JointState current_joint_state_; + bitbots_msgs::msg::JointCommand pos_msg_; + double DEG_TO_RAD = M_PI / 180; + geometry_msgs::msg::PoseWithCovarianceStamped tf_precision_pose_; + + // declare robot model and planning scene + robot_model_loader::RobotModelLoaderPtr loader_; + moveit::core::RobotModelPtr robot_model_; + moveit::core::RobotStatePtr robot_state_; + moveit::core::RobotStatePtr collision_state_; + planning_scene_monitor::PlanningSceneMonitorPtr planning_scene_monitor_; + planning_scene::PlanningScenePtr planning_scene_; + + // declare params + move_head::Params params_; + std::shared_ptr<move_head::ParamListener> param_listener_; + + rclcpp::TimerBase::SharedPtr timer_; + + std::vector<std::pair<double, double>> pattern_; + uint prev_head_mode_; + + double threshold_; + int index_ = 0; + double pan_speed_; + double tilt_speed_; + + // action server + rclcpp_action::Server<LookAtGoal>::SharedPtr action_server_; + bool action_running_ = false; + +public: + HeadMover() { + node_ = std::make_shared<rclcpp::Node>("head_mover"); + + position_publisher_ = + node_->create_publisher<bitbots_msgs::msg::JointCommand>( + "head_motor_goals", 10); + head_mode_subscriber_ = + node_->create_subscription<humanoid_league_msgs::msg::HeadMode>( + "head_mode", 10, + [this](const humanoid_league_msgs::msg::HeadMode::SharedPtr msg) { + head_mode_callback(msg); + }); + joint_state_subscriber_ = + node_->create_subscription<sensor_msgs::msg::JointState>( + "joint_states", 10, + [this](const sensor_msgs::msg::JointState::SharedPtr msg) { + joint_state_callback(msg); + }); + + // load parameters from config + param_listener_ = std::make_shared<move_head::ParamListener>(node_); + params_ = param_listener_->get_params(); + + auto moveit_node = std::make_shared<rclcpp::Node>("moveit_head_mover_node"); + + auto parameters_client = + std::make_shared<rclcpp::SyncParametersClient>(node_, "/move_group"); + while (!parameters_client->wait_for_service(1s)) { + if (!rclcpp::ok()) { + RCLCPP_ERROR( + node_->get_logger(), + "Interrupted while waiting for the service. Exiting."); + return; + } + RCLCPP_INFO( + node_->get_logger(), + "service not available, waiting again..."); + } + + rcl_interfaces::msg::ListParametersResult parameter_list = + parameters_client->list_parameters( + {"robot_description_kinematics"}, + 10); + auto copied_parameters = + parameters_client->get_parameters(parameter_list.names); + + // set the parameters to our node + for (auto & parameter : copied_parameters) { + moveit_node->declare_parameter( + parameter.get_name(), + parameter.get_type()); + moveit_node->set_parameter(parameter); + } + + std::string robot_description = "robot_description"; + // get the robot description from the blackboard + loader_ = std::make_shared<robot_model_loader::RobotModelLoader>( + robot_model_loader::RobotModelLoader( + moveit_node, robot_description, + true)); + robot_model_ = loader_->getModel(); + if (!robot_model_) { + RCLCPP_ERROR( + node_->get_logger(), + "failed to load robot model %s. Did you start the " + "blackboard (bitbots_bringup base.launch)?", + robot_description.c_str()); + } + robot_state_.reset(new moveit::core::RobotState(robot_model_)); + robot_state_->setToDefaultValues(); + + collision_state_.reset(new moveit::core::RobotState(robot_model_)); + collision_state_->setToDefaultValues(); + + // get planning scene for collision checking + planning_scene_monitor_ = + std::make_shared<planning_scene_monitor::PlanningSceneMonitor>( + moveit_node, loader_); + planning_scene_ = planning_scene_monitor_->getPlanningScene(); + if (!planning_scene_) { + RCLCPP_ERROR_ONCE( + node_->get_logger(), + "failed to connect to planning scene"); + } + + // prepare the pos_msg + pos_msg_.joint_names = {"HeadPan", "HeadTilt"}; + pos_msg_.positions = {0, 0}; + pos_msg_.velocities = {0, 0}; + pos_msg_.accelerations = {params_.max_acceleration_pan, + params_.max_acceleration_pan}; + pos_msg_.max_currents = {-1, -1}; + + // apparently tf_listener is necessary but unused + tf_buffer_ = std::make_shared<tf2_ros::Buffer>(node_->get_clock()); + tf_listener_ = std::make_shared<tf2_ros::TransformListener>(*tf_buffer_); + + prev_head_mode_ = -1; + threshold_ = params_.position_reached_threshold * DEG_TO_RAD; + pan_speed_ = 0; + tilt_speed_ = 0; + + action_server_ = rclcpp_action::create_server<LookAtGoal>( + node_, "look_at_goal", + std::bind( + &HeadMover::handle_goal, this, std::placeholders::_1, + std::placeholders::_2), + std::bind(&HeadMover::handle_cancel, this, std::placeholders::_1), + std::bind(&HeadMover::handle_accepted, this, std::placeholders::_1)); + + timer_ = rclcpp::create_timer( + node_, node_->get_clock(), 10ms, + [this] {behave();}); + } + + void head_mode_callback( + const humanoid_league_msgs::msg::HeadMode::SharedPtr msg) { + head_mode_ = *msg; + } + + void joint_state_callback(const sensor_msgs::msg::JointState::SharedPtr msg) { + current_joint_state_ = *msg; + } + + rclcpp_action::GoalResponse handle_goal( + const rclcpp_action::GoalUUID & uuid, + std::shared_ptr<const LookAtGoal::Goal> goal) { + RCLCPP_INFO(node_->get_logger(), "Received goal request"); + (void)uuid; + geometry_msgs::msg::PointStamped new_point; + // check if goal is in range collision wise + try { + new_point = tf_buffer_->transform( + goal->look_at_position, + planning_scene_->getPlanningFrame(), + tf2::durationFromSec(0.9)); + } catch (tf2::TransformException & ex) { + RCLCPP_ERROR( + node_->get_logger(), "Could not transform goal point: %s", + ex.what()); + return rclcpp_action::GoalResponse::REJECT; + } + std::pair<double, double> pan_tilt = + get_motor_goals_from_point(new_point.point); + bool goal_not_in_range = + check_head_collision(pan_tilt.first, pan_tilt.second); + // check whether the goal is in range pan and tilt wise + + if (action_running_ || goal_not_in_range || + !(params_.max_pan[0] < pan_tilt.first && + pan_tilt.first < params_.max_pan[1]) || + !(params_.max_tilt[0] < pan_tilt.second && + pan_tilt.second < params_.max_tilt[1])) + { + return rclcpp_action::GoalResponse::REJECT; + } + return rclcpp_action::GoalResponse::ACCEPT_AND_EXECUTE; + } + + rclcpp_action::CancelResponse handle_cancel( + const std::shared_ptr<LookAtGoalHandle> goal_handle) { + RCLCPP_INFO(node_->get_logger(), "Received request to cancel goal"); + (void)goal_handle; + action_running_ = false; + return rclcpp_action::CancelResponse::ACCEPT; + } + + void handle_accepted(const std::shared_ptr<LookAtGoalHandle> goal_handle) { + std::thread{ + std::bind(&HeadMover::execute_look_at, this, std::placeholders::_1), + goal_handle} + .detach(); + } + + void execute_look_at(const std::shared_ptr<LookAtGoalHandle> goal_handle) { + action_running_ = true; + + RCLCPP_INFO(node_->get_logger(), "Executing goal"); + const auto goal = goal_handle->get_goal(); + auto feedback = std::make_shared<LookAtGoal::Feedback>(); + bool success = + false; // checks whether we look at the position we want to look at + auto result = std::make_shared<LookAtGoal::Result>(); + + while (!success) { + RCLCPP_INFO(node_->get_logger(), "Looking at point"); + if (goal_handle->is_canceling()) { + goal_handle->canceled(result); + RCLCPP_INFO(node_->get_logger(), "Goal was canceled"); + return; + } + // look at point + success = look_at(goal->look_at_position); + goal_handle->publish_feedback( + feedback); // TODO: currently feedback is empty + } + if (rclcpp::ok()) { + result->success = true; + goal_handle->succeed(result); + RCLCPP_INFO(node_->get_logger(), "Goal succeeded"); + } + action_running_ = false; + } + + double calculate_lower_speed( + double delta_fast_joint, + double delta_my_joint, + double speed) { + double estimated_time = delta_fast_joint / speed; + if (estimated_time) { + return delta_my_joint / estimated_time; + } else { + return 0; + } + } + + bool send_motor_goals( + double pan_position, + double tilt_position, + bool resolve_collision, + double pan_speed = 1.5, + double tilt_speed = 1.5, + double current_pan_position = 0.0, + double current_tilt_position = 0.0, + bool clip = true) { + RCLCPP_DEBUG_STREAM( + node_->get_logger(), + "target pan/tilt: " << pan_position << "/" << tilt_position); + if (clip) { + std::pair<double, double> clipped = pre_clip(pan_position, tilt_position); + pan_position = clipped.first; + tilt_position = clipped.second; + } + + if (resolve_collision) { + bool success = avoid_collision_on_path( + pan_position, tilt_position, current_pan_position, + current_tilt_position, pan_speed, tilt_speed); + if (!success) { + RCLCPP_ERROR_STREAM_THROTTLE( + node_->get_logger(), *node_->get_clock(), + 1000, "Unable to resolve head collision"); + } + return success; + } else { + move_head_to_position_with_speed_adjustment( + pan_position, tilt_position, current_pan_position, + current_tilt_position, pan_speed, tilt_speed); + return true; + } + } + + bool send_motor_goals( + double pan_position, + double tilt_position, + double pan_speed = 1.5, + double tilt_speed = 1.5, + bool clip = true) { + RCLCPP_DEBUG_STREAM( + node_->get_logger(), + "target pan/tilt: " << pan_position << "/" << tilt_position); + if (clip) { + std::pair<double, double> clipped = pre_clip(pan_position, tilt_position); + pan_position = clipped.first; + tilt_position = clipped.second; + } + + pos_msg_.positions = {pan_position, tilt_position}; + pos_msg_.velocities = {pan_speed, tilt_speed}; + + pos_msg_.accelerations = {params_.max_acceleration_pan, + params_.max_acceleration_pan}; + pos_msg_.header.stamp = node_->get_clock()->now(); + position_publisher_->publish(pos_msg_); + return true; + } + + std::pair<double, double> pre_clip(double pan, double tilt) { + double new_pan = std::clamp(pan, params_.max_pan[0], params_.max_pan[1]); + double new_tilt = + std::clamp(tilt, params_.max_tilt[0], params_.max_tilt[1]); + return std::make_pair(new_pan, new_tilt); + } + bool avoid_collision_on_path( + double goal_pan, + double goal_tilt, + double current_pan, + double current_tilt, + double pan_speed, + double tilt_speed, + int max_depth = 4, + int depth = 0) { + if (depth > max_depth) { + move_head_to_position_with_speed_adjustment( + 0.0, 0.0, current_pan, current_tilt, pan_speed, tilt_speed); + return false; + } + double distance = + sqrt(pow(goal_pan - current_pan, 2) - pow(goal_tilt - current_tilt, 2)); + + int step_count = distance / 3 * DEG_TO_RAD; + + // calculate path + std::vector<std::pair<double, double>> pan_and_tilt_steps; + for (int i = 0; i < step_count; i++) { + pan_and_tilt_steps[i].first = + current_pan + (goal_pan - current_pan) / step_count * i; + pan_and_tilt_steps[i].second = + current_tilt + (goal_tilt - current_tilt) / step_count * i; + } + // check if we have collisions on our path + for (int i = 0; i < step_count; i++) { + if (check_head_collision( + pan_and_tilt_steps[i].first, + pan_and_tilt_steps[i].second)) + { + return avoid_collision_on_path( + goal_pan, goal_tilt + 10 * DEG_TO_RAD, + current_pan, current_tilt, pan_speed, + tilt_speed, max_depth, depth + 1); + } + } + move_head_to_position_with_speed_adjustment( + goal_pan, goal_tilt, current_pan, current_tilt, pan_speed, tilt_speed); + return true; + } + + bool check_head_collision(double pan, double tilt) { + collision_state_->setJointPositions("HeadPan", &pan); + collision_state_->setJointPositions("HeadTilt", &tilt); + collision_detection::CollisionRequest req; + collision_detection::CollisionResult res; + collision_detection::AllowedCollisionMatrix acm = + planning_scene_->getAllowedCollisionMatrix(); + planning_scene_->checkCollision(req, res, *collision_state_, acm); + return res.collision; + } + + void move_head_to_position_with_speed_adjustment( + double goal_pan, + double goal_tilt, + double current_pan, + double current_tilt, + double pan_speed, + double tilt_speed) { + double delta_pan = std::abs(goal_pan - current_pan); + double delta_tilt = std::abs(goal_tilt - current_tilt); + if (delta_pan > 0) { + tilt_speed = std::min( + tilt_speed, calculate_lower_speed(delta_pan, delta_tilt, pan_speed)); + } else { + pan_speed = std::min( + pan_speed, calculate_lower_speed(delta_tilt, delta_pan, tilt_speed)); + } + pos_msg_.positions = {goal_pan, goal_tilt}; + pos_msg_.velocities = {pan_speed, tilt_speed}; + + pos_msg_.accelerations = {params_.max_acceleration_pan, + params_.max_acceleration_pan}; + pos_msg_.header.stamp = rclcpp::Clock().now(); + position_publisher_->publish(pos_msg_); + } + + std::pair<double, double> get_head_position() { + double head_pan; + double head_tilt; + for (size_t i = 0; i < current_joint_state_.name.size(); i++) { + if (current_joint_state_.name[i] == "HeadPan") { + head_pan = current_joint_state_.position[i]; + } else if (current_joint_state_.name[i] == "HeadTilt") { + head_tilt = current_joint_state_.position[i]; + } + } + return {head_pan, head_tilt}; + } + + double lineAngle( + int line, + int line_count, + double min_angle, + double max_angle) { + double delta = std::abs(max_angle - min_angle); + int steps = delta / (line_count - 1); + double value = steps * line + min_angle; + return value; + } + + double calculateHorizonAngle( + bool is_right, + double angle_right, + double angle_left) { + if (is_right) { + return angle_right; + } else { + return angle_left; + } + } + + std::vector<std::pair<double, double>> interpolatedSteps( + int steps, + double tilt, + double min_pan, + double max_pan) { + if (steps == 0) { + return {}; + } + steps += 1; + std::vector<std::pair<double, double>> output_points; + double delta = std::abs(max_pan - min_pan); + double step_size = delta / steps; + for (int i = 1; i <= steps; i++) { + double pan = min_pan + step_size * i; + output_points.emplace_back(pan, tilt); + } + return output_points; + } + + std::vector<std::pair<double, double>> generatePattern( + int line_count, + double max_horizontal_angle_left, + double max_horizontal_angle_right, + double max_vertical_angle_up, + double max_vertical_angle_down, + int reduce_last_scanline = 0.2, // TODO: needs to be changed to 1 + int interpolation_steps = 0) { + std::vector<std::pair<double, double>> keyframes; + bool down_direction = false; + bool right_side = false; + bool right_direction = true; + int line = line_count - 1; + int iterations = std::max(line_count * 4 - 4, 2); + for (int i = 0; i < iterations; i++) { + std::pair<double, double> current_point = { + calculateHorizonAngle( + right_side, max_horizontal_angle_right, + max_horizontal_angle_left), + lineAngle( + line, line_count, max_vertical_angle_down, + max_vertical_angle_up)}; + keyframes.push_back(current_point); + + if (right_side != right_direction) { + std::vector<std::pair<double, double>> interpolated_points = + interpolatedSteps( + interpolation_steps, current_point.second, + max_horizontal_angle_right, + max_horizontal_angle_left); + if (right_direction) { + std::reverse(interpolated_points.begin(), interpolated_points.end()); + } + keyframes.insert( + keyframes.end(), interpolated_points.begin(), + interpolated_points.end()); + right_side = right_direction; + + } else { + right_side = !right_direction; + if (0 <= line && line <= line_count - 1) { + down_direction = !down_direction; + } + if (down_direction) { + line -= 1; + } else { + line += 1; + } + } + } + for (auto & keyframe : keyframes) { + if (keyframe.second == max_vertical_angle_down) { + keyframe = {keyframe.first * reduce_last_scanline, + max_vertical_angle_down}; + } + } + return keyframes; + } + + std::pair<double, double> get_motor_goals_from_point( + geometry_msgs::msg::Point point) { + bio_ik::BioIKKinematicsQueryOptions ik_options; + ik_options.return_approximate_solution = true; + ik_options.replace = true; + + bio_ik::LookAtGoal goal; + goal.setTarget({point.x, point.y, point.z}); + goal.setWeight(1.0); + goal.setAxis({1.0, 0.0, 0.0}); + goal.setLinkName("camera"); + ik_options.goals.emplace_back(new bio_ik::LookAtGoal(goal)); + + auto joint_model_group = robot_model_->getJointModelGroup("Head"); + + double timeout_seconds = 1.0; + bool success = robot_state_->setFromIK( + joint_model_group, EigenSTL::vector_Isometry3d(), + std::vector<std::string>(), timeout_seconds, + moveit::core::GroupStateValidityCallbackFn(), ik_options); + robot_state_->update(); + + bio_ik_msgs::msg::IKResponse response; + moveit::core::robotStateToRobotStateMsg(*robot_state_, response.solution); + response.solution_fitness = ik_options.solution_fitness; + if (success) { + std::pair<double, double> states = { + response.solution.joint_state.position[0], + response.solution.joint_state.position[1]}; + return states; + } else { + std::cout << "BioIK failed with error code: " << response.error_code.val + << std::endl; + std::pair<double, double> states = {0.0, 0.0}; + return states; + } + } + + bool look_at( + geometry_msgs::msg::PointStamped point, + double min_pan_delta = 0.02, + double min_tilt_delta = 0.02) { + try { + geometry_msgs::msg::PointStamped new_point = + tf_buffer_->transform( + point, planning_scene_->getPlanningFrame(), + tf2::durationFromSec(0.9)); + + std::pair<double, double> pan_tilt = + get_motor_goals_from_point(new_point.point); + std::pair<double, double> current_pan_tilt = get_head_position(); + + if (std::abs(pan_tilt.first - current_pan_tilt.first) > min_pan_delta || + std::abs(pan_tilt.second - current_pan_tilt.second) > + min_tilt_delta) + { + send_motor_goals( + pan_tilt.first, pan_tilt.second, true, + params_.look_at.pan_speed, params_.look_at.tilt_speed); + return false; + } + return true; + } catch (tf2::TransformException & ex) { + RCLCPP_ERROR(node_->get_logger(), "Transform error: %s", ex.what()); + return false; + } + } + + int get_near_pattern_position( + std::vector<std::pair<double, double>> pattern, + double pan, + double tilt) { + std::pair<double, int> min_distance_point = {10000.0, -1}; + for (size_t i = 0; i < pattern.size(); i++) { + double distance = std::sqrt( + std::pow(pattern[i].first - pan, 2) + + std::pow(pattern[i].second - tilt, 2)); + if (distance < min_distance_point.first) { + min_distance_point.first = distance; + min_distance_point.second = i; + } + } + return min_distance_point.second; + } + + void perform_search_pattern() { + if (pattern_.size() == 0) { + return; + } + index_ = index_ % int(pattern_.size()); + double head_pan = pattern_[index_].first * DEG_TO_RAD; + double head_tilt = pattern_[index_].second * DEG_TO_RAD; + double current_head_pan; + double current_head_tilt; + std::pair<double, double> head_position = get_head_position(); + current_head_pan = head_position.first; + current_head_tilt = head_position.second; + + bool success = + send_motor_goals( + head_pan, head_tilt, true, pan_speed_, tilt_speed_, + current_head_pan, current_head_tilt); + + if (success) { + double distance_to_goal = + std::sqrt( + std::pow(head_pan - current_head_pan, 2) + + std::pow(head_tilt - current_head_tilt, 2)); + if (distance_to_goal <= threshold_) { + index_++; + } + } else { + index_++; + } + } + + void behave() { + uint curr_head_mode = head_mode_.head_mode; + + params_ = param_listener_->get_params(); + + if (prev_head_mode_ != curr_head_mode) { + switch (curr_head_mode) { + case humanoid_league_msgs::msg::HeadMode::BALL_MODE: // 0 + pan_speed_ = params_.search_pattern.pan_speed; + tilt_speed_ = params_.search_pattern.tilt_speed; + pattern_ = + generatePattern( + params_.search_pattern.scan_lines, + params_.search_pattern.pan_max[0], + params_.search_pattern.pan_max[1], + params_.search_pattern.tilt_max[0], + params_.search_pattern.tilt_max[1], + params_.search_pattern.reduce_last_scanline); + break; + case humanoid_league_msgs::msg::HeadMode::BALL_MODE_PENALTY: // 11 + pan_speed_ = params_.search_pattern_penalty.pan_speed; + tilt_speed_ = params_.search_pattern_penalty.tilt_speed; + pattern_ = + generatePattern( + params_.search_pattern_penalty.scan_lines, + params_.search_pattern_penalty.pan_max[0], + params_.search_pattern_penalty.pan_max[1], + params_.search_pattern_penalty.tilt_max[0], + params_.search_pattern_penalty.tilt_max[1], + params_.search_pattern.reduce_last_scanline); + break; + + case humanoid_league_msgs::msg::HeadMode::FIELD_FEATURES: // 3 + pan_speed_ = params_.search_pattern_field_features.pan_speed; + tilt_speed_ = params_.search_pattern_field_features.tilt_speed; + pattern_ = + generatePattern( + params_.search_pattern_field_features.scan_lines, + params_.search_pattern_field_features.pan_max[0], + params_.search_pattern_field_features.pan_max[1], + params_.search_pattern_field_features.tilt_max[0], + params_.search_pattern_field_features.tilt_max[1], + params_.search_pattern.reduce_last_scanline); + break; + + case humanoid_league_msgs::msg::HeadMode::LOOK_FRONT: // 13 + pan_speed_ = params_.front_search_pattern.pan_speed; + tilt_speed_ = params_.front_search_pattern.tilt_speed; + pattern_ = + generatePattern( + params_.front_search_pattern.scan_lines, + params_.front_search_pattern.pan_max[0], + params_.front_search_pattern.pan_max[1], + params_.front_search_pattern.tilt_max[0], + params_.front_search_pattern.tilt_max[1], + params_.search_pattern.reduce_last_scanline); + break; + + case humanoid_league_msgs::msg::HeadMode::LOOK_FORWARD: // 7 + pan_speed_ = params_.look_forward.pan_speed; + tilt_speed_ = params_.look_forward.tilt_speed; + pattern_ = generatePattern( + params_.look_forward.scan_lines, params_.look_forward.pan_max[0], + params_.look_forward.pan_max[1], params_.look_forward.tilt_max[0], + params_.look_forward.tilt_max[1], + params_.search_pattern.reduce_last_scanline); + break; + + default: + return; + } + std::pair<double, double> head_position = get_head_position(); + + index_ = get_near_pattern_position( + pattern_, head_position.first, + head_position.second); + } + if (!action_running_ && + curr_head_mode != + humanoid_league_msgs::msg::HeadMode::DONT_MOVE) // here DONT_MOVE + // is implemented + { + prev_head_mode_ = curr_head_mode; + perform_search_pattern(); + } + } + + std::shared_ptr<rclcpp::Node> get_node() {return node_;} +}; +} // namespace move_head + +int main(int argc, char * argv[]) { + rclcpp::init(argc, argv); + rclcpp::experimental::executors::EventsExecutor exec; + auto head_mover = std::make_shared<move_head::HeadMover>(); + exec.add_node(head_mover->get_node()); + exec.spin(); + rclcpp::shutdown(); + + return 0; +} diff --git a/bitbots_odometry/config/odometry_config_default.yaml b/bitbots_odometry/config/odometry_config_default.yaml new file mode 100644 index 000000000..55021f9ac --- /dev/null +++ b/bitbots_odometry/config/odometry_config_default.yaml @@ -0,0 +1,7 @@ +motion_odometry: + ros__parameters: + x_forward_scaling: 1.25 + x_backward_scaling: 0.95 + y_scaling: 1.0 + yaw_scaling: 0.6 + publish_walk_odom_tf: false diff --git a/bitbots_quintic_walk/launch/test.launch b/bitbots_quintic_walk/launch/test.launch index 297a93ac0..5bfd1e831 100644 --- a/bitbots_quintic_walk/launch/test.launch +++ b/bitbots_quintic_walk/launch/test.launch @@ -7,9 +7,24 @@ <let if="$(env IS_ROBOT false)" name="taskset" value="taskset -c 3,4"/> <let unless="$(env IS_ROBOT false)" name="taskset" value=""/> - <include file="$(find-pkg-share bitbots_utils)/launch/base.launch" > + <include file="$(find-pkg-share bitbots_bringup)/launch/base.launch" > <arg name="sim" value="$(var sim)"/> - <arg name="robot_type" value="$(var robot_type)"/> + </include> + + <include file="$(find-pkg-share bitbots_utils)/launch/motion_base.launch" > + <arg name="sim" value="$(var sim)"/> + <arg name="robot_type" value="$(var robot_type)"/> + </include> + + <!-- launch the base footprint --> + <node pkg="humanoid_base_footprint" exec="base_footprint" output="screen"> + <param name="support_state_topics" value="[walk_support_state, dynamic_kick_support_state]"/> + <param name="use_sim_time" value="$(var sim)"/> + </node> + + <!-- launch the odometry --> + <include file="$(find-pkg-share bitbots_odometry)/launch/odometry.launch"> + <arg name="sim" value="$(var sim)"/> </include> <group unless="$(var sim)"> diff --git a/bitbots_quintic_walk/test/rostests/test_walk.launch b/bitbots_quintic_walk/test/rostests/test_walk.launch deleted file mode 100644 index 580a82750..000000000 --- a/bitbots_quintic_walk/test/rostests/test_walk.launch +++ /dev/null @@ -1,11 +0,0 @@ -<launch> - <include file="$(find-pkg-share wolfgang_webots_sim)/launch/simulation.launch"> - <arg name="headless" value="false"/> - </include> - - <include file="$(find-pkg-share bitbots_quintic_walk)/launch/test.launch"> - <arg name="sim" value="true"/> - </include> - - <test pkg="bitbots_quintic_walk" exec="test_walk.py" test-name="test_walk" time-limit="300.0"/> -</launch> diff --git a/bitbots_quintic_walk/test/rostests/test_walk.py b/bitbots_quintic_walk/test/rostests/test_walk.py deleted file mode 100755 index ec49903cb..000000000 --- a/bitbots_quintic_walk/test/rostests/test_walk.py +++ /dev/null @@ -1,179 +0,0 @@ -#!/usr/bin/env python3 -import math -import time - -import rospy -from biped_interfaces.msg import Phase -from bitbots_msgs.msg import JointCommand -from geometry_msgs.msg import Twist, Point, Pose, Quaternion - -from bitbots_test.mocks import MockSubscriber -from bitbots_test.test_case import WebotsTestCase -from nav_msgs.msg import Odometry - -walkready = JointCommand( - joint_names=["HeadPan", "HeadTilt", "LShoulderPitch", "LShoulderRoll", "LElbow", "RShoulderPitch", - "RShoulderRoll", "RElbow"], - velocities=[5.0] * 8, - accelerations=[-1.0] * 8, - max_currents=[-1.0] * 8, - positions=[ - 0.0, # HeadPan - 0.0, # HeadTilt - math.radians(75.27), # LShoulderPitch - 0.0, # LShoulderRoll - math.radians(35.86), # LElbow - math.radians(-75.58), # RShoulderPitch - 0.0, # RShoulderRoll - math.radians(-36.10), # RElbow - ] -) - - -class TestWalk(WebotsTestCase): - - def initialize_everything(self): - # get arms walkready - joint_pub = rospy.Publisher("DynamixelController/command", JointCommand, queue_size=1) - joint_pub.publish(walkready) - - # start and stop walking to get walkready - pub = rospy.Publisher("cmd_vel", Twist, queue_size=1) - cmd_vel = Twist() - cmd_vel.linear.x = 0.1 - pub.publish(cmd_vel) - rospy.sleep(1) - cmd_vel.linear.x = 0.0 - cmd_vel.angular.x = -1 - pub.publish(cmd_vel) - rospy.sleep(1) - - # remove ball - self.set_ball_position(Point(10, 0, 0)) - - # reset robot to start - self.set_robot_pose(Pose(Point(0, 0, 0.42), Quaternion(0, 0, 0, 1))) - - def test_start(self): - """ test if node starts correctly without warnings/errors/criticals - and if it is still there after some time (did not crash by itself)""" - # setup - self.initialize_everything() - # wait to make sure node is up - sub = MockSubscriber("DynamixelController/command", JointCommand, tcp_nodelay=True) - sub.wait_until_connected() - - # execution - time.sleep(2) - - # verification - self.assertNoNegativeRosLogs(node="walking") - - def test_no_joint_goals(self): - """test if joint goals are published when walking is activated and only then""" - # setup - self.initialize_everything() - sub = MockSubscriber("DynamixelController/command", JointCommand, tcp_nodelay=True) - sub.wait_until_connected() - - # execution - # wait some time - time.sleep(1) - - # verification - sub.assertNothingReceived() - - def test_joint_goals(self): - # setup - self.initialize_everything() - pub = rospy.Publisher("cmd_vel", Twist, queue_size=1) - sub = MockSubscriber("DynamixelController/command", JointCommand, tcp_nodelay=True) - sub.wait_until_connected() - # wait for support state to make sure the walking is started - sub_support_state = MockSubscriber("walk_support_state", Phase, tcp_nodelay=True) - sub_support_state.wait_until_connected() - time.sleep(10) - - # execution - cmd_vel = Twist() - cmd_vel.linear.x = 0.1 - pub.publish(cmd_vel) - rospy.sleep(5) - - # verification - # make sure something is published - sub.assertMessageReceived() - - def test_walk(self): - """test if the walking is really moving the robot around in the simulation""" - self.initialize_everything() - # setup - pub = rospy.Publisher("cmd_vel", Twist, queue_size=1) - - # execution - cmd_vel = Twist() - cmd_vel.linear.x = 0.1 - pub.publish(cmd_vel) - rospy.sleep(10) - cmd_vel = Twist() - pub.publish(cmd_vel) - rospy.sleep(2) - - # verification - # should have moved away - self.assertRobotNotPosition(Point(0, 0, 0), threshold=0.5) - # but still standing - self.assertRobotStanding() - - def test_walk_odometry(self): - """ - Test if the walk odometry is correct. - This means also that the robot is walking with the correct speed. - """ - - def odom_cb(msg): - nonlocal current_odom - current_odom = msg - - # setup - self.initialize_everything() - current_odom = None - sub = MockSubscriber("walk_engine_odometry", Odometry, odom_cb, tcp_nodelay=True) - sub.wait_until_connected() - pub = rospy.Publisher("cmd_vel", Twist, queue_size=1) - # remember start odom pose - rospy.sleep(1) - start_odom = current_odom - - # execution - cmd_vel = Twist() - cmd_vel.linear.x = 0.1 - cmd_vel.linear.y = 0.05 - cmd_vel.angular.z = 0.1 - pub.publish(cmd_vel) - rospy.sleep(10) - cmd_vel = Twist() - cmd_vel.angular.x = -1 - pub.publish(cmd_vel) - rospy.sleep(2) - - # verification - end_odom = current_odom - odom_diff = Pose() - odom_diff.position.x = end_odom.pose.pose.position.x - start_odom.pose.pose.position.x - odom_diff.position.y = end_odom.pose.pose.position.y - start_odom.pose.pose.position.y - odom_diff.position.z = end_odom.pose.pose.position.z - start_odom.pose.pose.position.z - # difference between quaternions is annoying, so just use end pose, other tests did not turn - odom_diff.orientation.w = end_odom.pose.pose.orientation.w - odom_diff.orientation.x = end_odom.pose.pose.orientation.x - odom_diff.orientation.y = end_odom.pose.pose.orientation.y - odom_diff.orientation.z = end_odom.pose.pose.orientation.z - # robot should be at odom position - self.assertRobotPose(odom_diff, lin_threshold=1, ang_threshold=1) - self.assertRobotStanding() - - -if __name__ == "__main__": - from bitbots_test import run_rostests - - run_rostests(TestWalk) diff --git a/bitbots_quintic_walk/test/rostests/test_walk_runs.launch b/bitbots_quintic_walk/test/rostests/test_walk_runs.launch deleted file mode 100644 index 95f304849..000000000 --- a/bitbots_quintic_walk/test/rostests/test_walk_runs.launch +++ /dev/null @@ -1,12 +0,0 @@ -<?xml version="1.0"?> -<launch> - <include file="$(find-pkg-share bitbots_utils)/launch/base.launch" /> - - <rosparam file="$(find-pkg-share bitbots_quintic_walk)/config/walking_wolfgang_robot.yaml" command="load"/> - - <node name="motors_helper" pkg="bitbots_utils" exec="motor_goals_viz_helper.py" args="--walk" /> - - <node name="walking" pkg="bitbots_quintic_walk" exec="WalkNode" output="screen" /> - - <test pkg="bitbots_quintic_walk" exec="test_walk_runs.py" test-name="walk_runs" time-limit="300" /> -</launch> diff --git a/bitbots_quintic_walk/test/rostests/test_walk_runs.py b/bitbots_quintic_walk/test/rostests/test_walk_runs.py deleted file mode 100755 index 65b708da4..000000000 --- a/bitbots_quintic_walk/test/rostests/test_walk_runs.py +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/env python3 -from bitbots_test.test_case import RosNodeTestCase -from bitbots_test.mocks import MockSubscriber -from geometry_msgs.msg import Twist -from bitbots_msgs.msg import JointCommand -import rospy - - -class WalkRunsTestCase(RosNodeTestCase): - def test_walk_runs(self): - sub = MockSubscriber('walking_motor_goals', JointCommand) - self.with_assertion_grace_period(lambda: self.assertNodeRunning("walking"), 10) - pub = rospy.Publisher('cmd_vel', Twist, queue_size=1, latch=True) - - goal = Twist() - goal.linear.x = 0.3 - pub.publish(goal) - sub.wait_until_connected() - rospy.sleep(5) - self.with_assertion_grace_period(sub.assertMessageReceived, 100) - -if __name__ == '__main__': - from bitbots_test import run_rostests - run_rostests(WalkRunsTestCase) diff --git a/bitbots_rl_motion/launch/test.launch b/bitbots_rl_motion/launch/test.launch index 1dfef55cf..da148ae1b 100644 --- a/bitbots_rl_motion/launch/test.launch +++ b/bitbots_rl_motion/launch/test.launch @@ -6,10 +6,25 @@ <let if="$(env IS_ROBOT false)" name="taskset" value="taskset -c 3,4"/> <let unless="$(env IS_ROBOT false)" name="taskset" value=""/> - <include file="$(find-pkg-share bitbots_utils)/launch/base.launch" > + <include file="$(find-pkg-share bitbots_bringup)/launch/base.launch" > <arg name="sim" value="$(var sim)"/> </include> + <include file="$(find-pkg-share bitbots_utils)/launch/motion_base.launch" > + <arg name="sim" value="$(var sim)"/> + </include> + + <!-- launch the base footprint --> + <node pkg="humanoid_base_footprint" exec="base_footprint" output="screen"> + <param name="support_state_topics" value="[walk_support_state, dynamic_kick_support_state]"/> + <param name="use_sim_time" value="$(var sim)"/> + </node> + + <!-- launch the odometry --> + <include file="$(find-pkg-share bitbots_odometry)/launch/odometry.launch"> + <arg name="sim" value="$(var sim)"/> + </include> + <group unless="$(var use_darwin)"> <group unless="$(var sim)"> <include file="$(find-pkg-share bitbots_ros_control)/launch/ros_control.launch" /> From 26cbcbf315d76d7304fd44919832e852e433dcc5 Mon Sep 17 00:00:00 2001 From: Florian Vahl <git@flova.de> Date: Fri, 11 Aug 2023 23:54:04 +0200 Subject: [PATCH 02/74] Fix launch files --- bitbots_animation_server/launch/test.launch | 4 +-- bitbots_animation_server/package.xml | 8 +++-- bitbots_dynamic_kick/launch/test.launch | 4 +-- bitbots_dynamic_kick/launch/viz.launch | 4 +-- bitbots_dynamic_kick/package.xml | 1 + bitbots_dynup/launch/test.launch | 4 +-- bitbots_dynup/package.xml | 29 ++++++++++--------- bitbots_hcm/launch/test.launch | 4 +-- bitbots_hcm/package.xml | 2 ++ .../launch/head_mover_standalone.launch | 4 +-- bitbots_head_mover/launch/test.launch | 4 +-- bitbots_head_mover/package.xml | 2 ++ bitbots_quintic_walk/launch/test.launch | 4 +-- bitbots_quintic_walk/package.xml | 1 + bitbots_rl_motion/launch/test.launch | 4 +-- bitbots_rl_motion/package.xml | 6 ++-- 16 files changed, 49 insertions(+), 36 deletions(-) diff --git a/bitbots_animation_server/launch/test.launch b/bitbots_animation_server/launch/test.launch index b58faa1b6..ed669e8f9 100644 --- a/bitbots_animation_server/launch/test.launch +++ b/bitbots_animation_server/launch/test.launch @@ -7,8 +7,8 @@ <include file="$(find-pkg-share bitbots_ros_control)/launch/ros_control.launch" /> </group> - <include file="$(find-pkg-share bitbots_bringup)/launch/base.launch" /> - <include file="$(find-pkg-share bitbots_utils)/launch/motion_base.launch" /> + <include file="$(find-pkg-share bitbots_utils)/launch/parameter_blackboard.launch" /> + <include file="$(find-pkg-share bitbots_robot_description)/launch/load_robot_description.launch" /> <node pkg="bitbots_animation_server" exec="animation_node" output="screen" launch-prefix="$(var taskset)"/> <node name="animation_hcm_bridge" pkg="bitbots_animation_server" exec="animation_hcm_bridge.py" output="screen" launch-prefix="$(var taskset)"/> diff --git a/bitbots_animation_server/package.xml b/bitbots_animation_server/package.xml index 07272c331..85ce516b3 100644 --- a/bitbots_animation_server/package.xml +++ b/bitbots_animation_server/package.xml @@ -14,11 +14,13 @@ <license>MIT</license> + <depend>bitbots_docs</depend> + <depend>bitbots_robot_description</depend> + <depend>bitbots_splines</depend> + <depend>bitbots_utils</depend> + <depend>humanoid_league_msgs</depend> <depend>rclpy</depend> <depend>std_msgs</depend> - <depend>humanoid_league_msgs</depend> - <depend>bitbots_splines</depend> - <depend>bitbots_docs</depend> <export> <bitbots_documentation> diff --git a/bitbots_dynamic_kick/launch/test.launch b/bitbots_dynamic_kick/launch/test.launch index 13f1d8621..2480bca11 100644 --- a/bitbots_dynamic_kick/launch/test.launch +++ b/bitbots_dynamic_kick/launch/test.launch @@ -6,11 +6,11 @@ <let if="$(env IS_ROBOT false)" name="taskset" value="taskset -c 3,4"/> <let unless="$(env IS_ROBOT false)" name="taskset" value=""/> - <include file="$(find-pkg-share bitbots_bringup)/launch/base.launch" > + <include file="$(find-pkg-share bitbots_utils)/launch/parameter_blackboard.launch" > <arg name="sim" value="$(var sim)"/> </include> - <include file="$(find-pkg-share bitbots_utils)/launch/motion_base.launch" > + <include file="$(find-pkg-share bitbots_robot_description)/launch/load_robot_description.launch" > <arg name="sim" value="$(var sim)"/> </include> diff --git a/bitbots_dynamic_kick/launch/viz.launch b/bitbots_dynamic_kick/launch/viz.launch index bab163ae9..0aa37e17e 100644 --- a/bitbots_dynamic_kick/launch/viz.launch +++ b/bitbots_dynamic_kick/launch/viz.launch @@ -1,7 +1,7 @@ <launch> - <include file="$(find-pkg-share bitbots_bringup)/launch/base.launch" /> + <include file="$(find-pkg-share bitbots_utils)/launch/parameter_blackboard.launch" /> - <include file="$(find-pkg-share bitbots_utils)/launch/motion_base.launch" /> + <include file="$(find-pkg-share bitbots_robot_description)/launch/load_robot_description.launch" /> <!-- launch the base footprint --> <node pkg="humanoid_base_footprint" exec="base_footprint" output="screen"> diff --git a/bitbots_dynamic_kick/package.xml b/bitbots_dynamic_kick/package.xml index ca56651bb..4438ac255 100644 --- a/bitbots_dynamic_kick/package.xml +++ b/bitbots_dynamic_kick/package.xml @@ -24,6 +24,7 @@ <depend>bio_ik</depend> <depend>bitbots_docs</depend> <depend>bitbots_msgs</depend> + <depend>bitbots_robot_description</depend> <depend>bitbots_splines</depend> <depend>bitbots_utils</depend> <depend>control_toolbox</depend> diff --git a/bitbots_dynup/launch/test.launch b/bitbots_dynup/launch/test.launch index 8afbc0104..7e98c6961 100644 --- a/bitbots_dynup/launch/test.launch +++ b/bitbots_dynup/launch/test.launch @@ -8,12 +8,12 @@ <let if="$(env IS_ROBOT false)" name="taskset" value="taskset -c 3,4"/> <let unless="$(env IS_ROBOT false)" name="taskset" value=""/> - <include file="$(find-pkg-share bitbots_bringup)/launch/base.launch" > + <include file="$(find-pkg-share bitbots_utils)/launch/parameter_blackboard.launch" > <arg name="sim" value="$(var sim)"/> <arg name="robot_type" value="$(var robot_type)"/> </include> - <include file="$(find-pkg-share bitbots_utils)/launch/motion_base.launch" > + <include file="$(find-pkg-share bitbots_robot_description)/launch/load_robot_description.launch" > <arg name="sim" value="$(var sim)"/> </include> diff --git a/bitbots_dynup/package.xml b/bitbots_dynup/package.xml index d5881f52a..43aeab859 100644 --- a/bitbots_dynup/package.xml +++ b/bitbots_dynup/package.xml @@ -13,24 +13,27 @@ <author email="bestmann@informatik.uni-hamburg.de">Marc Bestmann</author> <buildtool_depend>ament_cmake</buildtool_depend> - <depend>std_msgs</depend> - <depend>tf2</depend> - <depend>tf2_ros</depend> - <depend>tf2_eigen</depend> - <depend>tf2_geometry_msgs</depend> + + <depend>backward_ros</depend> <depend>bio_ik</depend> - <depend>moveit_core</depend> - <depend>moveit_ros_move_group</depend> + <depend>bitbots_docs</depend> + <depend>bitbots_msgs</depend> + <depend>bitbots_robot_description</depend> <depend>bitbots_splines</depend> + <depend>bitbots_utils</depend> + <depend>control_toolbox</depend> <depend>geometry_msgs</depend> - <depend>bitbots_msgs</depend> - <depend>moveit_ros_robot_interaction</depend> + <depend>moveit_core</depend> + <depend>moveit_ros_move_group</depend> <depend>moveit_ros_planning_interface</depend> - <depend>bitbots_docs</depend> - <depend>rot_conv</depend> - <depend>control_toolbox</depend> + <depend>moveit_ros_robot_interaction</depend> <depend>ros2_python_extension</depend> - <depend>backward_ros</depend> + <depend>rot_conv</depend> + <depend>std_msgs</depend> + <depend>tf2_eigen</depend> + <depend>tf2_geometry_msgs</depend> + <depend>tf2_ros</depend> + <depend>tf2</depend> <test_depend>plotjuggler</test_depend> <test_depend>bitbots_odometry</test_depend> diff --git a/bitbots_hcm/launch/test.launch b/bitbots_hcm/launch/test.launch index b27fdb66d..6fc8e1bc4 100644 --- a/bitbots_hcm/launch/test.launch +++ b/bitbots_hcm/launch/test.launch @@ -1,11 +1,11 @@ <launch> <arg name="sim" default="false" description="Disables checks for hardware, since we are in simulation."/> - <include file="$(find-pkg-share bitbots_bringup)/launch/base.launch"> + <include file="$(find-pkg-share bitbots_utils)/launch/parameter_blackboard.launch"> <arg name="sim" value="$(var sim)"/> </include> - <include file="$(find-pkg-share bitbots_utils)/launch/motion_base.launch" > + <include file="$(find-pkg-share bitbots_robot_description)/launch/load_robot_description.launch" > <arg name="sim" value="$(var sim)"/> </include> diff --git a/bitbots_hcm/package.xml b/bitbots_hcm/package.xml index 6f07ddc82..33494f614 100644 --- a/bitbots_hcm/package.xml +++ b/bitbots_hcm/package.xml @@ -20,6 +20,8 @@ <depend>backward_ros</depend> <depend>bitbots_docs</depend> <depend>bitbots_msgs</depend> + <depend>bitbots_robot_description</depend> + <depend>bitbots_utils</depend> <depend>geometry_msgs</depend> <depend>humanoid_league_msgs</depend> <depend>pybind11-dev</depend> diff --git a/bitbots_head_mover/launch/head_mover_standalone.launch b/bitbots_head_mover/launch/head_mover_standalone.launch index 74e7a8a3c..10e847597 100644 --- a/bitbots_head_mover/launch/head_mover_standalone.launch +++ b/bitbots_head_mover/launch/head_mover_standalone.launch @@ -3,11 +3,11 @@ <arg name="depends_only" default="false" /> <arg name="sim" default="false" /> - <include file="$(find-pkg-share bitbots_bringup)/launch/base.launch"> + <include file="$(find-pkg-share bitbots_utils)/launch/parameter_blackboard.launch"> <arg name="sim" value="$(var sim)"/> </include> - <include file="$(find-pkg-share bitbots_utils)/launch/motion_base.launch" > + <include file="$(find-pkg-share bitbots_robot_description)/launch/load_robot_description.launch" > <arg name="sim" value="$(var sim)"/> </include> diff --git a/bitbots_head_mover/launch/test.launch b/bitbots_head_mover/launch/test.launch index 7c7ea5954..f6b81bad9 100644 --- a/bitbots_head_mover/launch/test.launch +++ b/bitbots_head_mover/launch/test.launch @@ -10,11 +10,11 @@ </group> </group> - <include file="$(find-pkg-share bitbots_bringup)/launch/base.launch" > + <include file="$(find-pkg-share bitbots_utils)/launch/parameter_blackboard.launch" > <arg name="sim" value="$(var sim)"/> </include> - <include file="$(find-pkg-share bitbots_utils)/launch/motion_base.launch" > + <include file="$(find-pkg-share bitbots_robot_description)/launch/load_robot_description.launch" > <arg name="sim" value="$(var sim)"/> </include> diff --git a/bitbots_head_mover/package.xml b/bitbots_head_mover/package.xml index 78a22f9e3..c33a83d1a 100644 --- a/bitbots_head_mover/package.xml +++ b/bitbots_head_mover/package.xml @@ -19,6 +19,8 @@ <depend>bio_ik_msgs</depend> <depend>bio_ik</depend> <depend>bitbots_msgs</depend> + <depend>bitbots_robot_description</depend> + <depend>bitbots_utils</depend> <depend>generate_parameter_library</depend> <depend>humanoid_league_msgs</depend> <depend>moveit_core</depend> diff --git a/bitbots_quintic_walk/launch/test.launch b/bitbots_quintic_walk/launch/test.launch index 5bfd1e831..868568311 100644 --- a/bitbots_quintic_walk/launch/test.launch +++ b/bitbots_quintic_walk/launch/test.launch @@ -7,11 +7,11 @@ <let if="$(env IS_ROBOT false)" name="taskset" value="taskset -c 3,4"/> <let unless="$(env IS_ROBOT false)" name="taskset" value=""/> - <include file="$(find-pkg-share bitbots_bringup)/launch/base.launch" > + <include file="$(find-pkg-share bitbots_utils)/launch/parameter_blackboard.launch" > <arg name="sim" value="$(var sim)"/> </include> - <include file="$(find-pkg-share bitbots_utils)/launch/motion_base.launch" > + <include file="$(find-pkg-share bitbots_robot_description)/launch/load_robot_description.launch" > <arg name="sim" value="$(var sim)"/> <arg name="robot_type" value="$(var robot_type)"/> </include> diff --git a/bitbots_quintic_walk/package.xml b/bitbots_quintic_walk/package.xml index ce1f7a3b1..a47906110 100644 --- a/bitbots_quintic_walk/package.xml +++ b/bitbots_quintic_walk/package.xml @@ -27,6 +27,7 @@ <depend>bio_ik</depend> <depend>bitbots_docs</depend> <depend>bitbots_msgs</depend> + <depend>bitbots_robot_description</depend> <depend>bitbots_splines</depend> <depend>bitbots_utils</depend> <depend>control_toolbox</depend> diff --git a/bitbots_rl_motion/launch/test.launch b/bitbots_rl_motion/launch/test.launch index da148ae1b..89da53dbd 100644 --- a/bitbots_rl_motion/launch/test.launch +++ b/bitbots_rl_motion/launch/test.launch @@ -6,11 +6,11 @@ <let if="$(env IS_ROBOT false)" name="taskset" value="taskset -c 3,4"/> <let unless="$(env IS_ROBOT false)" name="taskset" value=""/> - <include file="$(find-pkg-share bitbots_bringup)/launch/base.launch" > + <include file="$(find-pkg-share bitbots_utils)/launch/parameter_blackboard.launch" > <arg name="sim" value="$(var sim)"/> </include> - <include file="$(find-pkg-share bitbots_utils)/launch/motion_base.launch" > + <include file="$(find-pkg-share bitbots_robot_description)/launch/load_robot_description.launch" > <arg name="sim" value="$(var sim)"/> </include> diff --git a/bitbots_rl_motion/package.xml b/bitbots_rl_motion/package.xml index 52d1032a4..da4769d63 100644 --- a/bitbots_rl_motion/package.xml +++ b/bitbots_rl_motion/package.xml @@ -15,10 +15,12 @@ <buildtool_depend>ament_cmake</buildtool_depend> - <depend>rclpy</depend> - <depend>std_msgs</depend> <depend>bitbots_docs</depend> + <depend>bitbots_robot_description</depend> + <depend>bitbots_utils</depend> <depend>diagnostic_aggregator</depend> + <depend>rclpy</depend> + <depend>std_msgs</depend> <export> <bitbots_documentation> From 498eb8a8cac5d471cd449d9fdc0399ed6e4027a7 Mon Sep 17 00:00:00 2001 From: Florian Vahl <git@flova.de> Date: Sat, 12 Aug 2023 00:36:29 +0200 Subject: [PATCH 03/74] Cleanup animation server --- .../bitbots_animation_server/animation.py | 6 +- .../animation_node.py | 203 +++++++++--------- .../resource_manager.py | 65 +----- .../spline_animator.py | 19 +- .../scripts/animation_hcm_bridge.py | 6 +- .../scripts/run_animation.py | 22 +- 6 files changed, 135 insertions(+), 186 deletions(-) diff --git a/bitbots_animation_server/bitbots_animation_server/animation.py b/bitbots_animation_server/bitbots_animation_server/animation.py index 741a750b6..6ad858690 100644 --- a/bitbots_animation_server/bitbots_animation_server/animation.py +++ b/bitbots_animation_server/bitbots_animation_server/animation.py @@ -18,8 +18,8 @@ class Animation: """ def __init__(self, name, keyframes, default_interpolator=None): - self.name = name - self.keyframes = keyframes + self.name: str = name + self.keyframes: list(Keyframe) = keyframes self.default_interpolator = default_interpolator @@ -37,7 +37,7 @@ def parse(info): return anim -def as_dict(anim): +def as_dict(anim: Animation): """ Convert an animation to builtin python types to make it serializable to formats like ``json``. diff --git a/bitbots_animation_server/bitbots_animation_server/animation_node.py b/bitbots_animation_server/bitbots_animation_server/animation_node.py index 54c2ae821..6d099073f 100755 --- a/bitbots_animation_server/bitbots_animation_server/animation_node.py +++ b/bitbots_animation_server/bitbots_animation_server/animation_node.py @@ -1,131 +1,133 @@ #!/usr/bin/env python3 import json - -from rclpy.action import ActionClient import traceback import numpy as np import rclpy +from rclpy.action import ActionServer +from rclpy.action.server import ServerGoalHandle +from rclpy.callback_groups import ReentrantCallbackGroup from rclpy.duration import Duration -from rclpy.node import Node +from rclpy.executors import ExternalShutdownException from rclpy.executors import MultiThreadedExecutor -from rclpy.callback_groups import ReentrantCallbackGroup - -from humanoid_league_msgs.action import PlayAnimation -from humanoid_league_msgs.msg import Animation as AnimationMsg +from rclpy.node import Node +from sensor_msgs.msg import JointState from trajectory_msgs.msg import JointTrajectoryPoint, JointTrajectory +from bitbots_animation_server.animation import Animation from bitbots_animation_server.animation import parse -from sensor_msgs.msg import Imu, JointState -from bitbots_animation_server.resource_manager import find_all_animations_by_name -from humanoid_league_msgs.msg import RobotControlState +from bitbots_animation_server.resource_manager import ResourceManager from bitbots_animation_server.spline_animator import SplineAnimator -from rclpy.action import ActionServer -from rclpy.executors import ExternalShutdownException +from humanoid_league_msgs.action import PlayAnimation +from humanoid_league_msgs.msg import Animation as AnimationMsg +from humanoid_league_msgs.msg import RobotControlState class AnimationNode(Node): - _feedback = PlayAnimation.Feedback - _result = PlayAnimation.Result - + """This node provides an action server for playing animations.""" + def __init__(self): """Starts a simple action server and waits for requests.""" - super().__init__("animation") - # currently, we set log level to info since the action server is spamming too much - if not self.get_parameter("use_sim_time"): - pass # todo how does this work in rclpy - # rospy.on_shutdown(self.on_shutdown_hook) + super().__init__("animation_server") self.get_logger().debug("Starting Animation Server") self.current_joint_states = None self.hcm_state = 0 self.current_animation = None - self.animation_cache = {} - all_animations = find_all_animations_by_name(self) + self.animation_cache: dict[str, Animation] = {} + + # Get robot type and create resource manager + self.declare_parameter("robot_type", "wolfgang") + self.resource_manager = ResourceManager(self.get_parameter('robot_type').value) + + # Load all animations into memory + all_animations = self.resource_manager.find_all_animations_by_name(self) for animation_name, animation_file in all_animations.items(): try: with open(animation_file) as fp: self.animation_cache[animation_name] = parse(json.load(fp)) except IOError: - self.get_logger().error("Animation '%s' could not be loaded" % animation_name) + self.get_logger().error(f"Animation '{animation_name}' could not be loaded") except ValueError: self.get_logger().error( - "Animation '%s' had a ValueError. Probably there is a syntax error in the animation file. " - "See traceback" % animation_name) + f"Animation '{animation_name}' had a ValueError. " + "Probably there is a syntax error in the animation file. " + "See traceback") traceback.print_exc() - # predefined messages for performance - self.anim_msg = AnimationMsg() - # AnimationMsg takes a JointTrajectory message to also be able to process trajectories. To keep this - # functionality, we use this message type, even though we only need a single joint goal in this case. - self.traj_msg = JointTrajectory() - self.traj_point = JointTrajectoryPoint() - callback_group = ReentrantCallbackGroup() self.create_subscription(JointState, "joint_states", self.update_current_pose, 1, callback_group=callback_group) self.create_subscription(RobotControlState, "robot_state", self.update_hcm_state, 1, callback_group=callback_group) + self.hcm_publisher = self.create_publisher(AnimationMsg, "animation", 1) self._as = ActionServer(self, PlayAnimation, "animation", self.execute_cb, callback_group=callback_group) - def on_shutdown_hook(self): - # we got external shutdown, let's still wait a bit, since we probably want to do a shutdown animation - self.get_clock().sleep_for(Duration(seconds=5)) - - def execute_cb(self, goal): + def execute_cb(self, goal: ServerGoalHandle): """ This is called, when someone calls the animation action""" + + # Set type for request + request: PlayAnimation.Goal = goal.request + first = True - self.current_animation = goal.request.animation + self.current_animation = request.animation # publish info to the console for the user - self.get_logger().info(f"Request to play animation {goal.request.animation}") + self.get_logger().info(f"Request to play animation {request.animation}") - if self.hcm_state != 0 and not goal.request.hcm: # 0 means controllable + if self.hcm_state != 0 and not request.hcm: # 0 means controllable # we cant play an animation right now # but we send a request, so that we may can soon self.send_animation_request() - self.get_logger().info("HCM not controllable. Only sent request to make it come controllable.") - goal.abort() - return PlayAnimation.Result(successful=False) - animator = self.get_animation_splines(self.current_animation, goal) + # Wait for the hcm to be controllable + num_tries = 0 + while rclpy.ok() and self.hcm_state != 0 and num_tries < 10: + num_tries += 1 + self.get_logger().info("HCM not controllable. Waiting... (try " + str(num_tries) + ")") + self.get_clock().sleep_until(self.get_clock().now() + Duration(seconds=0.1)) + + if self.hcm_state != 0: + self.get_logger().info( + "HCM not controllable. Only sent request to make it come controllable, " + "but it was not successful until timeout") + goal.abort() + return PlayAnimation.Result(successful=False) + + animator = self.get_animation_splines(self.current_animation) while rclpy.ok() and animator: try: last_time = self.get_clock().now() - # first check if we have another goal - # todo this does not work in ros2 - # self.check_for_new_goal(goal) - # new_goal = self._as.current_goal.goal.animation - ## if there is a new goal, calculate new splines and reset the time - # if new_goal != self.current_animation: - # self.current_animation = new_goal - # animator = self.get_animation_splines(self.current_animation) - # first = True # if we're here we want to play the next keyframe, cause there is no other goal # compute next pose - t = float(self.get_clock().now().seconds_nanoseconds()[0] + - self.get_clock().now().seconds_nanoseconds()[1] / 1e9) - animator.get_start_time() + t = self.get_clock().now().nanoseconds / 1e9 - animator.get_start_time() pose = animator.get_positions_rad(t) if pose is None: - # see walking node reset - # animation is finished # tell it to the hcm - self.send_animation(False, True, goal.request.hcm, None, None) + self.send_animation( + first=False, + last=True, + hcm=request.hcm, + pose=None, + torque=None) goal.publish_feedback(PlayAnimation.Feedback(percent_done=100)) # we give a positive result goal.succeed() return PlayAnimation.Result(successful=True) - self.send_animation(first, False, goal.request.hcm, pose, animator.get_torque(t)) + self.send_animation( + first=first, + last=False, + hcm=request.hcm, + pose=pose, + torque=animator.get_torque(t)) first = False # we have sent the first frame, all frames after this can't be the first - perc_done = int(((float(self.get_clock().now().seconds_nanoseconds()[0] + - self.get_clock().now().seconds_nanoseconds()[ - 1] / 1e9) - animator.get_start_time()) / animator.get_duration()) * 100) + perc_done = int(((self.get_clock().now().nanoseconds / 1e9 - animator.get_start_time()) / animator.get_duration()) * 100) perc_done = max(0, min(perc_done, 100)) goal.publish_feedback(PlayAnimation.Feedback(percent_done=perc_done)) @@ -135,65 +137,52 @@ def execute_cb(self, goal): exit() return PlayAnimation.Result(successful=False) - def get_animation_splines(self, animation_name, goal): + def get_animation_splines(self, animation_name: str): if animation_name not in self.animation_cache: - self.get_logger().error("Animation '%s' not found" % animation_name) + self.get_logger().error(f"Animation '{animation_name}' not found") return - - parsed_animation = self.animation_cache[animation_name] - return SplineAnimator(parsed_animation, self.current_joint_states, self.get_logger(), - self.get_clock()) - - def check_for_new_goal(self, goal): - if self._as.is_new_goal_available(): - next_goal = self._as.next_goal - if not next_goal or not next_goal.get_goal(): - return - self.get_logger().debug("New goal: " + next_goal.get_goal().animation) - if next_goal.get_goal().hcm: - self.get_logger().debug("Accepted hcm animation %s", next_goal.get_goal().animation) - # cancel old stuff and restart - self._as.current_goal.set_aborted() - self._as.accept_new_goal() - else: - # can't run this animation now - self._as.next_goal.set_rejected() - # delete the next goal to make sure, that we can accept something else - self._as.next_goal = None - self.get_logger().warn("Couldn't start non hcm animation because another one is already running.") + return SplineAnimator( + self.animation_cache[animation_name], + self.current_joint_states, + self.get_logger(), + self.get_clock()) def update_current_pose(self, msg): """Gets the current motor positions and updates the representing pose accordingly.""" self.current_joint_states = msg - def update_hcm_state(self, msg): + def update_hcm_state(self, msg: RobotControlState): self.hcm_state = msg.state def send_animation_request(self): - self.anim_msg.request = True - self.anim_msg.header.stamp = self.get_clock().now().to_msg() - self.hcm_publisher.publish(self.anim_msg) - - def send_animation(self, first, last, hcm, pose, torque): - self.anim_msg.request = False - self.anim_msg.first = first - self.anim_msg.last = last - self.anim_msg.hcm = hcm - if pose is not None: - self.traj_msg.joint_names = [] - self.traj_msg.points = [JointTrajectoryPoint()] + anim_msg = AnimationMsg() + anim_msg.request = True + anim_msg.header.stamp = self.get_clock().now().to_msg() + self.hcm_publisher.publish(anim_msg) + + def send_animation(self, first: bool, last: bool, hcm: bool, pose: dict, torque: dict): + """Sends an animation to the hcm""" + anim_msg = AnimationMsg() + anim_msg.request = False + anim_msg.first = first + anim_msg.last = last + anim_msg.hcm = hcm + if pose is not None:# + traj_msg = JointTrajectory() + traj_msg.joint_names = [] + traj_msg.points = [JointTrajectoryPoint()] # We are only using a single point in the trajectory message, since we only want to send a single joint goal - self.traj_msg.points[0].positions = [] - self.traj_msg.points[0].effort = [] + traj_msg.points[0].positions = [] + traj_msg.points[0].effort = [] for joint in pose: - self.traj_msg.joint_names.append(joint) - self.traj_msg.points[0].positions.append(pose[joint]) + traj_msg.joint_names.append(joint) + traj_msg.points[0].positions.append(pose[joint]) if torque: # 1 and 2 should be mapped to 1 - self.traj_msg.points[0].effort.append(np.clip((torque[joint]), 0, 1)) - self.anim_msg.position = self.traj_msg - self.anim_msg.header.stamp = self.get_clock().now().to_msg() - self.hcm_publisher.publish(self.anim_msg) + traj_msg.points[0].effort.append(np.clip((torque[joint]), 0, 1)) + anim_msg.position = traj_msg + anim_msg.header.stamp = self.get_clock().now().to_msg() + self.hcm_publisher.publish(anim_msg) def main(args=None): diff --git a/bitbots_animation_server/bitbots_animation_server/resource_manager.py b/bitbots_animation_server/bitbots_animation_server/resource_manager.py index c4e686c7f..4e37651a8 100644 --- a/bitbots_animation_server/bitbots_animation_server/resource_manager.py +++ b/bitbots_animation_server/bitbots_animation_server/resource_manager.py @@ -2,35 +2,26 @@ ResourceManager ^^^^^^^^^^^^^^^ -The ResourceManager module provides functions for file searching in a -Darwin Project. Thus, it is possible to find resources without knowing -the current location in the file system. - -This module provides the global methods :func:`find_resource`, -:func:`find_anim` and :func:`find` which use a single global instance -of the :class:`ResourceManager`. Thereby, files that have once been -discovered do not have to be searched again. +The ResourceManager module provides functions to search and list animations for a given robot. +Thus, it is possible to find resources without knowing the current location in the file system. """ -import os.path +import os from os.path import abspath, dirname, exists, join, normpath from os import walk -import rclpy from ament_index_python import get_package_share_directory -from rclpy.node import Node -class ResourceManager(object): +class ResourceManager: - def __init__(self, node:Node): - node.declare_parameter("robot_type", "wolfgang") - anim_package = node.get_parameter('robot_type').get_parameter_value().string_value + "_animations" - - path = get_package_share_directory(anim_package) - self.basepath = abspath(path + "/animations") + def __init__(self, robot_type: str): + # Get the path to the animations folder + self.basepath = abspath(os.path.join( + get_package_share_directory(robot_type + "_animations"), + "animations")) self.cache = {} - self.files = [] # Animations cached for find_all_animations + self.files = [] self.names = [] # Plain animation names, without filename-extension self.animpath = self._get_animpath() @@ -117,19 +108,6 @@ def find(self, name, filename=""): return result - def generate_find(self, basepath): - """ Return a find function that automatically adds a basepath to - each name - :param basepath: The path to add to each file - :type basepath: String - - The returned function takes one argument which will be added to the - basepath before calling the normal "find" method without optional - arguments. - """ - path = normpath(basepath) - return lambda name: self.find(join(path, name)) - def find_animation(self, name): """ Find an animation in <robot_name>_animations/animations/*. The filename @@ -176,26 +154,3 @@ def find_all_animations_by_name(self, force_reload=False): if not self.files or force_reload: self.find_all_animations(force_reload) return dict(zip(self.names, self.files)) - - def find_all_animation_names(self, force_reload=False): - """ Same as find_all_animations, but returns a sorted set of the animations - for use in the record-ui - """ - if not self.names or force_reload: - self.find_all_animations(force_reload) - return sorted(set(self.names)) - - def is_animation_name(self, name, force_reload=False): - """Check if a name belongs to a saved animation - """ - if not self.names or force_reload: - self.find_all_animations(force_reload=True) - return name in self.names - -_RM = None # type: ResourceManager -# Shortcut to search for animations -def find_all_animations_by_name(node, *args, **kwargs): - global _RM - if not _RM: - _RM = ResourceManager(node) - return _RM.find_all_animations_by_name(*args, **kwargs) diff --git a/bitbots_animation_server/bitbots_animation_server/spline_animator.py b/bitbots_animation_server/bitbots_animation_server/spline_animator.py index 1ab5cb153..63de5edb8 100644 --- a/bitbots_animation_server/bitbots_animation_server/spline_animator.py +++ b/bitbots_animation_server/bitbots_animation_server/spline_animator.py @@ -1,18 +1,21 @@ import math -import rclpy -from rclpy.node import Node +from rclpy.impl.rcutils_logger import RcutilsLogger as Logger# +from rclpy.clock import Clock + +from sensor_msgs.msg import JointState +from bitbots_animation_server.animation import Animation from bitbots_splines.smooth_spline import SmoothSpline class SplineAnimator: - - def __init__(self, animation, current_joint_states, logger, clock): + def __init__(self, animation: Animation, current_joint_states: JointState, logger: Logger, clock: Clock): self.anim = animation - self.start_time = float(clock.now().seconds_nanoseconds()[0] + clock.now().seconds_nanoseconds()[1]/1e9) - self.animation_duration = 0 - self.current_point_time = 0 - self.spline_dict = {} + self.start_time = clock.now().nanoseconds /1e9 + + self.animation_duration = 0.0 + self.current_point_time = 0.0 + self.spline_dict: dict[str, SmoothSpline] = {} self.torques = {} # add current joint positions as start diff --git a/bitbots_animation_server/scripts/animation_hcm_bridge.py b/bitbots_animation_server/scripts/animation_hcm_bridge.py index 81a92370f..04f502c1d 100755 --- a/bitbots_animation_server/scripts/animation_hcm_bridge.py +++ b/bitbots_animation_server/scripts/animation_hcm_bridge.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 import rclpy from rclpy.node import Node -from rclpy.duration import Duration from bitbots_msgs.msg import JointCommand # List of all joint names. Do not change the order as it is important for Gazebo @@ -26,8 +25,6 @@ def __init__(self): self.create_subscription(Animation, "animation", self.animation_cb, 10) - rclpy.spin(self) - def animation_cb(self, msg: Animation): self.joint_command_msg.header.stamp = self.get_clock().now().to_msg() for i in range(len(msg.position.joint_names)): @@ -39,4 +36,5 @@ def animation_cb(self, msg: Animation): if __name__ == '__main__': - bridge = AnimationHcmBridge() \ No newline at end of file + bridge = AnimationHcmBridge() + rclpy.spin(bridge) \ No newline at end of file diff --git a/bitbots_animation_server/scripts/run_animation.py b/bitbots_animation_server/scripts/run_animation.py index 41fc6ca96..05e2593bd 100755 --- a/bitbots_animation_server/scripts/run_animation.py +++ b/bitbots_animation_server/scripts/run_animation.py @@ -1,32 +1,36 @@ #!/usr/bin/env python3 -import argparse +import sys -from rclpy.action import ActionClient -from actionlib_msgs.msg import GoalStatus import rclpy -from rclpy.duration import Duration +from actionlib_msgs.msg import GoalStatus +from rclpy.action import ActionClient from rclpy.node import Node -import sys -import humanoid_league_msgs.action +from humanoid_league_msgs.action import PlayAnimation def anim_run(anim=None, hcm=False): node = Node("run_animation") - anim_client = ActionClient(node, humanoid_league_msgs.action.PlayAnimation, 'animation') + + anim_client = ActionClient(node, PlayAnimation, 'animation') + if anim is None or anim == "": node.get_logger().warn("Tried to play an animation with an empty name!") return False + first_try = anim_client.wait_for_server(3.0) + if not first_try: node.get_logger().error( "Animation Action Server not running! Motion can not work without animation action server. " "Will now wait until server is accessible!") anim_client.wait_for_server() node.get_logger().warn("Animation server now running, hcm will go on.") - goal = humanoid_league_msgs.action.PlayAnimation.Goal() + + goal = PlayAnimation.Goal() goal.animation = anim goal.hcm = hcm + # todo not .send_goal does never return state = anim_client.send_goal_async(goal) if state == GoalStatus.PENDING: @@ -56,7 +60,7 @@ def anim_run(anim=None, hcm=False): if __name__ == '__main__': rclpy.init(args=sys.argv) - # run with "rosrun bitbots_animation_server run_animation.py NAME" + # run with "ros2 run bitbots_animation_server run_animation.py NAME" if len(sys.argv) > 1: # Support for _anim:=NAME -style execution for legacy reasons if sys.argv[1].startswith('_anim:=') or sys.argv[1].startswith('anim:='): From edf04dedba82bd537e90c139f88a1f842a783d96 Mon Sep 17 00:00:00 2001 From: Florian Vahl <git@flova.de> Date: Tue, 12 Sep 2023 18:35:24 +0200 Subject: [PATCH 04/74] Start hcm refactoring --- .../docs/manual/animation.rst | 4 +- .../scripts/animation_hcm_bridge.py | 5 + .../cfg/bitbots_dynamic_kick_params.cfg | 88 ---- .../bitbots_dynup_py/py_dynup_wrapper.py | 14 +- bitbots_dynup/docs/index.rst | 4 +- .../include/bitbots_dynup/dynup_engine.h | 22 +- bitbots_dynup/launch/dynup.launch | 1 - bitbots_dynup/launch/test.launch | 1 - bitbots_dynup/package.xml | 2 - .../scripts/generate_walkready_animation.py | 75 --- bitbots_dynup/scripts/test_time.py | 165 ------ .../bitbots_hcm/classifier/classifier.pkl | Bin 2141967 -> 0 bytes bitbots_hcm/bitbots_hcm/classifier/scaler.pkl | Bin 752 -> 0 bytes bitbots_hcm/bitbots_hcm/classifier/types.pkl | Bin 89 -> 0 bytes bitbots_hcm/bitbots_hcm/fall_checker.py | 190 ------- bitbots_hcm/bitbots_hcm/fall_classifier.py | 114 ----- .../hcm_dsd/actions/cancel_goals.py | 5 +- .../hcm_dsd/actions/change_motor_power.py | 4 +- .../hcm_dsd/actions/falling_poses.py | 218 -------- .../hcm_dsd/actions/play_animation.py | 54 +- .../hcm_dsd/actions/stop_walking.py | 13 +- .../bitbots_hcm/hcm_dsd/decisions/__init__.py | 13 + .../hcm_dsd/decisions/animation.py | 36 ++ .../hcm_dsd/decisions/check_hardware.py | 177 +++++++ .../hcm_dsd/decisions/decisions.py | 468 ------------------ .../bitbots_hcm/hcm_dsd/decisions/fallen.py | 60 +++ .../bitbots_hcm/hcm_dsd/decisions/falling.py | 137 +++++ .../bitbots_hcm/hcm_dsd/decisions/kicking.py | 20 + .../bitbots_hcm/hcm_dsd/decisions/pickup.py | 28 ++ .../bitbots_hcm/hcm_dsd/decisions/startup.py | 52 ++ .../bitbots_hcm/hcm_dsd/decisions/stop.py | 16 + .../bitbots_hcm/hcm_dsd/decisions/walking.py | 25 + bitbots_hcm/bitbots_hcm/hcm_dsd/hcm.dsd | 2 +- .../bitbots_hcm/hcm_dsd/hcm_blackboard.py | 122 ++--- .../bitbots_hcm/humanoid_control_module.py | 22 +- bitbots_hcm/bitbots_hcm/training/dataset.py | 95 ---- bitbots_hcm/bitbots_hcm/training/label.py | 132 ----- bitbots_hcm/bitbots_hcm/training/train.py | 219 -------- bitbots_hcm/config/hcm_wolfgang.yaml | 3 + bitbots_hcm/src/hcm.cpp | 10 - 40 files changed, 674 insertions(+), 1942 deletions(-) delete mode 100755 bitbots_dynamic_kick/cfg/bitbots_dynamic_kick_params.cfg delete mode 100644 bitbots_dynup/scripts/generate_walkready_animation.py delete mode 100644 bitbots_dynup/scripts/test_time.py delete mode 100644 bitbots_hcm/bitbots_hcm/classifier/classifier.pkl delete mode 100644 bitbots_hcm/bitbots_hcm/classifier/scaler.pkl delete mode 100644 bitbots_hcm/bitbots_hcm/classifier/types.pkl delete mode 100644 bitbots_hcm/bitbots_hcm/fall_checker.py delete mode 100644 bitbots_hcm/bitbots_hcm/fall_classifier.py delete mode 100644 bitbots_hcm/bitbots_hcm/hcm_dsd/actions/falling_poses.py create mode 100644 bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/animation.py create mode 100644 bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/check_hardware.py delete mode 100644 bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/decisions.py create mode 100644 bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/fallen.py create mode 100644 bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/falling.py create mode 100644 bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/kicking.py create mode 100644 bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/pickup.py create mode 100644 bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/startup.py create mode 100644 bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/stop.py create mode 100644 bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/walking.py delete mode 100644 bitbots_hcm/bitbots_hcm/training/dataset.py delete mode 100644 bitbots_hcm/bitbots_hcm/training/label.py delete mode 100644 bitbots_hcm/bitbots_hcm/training/train.py diff --git a/bitbots_animation_server/docs/manual/animation.rst b/bitbots_animation_server/docs/manual/animation.rst index b939b9b1e..9041231a8 100644 --- a/bitbots_animation_server/docs/manual/animation.rst +++ b/bitbots_animation_server/docs/manual/animation.rst @@ -1,7 +1,7 @@ Description of Animation Server =============================== -The Animation Server is responsible for playback of previously recorded keyframe animations. The server is called by the 'HCM', after the robot fell down and wants to get back up. It can also be used by the 'Behavior', e.g. for shooting. +The Animation Server is responsible for playback of previously recorded keyframe animations. The Animation Server is a ROS Action Server. For an action a message is sent to the Animation Server. This is similar to sending a normal 'message', the connection in this case however is not only one-way. The Action Server sends back the status of the active action as well as the result (successful or not). @@ -9,7 +9,7 @@ Actively running animations, can be interrupted by the HCM. This ensures that, s Animations consist of a series of keyframes. Each keyframe is a snapshot of motor positions at a certain point in time. During playback a file containing the recorded keyframes is read and each frame is played one after the other at a given interval. To achieve a fluid motion the frequency of interpolation is set to 200 Hz with the help of quintic splines. This interpolation is done in the 'Joint Space' (inbetween the motor positions, not inbetween the actual positions of the robot's extremities in the Cartesian space), due to the development of the project and better usability. -Animations can be run manually with `rosrun bitbots_animation_server run_animation <name>`. +Animations can be run manually with `ros2 run bitbots_animation_server run_animation <name>`. All animations can be found in the package `wolfgang_animations`. If an animation fails to run, the first thing to check is, if the HCM outputs a different 'Robot State' than 'Controllable' or 'Walking'. diff --git a/bitbots_animation_server/scripts/animation_hcm_bridge.py b/bitbots_animation_server/scripts/animation_hcm_bridge.py index 04f502c1d..c7b12e431 100755 --- a/bitbots_animation_server/scripts/animation_hcm_bridge.py +++ b/bitbots_animation_server/scripts/animation_hcm_bridge.py @@ -1,4 +1,9 @@ #!/usr/bin/env python3 + +""" +This script subscribes to the topic "animation" and publishes the received joint commands to the motor command topic, skipping the HCM. +""" + import rclpy from rclpy.node import Node from bitbots_msgs.msg import JointCommand diff --git a/bitbots_dynamic_kick/cfg/bitbots_dynamic_kick_params.cfg b/bitbots_dynamic_kick/cfg/bitbots_dynamic_kick_params.cfg deleted file mode 100755 index eaab2e9bc..000000000 --- a/bitbots_dynamic_kick/cfg/bitbots_dynamic_kick_params.cfg +++ /dev/null @@ -1,88 +0,0 @@ -#!/usr/bin/env python3 - -PACKAGE = 'bitbots_dynamic_kick' -import roslib - -roslib.load_manifest(PACKAGE) - -from dynamic_reconfigure.parameter_generator_catkin import * - -gen = ParameterGenerator() - -group_engine = gen.add_group("Engine", type="tab") -group_engine_distances = group_engine.add_group("Distances and Positions") -group_engine.add("engine_rate", int_t, 1, - "How often the engine updates motor goals [Hz]", - min=1, max=500) -group_engine_distances.add("foot_rise", double_t, 2, - "Rise of the foot [m]", - min=0, max=2) -group_engine_distances.add("foot_distance", double_t, 2, - "How far apart the feet should be from each other. This is only relevant during the initial phase " - "when the foot is not yet moving towards the ball [m]", - min=0, max=3) -group_engine_distances.add("kick_windup_distance", double_t, 2, - "How far away from the ball to stop and perform the actual (fast) kick movement [m]", - min=0, max=2) -group_engine_distances.add("trunk_height", double_t, 4, - "Height of the trunk [m]", - min=0, max=0.6) -group_engine_distances.add("trunk_roll", double_t, 4, - "Roll of the trunk, positive means toward the support foot [rad]", - min=-1, max=1) -group_engine_distances.add("trunk_pitch", double_t, 4, - "Pitch of the trunk, positive means toward the front [rad]", - min=-1, max=1) -group_engine_distances.add("trunk_yaw", double_t, 4, - "Yaw of the trunk, positive means turning toward the kicking foot [rad]", - min=-1, max=1) - -group_engine_timings = group_engine.add_group("Timings") -group_engine_timings.add("move_trunk_time", double_t, 3, - "How long it should take to move the trunk above the support foot before raising the flying foot [s]", - min=0) -group_engine_timings.add("raise_foot_time", double_t, 3, - "How long it should take to raise the flying foot from the ground [s]", - min=0) -group_engine_timings.add("move_to_ball_time", double_t, 3, - "How long it should take to move the raised foot to the windup point [s]", - min=0) -group_engine_timings.add("kick_time", double_t, 3, # TODO replace this with dynamic calculation - "This will be removed in the future [s]", - min=0) -group_engine_timings.add("move_back_time", double_t, 3, - "How long it should take to move the flying foot back after kicking [s]", - min=0) -group_engine_timings.add("lower_foot_time", double_t, 3, - "How long it should take to lower the foot [s]", - min=0) -group_engine_timings.add("move_trunk_back_time", double_t, 3, - "How long it should take to move the flying foot back after kicking [s]", - min=0) - -group_engine_decisions = group_engine.add_group("Decisions") -group_engine_decisions.add("choose_foot_corridor_width", double_t, 3, - "How wide the corridor should be in which advanced foot-choosing calculations take place." - "If kick goal is placed outside this corridor, the foot on that side will automatically be assigned [m]" - "the flying foot.", - min=0) - -group_stabilizing = gen.add_group("Stabilizer", type="tab") - -group_stabilizing_cop = group_stabilizing.add_group("CenterOfPressure regulation") -group_stabilizing_cop.add("use_center_of_pressure", bool_t, 4, - "Use the center of pressure for stabilizing") -group_stabilizing_cop.add("stabilizing_point_x", double_t, 4, - "Where to stabilize over in x direction. Measured from the support foots *_sole frame [m]", - min=-0.5, max=0.5) -group_stabilizing_cop.add("stabilizing_point_y", double_t, 4, - "Where to stabilize over in y direction. Measured from the support foots *_sole frame. " - "Be aware that - always represents the direction towards base_footprint [m]", - min=-0.5, max=0.5) - -group_visualization = gen.add_group("Visualization", type="tab") -group_visualization.add("spline_smoothness", int_t, 8, - "how many points to extract from splines for visualization", - min=1, max=200) - -exit(gen.generate(PACKAGE, 'dynamic_kick', 'DynamicKick')) diff --git a/bitbots_dynup/bitbots_dynup_py/py_dynup_wrapper.py b/bitbots_dynup/bitbots_dynup_py/py_dynup_wrapper.py index 915f388a4..5a78cdb5b 100644 --- a/bitbots_dynup/bitbots_dynup_py/py_dynup_wrapper.py +++ b/bitbots_dynup/bitbots_dynup_py/py_dynup_wrapper.py @@ -1,16 +1,10 @@ from io import BytesIO -import rclpy -from rclpy.node import Node -from std_msgs.msg import Int64 - -from bitbots_dynup.py_dynup import PyDynupWrapper, spin_once from bitbots_dynup.msg import DynupPoses -from bitbots_msgs.msg import JointCommand, FootPressure -from geometry_msgs.msg import Twist, Pose, PoseArray -from sensor_msgs.msg import Imu, JointState -from std_msgs.msg import String -from nav_msgs.msg import Odometry +from bitbots_dynup.py_dynup import PyDynupWrapper, spin_once +from geometry_msgs.msg import PoseArray + +from bitbots_msgs.msg import JointCommand class PyDynup(object): diff --git a/bitbots_dynup/docs/index.rst b/bitbots_dynup/docs/index.rst index 3fc6db302..ad9f1579b 100644 --- a/bitbots_dynup/docs/index.rst +++ b/bitbots_dynup/docs/index.rst @@ -30,9 +30,9 @@ Since the arms are lacking degrees of freedom, the IK solver is set to also cons How to test it -------------- -To test the dynup system, simply start the test script with :code:`roslaunch bitbots_dynup test.launch sim:=true`. +To test the dynup system, simply start the test script with :code:`ros2 launch bitbots_dynup test.launch sim:=true`. The :code:`sim` parameter is only required, if the system is tested in simulation, otherwise omit it. -To execute the motion, run the following command: :code:`rosrun bitbots_dynup dummy_client.py <direction>`, replacing :code:`<direction>` with one of the six directions mentioned above. +To execute the motion, run the following command: :code:`ros2 run bitbots_dynup dummy_client.py <direction>`, replacing :code:`<direction>` with one of the six directions mentioned above. diff --git a/bitbots_dynup/include/bitbots_dynup/dynup_engine.h b/bitbots_dynup/include/bitbots_dynup/dynup_engine.h index ada2e3cc8..dd749733d 100644 --- a/bitbots_dynup/include/bitbots_dynup/dynup_engine.h +++ b/bitbots_dynup/include/bitbots_dynup/dynup_engine.h @@ -1,19 +1,19 @@ #ifndef BITBOTS_DYNUP_INCLUDE_BITBOTS_DYNUP_DYNUP_ENGINE_H_ #define BITBOTS_DYNUP_INCLUDE_BITBOTS_DYNUP_DYNUP_ENGINE_H_ -#include <string> -#include <optional> -#include <cmath> -#include <rclcpp/rclcpp.hpp> +#include "dynup_stabilizer.h" +#include <bitbots_dynup/msg/dynup_engine_debug.hpp> +#include <bitbots_splines/abstract_engine.h> +#include <bitbots_splines/pose_spline.h> #include <bitbots_splines/smooth_spline.h> #include <bitbots_splines/spline_container.h> -#include <bitbots_splines/pose_spline.h> -#include <bitbots_splines/abstract_engine.h> -#include <bitbots_dynup/msg/dynup_engine_debug.hpp> -#include <tf2/convert.h> +#include <cmath> +#include <optional> +#include <rclcpp/rclcpp.hpp> +#include <string> #include <tf2_geometry_msgs/tf2_geometry_msgs.hpp> +#include <tf2/convert.h> #include <visualization_msgs/msg/marker.hpp> -#include "dynup_stabilizer.h" namespace bitbots_dynup { @@ -25,10 +25,6 @@ class DynupEngine : public bitbots_splines::AbstractEngine<DynupRequest, DynupRe DynupResponse update(double dt) override; - /* - * Add current position, target position and current position to splines so that they describe a smooth - * curve to the ball and back - */ void setGoals(const DynupRequest &goals) override; /* diff --git a/bitbots_dynup/launch/dynup.launch b/bitbots_dynup/launch/dynup.launch index f79f3fec5..15bd7003f 100644 --- a/bitbots_dynup/launch/dynup.launch +++ b/bitbots_dynup/launch/dynup.launch @@ -1,7 +1,6 @@ <launch> <let name="tf_prefix" value="$(eval '\'$(env ROS_NAMESPACE not_defined)\' if \'$(env ROS_NAMESPACE not_defined)\' != \'not_defined\' else \'\'')"/> <arg name="sim" default="false"/> - <arg name="robot_type" default="wolfgang"/> <let if="$(env IS_ROBOT false)" name="taskset" value="taskset -c 3,4"/> <let unless="$(env IS_ROBOT false)" name="taskset" value=""/> diff --git a/bitbots_dynup/launch/test.launch b/bitbots_dynup/launch/test.launch index 7e98c6961..d3ef04b31 100644 --- a/bitbots_dynup/launch/test.launch +++ b/bitbots_dynup/launch/test.launch @@ -3,7 +3,6 @@ <let name="tf_prefix" value="$(eval '\'$(env ROS_NAMESPACE not_defined)\' if \'$(env ROS_NAMESPACE not_defined)\' != \'not_defined\' else \'\'')"/> <arg name="sim" default="false"/> <arg name="viz" default="false"/> - <arg name="robot_type" default="wolfgang"/> <let if="$(env IS_ROBOT false)" name="taskset" value="taskset -c 3,4"/> <let unless="$(env IS_ROBOT false)" name="taskset" value=""/> diff --git a/bitbots_dynup/package.xml b/bitbots_dynup/package.xml index 43aeab859..52644dff9 100644 --- a/bitbots_dynup/package.xml +++ b/bitbots_dynup/package.xml @@ -38,8 +38,6 @@ <test_depend>plotjuggler</test_depend> <test_depend>bitbots_odometry</test_depend> - <exec_depend>ros2launch</exec_depend> - <export> <bitbots_documentation> <status>tested_integration</status> diff --git a/bitbots_dynup/scripts/generate_walkready_animation.py b/bitbots_dynup/scripts/generate_walkready_animation.py deleted file mode 100644 index bcaa39729..000000000 --- a/bitbots_dynup/scripts/generate_walkready_animation.py +++ /dev/null @@ -1,75 +0,0 @@ -#!/usr/bin/env python3 -import sys - -from rclpy.action import ActionClient -import rclpy -from rclpy.node import Node -from actionlib_msgs.msg import GoalStatus -from geometry_msgs.msg import Twist -from bitbots_msgs.msg import JointCommand, DynUpAction, DynUpGoal -import math - - -def callback(msg): - output_string = "{\n \"author\": \"walkready_script\", \n \"description\": \"none\",\n \"hostname\": \"tams159\", \n \"keyframes\": [ \n { \n \"duration\": 1.0, \n \"goals\": { \n" - i = 0 - for joint_name in msg.joint_names: - output_string += " \"" + str(joint_name) + "\" : " + str(math.degrees(msg.positions[i])) - if i < len(msg.joint_names) - 1: - output_string += "," - output_string += "\n" - i += 1 - output_string += "},\n \"name\": \"generated frame\", \n \"pause\": 0.5 \n }\n ], \n \"name\": \"walkready\", \n\"version\": 0 \n} \n" - with open("walkready.json", "w") as text_file: - text_file.write(output_string) - - -def done_cb(state, result): - print('Action completed: ', end='') - if state == GoalStatus.PENDING: - print('Pending') - elif state == GoalStatus.ACTIVE: - print('Active') - elif state == GoalStatus.PREEMPTED: - print('Preempted') - elif state == GoalStatus.SUCCEEDED: - print('Succeeded') - elif state == GoalStatus.ABORTED: - print('Aborted') - elif state == GoalStatus.REJECTED: - print('Rejected') - elif state == GoalStatus.PREEMPTING: - print('Preempting') - elif state == GoalStatus.RECALLING: - print('Recalling') - elif state == GoalStatus.RECALLED: - print('Recalled') - elif state == GoalStatus.LOST: - print('Lost') - else: - print('Unknown state', state) - print(str(result)) - - -rclpy.init(args=None) -self.get_logger().warn("Make sure that the Dynup is running together with simulator or this script will not work.") - -rospy.Subscriber("/DynamixelController/command", JointCommand, callback) - -print('[..] Connecting to action server \'dynup\'', end='') -sys.stdout.flush() -client = ActionClient(self, DynUpAction, 'dynup') -if not client.wait_for_server(): - exit(1) -print('\r[OK] Connecting to action server \'dynup\'') -print() - -goal = DynUpGoal() -goal.direction = "rise" - -client.send_goal_async(goal) -client.done_cb = done_cb -print("Sent new goal. Waiting for result") -client.wait_for_result() - -self.get_logger().info("Your walkready animation has been saved to the current directory.") diff --git a/bitbots_dynup/scripts/test_time.py b/bitbots_dynup/scripts/test_time.py deleted file mode 100644 index 391448762..000000000 --- a/bitbots_dynup/scripts/test_time.py +++ /dev/null @@ -1,165 +0,0 @@ -#!/usr/bin/env python3 - -from __future__ import print_function -import sys - -import rclpy -from rclpy.node import Node -from rclpy.action import ActionClient - -from actionlib_msgs.msg import GoalStatus -from bitbots_msgs.msg import DynUpGoal, DynUpAction, DynUpFeedback -import humanoid_league_msgs.msg -from sensor_msgs.msg import Imu - -showing_feedback = False - -if __name__ == "__main__": - def done_cb(state, result): - print('Action completed: ', end='') - if state == GoalStatus.PENDING: - print('Pending') - elif state == GoalStatus.ACTIVE: - print('Active') - elif state == GoalStatus.PREEMPTED: - print('Preempted') - elif state == GoalStatus.SUCCEEDED: - print('Succeeded') - elif state == GoalStatus.ABORTED: - print('Aborted') - elif state == GoalStatus.REJECTED: - print('Rejected') - elif state == GoalStatus.PREEMPTING: - print('Preempting') - elif state == GoalStatus.RECALLING: - print('Recalling') - elif state == GoalStatus.RECALLED: - print('Recalled') - elif state == GoalStatus.LOST: - print('Lost') - else: - print('Unknown state', state) - print(str(result)) - - - def active_cb(): - print("Server accepted action") - - - def feedback_cb(feedback): - if len(sys.argv) > 1 and '--feedback' in sys.argv: - print('Feedback') - print(feedback) - print() - - - def play_animation(anim): - first_try = anim_client.wait_for_server( - Duration(seconds=self.get_parameter('"hcm/anim_server_wait_time"').get_parameter_value().double_value - if not first_try: - self.get_logger().error( - "Animation Action Server not running! Motion can not work without animation action server. " - "Will now wait until server is accessible!") - anim_client.wait_for_server() - self.get_logger().warn("Animation server now running, hcm will go on.") - goal = humanoid_league_msgs.msg.PlayAnimationGoal() - goal.animation = anim - goal.hcm = False - state = anim_client.send_goal_and_wait(goal) - if state == GoalStatus.PENDING: - print('Pending') - elif state == GoalStatus.ACTIVE: - print('Active') - elif state == GoalStatus.PREEMPTED: - print('Preempted') - elif state == GoalStatus.SUCCEEDED: - print('Succeeded') - elif state == GoalStatus.ABORTED: - print('Aborted') - elif state == GoalStatus.REJECTED: - print('Rejected') - elif state == GoalStatus.PREEMPTING: - print('Preempting') - elif state == GoalStatus.RECALLING: - print('Recalling') - elif state == GoalStatus.RECALLED: - print('Recalled') - elif state == GoalStatus.LOST: - print('Lost') - else: - print('Unknown state', state) - - - def play_dynup(direction): - global last_move_time - goal = DynUpGoal() - goal.direction = direction - - client.done_cb = done_cb - client.feedback_cb = feedback_cb - client.active_cb = active_cb - client.send_goal_async(goal) - print("Sent new goal. Waiting for result") - client.wait_for_result() - - - last_move_time = None - - - def imu_cb(msg: Imu): - global last_move_time - if msg.angular_velocity.x > 0.15 or msg.angular_velocity.y > 0.15: - last_move_time = self.get_clock().now().to_sec() - - - rclpy.init(args=None) - print('[..] Connecting to action server \'dynup\'', end='') - sys.stdout.flush() - client = ActionClient(self, DynUpAction, 'dynup') - if not client.wait_for_server(): - exit(1) - print('\r[OK] Connecting to action server \'dynup\'') - - anim_client = ActionClient(self, humanoid_league_msgs.msg.PlayAnimationAction, 'animation') - - imu_sub = self.create_subscription(Imu, "/imu/data", imu_cb, 1) - - while rclpy.ok(): - direction = None - anim = None - inp = input("Which direction [f|b]") - if inp == "f": - direction = "front" - anim = "falling_front" - key_anim = "stand_up_front" - elif inp == "b": - direction = "back" - anim = "falling_back" - key_anim = "stand_up_back" - else: - print(f"input {inp} not valid") - continue - - input("Will now go into falling position. please hold robot and press enter") - play_animation(anim) - - inp = input("Please put robot on the ground. Then choose dynup or keyframe [d|k]") - if inp == "d": - last_move_time = None - start_time = self.get_clock().now().to_sec() - play_dynup(direction) - elif inp == "k": - last_move_time = None - start_time = self.get_clock().now().to_sec() - play_animation(key_anim) - else: - print("invalid input") - continue - - # wait till robot is standing at least 3 seconds not moving - while last_move_time is None or self.get_clock().now().to_sec() - last_move_time < 3: - self.get_clock().sleep_for(Duration(seconds=0.0001) - # compute duration - duration = last_move_time - start_time - - print(f"Dynup took {duration} s") diff --git a/bitbots_hcm/bitbots_hcm/classifier/classifier.pkl b/bitbots_hcm/bitbots_hcm/classifier/classifier.pkl deleted file mode 100644 index 1b27488babd5fb2f33197faf48c6b7056c9f5518..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2141967 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 diff --git a/bitbots_hcm/bitbots_hcm/classifier/scaler.pkl b/bitbots_hcm/bitbots_hcm/classifier/scaler.pkl deleted file mode 100644 index 19c3de243877523603493af29504a40148ae87a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 752 zcmZo*PA<;QNlh%u(<>-SEhx%QPAx9Z%uCmcPf09E<O(iH%u7iuN(oL*%t<ZcDrC@X zEM%-LWYUP>WME(@&n(G^&rMCtD`f77;D8Afm!uT3bVRTK`N{bOm4&Pw5qv;)UVK_= zVo7OHYH@sKUVI^&H)jMtShzSbw;%^7TAZ2+6lYJ)E6pva)Jx7UO4Z9P%_+%DEGkN@ z<SGWbAQ9*S4v0KgN=aowDpw(A1QXDZOp8LU&W`p%?w~>*4R7WMMxdBYA+MjGpVxmN z02AH}C53!R&Kwg%fs#N_$lq2d5L74_!3yMnJP}_ggv0LmqSWO4yyB9g(&Q4ZLSd*2 zKmh}CS)qtGLu;X^Gh<SrSbL#(P@#l|H={RaYoTNY#C2&Fg;F5bNe30m09}`X=`Pu% zPG^r(Av^V>dEf3Y6;b77zIto_?@8TSri`)<QQMw&rG8v&e@1-EiyuwX_RrcfmHTB! z{eG2G@{c(V@7n*fnAv*=?@9Yr+Uu7D3q7+hlq)HePXdR3Sz=Lqp+bgm2H1&;89?_b z1r;ho-KUZv1GIKNcdbs#Ivod>%-;`ECDj}nFa4|D^hLvAs?dSS+qU1buX0kI{GtA~ zJ?pw&&F7t0?CrHvWJB0a*b5w4yYP0~ar>WnvHDZ)^E(u(mK3TbMX&)w6BJje@rCLz zi#0$NYX%i+K`qt>TfFGh`v;4>`5aDJ?EAEDI+w$lHigmzCmshwbL}19);zJVO5J_) z!Oti59QLaY?NWGTFCmu9rL^m|y}+k^M+^#X+bc$v|2q2qzkQ)jNuh31gaFXucxYOV bFH0>d&dkp%)C0T6K+nin&#+LxG)WHtw}KZJ diff --git a/bitbots_hcm/bitbots_hcm/classifier/types.pkl b/bitbots_hcm/bitbots_hcm/classifier/types.pkl deleted file mode 100644 index 6715e9d1bb2a11abddde17a654f1726b5d8e14a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 89 zcmZo*t}SHHh+t=6V93lZjW0?pFJ$b9;DU1Vi!xL5N(z}eB6xrzS^1fHCGo{2i6yDU fh0L81oKRJ1rNyZ!g)E&B%s_$U{DMN(&Qd)9hsqjO diff --git a/bitbots_hcm/bitbots_hcm/fall_checker.py b/bitbots_hcm/bitbots_hcm/fall_checker.py deleted file mode 100644 index 80ea4611b..000000000 --- a/bitbots_hcm/bitbots_hcm/fall_checker.py +++ /dev/null @@ -1,190 +0,0 @@ -# -*- coding: utf8 -*- -import math -import numpy -from functools import reduce - -from rclpy.duration import Duration -from sensor_msgs.msg import Imu -import rclpy -from rclpy.node import Node - -from sklearn.base import BaseEstimator -from sklearn.metrics import accuracy_score - - -class FallChecker(BaseEstimator): - - def __init__(self, node, thresh_gyro_pitch=None, - thresh_gyro_roll=None, - thresh_orient_pitch=None, - thresh_orient_roll=None, - smoothing=None): - self.node = node - self.thresh_gyro_pitch = self.node.get_parameter("falling_thresh_gyro_pitch").get_parameter_value().double_value \ - if thresh_gyro_pitch is None else thresh_gyro_pitch - self.thresh_gyro_roll = self.node.get_parameter("falling_thresh_gyro_roll").get_parameter_value().double_value \ - if thresh_gyro_roll is None else thresh_gyro_roll - self.thresh_orient_pitch = math.radians(self.node.get_parameter("falling_thresh_orient_pitch").get_parameter_value().double_value) \ - if thresh_orient_pitch is None else thresh_orient_pitch - self.thresh_orient_roll = math.radians(self.node.get_parameter("falling_thresh_orient_roll").get_parameter_value().double_value) \ - if thresh_orient_roll is None else thresh_orient_roll - - self.smoothing = self.node.get_parameter("smooth_threshold").get_parameter_value().double_value if smoothing is None else smoothing - self.smoothing_list = [] - self.counter = 0 - self.last_result = 0 - - self.STABLE = 0 - self.FRONT = 1 - self.BACK = 2 - self.LEFT = 3 - self.RIGHT = 4 - - def update_reconfigurable_values(self, config, level): - # Dynamic Reconfigure - self.thresh_gyro_pitch = config["falling_thresh_gyro_pitch"] - self.thresh_gyro_roll = config["falling_thresh_gyro_roll"] - self.thresh_orient_pitch = math.radians(config["falling_thresh_orient_pitch"]) - self.thresh_orient_roll = math.radians(config["falling_thresh_orient_roll"]) - return config - - def check_falling(self, not_much_smoothed_gyro, quaternion): - """Checks if the robot is currently falling and in which direction. """ - # Convert quaternion to fused angles - fused_roll, fused_pitch, _ = self.fused_from_quat(quaternion) - - # setting the fall quantification function - roll_fall_quantification = self.calc_fall_quantification( - self.thresh_orient_roll, - self.thresh_gyro_roll, - fused_roll, - not_much_smoothed_gyro[0]) - - pitch_fall_quantification = self.calc_fall_quantification( - self.thresh_orient_pitch, - self.thresh_gyro_pitch, - fused_pitch, - not_much_smoothed_gyro[1]) - - if roll_fall_quantification + pitch_fall_quantification == 0: - result = self.STABLE - else: - # compare quantification functions - if pitch_fall_quantification > roll_fall_quantification: - # detect the falling direction - if fused_pitch < 0: - result = self.BACK - # detect the falling direction - else: - result = self.FRONT - else: - # detect the falling direction - if fused_roll < 0: - result = self.LEFT - # detect the falling direction - else: - result = self.RIGHT - - # Prune old elements from smoothing history - self.smoothing_list = list(filter( - lambda x: x[0] > self.node.get_clock().now() - Duration(seconds=self.smoothing), - self.smoothing_list)) - - # Add the current element - self.smoothing_list.append((self.node.get_clock().now(), result)) - - # List only including the results not the whole tuples - results_list = list(zip(*self.smoothing_list))[1] - - # Check if stable is not in the list otherwise say we are stable - # This smooths the output but prevents the output of stable when jittering between e.g. right and front - if self.STABLE in results_list: - result = self.STABLE - - return result - - def calc_fall_quantification(self, falling_threshold_orientation, falling_threshold_gyro, current_axis_euler, - current_axis__gyro): - # check if you are moving forward or away from the perpendicular position, by comparing the signs. - moving_more_upright = numpy.sign(current_axis_euler) != numpy.sign(current_axis__gyro) - - # Check if the orientation is over the point of no return threshold - over_point_of_no_return = abs(current_axis_euler) > falling_threshold_orientation - - # Calculate quantification if we are moving away from our upright position or if we are over the point of no return - if not moving_more_upright or over_point_of_no_return: - # calculatiung the orentation skalar for the threshold - skalar = max((falling_threshold_orientation - abs(current_axis_euler)) / falling_threshold_orientation, 0) - # checking if the rotation velocity is lower than the the threshold - if falling_threshold_gyro * skalar < abs(current_axis__gyro): - # returning the fall quantification function - return abs(current_axis__gyro) * (1 - skalar) - return 0 - - def fit(self, x, y): - # we have to do nothing, as we are not actually fitting any model - self.node.get_logger().warn("You can not train this type of classifier", once=True) - pass - - def score(self, X, y, sample_weight=None): - return accuracy_score(y, self.predict(X), sample_weight=sample_weight) - - def predict(self, x): - # only take gyro and orientation from data - y = [] - for entry in x: - prediction = self.check_falling(entry[3:6], entry[6:10]) - y.append(prediction) - return y - - def check_fallen(self, quaternion, not_much_smoothed_gyro): - """Check if the robot has fallen and is lying on the floor. Returns animation to play, if necessary.""" - - if numpy.mean(numpy.abs(not_much_smoothed_gyro)) >= 0.2: - return None - - # Convert quaternion to fused angles - fused_roll, fused_pitch, _ = self.fused_from_quat(quaternion) - - # Decides which side is facing downwards. - if fused_pitch > math.radians(60): - self.node.get_logger().info("FALLEN TO THE FRONT") - return self.FRONT - - if fused_pitch < math.radians(-60): - self.node.get_logger().info("FALLEN TO THE BACK") - return self.BACK - - if fused_roll > math.radians(60): - self.node.get_logger().info("FALLEN TO THE RIGHT") - return self.RIGHT - - if fused_roll < math.radians(-60): - self.node.get_logger().info("FALLEN TO THE LEFT") - return self.LEFT - - # If no side is facing downwards, the robot is not fallen yet. - return None - - def fused_from_quat(self, q): - # Fused yaw of Quaternion - fused_yaw = 2.0 * math.atan2(q[2], q[3]) # Output of atan2 is [-pi,pi], so this expression is in [-2*pi,2*pi] - if fused_yaw > math.pi: - fused_yaw -= 2 * math.pi # fused_yaw is now in[-2 * pi, pi] - if fused_yaw <= -math.pi: - fused_yaw += 2 * math.pi # fused_yaw is now in (-pi, pi] - - # Calculate the fused pitch and roll - stheta = 2.0 * (q[1] * q[3] - q[0] * q[2]) - sphi = 2.0 * (q[1] * q[2] + q[0] * q[3]) - if stheta >= 1.0: # Coerce stheta to[-1, 1] - stheta = 1.0 - elif stheta <= -1.0: - stheta = -1.0 - if sphi >= 1.0: # Coerce sphi to[-1, 1] - sphi = 1.0 - elif sphi <= -1.0: - sphi = -1.0 - fused_pitch = math.asin(stheta) - fused_roll = math.asin(sphi) - return fused_roll, fused_pitch, fused_yaw diff --git a/bitbots_hcm/bitbots_hcm/fall_classifier.py b/bitbots_hcm/bitbots_hcm/fall_classifier.py deleted file mode 100644 index 254b354e8..000000000 --- a/bitbots_hcm/bitbots_hcm/fall_classifier.py +++ /dev/null @@ -1,114 +0,0 @@ -import pickle -import time - -from sklearn.preprocessing import StandardScaler -import transforms3d -from sensor_msgs.msg import JointState, Imu, Image -from geometry_msgs.msg import Point -import math -import numpy as np -from ros2_numpy import numpify - -class FallClassifier: - - def __init__(self, path, smooth_threshold=10): - """We open a saved classifier which uses the scikit-learn library.""" - with open(path + "classifier.pkl", 'rb') as file: - self.classifier = pickle.load(file) - with open(path + "scaler.pkl", 'rb') as file: - self.scaler: StandardScaler = pickle.load(file) - with open(path + "types.pkl", 'rb') as file: - self.types = pickle.load(file) - - # print(F'{self.classifier} {self.types}') - - self.counter = 0 - self.last_prediction = 0 - self.smooth_threshold = smooth_threshold - - def classify(self, imu, joint_state, cop_l, cop_r): - start_time = time.time() - data = get_data_from_msgs(imu, joint_state, cop_l, cop_r, - imu_raw=self.types['imu_raw'], - imu_orient=self.types['imu_orient'], joint_states=self.types['joint_states'], - imu_fused=self.types['imu_fused'], cop=self.types['cop']) - scaled_date = self.scaler.transform([data]) - result = self.classifier.predict(scaled_date) - # print((time.time() - start_time) * 1000) - return result[0] - - def smooth_classify(self, imu, joint_state, cop_l, cop_r): - """ Only predict a fall if we got same result more than smooth_threshold times straight. """ - prediction = self.classify(imu, joint_state, cop_l, cop_r) - if prediction == self.last_prediction and prediction != 0: - self.counter += 1 - if self.counter > self.smooth_threshold: - result = prediction - else: - result = 0 - else: - self.counter = 0 - result = 0 - self.last_prediction = prediction - return result - - -def get_data_from_msgs(imu_msg: Imu, joint_state_msg: JointState, cop_l_msg, cop_r_msg, imu_raw=True, imu_orient=True, joint_states=True, - imu_fused=True, cop=True): - data = [] - if imu_raw: - data.append(imu_msg.linear_acceleration.x) - data.append(imu_msg.linear_acceleration.y) - data.append(imu_msg.linear_acceleration.z) - data.append(imu_msg.angular_velocity.x) - data.append(imu_msg.angular_velocity.y) - data.append(imu_msg.angular_velocity.z) - if imu_orient: - euler = transforms3d.euler.quat2euler(numpify(imu_msg.orientation)[[3, 0, 1, 2]]) - data.append(euler[0]) - data.append(euler[1]) - data.append(euler[2]) - - if joint_states: - for i in range(len(joint_state_msg.name)): - # only add leg joints - if joint_state_msg.name[i] in ["RHipPitch", "RHipRoll", "RKnee", "RAnklePitch", "RAnkleRoll", - "LHipPitch", "LHipRoll", "LKnee", "LAnklePitch", "LAnkleRoll"]: - data.append(joint_state_msg.effort[i]) - if imu_fused: - fused_rpy = fused_from_quat(imu_msg.orientation) - data.append(fused_rpy[0]) - data.append(fused_rpy[1]) - - if cop: - data.append(cop_l_msg.point.x) - data.append(cop_l_msg.point.y) - data.append(cop_r_msg.point.x) - data.append(cop_r_msg.point.y) - return data - - -# Python version of this code https://github.com/AIS-Bonn/rot_conv_lib/blob/master/src/rot_conv.cpp -def fused_from_quat(q): - # Fused yaw of Quaternion - fused_yaw = 2.0 * math.atan2(q.z, q.w) # Output of atan2 is [-pi,pi], so this expression is in [-2*pi,2*pi] - if fused_yaw > math.pi: - fused_yaw -= 2 * math.pi # fused_yaw is now in[-2 * pi, pi] - if fused_yaw <= -math.pi: - fused_yaw += 2 * math.pi # fused_yaw is now in (-pi, pi] - - # Calculate the fused pitch and roll - stheta = 2.0 * (q.y * q.w - q.x * q.z) - sphi = 2.0 * (q.y * q.z + q.x * q.w) - if stheta >= 1.0: # Coerce stheta to[-1, 1] - stheta = 1.0 - elif stheta <= -1.0: - stheta = -1.0 - if sphi >= 1.0: # Coerce sphi to[-1, 1] - sphi = 1.0 - elif sphi <= -1.0: - sphi = -1.0 - fused_pitch = math.asin(stheta) - fused_roll = math.asin(sphi) - - return fused_roll, fused_pitch, fused_yaw diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/cancel_goals.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/cancel_goals.py index 28235fbbd..2ea250d58 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/cancel_goals.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/cancel_goals.py @@ -4,6 +4,9 @@ class CancelGoals(AbstractActionElement): + """ + Cancels all animation, dynup and move_base goals + """ def __init__(self, blackboard, dsd, parameters=None): super().__init__(blackboard, dsd, parameters) @@ -21,6 +24,6 @@ def perform(self): except: pass - self.blackboard.cancel_move_base_goal() + self.blackboard.cancel_path_planning() self.pop() diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/change_motor_power.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/change_motor_power.py index e3cec4a2a..4769d1c42 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/change_motor_power.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/change_motor_power.py @@ -16,10 +16,10 @@ def __init__(self, blackboard, dsd, parameters=None): if not self.blackboard.visualization_active and not self.blackboard.simulation_active: # In visualization and simulation, we cannot disable motors try: - blackboard.motor_switch_service.wait_for_service(timeout_sec=10) + self.blackboard.motor_switch_service.wait_for_service(timeout_sec=10) except: self.blackboard.node.get_logger().warn("HCM waiting for switch power service") - blackboard.motor_switch_service.wait_for_service() + self.blackboard.motor_switch_service.wait_for_service() def perform(self, reevaluate=False): raise NotImplementedError diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/falling_poses.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/falling_poses.py deleted file mode 100644 index ff4b72c24..000000000 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/falling_poses.py +++ /dev/null @@ -1,218 +0,0 @@ -from math import radians - -from bitbots_hcm.hcm_dsd.hcm_blackboard import HcmBlackboard -from rclpy.duration import Duration - -from bitbots_msgs.msg import JointCommand -from dynamic_stack_decider.abstract_action_element import AbstractActionElement - - -def parse_dict_to_msg(joint_dict: dict, time_stamp): - names = [] - positions = [] - for name, value in joint_dict.items(): - names.append(name) - positions.append(radians(value)) - msg = JointCommand() - msg.joint_names = names - msg.positions = positions - msg.velocities = len(names) * [-1.0] - msg.accelerations = len(names) * [-1.0] - msg.max_currents = len(names) * [-1.0] - msg.header.stamp = time_stamp - return msg - - -class AbstractFallingPose(AbstractActionElement): - - def __init__(self, blackboard: HcmBlackboard, dsd, parameters: dict = None): - super().__init__(blackboard, dsd, parameters) - self.blackboard: HcmBlackboard - self.first_perform = True - self.start_time = blackboard.node.get_clock().now() - self.duration = parameters.get('duration', 1.0) - - def perform(self, reevaluate=False): - self.do_not_reevaluate() - self.blackboard.joint_pub.publish(self.falling_pose) - # wait some time - if self.blackboard.node.get_clock().now() - self.start_time > Duration(seconds=self.duration): - self.pop() - - def get_side_fall_head_pan(self): - head_index = self.blackboard.current_joint_state.name.index("HeadPan") - current_head_pan = self.blackboard.current_joint_state.position[head_index] - if current_head_pan > 0: - return 90 - else: - return -90 - - -class FallingPoseFront(AbstractFallingPose): - - def __init__(self, blackboard: HcmBlackboard, dsd, parameters=None): - super().__init__(blackboard, dsd, parameters) - joint_dict = { - "HeadPan": 0.0, - "HeadTilt": 45.0, - "LAnklePitch": -36.0, - "LAnkleRoll": 4.0, - "LElbow": 45.0, - "LHipPitch": -11.0, - "LHipRoll": 4.0, - "LHipYaw": 6.0, - "LKnee": 13.0, - "LShoulderPitch": 90.0, - "LShoulderRoll": 0.0, - "RAnklePitch": 36.0, - "RAnkleRoll": -4.0, - "RElbow": -45.0, - "RHipPitch": 11.0, - "RHipRoll": -4.0, - "RHipYaw": 6.0, - "RKnee": -13.0, - "RShoulderPitch": -90.0, - "RShoulderRoll": 0.0 - } - self.falling_pose = parse_dict_to_msg(joint_dict, self.blackboard.node.get_clock().now().to_msg()) - - -class FallingPoseBack(AbstractFallingPose): - - def __init__(self, blackboard: HcmBlackboard, dsd, parameters=None): - super().__init__(blackboard, dsd, parameters) - joint_dict = { - "HeadPan": 0.0, - "HeadTilt": 0.0, - "LAnklePitch": -29.0, - "LAnkleRoll": 0.0, - "LElbow": 47.0, - "LHipPitch": 51.0, - "LHipRoll": 0.0, - "LHipYaw": 0.0, - "LKnee": 64.0, - "LShoulderPitch": 1.0, - "LShoulderRoll": 0.0, - "RAnklePitch": 28.0, - "RAnkleRoll": -4.0, - "RElbow": -45.0, - "RHipPitch": -50.0, - "RHipRoll": -1.0, - "RHipYaw": 1.0, - "RKnee": -61.0, - "RShoulderPitch": 0.0, - "RShoulderRoll": 0.0 - } - self.falling_pose = parse_dict_to_msg(joint_dict, self.blackboard.node.get_clock().now().to_msg()) - - -class FallingPoseLeft(AbstractFallingPose): - - def __init__(self, blackboard: HcmBlackboard, dsd, parameters=None): - super().__init__(blackboard, dsd, parameters) - joint_dict = { - "HeadPan": self.get_side_fall_head_pan(), - "HeadTilt": 0.0, - "LAnklePitch": -26.0, - "LAnkleRoll": 4.0, - "LElbow": 44.0, - "LHipPitch": 27.0, - "LHipRoll": 4.0, - "LHipYaw": -1.0, - "LKnee": 58.0, - "LShoulderPitch": -2.0, - "LShoulderRoll": 0.0, - "RAnklePitch": 26.0, - "RAnkleRoll": -4.0, - "RElbow": -42.0, - "RHipPitch": -27.0, - "RHipRoll": -4.0, - "RHipYaw": 1.0, - "RKnee": -58.0, - "RShoulderPitch": 6.0, - "RShoulderRoll": 0.0 - } - self.falling_pose = parse_dict_to_msg(joint_dict, self.blackboard.node.get_clock().now().to_msg()) - - -class FallingPoseRight(AbstractFallingPose): - - def __init__(self, blackboard: HcmBlackboard, dsd, parameters=None): - super().__init__(blackboard, dsd, parameters) - joint_dict = { - "HeadPan": self.get_side_fall_head_pan(), - "HeadTilt": 0.0, - "LAnklePitch": -26.0, - "LAnkleRoll": 4.0, - "LElbow": 44.0, - "LHipPitch": 27.0, - "LHipRoll": 4.0, - "LHipYaw": -1.0, - "LKnee": 58.0, - "LShoulderPitch": -2.0, - "LShoulderRoll": 0.0, - "RAnklePitch": 26.0, - "RAnkleRoll": -4.0, - "RElbow": -42.0, - "RHipPitch": -27.0, - "RHipRoll": -4.0, - "RHipYaw": 1.0, - "RKnee": -58.0, - "RShoulderPitch": 6.0, - "RShoulderRoll": 0.0 - } - self.falling_pose = parse_dict_to_msg(joint_dict, self.blackboard.node.get_clock().now().to_msg()) - -class TurnRightToBack(AbstractFallingPose): - def __init__(self, blackboard: HcmBlackboard, dsd, parameters=None): - super().__init__(blackboard, dsd, parameters) - joint_dict = { - "HeadPan": 0, - "HeadTilt": 0, - "LAnklePitch": -26, - "LAnkleRoll": 4, - "LElbow": 45, - "LHipPitch": 27, - "LHipRoll": 4, - "LHipYaw": -1, - "LKnee": 58, - "LShoulderPitch": 0, - "LShoulderRoll": 0, - "RAnklePitch": 26, - "RAnkleRoll": -4, - "RElbow": -45, - "RHipPitch": -27, - "RHipRoll": -4, - "RHipYaw": 43, - "RKnee": -58, - "RShoulderPitch": 0, - "RShoulderRoll": 0 - } - self.falling_pose = parse_dict_to_msg(joint_dict, self.blackboard.node.get_clock().now().to_msg()) - -class TurnLeftToBack(AbstractFallingPose): - def __init__(self, blackboard: HcmBlackboard, dsd, parameters=None): - super().__init__(blackboard, dsd, parameters) - joint_dict = { - "HeadPan": 0, - "HeadTilt": 0, - "LAnklePitch": -26, - "LAnkleRoll": 4, - "LElbow": 45, - "LHipPitch": 27, - "LHipRoll": 4, - "LHipYaw": -43, - "LKnee": 58, - "LShoulderPitch": 0, - "LShoulderRoll": 0, - "RAnklePitch": 26, - "RAnkleRoll": -4, - "RElbow": -45, - "RHipPitch": -27, - "RHipRoll": -4, - "RHipYaw": 1, - "RKnee": -58, - "RShoulderPitch": 0, - "RShoulderRoll": 0 - } - self.falling_pose = parse_dict_to_msg(joint_dict, self.blackboard.node.get_clock().now().to_msg()) diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/play_animation.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/play_animation.py index a98f64a12..0f338c9ad 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/play_animation.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/play_animation.py @@ -29,6 +29,7 @@ def perform(self, reevaluate=False): # try to start animation sucess = self.start_animation(anim) + # if we fail, we need to abort this action if not sucess: self.blackboard.node.get_logger().error("Could not start animation. Will abort play animation action!") @@ -76,39 +77,12 @@ def start_animation(self, anim): goal = PlayAnimation.Goal() goal.animation = anim goal.hcm = True # the animation is from the hcm - self.blackboard.animation_action_current_goal = self.blackboard.animation_action_client.send_goal_async(goal, feedback_callback=self.blackboard.last_kick_feedback_callback) + self.blackboard.animation_action_current_goal = self.blackboard.animation_action_client.send_goal_async(goal) return True def animation_finished(self): return self.blackboard.animation_action_current_goal.cancelled() or self.blackboard.animation_action_current_goal.done() -class PlayAnimationStandUpFront(AbstractPlayAnimation): - def chose_animation(self): - self.blackboard.current_state = RobotControlState.GETTING_UP - self.blackboard.node.get_logger().info("PLAYING STAND UP FRONT ANIMATION") - return self.blackboard.stand_up_front_animation - - -class PlayAnimationStandUpBack(AbstractPlayAnimation): - def chose_animation(self): - self.blackboard.current_state = RobotControlState.GETTING_UP - self.blackboard.node.get_logger().info("PLAYING STAND UP BACK ANIMATION") - return self.blackboard.stand_up_back_animation - - -class PlayAnimationStandUpLeft(AbstractPlayAnimation): - def chose_animation(self): - self.blackboard.current_state = RobotControlState.GETTING_UP - self.blackboard.node.get_logger().info("PLAYING STAND UP LEFT ANIMATION") - return self.blackboard.stand_up_left_animation - - -class PlayAnimationStandUpRight(AbstractPlayAnimation): - def chose_animation(self): - self.blackboard.current_state = RobotControlState.GETTING_UP - self.blackboard.node.get_logger().info("PLAYING STAND UP RIGHT ANIMATION") - return self.blackboard.stand_up_right_animation - class PlayAnimationFallingLeft(AbstractPlayAnimation): def chose_animation(self): @@ -134,26 +108,6 @@ def chose_animation(self): return self.blackboard.falling_animation_back -class PlayAnimationStopped(AbstractPlayAnimation): - def chose_animation(self): - return self.blackboard.stop_animation - - -class PlayAnimationWalkready(AbstractPlayAnimation): - def chose_animation(self): - return self.blackboard.walkready_animation - - -class PlayAnimationSitDown(AbstractPlayAnimation): - def chose_animation(self): - return self.blackboard.sit_down_animation - - -class PlayAnimationMotorOff(AbstractPlayAnimation): - def chose_animation(self): - return self.blackboard.motor_off_animation - - class PlayAnimationDynup(AbstractActionElement): def __init__(self, blackboard, dsd, parameters=None): super().__init__(blackboard, dsd, parameters) @@ -190,9 +144,7 @@ def perform(self, reevaluate=False): def start_animation(self): """ - This will NOT wait by itself. You have to check - animation_finished() - by yourself. + This will NOT wait by itself. You have to check animation_finished() by yourself. :return: """ diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/stop_walking.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/stop_walking.py index 71b626473..49f6c72a6 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/stop_walking.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/stop_walking.py @@ -14,15 +14,10 @@ def __init__(self, blackboard, dsd, parameters=None): self.blackboard: HcmBlackboard def perform(self, reevaluate=False): - if self.blackboard.current_time.to_sec() - self.blackboard.last_walking_goal_time.to_sec() < 0.1: - msg = Twist() - msg.linear.x = 0.0 - msg.linear.y = 0.0 - msg.angular.z = 0.0 - msg.angular.x = -1.0 - self.blackboard.walk_pub.publish(msg) - else: - self.pop() + msg = Twist() + msg.angular.x = -1.0 + self.blackboard.walk_pub.publish(msg) + self.pop() class ForceStopWalking(AbstractActionElement): diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/__init__.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/__init__.py index e69de29bb..b08ac2789 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/__init__.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/__init__.py @@ -0,0 +1,13 @@ +from bitbots_hcm.hcm_dsd.hcm_blackboard import HcmBlackboard + +from dynamic_stack_decider.abstract_decision_element import \ + AbstractDecisionElement + + +class AbstractHCMDecisionElement(AbstractDecisionElement): + """ + AbstractHCMDecisionElement with a hcm blackboard as its blackboard + """ + def __init__(self, blackboard, dsd, parameters=None): + super().__init__(blackboard, dsd, parameters) + self.blackboard: HcmBlackboard diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/animation.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/animation.py new file mode 100644 index 000000000..6fd4e9ca3 --- /dev/null +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/animation.py @@ -0,0 +1,36 @@ +from bitbots_hcm.hcm_dsd.decisions import AbstractHCMDecisionElement + +from humanoid_league_msgs.msg import RobotControlState + + +class Record(AbstractHCMDecisionElement): + """ + Decides if the robot is currently recording animations + """ + + def perform(self, reevaluate=False): + if self.blackboard.record_active: + self.blackboard.current_state = RobotControlState.RECORD + return "RECORD_ACTIVE" + else: + # robot is not recording + return "FREE" + + def get_reevaluate(self): + return True + + +class PlayingExternalAnimation(AbstractHCMDecisionElement): + """ + Decides if the robot is currently wants to play or plays an animation + """ + + def perform(self, reevaluate=False): + if self.blackboard.external_animation_running: + self.blackboard.current_state = RobotControlState.ANIMATION_RUNNING + return "ANIMATION_RUNNING" + else: + return "FREE" + + def get_reevaluate(self): + return True diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/check_hardware.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/check_hardware.py new file mode 100644 index 000000000..1235556e2 --- /dev/null +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/check_hardware.py @@ -0,0 +1,177 @@ +from rclpy.time import Time + +from bitbots_hcm.hcm_dsd.decisions import AbstractHCMDecisionElement +from humanoid_league_msgs.msg import RobotControlState + + +class CheckMotors(AbstractHCMDecisionElement): + """ + Checks if we are getting information from the motors. + Since the HCM is not able to work without motor connection, we will stop if there are no values. + Needs to be checked before other sensors, since they also need the power to be able to response + """ + + def __init__(self, blackboard, dsd, parameters=None): + super().__init__(blackboard, dsd, parameters) + self.last_different_msg_time = Time(seconds=int(0), nanoseconds=0 % 1 * 1e9) + self.had_problem = False + + def perform(self, reevaluate=False): + self.clear_debug_data() + if self.blackboard.visualization_active: + # we will have no problems with hardware in visualization + return "OKAY" + + # we check if the values are actually changing, since the joint_state controller will publish the same message + # even if there is no connection anymore. But we don't want to go directly to hardware error if we just + # have a small break, since this can happen often due to loose cabling + if self.blackboard.previous_joint_state is not None and self.blackboard.current_joint_state is not None \ + and (self.blackboard.previous_joint_state.effort != self.blackboard.current_joint_state.effort + or self.blackboard.previous_joint_state.position != self.blackboard.current_joint_state.position) \ + and not self.blackboard.servo_diag_error: + self.last_different_msg_time = self.blackboard.node.get_clock().now() + + if self.blackboard.simulation_active: + # Some simulators will give exact same joint messages which look like errors, so ignore this case + if self.blackboard.last_motor_update_time != Time(seconds=int(0), nanoseconds=0 % 1 * 1e9): + return "OKAY" + else: + return "MOTORS_NOT_STARTED" + else: + if self.blackboard.servo_overload: + return "OVERLOAD" + + # check if we want to turn the motors off after not using them for a longer time + if self.blackboard.last_motor_goal_time is not None \ + and self.blackboard.node.get_clock().now().nanoseconds / 1e9 - self.blackboard.last_motor_goal_time.nanoseconds / 1e9 \ + > self.blackboard.motor_off_time: + self.blackboard.node.get_logger().warn("Didn't recieve goals for " + str( + self.blackboard.motor_off_time) + " seconds. Will shut down the motors and wait for commands.", throttle_duration_sec=5) + self.publish_debug_data("Time since last motor goals", + self.blackboard.node.get_clock().now().nanoseconds / 1e9 - self.blackboard.last_motor_goal_time.nanoseconds / 1e9) + self.blackboard.current_state = RobotControlState.MOTOR_OFF + # we do an action sequence to turn off the motors and stay in motor off + return "TURN_OFF" + + # see if we get no messages or always the exact same + if self.blackboard.node.get_clock().now().nanoseconds / 1e9 - self.last_different_msg_time.nanoseconds / 1e9 > self.blackboard.motor_timeout_duration: + if self.blackboard.is_power_on: + if (self.blackboard.current_state == RobotControlState.STARTUP and + self.blackboard.node.get_clock().now().nanoseconds / 1e9 - self.blackboard.start_time.nanoseconds / 1e9 < 10): + # we are still in startup phase, just wait and dont complain + return "MOTORS_NOT_STARTED" + else: + # tell that we have a hardware problem + self.had_problem = True + # wait for motors to connect + self.blackboard.current_state = RobotControlState.HARDWARE_PROBLEM + return "PROBLEM" + else: + # we have to turn the motors on + return "TURN_ON" + + if self.had_problem: + # had problem before, just tell that this is solved now + self.blackboard.node.get_logger().info("Motors are now connected. Will resume.") + self.had_problem = False + + # motors are on and we can continue + return "OKAY" + + def get_reevaluate(self): + return True + + +class CheckIMU(AbstractHCMDecisionElement): + """ + Checks if we are getting information from the IMU. + Since the HCM can not detect falls without it, we will shut everything down if we dont have an imu. + """ + + def __init__(self, blackboard, dsd, parameters=None): + super().__init__(blackboard, dsd, parameters) + self.last_msg = None + self.last_different_msg_time = Time(seconds=int(0), nanoseconds=0 % 1 * 1e9) + self.had_problem = False + + def perform(self, reevaluate=False): + if self.blackboard.visualization_active: + # In visualization, we do not have an IMU. Therefore, return OKAY to ignore that. + return "OKAY" + + # we will get always the same message if there is no connection, so check if it differs + if self.last_msg is not None and self.blackboard.imu_msg is not None \ + and not self.last_msg.orientation == self.blackboard.imu_msg.orientation \ + and not self.blackboard.imu_diag_error: + self.last_different_msg_time = self.blackboard.node.get_clock().now() + self.last_msg = self.blackboard.imu_msg + + if self.blackboard.simulation_active: + # Some simulators will give exact same IMU messages which look like errors, so ignore this case + if self.last_msg: + return "OKAY" + else: + return "IMU_NOT_STARTED" + + if self.blackboard.node.get_clock().now().nanoseconds / 1e9 - self.last_different_msg_time.nanoseconds / 1e9 > self.blackboard.imu_timeout_duration: + if self.blackboard.current_state == RobotControlState.STARTUP and self.blackboard.node.get_clock().now().nanoseconds / 1e9 - \ + self.blackboard.start_time.nanoseconds / 1e9 < 10: + # wait for the IMU to start + return "IMU_NOT_STARTED" + else: + self.blackboard.current_state = RobotControlState.HARDWARE_PROBLEM + self.had_problem = True + return "PROBLEM" + + if self.had_problem: + # had problem before, just tell that this is solved now + self.blackboard.node.get_logger().info("IMU is now connected. Will resume.") + self.had_problem = False + + return "OKAY" + + def get_reevaluate(self): + return True + + +class CheckPressureSensor(AbstractHCMDecisionElement): + """ + Checks connection to pressure sensors. + """ + + def __init__(self, blackboard, dsd, parameters=None): + super().__init__(blackboard, dsd, parameters) + self.last_pressure_values = None + self.last_different_msg_time = Time(seconds=int(0), nanoseconds=0 % 1 * 1e9) + self.had_problem = False + + def perform(self, reevaluate=False): + if self.blackboard.visualization_active: + # no pressure sensors is visualization, but thats okay + return "OKAY" + + if not self.blackboard.pressure_sensors_installed: + # no pressure sensors installed, no check necessary + return "OKAY" + if not self.blackboard.pressure_diag_error: + self.last_different_msg_time = self.blackboard.node.get_clock().now() + + if self.blackboard.node.get_clock().now().nanoseconds / 1e9 - self.last_different_msg_time.nanoseconds / 1e9 > 0.1: + if self.blackboard.current_state == RobotControlState.STARTUP and self.blackboard.node.get_clock().now().nanoseconds / 1e9 - \ + self.blackboard.start_time.nanoseconds / 1e9 < 10: + # wait for the pressure sensors to start + self.blackboard.current_state = RobotControlState.STARTUP + return "PRESSURE_NOT_STARTED" + else: + self.blackboard.current_state = RobotControlState.HARDWARE_PROBLEM + return "PROBLEM" + + if self.had_problem: + # had problem before, just tell that this is solved now + self.blackboard.node.get_logger().info("Pressure sensors are now connected. Will resume.") + self.had_problem = False + + return "OKAY" + + def get_reevaluate(self): + return True \ No newline at end of file diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/decisions.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/decisions.py deleted file mode 100644 index 9a1b3e6f3..000000000 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/decisions.py +++ /dev/null @@ -1,468 +0,0 @@ -import math - -from bitbots_hcm.hcm_dsd.hcm_blackboard import HcmBlackboard -from humanoid_league_speaker.speaker import speak -from rclpy.time import Duration, Time - -from dynamic_stack_decider.abstract_decision_element import \ - AbstractDecisionElement -from humanoid_league_msgs.msg import RobotControlState - - -class AbstractHCMDecisionElement(AbstractDecisionElement): - """ - AbstractHCMDecisionElement with a hcm blackboard as its blackboard - """ - def __init__(self, blackboard, dsd, parameters=None): - super().__init__(blackboard, dsd, parameters) - self.blackboard: HcmBlackboard - - -class StartHCM(AbstractHCMDecisionElement): - """ - Initializes HCM. - """ - - def __init__(self, blackboard, dsd, parameters=None): - super().__init__(blackboard, dsd, parameters) - self.is_initial = True - - def perform(self, reevaluate=False): - if self.blackboard.shut_down_request: - if self.blackboard.current_state == RobotControlState.HARDWARE_PROBLEM: - self.blackboard.current_state = RobotControlState.SHUTDOWN - return "SHUTDOWN_WHILE_HARDWARE_PROBLEM" - else: - self.blackboard.current_state = RobotControlState.SHUTDOWN - return "SHUTDOWN_REQUESTED" - else: - if self.is_initial: - if not self.is_walkready(): - return "NOT_WALKREADY" - else: - self.is_initial = False - self.blackboard.current_state = RobotControlState.STARTUP - return "RUNNING" - - def is_walkready(self): - """ - We check if any joint is has an offset from the walkready pose which is higher than a threshold - """ - if self.blackboard.current_joint_state is None or self.blackboard.current_joint_state.name == []: - return False - i = 0 - for joint_name in self.blackboard.current_joint_state.name: - if joint_name == "HeadPan" or joint_name == "HeadTilt": - # we dont care about the head position - i += 1 - continue - if abs(math.degrees(self.blackboard.current_joint_state.position[i]) - - self.blackboard.walkready_pose_dict[joint_name]) > self.blackboard.walkready_pose_threshold: - return False - i += 1 - return True - - def get_reevaluate(self): - return True - - -class Stop(AbstractHCMDecisionElement): - """ - Handles manual stops - """ - - def perform(self, reevaluate=False): - if self.blackboard.stopped: - # we do an action sequence to go into stop and to stay there - return "STOPPED" - else: - return "FREE" - - def get_reevaluate(self): - return True - - -class Record(AbstractHCMDecisionElement): - """ - Decides if the robot is currently recording animations - """ - - def perform(self, reevaluate=False): - # check if the robot is currently recording animations - if self.blackboard.record_active: - self.blackboard.current_state = RobotControlState.RECORD - return "RECORD_ACTIVE" - else: - # robot is not recording - return "FREE" - - def get_reevaluate(self): - return True - - -class CheckMotors(AbstractHCMDecisionElement): - """ - Checks if we are getting information from the motors. - Since the HCM is not able to work without motor connection, we will stop if there are no values. - Needs to be checked before other sensors, since they also need the power to be able to response - """ - - def __init__(self, blackboard, dsd, parameters=None): - super().__init__(blackboard, dsd, parameters) - self.last_different_msg_time = Time(seconds=int(0), nanoseconds=0 % 1 * 1e9) - self.had_problem = False - - def perform(self, reevaluate=False): - self.clear_debug_data() - if self.blackboard.visualization_active: - # we will have no problems with hardware in visualization - return "OKAY" - - # we check if the values are actually changing, since the joint_state controller will publish the same message - # even if there is no connection anymore. But we don't want to go directly to hardware error if we just - # have a small break, since this can happen often due to loose cabling - if self.blackboard.previous_joint_state is not None and self.blackboard.current_joint_state is not None \ - and (self.blackboard.previous_joint_state.effort != self.blackboard.current_joint_state.effort - or self.blackboard.previous_joint_state.position != self.blackboard.current_joint_state.position) \ - and not self.blackboard.servo_diag_error: - self.last_different_msg_time = self.blackboard.current_time - - if self.blackboard.simulation_active: - # Some simulators will give exact same joint messages which look like errors, so ignore this case - if self.blackboard.last_motor_update_time != Time(seconds=int(0), nanoseconds=0 % 1 * 1e9): - return "OKAY" - else: - return "MOTORS_NOT_STARTED" - else: - if self.blackboard.servo_overload: - return "OVERLOAD" - - # check if we want to turn the motors off after not using them for a longer time - if self.blackboard.last_motor_goal_time is not None \ - and self.blackboard.current_time.nanoseconds / 1e9 - self.blackboard.last_motor_goal_time.nanoseconds / 1e9 \ - > self.blackboard.motor_off_time: - self.blackboard.node.get_logger().warn("Didn't recieve goals for " + str( - self.blackboard.motor_off_time) + " seconds. Will shut down the motors and wait for commands.", throttle_duration_sec=5) - self.publish_debug_data("Time since last motor goals", - self.blackboard.current_time.nanoseconds / 1e9 - self.blackboard.last_motor_goal_time.nanoseconds / 1e9) - self.blackboard.current_state = RobotControlState.MOTOR_OFF - # we do an action sequence to turn off the motors and stay in motor off - return "TURN_OFF" - - # see if we get no messages or always the exact same - if self.blackboard.current_time.nanoseconds / 1e9 - self.last_different_msg_time.nanoseconds / 1e9 > self.blackboard.motor_timeout_duration: - if self.blackboard.is_power_on: - if (self.blackboard.current_state == RobotControlState.STARTUP and - self.blackboard.current_time.nanoseconds / 1e9 - self.blackboard.start_time.nanoseconds / 1e9 < 10): - # we are still in startup phase, just wait and dont complain - return "MOTORS_NOT_STARTED" - else: - # tell that we have a hardware problem - self.had_problem = True - # wait for motors to connect - self.blackboard.current_state = RobotControlState.HARDWARE_PROBLEM - return "PROBLEM" - else: - # we have to turn the motors on - return "TURN_ON" - - if self.had_problem: - # had problem before, just tell that this is solved now - self.blackboard.node.get_logger().info("Motors are now connected. Will resume.") - self.had_problem = False - - # motors are on and we can continue - return "OKAY" - - def get_reevaluate(self): - return True - - -class CheckIMU(AbstractHCMDecisionElement): - """ - Checks if we are getting information from the IMU. - Since the HCM can not detect falls without it, we will shut everything down if we dont have an imu. - """ - - def __init__(self, blackboard, dsd, parameters=None): - super().__init__(blackboard, dsd, parameters) - self.last_msg = None - self.last_different_msg_time = Time(seconds=int(0), nanoseconds=0 % 1 * 1e9) - self.had_problem = False - - def perform(self, reevaluate=False): - if self.blackboard.visualization_active: - # In visualization, we do not have an IMU. Therefore, return OKAY to ignore that. - return "OKAY" - - # we will get always the same message if there is no connection, so check if it differs - if self.last_msg is not None and self.blackboard.imu_msg is not None \ - and not self.last_msg.orientation == self.blackboard.imu_msg.orientation \ - and not self.blackboard.imu_diag_error: - self.last_different_msg_time = self.blackboard.current_time - self.last_msg = self.blackboard.imu_msg - - if self.blackboard.simulation_active: - # Some simulators will give exact same IMU messages which look like errors, so ignore this case - if self.last_msg: - return "OKAY" - else: - return "IMU_NOT_STARTED" - - if self.blackboard.current_time.nanoseconds / 1e9 - self.last_different_msg_time.nanoseconds / 1e9 > self.blackboard.imu_timeout_duration: - if self.blackboard.current_state == RobotControlState.STARTUP and self.blackboard.current_time.nanoseconds / 1e9 - \ - self.blackboard.start_time.nanoseconds / 1e9 < 10: - # wait for the IMU to start - return "IMU_NOT_STARTED" - else: - self.blackboard.current_state = RobotControlState.HARDWARE_PROBLEM - self.had_problem = True - return "PROBLEM" - - if self.had_problem: - # had problem before, just tell that this is solved now - self.blackboard.node.get_logger().info("IMU is now connected. Will resume.") - self.had_problem = False - - return "OKAY" - - def get_reevaluate(self): - return True - - -class CheckPressureSensor(AbstractHCMDecisionElement): - """ - Checks connection to pressure sensors. - """ - - def __init__(self, blackboard, dsd, parameters=None): - super().__init__(blackboard, dsd, parameters) - self.last_pressure_values = None - self.last_different_msg_time = Time(seconds=int(0), nanoseconds=0 % 1 * 1e9) - self.had_problem = False - - def perform(self, reevaluate=False): - if self.blackboard.visualization_active: - # no pressure sensors is visualization, but thats okay - return "OKAY" - - if not self.blackboard.pressure_sensors_installed: - # no pressure sensors installed, no check necessary - return "OKAY" - if not self.blackboard.pressure_diag_error: - self.last_different_msg_time = self.blackboard.current_time - - if self.blackboard.current_time.nanoseconds / 1e9 - self.last_different_msg_time.nanoseconds / 1e9 > 0.1: - if self.blackboard.current_state == RobotControlState.STARTUP and self.blackboard.current_time.nanoseconds / 1e9 - \ - self.blackboard.start_time.nanoseconds / 1e9 < 10: - # wait for the pressure sensors to start - self.blackboard.current_state = RobotControlState.STARTUP - return "PRESSURE_NOT_STARTED" - else: - self.blackboard.current_state = RobotControlState.HARDWARE_PROBLEM - return "PROBLEM" - - if self.had_problem: - # had problem before, just tell that this is solved now - self.blackboard.node.get_logger().info("Pressure sensors are now connected. Will resume.") - self.had_problem = False - - return "OKAY" - - def get_reevaluate(self): - return True - - -class PickedUp(AbstractHCMDecisionElement): - """ - Decides if the robot is currently picked up - """ - - def perform(self, reevaluate=False): - if self.blackboard.visualization_active: - return "ON_GROUND" - # check if the robot is currently being picked up. foot have no connection to the ground, - # but robot is more or less upright (to differentiate from falling) - if self.blackboard.pressure_sensors_installed and not self.blackboard.simulation_active and \ - sum(self.blackboard.pressures) < 10 and \ - abs(self.blackboard.smooth_accel[0]) < self.blackboard.pickup_accel_threshold and \ - abs(self.blackboard.smooth_accel[1]) < self.blackboard.pickup_accel_threshold: - self.blackboard.current_state = RobotControlState.PICKED_UP - if not reevaluate: - speak("Picked up!", self.blackboard.speak_publisher, priority=50) - # we do an action sequence to go to walkready and stay in picked up state - return "PICKED_UP" - - # robot is not picked up - return "ON_GROUND" - - def get_reevaluate(self): - return True - - -class Falling(AbstractHCMDecisionElement): - """ - Decides if the robot is currently falling and has to act on this - """ - - def perform(self, reevaluate=False): - # check if the robot is currently falling - falling_direction = self.blackboard.fall_checker.check_falling(self.blackboard.gyro, self.blackboard.quaternion) - if self.blackboard.falling_detection_active and falling_direction is not None: - self.blackboard.current_state = RobotControlState.FALLING - - if falling_direction == self.blackboard.fall_checker.FRONT: - return "FALLING_FRONT" - if falling_direction == self.blackboard.fall_checker.BACK: - return "FALLING_BACK" - if falling_direction == self.blackboard.fall_checker.LEFT: - return "FALLING_LEFT" - if falling_direction == self.blackboard.fall_checker.RIGHT: - return "FALLING_RIGHT" - # robot is not fallen - return "NOT_FALLING" - - def get_reevaluate(self): - return True - - -class FallingClassifier(AbstractHCMDecisionElement): - - def perform(self, reevaluate=False): - if self.blackboard.falling_detection_active: - prediction = self.blackboard.classifier.smooth_classify(self.blackboard.imu_msg, - self.blackboard.current_joint_state, - self.blackboard.cop_l_msg, self.blackboard.cop_r_msg) - if prediction == 0: - return "NOT_FALLING" - else: - if not reevaluate: - self.blackboard.current_state = RobotControlState.FALLING - if prediction == 1: - return "FALLING_FRONT" - elif prediction == 2: - return "FALLING_BACK" - elif prediction == 3: - return "FALLING_LEFT" - elif prediction == 4: - return "FALLING_RIGHT" - else: - return "NOT_FALLING" - - def get_reevaluate(self): - return True - - -class Sitting(AbstractHCMDecisionElement): - """ - Decides if the robot is sitting (due to sitting down earlier). - """ - - def perform(self, reevaluate=False): - if self.blackboard.current_joint_state is None: - return "NO" - # simple check is looking at knee joint positions - # todo can be done more sophisticated - if self.blackboard.current_joint_state is None: - return "NO" - left_knee = 0 - right_knee = 0 - i = 0 - for joint_name in self.blackboard.current_joint_state.name: - if joint_name == "LKnee": - left_knee = self.blackboard.current_joint_state.position[i] - elif joint_name == "RKnee": - right_knee = self.blackboard.current_joint_state.position[i] - i += 1 - - if abs(left_knee) > 2.5 and abs(right_knee) > 2.5: - return "YES" - else: - return "NO" - - def get_reevaluate(self): - # we never have to reevaluate since this state of this can only be changed by decisions above it - return False - - -class Fallen(AbstractHCMDecisionElement): - """ - Decides if the robot is fallen and lying on the ground - """ - - def perform(self, reevaluate=False): - # check if the robot is currently laying on the ground - fallen_side = self.blackboard.fall_checker.check_fallen(self.blackboard.quaternion, self.blackboard.gyro) - if self.blackboard.is_stand_up_active and fallen_side is not None: - if not reevaluate: - self.blackboard.current_state = RobotControlState.FALLEN - # we play a stand up animation - if fallen_side == self.blackboard.fall_checker.FRONT: - return "FALLEN_FRONT" - if fallen_side == self.blackboard.fall_checker.BACK: - return "FALLEN_BACK" - if fallen_side == self.blackboard.fall_checker.RIGHT: - return "FALLEN_RIGHT" - if fallen_side == self.blackboard.fall_checker.LEFT: - return "FALLEN_LEFT" - else: - # robot is not fallen - return "NOT_FALLEN" - - def get_reevaluate(self): - return True - - -class ExternalAnimation(AbstractHCMDecisionElement): - """ - Decides if the robot is currently wants to play an animation comming from the behavior - """ - - def perform(self, reevaluate=False): - if self.blackboard.external_animation_running: - self.blackboard.current_state = RobotControlState.ANIMATION_RUNNING - return "ANIMATION_RUNNING" - else: - return "FREE" - - def get_reevaluate(self): - return True - - -class Walking(AbstractHCMDecisionElement): - """ - Decides if the robot is currently walking - """ - - def perform(self, reevaluate=False): - if self.blackboard.current_time.nanoseconds / 1e9 - self.blackboard.last_walking_goal_time.nanoseconds / 1e9 < 0.1: - self.blackboard.current_state = RobotControlState.WALKING - if self.blackboard.animation_requested: - self.blackboard.animation_requested = False - # we are walking but we have to stop to play an animation - return "STOP_WALKING" - else: - # we are walking and can stay like this - return "STAY_WALKING" - else: - return "NOT_WALKING" - - def get_reevaluate(self): - return True - - -class Kicking(AbstractHCMDecisionElement): - """ - Decides if the robot is currently kicking - """ - - def perform(self, reevaluate=False): - if self.blackboard.last_kick_feedback is not None and \ - (self.blackboard.node.get_clock().now() - self.blackboard.last_kick_feedback) < Duration(seconds=1): - self.blackboard.current_state = RobotControlState.KICKING - return 'KICKING' - else: - return 'NOT_KICKING' - - def get_reevaluate(self): - return True diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/fallen.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/fallen.py new file mode 100644 index 000000000..c1c7f1452 --- /dev/null +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/fallen.py @@ -0,0 +1,60 @@ +import math + +import numpy as np +from bitbots_hcm.hcm_dsd.decisions import AbstractHCMDecisionElement +from bitbots_utils.transforms import quat2fused + +from humanoid_league_msgs.msg import RobotControlState + + +class Fallen(AbstractHCMDecisionElement): + """ + Decides if the robot is fallen and lying on the ground + """ + def __init__(self, blackboard, dsd, parameters=None): + super().__init__(blackboard, dsd, parameters) + + # Get parameters + self.fallen_orientation_thresh = math.radians(self.blackboard.node.get_parameter("fallen_orientation_thresh").value) + self.fallen_angular_velocity_thresh = self.blackboard.node.get_parameter("fallen_angular_velocity_thresh").value + + def perform(self, reevaluate=False): + # Check of the fallen detection is active + if not self.blackboard.is_stand_up_active: + return "NOT_FALLEN" + + # Get angular velocity from the IMU + angular_velocity = self.blackboard.gyro + + # Check if the robot is rotating + if np.mean(np.abs(angular_velocity)) >= 0.2: + return "NOT_FALLEN" + + # Convert quaternion to fused angles + fused_roll, fused_pitch, _ = quat2fused(self.blackboard.quaternion, order="xyzw") + + # Decides which side is facing downwards. + if fused_pitch > self.fallen_orientation_thresh: + self.blackboard.node.get_logger().info("FALLEN TO THE FRONT") + self.blackboard.current_state = RobotControlState.FALLEN + return "FALLEN_FRONT" + + if fused_pitch < -self.fallen_orientation_thresh: + self.blackboard.node.get_logger().info("FALLEN TO THE BACK") + self.blackboard.current_state = RobotControlState.FALLEN + return "FALLEN_BACK" + + if fused_roll > self.fallen_orientation_thresh: + self.blackboard.node.get_logger().info("FALLEN TO THE RIGHT") + self.blackboard.current_state = RobotControlState.FALLEN + return "FALLEN_RIGHT" + + if fused_roll < -self.fallen_orientation_thresh: + self.blackboard.node.get_logger().info("FALLEN TO THE LEFT") + self.blackboard.current_state = RobotControlState.FALLEN + return "FALLEN_LEFT" + + return "NOT_FALLEN" + + def get_reevaluate(self): + return True \ No newline at end of file diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/falling.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/falling.py new file mode 100644 index 000000000..3602e221c --- /dev/null +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/falling.py @@ -0,0 +1,137 @@ +import math +from enum import Enum + +import numpy as np +from bitbots_hcm.hcm_dsd.decisions import AbstractHCMDecisionElement +from bitbots_utils.transforms import quat2fused +from rclpy.duration import Duration + +from humanoid_league_msgs.msg import RobotControlState + + +class FallDirection(Enum): + STABLE = 0 + FRONT = 1 + BACK = 2 + LEFT = 3 + RIGHT = 4 + + +class Falling(AbstractHCMDecisionElement): + """ + Decides if the robot is currently falling and has to act on this + """ + + def __init__(self, blackboard, dsd, parameters=None): + super().__init__(blackboard, dsd, parameters) + + # Get parameters + self.thresh_gyro_pitch = self.blackboard.node.get_parameter("falling_thresh_gyro_pitch").value + self.thresh_gyro_roll = self.blackboard.node.get_parameter("falling_thresh_gyro_roll").value + self.thresh_orient_pitch = math.radians(self.blackboard.node.get_parameter("falling_thresh_orient_pitch").value) + self.thresh_orient_roll = math.radians(self.blackboard.node.get_parameter("falling_thresh_orient_roll").value) + self.smoothing = self.blackboard.node.get_parameter("smooth_threshold").value + + # Initialize smoothing list that stores the last results + self.smoothing_list: list[FallDirection] = [] + + + + def perform(self, reevaluate=False): + """Checks if the robot is currently falling and in which direction. """ + # Check if detection is active + if not self.blackboard.falling_detection_active: + return "NOT_FALLING" + + # Get angular from the IMU + angular_velocity = self.blackboard.gyro + + # Convert orientation to fused angles + fused_roll, fused_pitch, _ = quat2fused(self.blackboard.quaternion, order="xyzw") + + # setting the fall quantification function + roll_fall_quantification = self.calc_fall_quantification( + self.thresh_orient_roll, + self.thresh_gyro_roll, + fused_roll, + angular_velocity[0]) + + pitch_fall_quantification = self.calc_fall_quantification( + self.thresh_orient_pitch, + self.thresh_gyro_pitch, + fused_pitch, + angular_velocity[1]) + + if roll_fall_quantification + pitch_fall_quantification == 0: + result = FallDirection.STABLE + else: + # compare quantification functions + if pitch_fall_quantification > roll_fall_quantification: + # detect the falling direction + if fused_pitch < 0: + result = FallDirection.BACK + # detect the falling direction + else: + result = FallDirection.FRONT + else: + # detect the falling direction + if fused_roll < 0: + result = FallDirection.LEFT + # detect the falling direction + else: + result = FallDirection.RIGHT + + # Prune old elements from smoothing history + self.smoothing_list = list(filter( + lambda x: x[0] > self.blackboard.node.get_clock().now() - Duration(seconds=self.smoothing), + self.smoothing_list)) + + # Add the current element + self.smoothing_list.append((self.blackboard.node.get_clock().now(), result)) + + # List only including the results not the whole tuples + results_list = list(zip(*self.smoothing_list))[1] + + # Check if stable is not in the list otherwise say we are stable + # This smooths the output but prevents the output of stable when jittering between e.g. right and front + if FallDirection.STABLE in results_list: + result = FallDirection.STABLE + + # Check if we are falling at all + if result != FallDirection.STABLE and not reevaluate: + self.blackboard.current_state = RobotControlState.FALLING + + # Return the appropriate result + if result == FallDirection.STABLE: + return "NOT_FALLING" + elif result == FallDirection.FRONT: + return "FALLING_FRONT" + elif result == FallDirection.BACK: + return "FALLING_BACK" + elif result == FallDirection.LEFT: + return "FALLING_LEFT" + elif result == FallDirection.RIGHT: + return "FALLING_RIGHT" + else: + raise ValueError("Unknown falling direction") + + def calc_fall_quantification(self, falling_threshold_orientation, falling_threshold_gyro, current_axis_euler, + current_axis__gyro): + # check if you are moving forward or away from the perpendicular position, by comparing the signs. + moving_more_upright = np.sign(current_axis_euler) != np.sign(current_axis__gyro) + + # Check if the orientation is over the point of no return threshold + over_point_of_no_return = abs(current_axis_euler) > falling_threshold_orientation + + # Calculate quantification if we are moving away from our upright position or if we are over the point of no return + if not moving_more_upright or over_point_of_no_return: + # calculatiung the orentation skalar for the threshold + skalar = max((falling_threshold_orientation - abs(current_axis_euler)) / falling_threshold_orientation, 0) + # checking if the rotation velocity is lower than the the threshold + if falling_threshold_gyro * skalar < abs(current_axis__gyro): + # returning the fall quantification function + return abs(current_axis__gyro) * (1 - skalar) + return 0 + + def get_reevaluate(self): + return True diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/kicking.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/kicking.py new file mode 100644 index 000000000..660208a01 --- /dev/null +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/kicking.py @@ -0,0 +1,20 @@ +from bitbots_hcm.hcm_dsd.decisions import AbstractHCMDecisionElement + +from humanoid_league_msgs.msg import RobotControlState + + +class Kicking(AbstractHCMDecisionElement): + """ + Decides if the robot is currently kicking + """ + + def perform(self, reevaluate=False): + if self.blackboard.last_kick_feedback is not None and \ + (self.blackboard.node.get_clock().now() - self.blackboard.last_kick_feedback).nanoseconds / 1e9 < 0.2: + self.blackboard.current_state = RobotControlState.KICKING + return 'KICKING' + else: + return 'NOT_KICKING' + + def get_reevaluate(self): + return True \ No newline at end of file diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/pickup.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/pickup.py new file mode 100644 index 000000000..51f3bc9de --- /dev/null +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/pickup.py @@ -0,0 +1,28 @@ +from bitbots_hcm.hcm_dsd.decisions import AbstractHCMDecisionElement + +from humanoid_league_msgs.msg import RobotControlState + + +class PickedUp(AbstractHCMDecisionElement): + """ + Decides if the robot is currently picked up + """ + + def perform(self, reevaluate=False): + if self.blackboard.visualization_active: + return "ON_GROUND" + # check if the robot is currently being picked up. foot have no connection to the ground, + # but robot is more or less upright (to differentiate from falling) + if self.blackboard.pressure_sensors_installed and not self.blackboard.simulation_active and \ + sum(self.blackboard.pressures) < 10 and \ + abs(self.blackboard.smooth_accel[0]) < self.blackboard.pickup_accel_threshold and \ + abs(self.blackboard.smooth_accel[1]) < self.blackboard.pickup_accel_threshold: + self.blackboard.current_state = RobotControlState.PICKED_UP + # we do an action sequence to go to walkready and stay in picked up state + return "PICKED_UP" + + # robot is not picked up + return "ON_GROUND" + + def get_reevaluate(self): + return True \ No newline at end of file diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/startup.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/startup.py new file mode 100644 index 000000000..024450d80 --- /dev/null +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/startup.py @@ -0,0 +1,52 @@ +import math + +from bitbots_hcm.hcm_dsd.decisions import AbstractHCMDecisionElement + +from humanoid_league_msgs.msg import RobotControlState + + +class StartHCM(AbstractHCMDecisionElement): + """ + Initializes HCM. + """ + + def __init__(self, blackboard, dsd, parameters=None): + super().__init__(blackboard, dsd, parameters) + self.is_initial = True + + def perform(self, reevaluate=False): + if self.blackboard.shut_down_request: + if self.blackboard.current_state == RobotControlState.HARDWARE_PROBLEM: + self.blackboard.current_state = RobotControlState.SHUTDOWN + return "SHUTDOWN_WHILE_HARDWARE_PROBLEM" + else: + self.blackboard.current_state = RobotControlState.SHUTDOWN + return "SHUTDOWN_REQUESTED" + else: + if self.is_initial: + if not self.is_walkready(): + return "NOT_WALKREADY" + else: + self.is_initial = False + self.blackboard.current_state = RobotControlState.STARTUP + return "RUNNING" + + def is_walkready(self): + """ + We check if any joint is has an offset from the walkready pose which is higher than a threshold + """ + + if self.blackboard.current_joint_state is None or self.blackboard.current_joint_state.name == []: + self.blackboard.node.get_logger().warn("No joint state received yet, can not check if we are walkready at startup") + return False + + for i, joint_name in enumerate(self.blackboard.current_joint_state.name): + if joint_name == "HeadPan" or joint_name == "HeadTilt": + continue # we dont care about the head position + if abs(math.degrees(self.blackboard.current_joint_state.position[i]) - + self.blackboard.walkready_pose_dict[joint_name]) > self.blackboard.walkready_pose_threshold: + return False + return True + + def get_reevaluate(self): + return True diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/stop.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/stop.py new file mode 100644 index 000000000..86032413c --- /dev/null +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/stop.py @@ -0,0 +1,16 @@ +from bitbots_hcm.hcm_dsd.decisions import AbstractHCMDecisionElement + +class Stop(AbstractHCMDecisionElement): + """ + Handles manual stops + """ + + def perform(self, reevaluate=False): + if self.blackboard.stopped: + # we do an action sequence to go into stop and to stay there + return "STOPPED" + else: + return "FREE" + + def get_reevaluate(self): + return True diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/walking.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/walking.py new file mode 100644 index 000000000..fb02864f8 --- /dev/null +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/walking.py @@ -0,0 +1,25 @@ +from bitbots_hcm.hcm_dsd.decisions import AbstractHCMDecisionElement + +from humanoid_league_msgs.msg import RobotControlState + + +class Walking(AbstractHCMDecisionElement): + """ + Decides if the robot is currently walking + """ + + def perform(self, reevaluate=False): + if self.blackboard.node.get_clock().now().nanoseconds / 1e9 - self.blackboard.last_walking_goal_time.nanoseconds / 1e9 < 0.1: + self.blackboard.current_state = RobotControlState.WALKING + if self.blackboard.animation_requested: + self.blackboard.animation_requested = False + # we are walking but we have to stop to play an animation + return "STOP_WALKING" + else: + # we are walking and can stay like this + return "STAY_WALKING" + else: + return "NOT_WALKING" + + def get_reevaluate(self): + return True \ No newline at end of file diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/hcm.dsd b/bitbots_hcm/bitbots_hcm/hcm_dsd/hcm.dsd index a2bfc5941..1879b8eb3 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/hcm.dsd +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/hcm.dsd @@ -38,7 +38,7 @@ $StartHCM FALLING_BACK --> @CancelGoals, @FallingPoseBack + duration:0.5 NOT_FALLING --> $Sitting YES --> @PlayAnimationDynup + direction:rise - NO --> $ExternalAnimation + NO --> $PlayingExternalAnimation ANIMATION_RUNNING --> @StayAnimationRunning FREE --> $Walking STOP_WALKING --> @StopWalking diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/hcm_blackboard.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/hcm_blackboard.py index 755a41fbb..2164ee135 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/hcm_blackboard.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/hcm_blackboard.py @@ -4,13 +4,12 @@ import numpy from ament_index_python import get_package_share_directory -from bitbots_hcm.fall_checker import FallChecker -from bitbots_hcm.fall_classifier import FallClassifier from diagnostic_msgs.msg import DiagnosticArray, DiagnosticStatus from geometry_msgs.msg import PointStamped, Twist from rclpy.action import ActionClient from rclpy.node import Node from rclpy.time import Time +from rclpy.task import Future from sensor_msgs.msg import Imu, JointState from std_msgs.msg import Empty as EmptyMsg from std_srvs.srv import Empty as EmptySrv @@ -25,66 +24,84 @@ class HcmBlackboard(): def __init__(self, node: Node): self.node = node + + # Basic state self.current_state: RobotControlState = RobotControlState.STARTUP self.stopped: bool = False self.shut_down_request: bool = False - self.simulation_active = self.node.get_parameter('simulation_active').value - self.visualization_active = self.node.get_parameter('visualization_active').value - - # this is used to prevent calling Time a lot, which takes some time - # we assume that the time does not change during one update cycle - self.current_time = self.node.get_clock().now() - self.start_time = self.current_time - # Imu + + # Save start time + self.start_time: Time = self.node.get_clock().now() + + # Get parameters + self.simulation_active: bool = self.node.get_parameter('simulation_active').value + self.visualization_active: bool = self.node.get_parameter('visualization_active').value + self.pickup_accel_threshold: float = 1000.0 # TODO: make this a parameter + self.pressure_sensors_installed: bool = self.node.get_parameter('pressure_sensors_installed').value + + # Create services + foot_zero_service_name = self.node.get_parameter("foot_zero_service").value + self.foot_zero_service = self.node.create_client(EmptySrv, foot_zero_service_name) + self.motor_switch_service = self.node.create_client(SetBool, 'core/switch_power') + + # Create action clients and corresponding goal handles + self.animation_action_client: ActionClient = ActionClient(self.node, PlayAnimation, 'animation') + self.animation_action_current_goal: Optional[Future] = None + self.dynup_action_client: ActionClient = ActionClient(self.node, Dynup, 'dynup') + self.dynup_action_current_goal: Optional[Future] = None + + # Create publishers + self.walk_pub = self.node.create_publisher(Twist, "cmd_vel", 1) + self.cancel_path_planning_pub = self.node.create_publisher(EmptyMsg, "pathfinding/cancel", 1) + + # Latest imu data self.accel = numpy.array([0, 0, 0]) self.gyro = numpy.array([0, 0, 0]) self.smooth_accel = numpy.array([0, 0, 0]) self.smooth_gyro = numpy.array([0, 0, 0]) self.not_much_smoothed_gyro = numpy.array([0, 0, 0]) - self.quaternion = numpy.array([0, 0, 0, 0.21]) - self.pickup_accel_threshold: float = 1000.0 + self.quaternion = numpy.array([0, 0, 0, 1.0]) # Pressure sensors - self.pressure_sensors_installed = self.node.get_parameter('pressure_sensors_installed').value - # initialize values high to prevent wrongly thinking the robot is picked up during start or in simulation + # Initialize values high to prevent wrongly thinking the robot is picked up during start or in simulation self.pressures: List[float] = [100.0] * 8 - foot_zero_service_name = self.node.get_parameter("foot_zero_service").value - self.foot_zero_service = self.node.create_client(EmptySrv, foot_zero_service_name) - - self.motor_switch_service = self.node.create_client(SetBool, 'core/switch_power') # Animation - self.animation_action_client: Optional[ActionClient] = None - self.animation_action_current_goal: Optional[PlayAnimation.Goal] = None - self.dynup_action_client: Optional[ActionClient] = None - self.dynup_action_current_goal: Optional[Dynup.Goal] = None - self.last_animation_goal_time = self.node.get_clock().now() - self.external_animation_running: bool = False + # Animation states self.animation_requested: bool = False + self.external_animation_running: bool = False + self.last_animation_goal_time: Time = self.node.get_clock().now() + self.record_active: bool = False + if self.simulation_active: self.walkready_animation = self.node.get_parameter("animations.walkready_sim").value else: self.walkready_animation = self.node.get_parameter("animations.walkready").value + + # Get animation parameters self.falling_animation_front = self.node.get_parameter("animations.falling_front").value self.falling_animation_back = self.node.get_parameter("animations.falling_back").value self.falling_animation_left = self.node.get_parameter("animations.falling_left").value self.falling_animation_right = self.node.get_parameter("animations.falling_right").value - self.stop_animation = self.node.get_parameter("animations.penalty").value - self.sit_down_animation = self.node.get_parameter("animations.sit_down").value - self.motor_off_animation = self.node.get_parameter("animations.motor_off").value - self.stand_up_front_animation = self.node.get_parameter("animations.stand_up_front").value - self.stand_up_back_animation = self.node.get_parameter("animations.stand_up_back").value - self.stand_up_left_animation = self.node.get_parameter("animations.stand_up_left").value - self.stand_up_right_animation = self.node.get_parameter("animations.stand_up_right").value - # motors - # initialize with current time, or motors will be turned off on start - self.last_motor_goal_time = self.node.get_clock().now() + + # Motors + + # State + # Initialize with current time, or motors will be turned off on start + self.last_motor_goal_time: Time = self.node.get_clock().now() self.last_motor_update_time = Time() - self.motor_timeout_duration = self.node.get_parameter("motor_timeout_duration").value - self.motor_off_time = self.node.get_parameter("motor_off_time").value - self.imu_timeout_duration = self.node.get_parameter("imu_timeout_duration").value self.current_joint_state: Optional[JointState] = None self.previous_joint_state: Optional[JointState] = None + self.is_power_on: bool = False + + # Parameters + self.motor_timeout_duration: float = self.node.get_parameter("motor_timeout_duration").value + self.motor_off_time: float = self.node.get_parameter("motor_off_time").value + self.imu_timeout_duration: float = self.node.get_parameter("imu_timeout_duration").value + self.walkready_pose_threshold = self.node.get_parameter("animations.walkready_pose_threshold").value + + + # Hacky way of getting the walkready pose. TODO change that. Maybe use a dynup service anim_package = self.node.get_parameter("animations.anim_package").value path = get_package_share_directory(anim_package) path = os.path.join(path, 'animations/motion/', self.walkready_animation + '.json') @@ -92,39 +109,28 @@ def __init__(self, node: Node): json_data = json.load(f) keyframes: List[dict] = json_data["keyframes"] self.walkready_pose_dict: dict = keyframes[-1]["goals"] - self.walkready_pose_threshold = self.node.get_parameter("animations.walkready_pose_threshold").value - self.is_power_on: bool = False - # walking - self.last_walking_goal_time = self.node.get_clock().now() - self.walk_pub = self.node.create_publisher(Twist, "cmd_vel", 1) - self.record_active: bool = False + # Walking state + self.last_walking_goal_time = self.node.get_clock().now() - # falling - self.fall_checker = FallChecker(self.node) + # Falling + # Paramerters self.is_stand_up_active = self.node.get_parameter('stand_up_active').value self.falling_detection_active = self.node.get_parameter('falling_active').value - self.joint_pub = self.node.create_publisher(JointCommand, "DynamixelController/command", 1) - # kicking + # Kicking + # State self.last_kick_feedback: Optional[Time] = None - # direct messages for falling classier - # todo needs refactoring - path = get_package_share_directory('bitbots_hcm') - smooth_threshold = self.node.get_parameter('smooth_threshold').value - self.classifier = FallClassifier(path + "/classifier/", smooth_threshold=smooth_threshold) + # IMU state self.imu_msg: Optional[Imu] = None - self.cop_l_msg: Optional[PointStamped] = None - self.cop_r_msg: Optional[PointStamped] = None + # Diagnostics state self.servo_diag_error: bool = False self.servo_overload: bool = False self.imu_diag_error: bool = False self.pressure_diag_error: bool = False - self.move_base_cancel_pub = self.node.create_publisher(EmptyMsg, "pathfinding/cancel", 1) - def diag_cb(self, msg: DiagnosticArray): status: DiagnosticStatus for status in msg.status: @@ -141,5 +147,5 @@ def diag_cb(self, msg: DiagnosticArray): def last_kick_feedback_callback(self, msg: PlayAnimation.Feedback): self.last_kick_feedback = self.node.get_clock().now() - def cancel_move_base_goal(self): - self.move_base_cancel_pub.publish(EmptyMsg()) + def cancel_path_planning(self): + self.cancel_path_planning_pub.publish(EmptyMsg()) diff --git a/bitbots_hcm/bitbots_hcm/humanoid_control_module.py b/bitbots_hcm/bitbots_hcm/humanoid_control_module.py index c29f27ef7..f7d5af535 100755 --- a/bitbots_hcm/bitbots_hcm/humanoid_control_module.py +++ b/bitbots_hcm/bitbots_hcm/humanoid_control_module.py @@ -2,18 +2,14 @@ import os import threading + import rclpy from ament_index_python import get_package_share_directory from bitbots_hcm.hcm_dsd.hcm_blackboard import HcmBlackboard -from bitbots_msgs.action import Dynup -from bitbots_msgs.msg import FootPressure from bitbots_utils.utils import get_parameters_from_ros_yaml from builtin_interfaces.msg import Time as TimeMsg from diagnostic_msgs.msg import DiagnosticArray -from dynamic_stack_decider.dsd import DSD from geometry_msgs.msg import PointStamped -from humanoid_league_msgs.action import PlayAnimation -from humanoid_league_msgs.msg import RobotControlState, Audio from humanoid_league_speaker.speaker import speak from rcl_interfaces.msg import Parameter as ParameterMsg from rclpy.action import ActionClient @@ -27,6 +23,12 @@ from sensor_msgs.msg import Imu, JointState from std_msgs.msg import Bool +from bitbots_msgs.action import Dynup +from bitbots_msgs.msg import FootPressure +from dynamic_stack_decider.dsd import DSD +from humanoid_league_msgs.action import PlayAnimation +from humanoid_league_msgs.msg import Audio, RobotControlState + class HardwareControlManager: def __init__(self, use_sim_time, simulation_active, visualization_active): @@ -60,8 +62,6 @@ def __init__(self, use_sim_time, simulation_active, visualization_active): self.simulation_active = self.node.get_parameter("simulation_active") # dsd self.blackboard = HcmBlackboard(self.node) - self.blackboard.animation_action_client = ActionClient(self.node, PlayAnimation, 'animation') - self.blackboard.dynup_action_client = ActionClient(self.node, Dynup, 'dynup') dirname = os.path.dirname(os.path.realpath(__file__)) + "/hcm_dsd" self.dsd = DSD(self.blackboard, "debug/dsd/hcm", node=self.node) self.dsd.register_actions(os.path.join(dirname, 'actions')) @@ -115,7 +115,6 @@ def loop(self): if self.hcm_deactivated: self.blackboard.current_state = RobotControlState.CONTROLLABLE else: - self.blackboard.current_time = self.node.get_clock().now() try: self.dsd.update() except IndexError: @@ -132,7 +131,6 @@ def on_shutdown_hook(self): # now wait for it finishing the shutdown procedure while not self.blackboard.current_state == RobotControlState.HCM_OFF: # we still have to update everything - self.blackboard.current_time = self.node.get_clock().now() self.dsd.update() self.hcm_state_publisher.publish(self.blackboard.current_state) self.node.get_clock().sleep_for(Duration(seconds=0.01)) @@ -159,12 +157,6 @@ def set_current_joint_state(self, joint_state_msg_serialized): self.blackboard.previous_joint_state = self.blackboard.current_joint_state self.blackboard.current_joint_state = deserialize_message(joint_state_msg_serialized, JointState) - def set_cop(self, cop_msg_serialized, left): - if left: - self.blackboard.cop_l_msg = deserialize_message(cop_msg_serialized, PointStamped) - else: - self.blackboard.cop_r_msg = deserialize_message(cop_msg_serialized, PointStamped) - def set_pressure_left(self, pressure_msg_serialized): msg: FootPressure = deserialize_message(pressure_msg_serialized, FootPressure) self.blackboard.pressures[0] = msg.left_front diff --git a/bitbots_hcm/bitbots_hcm/training/dataset.py b/bitbots_hcm/bitbots_hcm/training/dataset.py deleted file mode 100644 index 57f1811aa..000000000 --- a/bitbots_hcm/bitbots_hcm/training/dataset.py +++ /dev/null @@ -1,95 +0,0 @@ -#!/usr/bin/env python3 -import tf -from sensor_msgs.msg import JointState, Imu, Image -from geometry_msgs.msg import Point - -import math -import numpy as np -from bitbots_hcm.fall_classifier import get_data_from_msgs - - -class Dataset: - - def __init__(self): - self.frames = [] - self.fall_impact_time = None - self.fall_type = None - - def append_frame(self, time, imu, joint_states, cop_l, cop_r, image): - frame = Frame(time, imu, joint_states, cop_l, cop_r, image) - self.frames.append(frame) - - def as_scikit_data(self, imu_raw=True, imu_orient=True, joint_states=True, imu_fused=True, cop=True): - X = [] - y = [] - for frame in self.frames: - X.append( - frame.get_data(imu_raw=imu_raw, imu_orient=imu_orient, joint_states=joint_states, imu_fused=imu_fused, - cop=cop)) - y.append(frame.label) - return X, y - - def get_frame_index_by_time(self, time): - difference = np.inf - index = None - for i in range(0, len(self.frames)): - if abs(time - self.frames[i].time) < difference: - index = i - difference = abs(time - self.frames[i].time) - return index - - def set_all_labels_to(self, label): - if label == "stable": - int_label = 0 - elif label == "front": - int_label = 1 - elif label == "back": - int_label = 2 - elif label == "left": - int_label = 3 - elif label == "right": - int_label = 4 - else: - print("Wrong label") - exit(1) - - for frame in self.frames: - frame.label = int_label - - def append_dataset(self, dataset): - self.frames = self.frames + dataset.frames - - -class Frame: - - def __init__(self, time, joint_states, imu, cop_l, cop_r, image): - self.time = time - self.imu: Imu = imu - self.joint_states: JointState = joint_states - self.cop_l: Point = cop_l - self.cop_r: Point = cop_r - self.image: Image = image - self.label = -1 - - def get_label(self): - if self.label == -2: - return "removed" - elif self.label == -1: - return "unlabeled" - elif self.label == 0: - return "stable" - elif self.label == 1: - return "front" - elif self.label == 2: - return "back" - elif self.label == 3: - return "left" - elif self.label == 4: - return "right" - else: - print(F"Label number {self.label} not clear, will use unlabeled") - return "unlabeled" - - def get_data(self, imu_raw=True, imu_orient=True, joint_states=True, imu_fused=True, cop=True): - return get_data_from_msgs(self.imu, self.joint_states, self.cop_l, self.cop_r, imu_raw, imu_orient, - joint_states, imu_fused, cop) diff --git a/bitbots_hcm/bitbots_hcm/training/label.py b/bitbots_hcm/bitbots_hcm/training/label.py deleted file mode 100644 index d0a63f01d..000000000 --- a/bitbots_hcm/bitbots_hcm/training/label.py +++ /dev/null @@ -1,132 +0,0 @@ -import pickle -import random -import rclpy -from rclpy.node import Node -import keyboard - -from geometry_msgs.msg import PointStamped -from sensor_msgs.msg import Imu, JointState - -from bitbots_hcm.training.dataset import Dataset, Frame - -imu = None -joint_states = None -cop_left = None -cop_right = None - -rclpy.init(args=None) - - -def imu_cb(msg): - global imu - imu = msg - - -def joint_state_cb(msg): - global joint_states - joint_states = msg - - -def cop_left_cb(msg): - global cop_left - cop_left = msg - - -def cop_right_cb(msg): - global cop_right - cop_right = msg - - -dataset = Dataset() - -rospy.Subscriber("/imu/data", Imu, imu_cb, tcp_nodelay=True) -rospy.Subscriber("/joint_states", JointState, joint_state_cb, tcp_nodelay=True) -rospy.Subscriber("/cop_l", PointStamped, cop_left_cb, tcp_nodelay=True) -rospy.Subscriber("/cop_r", PointStamped, cop_right_cb, tcp_nodelay=True) - - -# set keys -def key_cb(key): - global current_key - current_key = key - - -current_key = '5' -previous_key = None -keyboard.add_hotkey('5', key_cb, args='5') -keyboard.add_hotkey('0', key_cb, args='0') -keyboard.add_hotkey('1', key_cb, args='1') -keyboard.add_hotkey('2', key_cb, args='2') -keyboard.add_hotkey('3', key_cb, args='3') -keyboard.add_hotkey('4', key_cb, args='4') -keyboard.add_hotkey('s', key_cb, args='s') - -frequency = 200 -rate = self.create_rate(frequency) -print("Press \'s\' top stop. 0,1,2,3,4 to label stable,front,back,left,right") -while True: - frame = Frame(self.get_clock().now(), joint_states=joint_states, imu=imu, cop_l=cop_left, cop_r=cop_right, image=None) - if current_key == '5': - if previous_key != '5': - print("Not labeling") - previous_key = current_key - continue - elif current_key == '0': - if previous_key != '0': - print("Stable") - previous_key = current_key - frame.label = 0 - elif current_key == '1': - if previous_key != '1': - print("Front") - previous_key = current_key - frame.label = 1 - elif current_key == '2': - if previous_key != '2': - print("Back") - previous_key = current_key - frame.label = 2 - elif current_key == '3': - if previous_key != '3': - print("Left") - previous_key = current_key - frame.label = 3 - elif current_key == '4': - if previous_key != '4': - print("Right") - previous_key = current_key - frame.label = 4 - elif current_key == 's': - break - else: - print("key not known") - continue - dataset.frames.append(frame) - rate.sleep() - -print(F"Recorded {len(dataset.frames)} frames") -sorted = [0, 0, 0, 0, 0] -for i in range(len(dataset.frames)): - sorted[dataset.frames[i].label] += 1 -print(F'Stable {sorted[0]} Front {sorted[1]} Back {sorted[2]} Left {sorted[3]} Right {sorted[4]}') - -time_to_remove = input("Remove how many seconds: ") -try: - frames_to_remove = int(float(time_to_remove) * frequency) - print(F"{frames_to_remove} ---") - dataset.frames = dataset.frames[:-frames_to_remove - 1] - print(F"Frames after removing: {len(dataset.frames)}") -except: - pass - -reduce_to = input("Reduce number to ") -if reduce_to != "": - dataset.frames = random.choices(dataset.frames, k=int(reduce_to)) - print(F"Reduced number of frames to {len(dataset.frames)}") - -file_name = input("File name: ") -if len(file_name) > 0: - with open(file_name + ".pkl", "wb") as file: - pickle.dump(dataset, file) - - print(F"Saved dataset with {len(dataset.frames)} frames to {file_name}.pkl") diff --git a/bitbots_hcm/bitbots_hcm/training/train.py b/bitbots_hcm/bitbots_hcm/training/train.py deleted file mode 100644 index a1dab1c2a..000000000 --- a/bitbots_hcm/bitbots_hcm/training/train.py +++ /dev/null @@ -1,219 +0,0 @@ -#!/usr/bin/env python3 -import argparse -import math -import pickle -import random -from pathlib import Path -from os import listdir -from os.path import isfile, join - -import optuna -import numpy as np -import sklearn -from optuna.samplers import TPESampler -from sklearn.gaussian_process import GaussianProcessClassifier -from sklearn.metrics import confusion_matrix, accuracy_score -from sklearn.model_selection import train_test_split -from sklearn.neural_network import MLPClassifier - -from bitbots_hcm.training.dataset import Dataset -from bitbots_hcm.fall_checker import FallChecker - -parser = argparse.ArgumentParser() -parser.add_argument('--storage', help='Database SQLAlchemy string, e.g. postgresql://USER:PASS@SERVER/DB_NAME', - default=None, type=str, required=False) -parser.add_argument('--name', help='Name of the study', default=None, type=str, required=False) -parser.add_argument('--iterations', help='iterations for optimization', default=100, type=int, required=False) -parser.add_argument('--knn', help='use knn', dest='knn', action='store_true') -parser.add_argument('--svc', help='use svc', dest='svc', action='store_true') -parser.add_argument('--mlp', help='use mlp', dest='mlp', action='store_true') -parser.add_argument('--gpc', help='use gpc', dest='gpc', action='store_true') -parser.add_argument('--bb', help='use bb', dest='bb', action='store_true') -parser.add_argument('--reduce', help='reduce data', dest='reduce', action='store_true') -parser.add_argument('--directories', help='directories of labelled training data', nargs='+', required=True) -args = parser.parse_args() - -# load dataset -merged_dataset = Dataset() -for directory in args.directories: - data_files = [f for f in listdir(directory) if isfile(join(directory, f))] - print(F"Loaded datasets {data_files}") - for file_name in data_files: - with open(directory + "/" + file_name, 'rb') as file: - dataset: Dataset = pickle.load(file) - merged_dataset.append_dataset(dataset) - -data_types = {'imu_raw': True, 'imu_orient': True, 'joint_states': False, 'imu_fused': False, 'cop': False} -print(f"Used datatypes are: {data_types}\n Change this in the script if you want to use other combinations.") - -x, y = merged_dataset.as_scikit_data(imu_raw=data_types['imu_raw'], imu_orient=data_types['imu_orient'], - joint_states=data_types['joint_states'], imu_fused=data_types['imu_fused'], - cop=data_types['cop']) - -print("Transformed to scipy data") -print(F"stable: {y.count(0)} front: {y.count(1)} back: {y.count(2)} left: {y.count(3)} right: {y.count(4)}") - - -def reduce_data(x, y, max_number=np.inf): - lowest_number = np.inf - for i in range(5): - count = y.count(i) - lowest_number = min(lowest_number, count) - lowest_number = min(lowest_number, max_number) - # make 5 lists with the indexes of frames for each class - sorted = [[], [], [], [], []] - for i in range(len(x)): - sorted[y[i]].append(i) - print(F'0 {len(sorted[0])} 1 {len(sorted[1])} 2 {len(sorted[2])} 3 {len(sorted[3])} 4 {len(sorted[4])}') - x_out = [] - y_out = [] - for i in range(5): - sampled_indexes = random.choices(sorted[i], k=lowest_number) - for index in sampled_indexes: - x_out.append(x[index]) - y_out.append(y[index]) - - return x_out, y_out - - -if args.reduce: - x, y = reduce_data(x, y, 200) -print(F'reduced to {y.count(0)} front: {y.count(1)} back: {y.count(2)} left: {y.count(3)} right: {y.count(4)}') -print(F'stable {y.count(0)} falling {y.count(1) + y.count(2) + y.count(3) + y.count(4)}') -scaler = sklearn.preprocessing.StandardScaler() -scaler.fit(x) - -use_fn = False -if use_fn: - x, x_test, y, y_test = train_test_split(x, y, random_state=0) - x_test_scaled = scaler.transform(x_test) - print(F'train is to {y.count(0)} front: {y.count(1)} back: {y.count(2)} left: {y.count(3)} right: {y.count(4)}') - print( - F'test is to {y_test.count(0)} front: {y_test.count(1)} back: {y_test.count(2)} left: {y_test.count(3)} right: {y_test.count(4)}') - -x_scaled = scaler.transform(x) - - -def evaluate_classifier(classifier): - if use_fn: - classifier.fit(x_scaled, y) - conf_mat = confusion_matrix(y_test, classifier.predict(x_test_scaled)) - FP = conf_mat.sum(axis=0) - np.diag(conf_mat) - FN = conf_mat.sum(axis=1) - np.diag(conf_mat) - TP = np.diag(conf_mat) - # TN = conf_mat.values.sum() - (FP + FN + TP) - print(FN) - return FN[0] * 100 + FN[1] + FN[2] + FN[3] + FN[4] - else: - score = sklearn.model_selection.cross_val_score(classifier, x_scaled, y, n_jobs=-1, verbose=0) - accuracy = score.mean() - return accuracy - - -def knn(trial: optuna.Trial): - n_neighbors = trial.suggest_int("n_neighbors", 1, 10) - weights = trial.suggest_categorical("weights", ['uniform', 'distance']) - algorithm = trial.suggest_categorical("algorithm", ['ball_tree', 'kd_tree']) - leaf_size = trial.suggest_int('leaf_size', 1, 50) - classifier = sklearn.neighbors.KNeighborsClassifier(n_neighbors=n_neighbors, weights=weights, algorithm=algorithm, - leaf_size=leaf_size) - return evaluate_classifier(classifier) - - -def svc(trial: optuna.Trial): - svc_c = trial.suggest_loguniform("svc_c", 1e-10, 1e10) - kernel = trial.suggest_categorical('kernel', ['linear', 'poly', 'rbf', 'sigmoid']) - degree = trial.suggest_int('degree', 1, 10) - classifier = sklearn.svm.SVC(C=svc_c, gamma="auto", kernel=kernel, degree=degree) - return evaluate_classifier(classifier) - - -def mlp(trial: optuna.Trial): - hidden_layer_size = trial.suggest_int("hidden_layer_size", 10, 1000, 10) - hidden_layer_count = trial.suggest_int("hidden_layer_count", 1, 10) - hidden_layer = (hidden_layer_size,) * hidden_layer_count - activation_fun = trial.suggest_categorical("activation_fun", ['identity', 'tanh', 'relu']) - alpha = trial.suggest_float("alpha", 0.000001, 0.0001) - learning_rate = trial.suggest_categorical('learning_rate', ['constant', 'invscaling', 'adaptive']) - classifier = MLPClassifier(hidden_layer_sizes=hidden_layer, activation=activation_fun, - alpha=alpha, learning_rate=learning_rate) - return evaluate_classifier(classifier) - - -def gpc(trial: optuna.Trial): - multi_class = trial.suggest_categorical("multi_class", ['one_vs_rest', 'one_vs_one']) - classifier = GaussianProcessClassifier(multi_class=multi_class) - return evaluate_classifier(classifier) - - -def bb(trial: optuna.Trial): - # our previous naive bitbots approach - thresh_gyro_front = trial.suggest_float("thresh_gyro_front", 0, 20) - thresh_gyro_side = trial.suggest_float("thresh_gyro_side", 0, 20) - thresh_orient_front = trial.suggest_float("thresh_orient_front", 0, math.pi) - thresh_orient_side = trial.suggest_float("thresh_orient_side", 0, math.pi) - classifier = FallChecker(thresh_gyro_front=thresh_gyro_front, thresh_gyro_side=thresh_gyro_side, - thresh_orient_front=thresh_orient_front, thresh_orient_side=thresh_orient_side) - return evaluate_classifier(classifier) - - -def pickle_classifier(classifier, type): - path = "classifiers/" + type + "/" - Path(path).mkdir(parents=True, exist_ok=True) - with open(path + "classifier.pkl", "wb") as file: - pickle.dump(classifier, file) - with open(path + "scaler.pkl", "wb") as file: - pickle.dump(scaler, file) - with open(path + "types.pkl", "wb") as file: - pickle.dump(data_types, file) - - -if args.knn: - objective = knn - name = 'knn' -elif args.mlp: - objective = mlp - name = 'mlp' -elif args.svc: - objective = svc - name = 'svc' -elif args.gpc: - objective = gpc - name = 'gpc' -elif args.bb: - objective = bb - name = 'bb' - -seed = np.random.randint(2 ** 32 - 1) -sampler = TPESampler(n_startup_trials=10, seed=seed) -if use_fn: - direction = 'minimize' -else: - direction = 'maximize' -study = optuna.create_study(study_name=args.name, storage=args.storage, direction=direction, - sampler=sampler, load_if_exists=True) -print("Start optimizing hyper parameters") -study.optimize(objective, n_trials=args.iterations, show_progress_bar=True, n_jobs=1) - -print("Train final classifier with optimized hyper parameters") -if args.knn: - classifier = sklearn.neighbors.KNeighborsClassifier(n_neighbors=study.best_params['n_neighbors'], - weights=study.best_params['weights'], - algorithm=study.best_params['algorithm'], - leaf_size=study.best_params['leaf_size']) -elif args.mlp: - hidden_layer = (study.best_params['hidden_layer_size'],) * study.best_params['hidden_layer_count'] - classifier = MLPClassifier(hidden_layer_sizes=hidden_layer, activation=study.best_params['activation_fun'], - alpha=study.best_params['alpha'], learning_rate=study.best_params['learning_rate']) -elif args.svc: - classifier = sklearn.svm.SVC(C=study.best_params['svc_c'], gamma="auto", kernel=study.best_params['kernel'], - degree=study.best_params['degree']) -elif args.gpc: - classifier = GaussianProcessClassifier(multi_class=study.best_params['multi_class']) -elif args.bb: - classifier = FallChecker(thresh_gyro_front=study.best_params['thresh_gyro_front'], - thresh_gyro_side=study.best_params['thresh_gyro_side'], - thresh_orient_front=study.best_params['thresh_orient_front'], - thresh_orient_side=study.best_params['thresh_orient_side']) -classifier.fit(x_scaled, y) -pickle_classifier(classifier, name) diff --git a/bitbots_hcm/config/hcm_wolfgang.yaml b/bitbots_hcm/config/hcm_wolfgang.yaml index 9fcd20423..c0659c0f8 100644 --- a/bitbots_hcm/config/hcm_wolfgang.yaml +++ b/bitbots_hcm/config/hcm_wolfgang.yaml @@ -42,6 +42,9 @@ # smoothing threshold for classifier smooth_threshold: 0.04 + fallen_orientation_thresh: 60.0 # Lean (degrees) after which we consider the robot fallen on this side + fallen_angular_velocity_thresh: 0.2 # Angular velocity (rad/s) under which we consider the robot as not moving (the fall is over and we are lying on the ground) + pick_up_accel_threshold: 7.0 falling: diff --git a/bitbots_hcm/src/hcm.cpp b/bitbots_hcm/src/hcm.cpp index fbd7b96ab..cf7228eb6 100644 --- a/bitbots_hcm/src/hcm.cpp +++ b/bitbots_hcm/src/hcm.cpp @@ -190,14 +190,6 @@ class HCM_CPP : public rclcpp::Node { current_joint_state_ = msg; } - void cop_l_callback(geometry_msgs::msg::PointStamped msg) { - current_cop_right_ = msg; - } - - void cop_r_callback(geometry_msgs::msg::PointStamped msg) { - current_cop_left_ = msg; - } - void pressure_l_callback(bitbots_msgs::msg::FootPressure msg) { current_pressure_left_ = msg; } @@ -215,8 +207,6 @@ class HCM_CPP : public rclcpp::Node { hcm_py_.attr("set_imu")(ros2_python_extension::toPython(current_imu_)); hcm_py_.attr("set_pressure_left")(ros2_python_extension::toPython<bitbots_msgs::msg::FootPressure>(current_pressure_left_)); hcm_py_.attr("set_pressure_right")(ros2_python_extension::toPython<bitbots_msgs::msg::FootPressure>(current_pressure_right_)); - hcm_py_.attr("set_cop")(ros2_python_extension::toPython<geometry_msgs::msg::PointStamped>(current_cop_left_), false); - hcm_py_.attr("set_cop")(ros2_python_extension::toPython<geometry_msgs::msg::PointStamped>(current_cop_right_), true); hcm_py_.attr("set_last_motor_update_time")(ros2_python_extension::toPython<builtin_interfaces::msg::Time>(current_joint_state_.header.stamp)); hcm_py_.attr("set_current_joint_state")(ros2_python_extension::toPython<sensor_msgs::msg::JointState>(current_joint_state_)); hcm_py_.attr("set_last_walking_goal_time")(ros2_python_extension::toPython<builtin_interfaces::msg::Time>(last_walking_time_)); From 82f6aa411ef4e1be2bff62f2fe0d076692997f11 Mon Sep 17 00:00:00 2001 From: Florian Vahl <git@flova.de> Date: Tue, 12 Sep 2023 19:31:30 +0200 Subject: [PATCH 05/74] Fix hcm led script --- bitbots_hcm/scripts/hcm_led.py | 90 ++++++++++++---------------------- 1 file changed, 30 insertions(+), 60 deletions(-) diff --git a/bitbots_hcm/scripts/hcm_led.py b/bitbots_hcm/scripts/hcm_led.py index 92672d7fc..7838ad2cc 100755 --- a/bitbots_hcm/scripts/hcm_led.py +++ b/bitbots_hcm/scripts/hcm_led.py @@ -3,86 +3,56 @@ import rclpy from rclpy.node import Node from std_msgs.msg import ColorRGBA + from humanoid_league_msgs.msg import RobotControlState + BLINK_DURATION = 0.2 ERROR_TIMEOUT = 1 + class HCMLedNode(Node): def __init__(self): rclpy.init(args=None) self.pub = self.create_publisher(ColorRGBA, "/led1", 1) + self.color_mapping = { + RobotControlState.CONTROLLABLE: (0.3, 0.3, 0.3), + RobotControlState.FALLING: (0.3, 0.1, 0), + RobotControlState.FALLEN: (0.3, 0.3, 0), + RobotControlState.HARDWARE_PROBLEM: (1, 0, 0), + RobotControlState.ANIMATION_RUNNING: (0, 0, 0.3), + RobotControlState.WALKING: (0, 0.3, 0), + RobotControlState.GETTING_UP: (0, 0.3, 0.3), + RobotControlState.HCM_OFF: (0, 0, 0), + RobotControlState.MOTOR_OFF: (0.03, 0.03, 0.03), + RobotControlState.KICKING: (0, 0, 0.1), + RobotControlState.PENALTY: (0.3, 0, 0.3), + RobotControlState.PENALTY_ANIMATION: (0.3, 0, 0.3), + RobotControlState.PICKED_UP: (0, 0.03, 0), + RobotControlState.RECORD: (0, 0.1, 0), + } + self.last_state = -1 - sub = self.create_subscription(RobotControlState, "robot_state", self.hcm_state_cb, 1) + self.sub = self.create_subscription(RobotControlState, "robot_state", self.hcm_state_cb, 1) rclpy.spin(self) - def hcm_state_cb(msg: RobotControlState): + def hcm_state_cb(self, msg: RobotControlState): state = msg.state - # only do something if state changes, to not spam messages + + # Only do something if state changes, to not spam messages if state == self.last_state: return self.last_state = state + led = ColorRGBA() led.a = 1.0 - if state == msg.CONTROLLABLE: - led.r = 0.3 - led.g = 0.3 - led.b = 0.3 - elif state == msg.FALLING: - led.r = 0.3 - led.g = 0.1 - led.b = 0 - elif state == msg.FALLEN: - led.r = 0.3 - led.g = 0.3 - led.b = 0 - elif state == msg.HARDWARE_PROBLEM: - led.r = 1 - led.g = 0 - led.b = 0 - elif state == msg.ANIMATION_RUNNING: - led.r = 0 - led.g = 0 - led.b = 0.3 - elif state == msg.WALKING: - led.r = 0 - led.g = 0.3 - led.b = 0 - elif state == msg.GETTING_UP: - led.r = 0 - led.g = 0.3 - led.b = 0.3 - elif state == msg.HCM_OFF: - led.r = 0 - led.g = 0 - led.b = 0 - elif state == msg.MOTOR_OFF: - led.r = 0.03 - led.g = 0.03 - led.b = 0.03 - elif state == msg.KICKING: - led.r = 0 - led.g = 0 - led.b = 0.1 - elif state == msg.PENALTY: - led.r = 0.3 - led.g = 0 - led.b = 0.3 - elif state == msg.PENALTY_ANIMATION: - led.r = 0.3 - led.g = 0 - led.b = 0.3 - elif state == msg.PICKED_UP: - led.r = 0 - led.g = 0.03 - led.b = 0 - elif state == msg.RECORD: - led.r = 0 - led.g = 0.1 - led.b = 0 - self.pub.publish(led) + if state in self.color_mapping: + led.r, led.g, led.b = self.color_mapping[state] + else: + self.get_logger().warn(f"Unknown state: {state}") + self.pub.publish(led) From cf27605deee78b75dae85bc09eb65a5e6925f472 Mon Sep 17 00:00:00 2001 From: Florian Vahl <git@flova.de> Date: Tue, 12 Sep 2023 19:31:56 +0200 Subject: [PATCH 06/74] Remove unessesary code --- .../hcm_dsd/actions/play_animation.py | 8 +- .../bitbots_hcm/hcm_dsd/actions/stay.py | 4 - .../bitbots_hcm/hcm_dsd/decisions/pickup.py | 3 + .../bitbots_hcm/hcm_dsd/decisions/startup.py | 38 +---- bitbots_hcm/bitbots_hcm/hcm_dsd/hcm.dsd | 9 +- .../bitbots_hcm/hcm_dsd/hcm_blackboard.py | 42 +---- .../bitbots_hcm/humanoid_control_module.py | 152 +++++++++--------- bitbots_hcm/config/hcm_wolfgang.yaml | 19 +-- bitbots_hcm/src/hcm.cpp | 6 +- 9 files changed, 106 insertions(+), 175 deletions(-) diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/play_animation.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/play_animation.py index 0f338c9ad..6a72b94c8 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/play_animation.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/play_animation.py @@ -63,7 +63,7 @@ def start_animation(self, anim): timeout_sec=self.blackboard.node.get_parameter('hcm.anim_server_wait_time').get_parameter_value().double_value) if not first_try: server_running = False - while not server_running and not self.blackboard.shut_down_request and rclpy.ok(): + while not server_running and rclpy.ok(): self.blackboard.node.get_logger().warn( "Animation Action Server not running! Motion can not work without animation action server. " "Will now wait until server is accessible!", @@ -77,9 +77,13 @@ def start_animation(self, anim): goal = PlayAnimation.Goal() goal.animation = anim goal.hcm = True # the animation is from the hcm - self.blackboard.animation_action_current_goal = self.blackboard.animation_action_client.send_goal_async(goal) + self.blackboard.animation_action_current_goal = self.blackboard.animation_action_client.send_goal_async( + goal, feedback_callback=self.kick_feedback_cb) return True + def kick_feedback_cb(self, msg: PlayAnimation.Feedback): + self.blackboard.last_kick_feedback = self.blackboard.node.get_clock().now() + def animation_finished(self): return self.blackboard.animation_action_current_goal.cancelled() or self.blackboard.animation_action_current_goal.done() diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/stay.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/stay.py index de5c63807..63a6a2139 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/stay.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/stay.py @@ -50,9 +50,5 @@ class StayRecord(AbstractStay): pass -class StayShutDown(AbstractStay): - def perform(self): - self.blackboard.current_state = RobotControlState.HCM_OFF - class StayKicking(AbstractStay): pass diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/pickup.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/pickup.py index 51f3bc9de..4c50e8c08 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/pickup.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/pickup.py @@ -1,4 +1,5 @@ from bitbots_hcm.hcm_dsd.decisions import AbstractHCMDecisionElement +from humanoid_league_speaker.speaker import speak from humanoid_league_msgs.msg import RobotControlState @@ -18,6 +19,8 @@ def perform(self, reevaluate=False): abs(self.blackboard.smooth_accel[0]) < self.blackboard.pickup_accel_threshold and \ abs(self.blackboard.smooth_accel[1]) < self.blackboard.pickup_accel_threshold: self.blackboard.current_state = RobotControlState.PICKED_UP + if not reevaluate: + speak("Picked up!", self.blackboard.speak_publisher, priority=50) # we do an action sequence to go to walkready and stay in picked up state return "PICKED_UP" diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/startup.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/startup.py index 024450d80..d276c263a 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/startup.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/startup.py @@ -9,44 +9,16 @@ class StartHCM(AbstractHCMDecisionElement): """ Initializes HCM. """ - def __init__(self, blackboard, dsd, parameters=None): super().__init__(blackboard, dsd, parameters) self.is_initial = True def perform(self, reevaluate=False): - if self.blackboard.shut_down_request: - if self.blackboard.current_state == RobotControlState.HARDWARE_PROBLEM: - self.blackboard.current_state = RobotControlState.SHUTDOWN - return "SHUTDOWN_WHILE_HARDWARE_PROBLEM" - else: - self.blackboard.current_state = RobotControlState.SHUTDOWN - return "SHUTDOWN_REQUESTED" - else: - if self.is_initial: - if not self.is_walkready(): - return "NOT_WALKREADY" - else: - self.is_initial = False - self.blackboard.current_state = RobotControlState.STARTUP - return "RUNNING" - - def is_walkready(self): - """ - We check if any joint is has an offset from the walkready pose which is higher than a threshold - """ - - if self.blackboard.current_joint_state is None or self.blackboard.current_joint_state.name == []: - self.blackboard.node.get_logger().warn("No joint state received yet, can not check if we are walkready at startup") - return False - - for i, joint_name in enumerate(self.blackboard.current_joint_state.name): - if joint_name == "HeadPan" or joint_name == "HeadTilt": - continue # we dont care about the head position - if abs(math.degrees(self.blackboard.current_joint_state.position[i]) - - self.blackboard.walkready_pose_dict[joint_name]) > self.blackboard.walkready_pose_threshold: - return False - return True + if self.is_initial: + self.is_initial = False + self.blackboard.current_state = RobotControlState.STARTUP + return "START_UP" + return "RUNNING" def get_reevaluate(self): return True diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/hcm.dsd b/bitbots_hcm/bitbots_hcm/hcm_dsd/hcm.dsd index 1879b8eb3..5409a38e0 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/hcm.dsd +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/hcm.dsd @@ -1,13 +1,6 @@ -#ShutDownProcedure -$PickedUp - PICKED_UP --> @TurnMotorsOff, @StayShutDown - ON_GROUND --> @PlayAnimationSitDown, @TurnMotorsOff, @StayShutDown - -->HCM $StartHCM - NOT_WALKREADY --> @Wait + time:0.1 + r:false, @PlayAnimationDynup + direction:walkready + initial:true + r:false - SHUTDOWN_REQUESTED --> #ShutDownProcedure - SHUTDOWN_WHILE_HARDWARE_PROBLEM --> @StayShutDown + START_UP --> @Wait + time:0.1 + r:false, @PlayAnimationDynup + direction:walkready + initial:true + r:false RUNNING --> $Stop STOPPED --> @ForceStopWalking, @PlayAnimationDynup + direction:walkready + initial:true + r:false, @StayStopped FREE -->$Record diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/hcm_blackboard.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/hcm_blackboard.py index 2164ee135..2f5c36e26 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/hcm_blackboard.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/hcm_blackboard.py @@ -4,7 +4,6 @@ import numpy from ament_index_python import get_package_share_directory -from diagnostic_msgs.msg import DiagnosticArray, DiagnosticStatus from geometry_msgs.msg import PointStamped, Twist from rclpy.action import ActionClient from rclpy.node import Node @@ -18,7 +17,7 @@ from bitbots_msgs.action import Dynup from bitbots_msgs.msg import JointCommand from humanoid_league_msgs.action import PlayAnimation -from humanoid_league_msgs.msg import RobotControlState +from humanoid_league_msgs.msg import Audio, RobotControlState class HcmBlackboard(): @@ -28,7 +27,6 @@ def __init__(self, node: Node): # Basic state self.current_state: RobotControlState = RobotControlState.STARTUP self.stopped: bool = False - self.shut_down_request: bool = False # Save start time self.start_time: Time = self.node.get_clock().now() @@ -40,8 +38,7 @@ def __init__(self, node: Node): self.pressure_sensors_installed: bool = self.node.get_parameter('pressure_sensors_installed').value # Create services - foot_zero_service_name = self.node.get_parameter("foot_zero_service").value - self.foot_zero_service = self.node.create_client(EmptySrv, foot_zero_service_name) + self.foot_zero_service = self.node.create_client(EmptySrv, "set_foot_zero") self.motor_switch_service = self.node.create_client(SetBool, 'core/switch_power') # Create action clients and corresponding goal handles @@ -53,6 +50,7 @@ def __init__(self, node: Node): # Create publishers self.walk_pub = self.node.create_publisher(Twist, "cmd_vel", 1) self.cancel_path_planning_pub = self.node.create_publisher(EmptyMsg, "pathfinding/cancel", 1) + self.speak_publisher = self.node.create_publisher(Audio, 'speak', 1) # Latest imu data self.accel = numpy.array([0, 0, 0]) @@ -73,11 +71,6 @@ def __init__(self, node: Node): self.last_animation_goal_time: Time = self.node.get_clock().now() self.record_active: bool = False - if self.simulation_active: - self.walkready_animation = self.node.get_parameter("animations.walkready_sim").value - else: - self.walkready_animation = self.node.get_parameter("animations.walkready").value - # Get animation parameters self.falling_animation_front = self.node.get_parameter("animations.falling_front").value self.falling_animation_back = self.node.get_parameter("animations.falling_back").value @@ -98,17 +91,6 @@ def __init__(self, node: Node): self.motor_timeout_duration: float = self.node.get_parameter("motor_timeout_duration").value self.motor_off_time: float = self.node.get_parameter("motor_off_time").value self.imu_timeout_duration: float = self.node.get_parameter("imu_timeout_duration").value - self.walkready_pose_threshold = self.node.get_parameter("animations.walkready_pose_threshold").value - - - # Hacky way of getting the walkready pose. TODO change that. Maybe use a dynup service - anim_package = self.node.get_parameter("animations.anim_package").value - path = get_package_share_directory(anim_package) - path = os.path.join(path, 'animations/motion/', self.walkready_animation + '.json') - with open(path, 'r') as f: - json_data = json.load(f) - keyframes: List[dict] = json_data["keyframes"] - self.walkready_pose_dict: dict = keyframes[-1]["goals"] # Walking state self.last_walking_goal_time = self.node.get_clock().now() @@ -131,21 +113,5 @@ def __init__(self, node: Node): self.imu_diag_error: bool = False self.pressure_diag_error: bool = False - def diag_cb(self, msg: DiagnosticArray): - status: DiagnosticStatus - for status in msg.status: - if "//Servos/" in status.name: - if status.level == DiagnosticStatus.ERROR and "Overload" in status.message: - self.servo_overload = True - elif "//Servos" in status.name: - self.servo_diag_error = status.level in (DiagnosticStatus.ERROR, DiagnosticStatus.STALE) - elif "//IMU" in status.name: - self.imu_diag_error = status.level in (DiagnosticStatus.ERROR, DiagnosticStatus.STALE) - elif "//Pressure" in status.name: - self.pressure_diag_error = status.level in (DiagnosticStatus.ERROR, DiagnosticStatus.STALE) - - def last_kick_feedback_callback(self, msg: PlayAnimation.Feedback): - self.last_kick_feedback = self.node.get_clock().now() - def cancel_path_planning(self): - self.cancel_path_planning_pub.publish(EmptyMsg()) + self.cancel_path_planning_pub.publish(EmptyMsg()) \ No newline at end of file diff --git a/bitbots_hcm/bitbots_hcm/humanoid_control_module.py b/bitbots_hcm/bitbots_hcm/humanoid_control_module.py index f7d5af535..271007d64 100755 --- a/bitbots_hcm/bitbots_hcm/humanoid_control_module.py +++ b/bitbots_hcm/bitbots_hcm/humanoid_control_module.py @@ -8,11 +8,9 @@ from bitbots_hcm.hcm_dsd.hcm_blackboard import HcmBlackboard from bitbots_utils.utils import get_parameters_from_ros_yaml from builtin_interfaces.msg import Time as TimeMsg -from diagnostic_msgs.msg import DiagnosticArray -from geometry_msgs.msg import PointStamped +from diagnostic_msgs.msg import DiagnosticArray, DiagnosticStatus from humanoid_league_speaker.speaker import speak from rcl_interfaces.msg import Parameter as ParameterMsg -from rclpy.action import ActionClient from rclpy.duration import Duration from rclpy.executors import MultiThreadedExecutor from rclpy.node import Node @@ -23,7 +21,6 @@ from sensor_msgs.msg import Imu, JointState from std_msgs.msg import Bool -from bitbots_msgs.action import Dynup from bitbots_msgs.msg import FootPressure from dynamic_stack_decider.dsd import DSD from humanoid_league_msgs.action import PlayAnimation @@ -34,6 +31,10 @@ class HardwareControlManager: def __init__(self, use_sim_time, simulation_active, visualization_active): rclpy.init(args=None) node_name = "hcm_py" + + self.simulation_active = simulation_active + + # Load parameters from yaml file because this is a hacky cpp python hybrid node for performance reasons parameter_msgs: list(ParameterMsg) = get_parameters_from_ros_yaml( node_name, f"{get_package_share_directory('bitbots_hcm')}/config/hcm_wolfgang.yaml", use_wildcard=True) parameters = [] @@ -45,133 +46,140 @@ def __init__(self, use_sim_time, simulation_active, visualization_active): parameters.append(Parameter("simulation_active", type_=Parameter.Type.BOOL, value=True)) if visualization_active: parameters.append(Parameter("visualization_active", type_=Parameter.Type.BOOL, value=True)) + + # Create Python node self.node = Node(node_name, allow_undeclared_parameters=True, automatically_declare_parameters_from_overrides=True, parameter_overrides=parameters) - # create own executor for python part + + # Create own executor for Python part multi_executor = MultiThreadedExecutor() multi_executor.add_node(self.node) self.spin_thread = threading.Thread(target=multi_executor.spin, args=(), daemon=True) self.spin_thread.start() - # --- Initialize Node --- # Otherwise messages will get lost, bc the init is not finished self.node.get_clock().sleep_for(Duration(seconds=0.5)) self.node.get_logger().debug("Starting hcm") - self.simulation_active = self.node.get_parameter("simulation_active") - # dsd + + # Create Dynamic Stack Decider Blackboard self.blackboard = HcmBlackboard(self.node) - dirname = os.path.dirname(os.path.realpath(__file__)) + "/hcm_dsd" + # Create Dynamic Stack Decider self.dsd = DSD(self.blackboard, "debug/dsd/hcm", node=self.node) + # Get the path to the python actions and decisions + dirname = os.path.dirname(os.path.realpath(__file__)) + "/hcm_dsd" + # Register actions and decisions self.dsd.register_actions(os.path.join(dirname, 'actions')) self.dsd.register_decisions(os.path.join(dirname, 'decisions')) + # Load the behavior file self.dsd.load_behavior(os.path.join(dirname, 'hcm.dsd')) + + # Flag to deactivate the HCM self.hcm_deactivated = False - # Publisher / subscriber - self.blackboard.speak_publisher = self.node.create_publisher(Audio, 'speak', 1) - # important to make sure the connection to the speaker is established, for next line - self.node.get_clock().sleep_for(Duration(seconds=0.1)) - speak("Starting HCM", self.blackboard.speak_publisher, priority=50) + # Create subscribers self.node.create_subscription(Bool, "pause", self.pause, 1) self.node.create_subscription(Bool, "core/power_switch_status", self.power_cb, 1) self.node.create_subscription(Bool, "hcm_deactivate", self.deactivate_cb, 1) - self.node.create_subscription(DiagnosticArray, "diagnostics_agg", self.blackboard.diag_cb, 1) - self.node.add_on_set_parameters_callback(self.on_set_parameters) + self.node.create_subscription(DiagnosticArray, "diagnostics_agg", self.diag_cb, 1) + + # Store time of the last tick + self.last_tick_start_time = self.node.get_clock().now() - self.last_loop_start_time = self.node.get_clock().now() + # Anounce the HCM startup + speak("Starting HCM", self.blackboard.speak_publisher, priority=50) - def deactivate_cb(self, msg): + def tick(self): + """ + Keeps updating the DSD and publishes its current state. + All the forwarding of joint goals is directly done in the callbacks to reduce latency. + """ + # Store the time of the current tick + tick_start_time = self.node.get_clock().now() + # This can happen in simulation due to bad implementation in rclpy + if (self.last_tick_start_time != tick_start_time): + self.last_tick_start_time = tick_start_time + # Do not perform any behavior if the HCM is deactivated + if self.hcm_deactivated: + self.blackboard.current_state = RobotControlState.CONTROLLABLE + else: + try: + # Step the dsd + self.dsd.update() + except IndexError: + # this error will happen during shutdown procedure, just ignore it + pass + + def deactivate_cb(self, msg: Bool): + """ Deactivates the HCM. """ self.hcm_deactivated = msg.data - def pause(self, msg): + def pause(self, msg: Bool): """ Updates the stop state for the state machine""" self.blackboard.stopped = msg.data - def on_set_parameters(self, config, level): - """ Dynamic reconfigure of the fall checker values.""" - # just pass on to the StandupHandler, as all the variables are located there - self.blackboard.fall_checker.update_reconfigurable_values(config, level) - self.blackboard.pickup_accel_threshold = config["pick_up_accel_threshold"] - return config - - def power_cb(self, msg): + def power_cb(self, msg: Bool): + """ Updates the power state. """ self.blackboard.is_power_on = msg.data - def get_state(self): + def diag_cb(self, msg: DiagnosticArray): + """ Updates the diagnostic state. """ + status: DiagnosticStatus + for status in msg.status: + if "//Servos/" in status.name: + if status.level == DiagnosticStatus.ERROR and "Overload" in status.message: + self.blackboard.servo_overload = True + elif "//Servos" in status.name: + self.blackboard.servo_diag_error = status.level in (DiagnosticStatus.ERROR, DiagnosticStatus.STALE) + elif "//IMU" in status.name: + self.blackboard.imu_diag_error = status.level in (DiagnosticStatus.ERROR, DiagnosticStatus.STALE) + elif "//Pressure" in status.name: + self.blackboard.pressure_diag_error = status.level in (DiagnosticStatus.ERROR, DiagnosticStatus.STALE) + + def get_state(self) -> RobotControlState: + """ Returns the current state of the HCM. """ return self.blackboard.current_state - def loop(self): - """ Keeps updating the DSD and publish its current state. - All the forwarding of joint goals is directly done in the callbacks to reduce latency. """ - if self.blackboard.shut_down_request and not self.simulation_active: - self.on_shutdown_hook() - else: - loop_start_time = self.node.get_clock().now() - #can happen in simulation due to bad implementation in rclpy - if (self.last_loop_start_time != loop_start_time): - self.last_loop_start_time = loop_start_time - if self.hcm_deactivated: - self.blackboard.current_state = RobotControlState.CONTROLLABLE - else: - try: - self.dsd.update() - except IndexError: - # this error will happen during shutdown procedure, just ignore it - pass - - def on_shutdown_hook(self): - if not self.blackboard: - return - # we got external shutdown, tell it to the DSD, it will handle it - self.blackboard.shut_down_request = True - self.node.get_logger().warn("You're stopping the HCM. The robot will sit down and power off its motors.") - speak("Stopping HCM", self.blackboard.speak_publisher, priority=50) - # now wait for it finishing the shutdown procedure - while not self.blackboard.current_state == RobotControlState.HCM_OFF: - # we still have to update everything - self.dsd.update() - self.hcm_state_publisher.publish(self.blackboard.current_state) - self.node.get_clock().sleep_for(Duration(seconds=0.01)) - - def set_last_animation_goal_time(self, time_msg_serialized): - self.blackboard.last_animation_goal_time = deserialize_message(time_msg_serialized, TimeMsg) + # The following methods are used to set the blackboard values from the cpp part - def set_animation_requested(self, animation_requested): + def set_animation_requested(self, animation_requested: bool): self.blackboard.animation_requested = animation_requested - def set_external_animation_running(self, running): + def set_external_animation_running(self, running: bool): self.blackboard.external_animation_running = running - def set_record_active(self, active): + def set_record_active(self, active: bool): self.blackboard.record_active = active - def set_last_walking_goal_time(self, time_msg_serialized): + def set_last_animation_goal_time(self, time_msg_serialized: bytes): + self.blackboard.last_animation_goal_time = deserialize_message(time_msg_serialized, TimeMsg) + + def set_last_walking_goal_time(self, time_msg_serialized: bytes): self.blackboard.last_walking_goal_time = Time.from_msg(deserialize_message(time_msg_serialized, TimeMsg)) - def set_last_motor_update_time(self, time_msg_serialized): + def set_last_motor_update_time(self, time_msg_serialized: bytes): self.blackboard.last_motor_update_time = deserialize_message(time_msg_serialized, TimeMsg) - def set_current_joint_state(self, joint_state_msg_serialized): + def set_current_joint_state(self, joint_state_msg_serialized: bytes): self.blackboard.previous_joint_state = self.blackboard.current_joint_state self.blackboard.current_joint_state = deserialize_message(joint_state_msg_serialized, JointState) - def set_pressure_left(self, pressure_msg_serialized): + def set_pressure_left(self, pressure_msg_serialized: bytes): msg: FootPressure = deserialize_message(pressure_msg_serialized, FootPressure) self.blackboard.pressures[0] = msg.left_front self.blackboard.pressures[1] = msg.left_back self.blackboard.pressures[2] = msg.right_front self.blackboard.pressures[3] = msg.right_back - def set_pressure_right(self, pressure_msg_serialized): + def set_pressure_right(self, pressure_msg_serialized: bytes): msg: FootPressure = deserialize_message(pressure_msg_serialized, FootPressure) self.blackboard.pressures[4] = msg.left_front self.blackboard.pressures[5] = msg.left_back self.blackboard.pressures[6] = msg.right_front self.blackboard.pressures[7] = msg.right_back - def set_imu(self, imu_msg_serialized): + def set_imu(self, imu_msg_serialized: bytes): msg: Imu = deserialize_message(imu_msg_serialized, Imu) self.blackboard.accel = numpify(msg.linear_acceleration) diff --git a/bitbots_hcm/config/hcm_wolfgang.yaml b/bitbots_hcm/config/hcm_wolfgang.yaml index c0659c0f8..dd5cfe74d 100644 --- a/bitbots_hcm/config/hcm_wolfgang.yaml +++ b/bitbots_hcm/config/hcm_wolfgang.yaml @@ -1,34 +1,23 @@ /**: ros__parameters: - #Pressure sensors + # Pressure sensors pressure_sensors_installed: False - foot_zero_service: "set_foot_zero" + + # IMU + imu_timeout_duration: 0.5 # time without messages from the IMU till error is produced [s] # Motors motor_off_time: 30000000.0 # time of no use or updates when the hcm goes to soft off motor_timeout_duration: 0.5 # time without messages from the servos till error is produced [s] - imu_timeout_duration: 0.5 # time without messages from the IMU till error is produced [s] - #Animations anim_server_wait_time: 1.0 # time the hcm waits for animation server animations: - walkready: "walkready" - walkready_sim: "walkready_sim" falling_front: "falling_front" falling_back: "falling_back" falling_left: "falling_left" falling_right: "falling_right" - stand_up_front: "stand_up_front" - stand_up_back: "stand_up_back" - stand_up_left: "turning_back_left" - stand_up_right: "turning_back_right" - sit_down: "sit" - penalty: "walkready" - motor_off: "sit" - init: "init" anim_package: "wolfgang_animations" - walkready_pose_threshold: 50.0 # [deg] # Falling stand_up_active: true # enables the robot to stand up automatically diff --git a/bitbots_hcm/src/hcm.cpp b/bitbots_hcm/src/hcm.cpp index cf7228eb6..ae8454660 100644 --- a/bitbots_hcm/src/hcm.cpp +++ b/bitbots_hcm/src/hcm.cpp @@ -202,7 +202,7 @@ class HCM_CPP : public rclcpp::Node { current_imu_ = msg; } - void loop() { + void tick() { // update all input to the HCM hcm_py_.attr("set_imu")(ros2_python_extension::toPython(current_imu_)); hcm_py_.attr("set_pressure_left")(ros2_python_extension::toPython<bitbots_msgs::msg::FootPressure>(current_pressure_left_)); @@ -215,7 +215,7 @@ class HCM_CPP : public rclcpp::Node { hcm_py_.attr("set_animation_requested")(animation_requested_); hcm_py_.attr("set_last_animation_goal_time")(ros2_python_extension::toPython<builtin_interfaces::msg::Time>(last_animation_goal_time_)); // run HCM - hcm_py_.attr("loop")(); + hcm_py_.attr("tick")(); // update current HCM state for joint mutex py::object result = hcm_py_.attr("get_state")(); current_state_ = result.cast<int>(); @@ -277,7 +277,7 @@ int main(int argc, char** argv) { auto current_time = node->get_clock()->now(); if (current_time > last_time) { last_time = current_time; - node->loop(); + node->tick(); rate.sleep(); } // really short sleep to not waste cpu time From fb911c4754b98d8d8a0d3f6c2f3fac81f213e3ce Mon Sep 17 00:00:00 2001 From: Florian Vahl <git@flova.de> Date: Tue, 12 Sep 2023 19:37:11 +0200 Subject: [PATCH 07/74] Cleanup parameters --- bitbots_hcm/config/hcm_wolfgang.yaml | 29 +++++++--------------------- 1 file changed, 7 insertions(+), 22 deletions(-) diff --git a/bitbots_hcm/config/hcm_wolfgang.yaml b/bitbots_hcm/config/hcm_wolfgang.yaml index dd5cfe74d..991a323ef 100644 --- a/bitbots_hcm/config/hcm_wolfgang.yaml +++ b/bitbots_hcm/config/hcm_wolfgang.yaml @@ -20,35 +20,20 @@ anim_package: "wolfgang_animations" # Falling - stand_up_active: true # enables the robot to stand up automatically - falling_active: true # enables the check for falling and coresponding counter meassurements - #Grenzwerte schärfer --> fruehere Reaktion aber haeufigere Fehlinterpretation, zb. beim Laufen - #Grenzwerte sanfter --> zu spaete Raktion + stand_up_active: true # Enables the robot to stand up automatically + falling_active: true # Enables the check for falling and coresponding counter meassurements + # Threshold tighter --> earlier reaction but more false positives, e.g. while walking + # Threshold softer --> too late reaction falling_thresh_gyro_pitch: 7.0 # > gyroY falling_thresh_gyro_roll: 7.0 # > gyroX falling_thresh_orient_roll: 60.0 # > Point of no return in degrees falling_thresh_orient_pitch: 45.0 # > Point of no return in degrees - # smoothing threshold for classifier + # Duration in seconds in which the robot has to be in a falling state to trigger the fall smooth_threshold: 0.04 + # Fallen fallen_orientation_thresh: 60.0 # Lean (degrees) after which we consider the robot fallen on this side fallen_angular_velocity_thresh: 0.2 # Angular velocity (rad/s) under which we consider the robot as not moving (the fall is over and we are lying on the ground) + # Pick up pick_up_accel_threshold: 7.0 - - falling: - - #falling animations - "falling_front": "falling_front" - "falling_back": "falling_back" - "falling_left": "falling_left" - "falling_right": "falling_right" - - "wolfgang": - - #Grenzwerte müssen auf härterem boden auch härter eingestellt werden, - #dies erfolgt mit dem boden_koeffizient - "ground_coefficient": 1.0 #WEICH(kunstrasen Spielfeld)= 1.0 , HART(teppich Spielfeld)= 1.25 - - #false = motoren werden bei fallerkennung abgeschaltet - "dyn_falling_active": true From 33621e3938947399fecc2d6673d9f7b470172f1b Mon Sep 17 00:00:00 2001 From: Florian Vahl <git@flova.de> Date: Tue, 12 Sep 2023 19:45:41 +0200 Subject: [PATCH 08/74] Update docs --- bitbots_hcm/docs/index.rst | 22 ++++++---------------- 1 file changed, 6 insertions(+), 16 deletions(-) diff --git a/bitbots_hcm/docs/index.rst b/bitbots_hcm/docs/index.rst index 3398e2ed4..e2ec73c46 100644 --- a/bitbots_hcm/docs/index.rst +++ b/bitbots_hcm/docs/index.rst @@ -53,7 +53,7 @@ How the HCM works The HCM uses a DSD to decide what the state of the robot is and to decide on the actions that should be performed. This state is then published as a ROS message (`/robot_state`). -To see which state is which, you have to look at the message definition (`rosmsg show humanoid_league_msgs/RobotControlState`). +To see which state is which, you have to look at the message definition (`ros2 interface show humanoid_league_msgs/msg/RobotControlState`). The HCM subscribes to all joint goal topics of the different software parts. Dependend on its state, it forwards the goals or not. @@ -62,21 +62,11 @@ Sensor data is not influenced by the HCM, since it does not need to be mutexed. How the HCM is started ---------------------- -The easiest way to start the HCM is to launch the complete motion (`roslaunch bitbots_bringup motion_standalone.launch`). +The easiest way to start the HCM is to launch the complete motion (`ros2 launch bitbots_bringup motion_standalone.launch`). For debugging it is sometimes better to launch the single parts by themselves. -The HCM needs the animation server (`roslaunch bitbots_animation_server animation.launch`) to work because it is needed to perform falling and stand up animations. -To be able to actually control the hardware, ros_control needs to run (`roslaunch bitbots_ros_control ros_control_standalone.launch`). -Finally launch the HCM itself (`roslaunch bitbots_hcm hcm_standalone.launch`). - -How to retrain the falling classification ------------------------------------------ - -All necessary scripts are in the `training folder`. Previous labeled datasets can be found `here <https://cloud.mafiasi.de/s/o6YW3eTWXqnLrkt>`_. - -The `label.py` script allows to label either online on a robot or on a prerecorded rosbag. - -The `train.py` script allows to train the classifier. - +The HCM needs the animation server (`ros2 launch bitbots_animation_server animation.launch`) to work because it is needed to perform falling and stand up animations. +To be able to actually control the hardware, ros_control needs to run (`ros2 launch bitbots_ros_control ros_control_standalone.launch`). +Finally launch the HCM itself (`ros2 launch bitbots_hcm hcm_standalone.launch`). What to do when it does not work @@ -84,7 +74,7 @@ What to do when it does not work 1. Is `ros_control` running? Do you recieve joint states (`/joint_states`) or IMU data (`/imu/data_raw`)? 2. What is the state of the HCM (`rostopic echo /robot_state`)? The number has to be matched with the message - description (`rosmsg show humanoid_league_msgs/RobotControlState`). + description (`ros2 interface show humanoid_league_msgs/msg/RobotControlState`). 3. The visualization of the DSD is possible with the standard DSD visualization using the rqt plugin. There you can see exactly which decision is responsible for the current behavior and then you can look into the code. From 757fc3c923be188f6baa8424aad2cb78c13b3e3f Mon Sep 17 00:00:00 2001 From: Florian Vahl <git@flova.de> Date: Tue, 12 Sep 2023 19:45:54 +0200 Subject: [PATCH 09/74] Use enum values --- bitbots_hcm/scripts/pause.py | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/bitbots_hcm/scripts/pause.py b/bitbots_hcm/scripts/pause.py index 48adeccc6..198db7649 100755 --- a/bitbots_hcm/scripts/pause.py +++ b/bitbots_hcm/scripts/pause.py @@ -6,9 +6,7 @@ from std_msgs.msg import Bool from bitbots_msgs.srv import ManualPenalize -from humanoid_league_msgs.msg import GameState from humanoid_league_speaker.speaker import speak -from rclpy.executors import ExternalShutdownException class Pause(object): @@ -29,21 +27,14 @@ def __init__(self): self.pause_publisher = self.node.create_publisher(Bool, "pause", 10) # todo latch self.speak_publisher = self.node.create_publisher(Audio, "speak", 10) - while rclpy.ok(): - try: - rclpy.spin_once(self.node) - except (ExternalShutdownException, KeyboardInterrupt): - exit(0) + rclpy.spin(self.node) - def manual_update(self, req:ManualPenalize.Request, resp:ManualPenalize.Response): - if req.penalize == 0: - # off + def manual_update(self, req: ManualPenalize.Request, resp: ManualPenalize.Response): + if req.penalize == ManualPenalize.Request.OFF: self.penalty_manual = False - elif req.penalize == 1: - # on + elif req.penalize == ManualPenalize.Request.ON: self.penalty_manual = True - elif req.penalize == 2: - # switch + elif req.penalize == ManualPenalize.Request.SWITCH: self.penalty_manual = not self.penalty_manual else: self.node.get_logger().error("Manual penalize call with unspecified request") From d688bbd5637cc151f6ef3699757a6ead387cf743 Mon Sep 17 00:00:00 2001 From: Florian Vahl <git@flova.de> Date: Wed, 13 Sep 2023 19:34:10 +0200 Subject: [PATCH 10/74] Cleanup actions --- .../bitbots_hcm/hcm_dsd/actions/__init__.py | 13 +++ .../hcm_dsd/actions/cancel_goals.py | 7 +- .../hcm_dsd/actions/change_motor_power.py | 7 +- .../hcm_dsd/actions/play_animation.py | 40 +++++---- .../hcm_dsd/actions/set_foot_zero.py | 11 +-- .../bitbots_hcm/hcm_dsd/actions/state.py | 89 +++++++++++++++++++ .../bitbots_hcm/hcm_dsd/actions/stay.py | 54 ----------- .../hcm_dsd/actions/stop_walking.py | 31 +------ .../bitbots_hcm/hcm_dsd/actions/wait.py | 24 ++--- .../bitbots_hcm/hcm_dsd/actions/wait_for.py | 56 +++--------- 10 files changed, 158 insertions(+), 174 deletions(-) create mode 100644 bitbots_hcm/bitbots_hcm/hcm_dsd/actions/state.py delete mode 100644 bitbots_hcm/bitbots_hcm/hcm_dsd/actions/stay.py diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/__init__.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/__init__.py index e69de29bb..997192bdf 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/__init__.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/__init__.py @@ -0,0 +1,13 @@ +from bitbots_hcm.hcm_dsd.hcm_blackboard import HcmBlackboard + +from dynamic_stack_decider.abstract_action_element import \ + AbstractActionElement + + +class AbstractHCMActionElement(AbstractActionElement): + """ + AbstractHCMActionElement with a hcm blackboard as its blackboard + """ + def __init__(self, blackboard, dsd, parameters=None): + super().__init__(blackboard, dsd, parameters) + self.blackboard: HcmBlackboard diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/cancel_goals.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/cancel_goals.py index 2ea250d58..f8eb177e5 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/cancel_goals.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/cancel_goals.py @@ -1,16 +1,13 @@ -from bitbots_hcm.hcm_dsd.hcm_blackboard import HcmBlackboard +from bitbots_hcm.hcm_dsd.actions import AbstractHCMActionElement -from dynamic_stack_decider.abstract_action_element import AbstractActionElement - -class CancelGoals(AbstractActionElement): +class CancelGoals(AbstractHCMActionElement): """ Cancels all animation, dynup and move_base goals """ def __init__(self, blackboard, dsd, parameters=None): super().__init__(blackboard, dsd, parameters) - self.blackboard: HcmBlackboard def perform(self): if self.blackboard.animation_action_current_goal is not None: diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/change_motor_power.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/change_motor_power.py index 4769d1c42..ee01ed493 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/change_motor_power.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/change_motor_power.py @@ -1,17 +1,14 @@ -from bitbots_hcm.hcm_dsd.hcm_blackboard import HcmBlackboard +from bitbots_hcm.hcm_dsd.actions import AbstractHCMActionElement from std_srvs.srv import SetBool -from dynamic_stack_decider.abstract_action_element import AbstractActionElement - -class AbstractChangeMotorPower(AbstractActionElement): +class AbstractChangeMotorPower(AbstractHCMActionElement): """ Switches motor power using the service call of the hardware interface. """ def __init__(self, blackboard, dsd, parameters=None): super().__init__(blackboard, dsd, parameters) - self.blackboard: HcmBlackboard if not self.blackboard.visualization_active and not self.blackboard.simulation_active: # In visualization and simulation, we cannot disable motors diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/play_animation.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/play_animation.py index 6a72b94c8..2b8b22f34 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/play_animation.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/play_animation.py @@ -1,21 +1,18 @@ +import rclpy from action_msgs.msg import GoalStatus -from bitbots_hcm.hcm_dsd.hcm_blackboard import HcmBlackboard +from bitbots_hcm.hcm_dsd.actions import AbstractHCMActionElement -import rclpy from bitbots_msgs.action import Dynup -from dynamic_stack_decider.abstract_action_element import AbstractActionElement from humanoid_league_msgs.action import PlayAnimation -from humanoid_league_msgs.msg import RobotControlState -class AbstractPlayAnimation(AbstractActionElement): +class AbstractPlayAnimation(AbstractHCMActionElement): """ Abstract class to create actions for playing animations """ def __init__(self, blackboard, dsd, parameters=None): super().__init__(blackboard, dsd, parameters) - self.blackboard: HcmBlackboard self.first_perform = True def perform(self, reevaluate=False): @@ -91,43 +88,49 @@ def animation_finished(self): class PlayAnimationFallingLeft(AbstractPlayAnimation): def chose_animation(self): self.blackboard.node.get_logger().info("PLAYING FALLING LEFT ANIMATION") - return self.blackboard.falling_animation_left + return self.blackboard.animation_name_falling_left class PlayAnimationFallingRight(AbstractPlayAnimation): def chose_animation(self): self.blackboard.node.get_logger().info("PLAYING FALLING RIGHT ANIMATION") - return self.blackboard.falling_animation_right + return self.blackboard.animation_name_falling_right class PlayAnimationFallingFront(AbstractPlayAnimation): def chose_animation(self): self.blackboard.node.get_logger().info("PLAYING FALLING FRONT ANIMATION") - return self.blackboard.falling_animation_front + return self.blackboard.animation_name_falling_front class PlayAnimationFallingBack(AbstractPlayAnimation): def chose_animation(self): self.blackboard.node.get_logger().info("PLAYING FALLING BACK ANIMATION") - return self.blackboard.falling_animation_back + return self.blackboard.animation_name_falling_back + + +class PlayAnimationTurningBackLeft(AbstractPlayAnimation): + def chose_animation(self): + self.blackboard.node.get_logger().info("TURNING LYING ON THE LEFT SIDE AND TURNING BACK TO GET UP") + return self.blackboard.animation_name_turning_back_left + +class PlayAnimationTurningBackRight(AbstractPlayAnimation): + def chose_animation(self): + self.blackboard.node.get_logger().info("TURNING LYING ON THE RIGHT SIDE AND TURNING BACK TO GET UP") + return self.blackboard.animation_name_turning_back_right -class PlayAnimationDynup(AbstractActionElement): +class PlayAnimationDynup(AbstractHCMActionElement): def __init__(self, blackboard, dsd, parameters=None): super().__init__(blackboard, dsd, parameters) - self.blackboard: HcmBlackboard self.direction = parameters.get('direction') self.first_perform = True - # A parameter 'initial' is passed when dynup is called during the startup phase, - # in this case we do not want to set the state to GETTING_UP. - initial = parameters.get('initial', False) - if not initial: - self.blackboard.current_state = RobotControlState.GETTING_UP - def perform(self, reevaluate=False): # deactivate falling since it will be wrongly detected self.do_not_reevaluate() + + # We only want to execute this once if self.first_perform: # get the animation that should be played # defined by implementations of this abstract class @@ -167,6 +170,7 @@ def start_animation(self): else: self.blackboard.node.get_logger().warn("Dynup server did not start.") return False + goal = Dynup.Goal() goal.direction = self.direction self.blackboard.dynup_action_current_goal = self.blackboard.dynup_action_client.send_goal_async(goal) diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/set_foot_zero.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/set_foot_zero.py index 0081e1d50..95ce01446 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/set_foot_zero.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/set_foot_zero.py @@ -1,15 +1,16 @@ -from bitbots_hcm.hcm_dsd.hcm_blackboard import HcmBlackboard +from bitbots_hcm.hcm_dsd.actions import AbstractHCMActionElement -from dynamic_stack_decider.abstract_action_element import AbstractActionElement - -class SetFootZero(AbstractActionElement): +class SetFootZero(AbstractHCMActionElement): def __init__(self, blackboard, dsd, parameters=None): super().__init__(blackboard, dsd, parameters) - self.blackboard: HcmBlackboard self.first_perform = True def perform(self, reevaluate=False): + # Just to be sure, we do not want to reevaluate + self.do_not_reevaluate() + + # We only want to execute this once if self.first_perform: # Executing this once is sufficient self.first_perform = False diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/state.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/state.py new file mode 100644 index 000000000..ab6d50113 --- /dev/null +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/state.py @@ -0,0 +1,89 @@ +from bitbots_hcm.hcm_dsd.actions import AbstractHCMActionElement + +from humanoid_league_msgs.msg import RobotControlState + + +class AbstractRobotState(AbstractHCMActionElement): + """ + Abstract class to create actions which just stay on top of the stack + and set the robot state accordingly. + """ + def get_state(self) -> RobotControlState: + """ + Returns the state which should be set. This will be implemented by the subclasses. + """ + raise NotImplementedError + + def perform(self, reevaluate=False): + # Just to be sure, we do not reevaluate + self.do_not_reevaluate() + # Set the state + self.blackboard.current_state = self.get_state() + # Our job is done, we can pop + self.pop() + + + +class RobotStateStartup(AbstractRobotState): + def get_state(self) -> RobotControlState: + return RobotControlState.STARTUP + + +class RobotStateControllable(AbstractRobotState): + def get_state(self) -> RobotControlState: + return RobotControlState.CONTROLLABLE + + +class RobotStateWalking(AbstractRobotState): + def get_state(self) -> RobotControlState: + return RobotControlState.WALKING + + +class RobotStateAnimationRunning(AbstractRobotState): + def get_state(self) -> RobotControlState: + return RobotControlState.ANIMATION_RUNNING + + +class RobotStatePickedUp(AbstractRobotState): + def get_state(self) -> RobotControlState: + return RobotControlState.PICKED_UP + + +class RobotStateFalling(AbstractRobotState): + def get_state(self) -> RobotControlState: + return RobotControlState.FALLING + + +class RobotStateFallen(AbstractRobotState): + def get_state(self) -> RobotControlState: + return RobotControlState.FALLEN + + +class RobotStateGettingUp(AbstractRobotState): + def get_state(self) -> RobotControlState: + return RobotControlState.GETTING_UP + + +class RobotStatePenalty(AbstractRobotState): + def get_state(self) -> RobotControlState: + return RobotControlState.PENALTY + + +class RobotStateRecord(AbstractRobotState): + def get_state(self) -> RobotControlState: + return RobotControlState.RECORD + + +class RobotStateKicking(AbstractRobotState): + def get_state(self) -> RobotControlState: + return RobotControlState.KICKING + + +class RobotStateHardwareProblem(AbstractRobotState): + def get_state(self) -> RobotControlState: + return RobotControlState.HARDWARE_PROBLEM + + +class RobotStateMotorOff(AbstractRobotState): + def get_state(self) -> RobotControlState: + return RobotControlState.MOTOR_OFF diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/stay.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/stay.py deleted file mode 100644 index 63a6a2139..000000000 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/stay.py +++ /dev/null @@ -1,54 +0,0 @@ -from bitbots_hcm.hcm_dsd.hcm_blackboard import HcmBlackboard - -from dynamic_stack_decider.abstract_action_element import AbstractActionElement -from humanoid_league_msgs.msg import RobotControlState - - -class AbstractStay(AbstractActionElement): - """ - Abstract class to create actions which just stay on top of the stack. - This can be used to stay in a certain state till some precondition changes. - Implementations can be used to change the name - """ - - def __init__(self, blackboard, dsd, parameters=None): - super().__init__(blackboard, dsd, parameters) - self.blackboard: HcmBlackboard - - def perform(self): - # just do nothing - return - - -class StayControlable(AbstractStay): - def perform(self): - self.blackboard.current_state = RobotControlState.CONTROLLABLE - - -class StayWalking(AbstractStay): - pass - - -class StayAnimationRunning(AbstractStay): - pass - - -class StayPickedUp(AbstractStay): - pass - - -class StayMotorsOff(AbstractStay): - pass - - -class StayStopped(AbstractStay): - def perform(self): - self.blackboard.current_state = RobotControlState.PENALTY - - -class StayRecord(AbstractStay): - pass - - -class StayKicking(AbstractStay): - pass diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/stop_walking.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/stop_walking.py index 49f6c72a6..feffaf860 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/stop_walking.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/stop_walking.py @@ -1,40 +1,13 @@ -from bitbots_hcm.hcm_dsd.hcm_blackboard import HcmBlackboard +from bitbots_hcm.hcm_dsd.actions import AbstractHCMActionElement from geometry_msgs.msg import Twist -from dynamic_stack_decider.abstract_action_element import AbstractActionElement -from humanoid_league_msgs.msg import RobotControlState - -class StopWalking(AbstractActionElement): +class StopWalking(AbstractHCMActionElement): """ Stop the walking """ - def __init__(self, blackboard, dsd, parameters=None): - super().__init__(blackboard, dsd, parameters) - self.blackboard: HcmBlackboard - - def perform(self, reevaluate=False): - msg = Twist() - msg.angular.x = -1.0 - self.blackboard.walk_pub.publish(msg) - self.pop() - - -class ForceStopWalking(AbstractActionElement): - """ - Stop the walking and set the state to penalty - """ - def __init__(self, blackboard, dsd, parameters=None): - super().__init__(blackboard, dsd, parameters) - self.blackboard: HcmBlackboard - def perform(self, reevaluate=False): msg = Twist() - msg.linear.x = 0.0 - msg.linear.y = 0.0 - msg.angular.z = 0.0 msg.angular.x = -1.0 self.blackboard.walk_pub.publish(msg) - self.blackboard.current_state = RobotControlState.PENALTY - # We can pop immediately because the state is PENALTY on no walking messages will be passed self.pop() diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/wait.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/wait.py index 965fcf562..a2defafbe 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/wait.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/wait.py @@ -7,31 +7,31 @@ Just waits for something (i.e. that preconditions will be fullfilled) """ -from bitbots_hcm.hcm_dsd.hcm_blackboard import HcmBlackboard +from bitbots_hcm.hcm_dsd.actions import AbstractHCMActionElement -from dynamic_stack_decider.abstract_action_element import AbstractActionElement - -class Wait(AbstractActionElement): +class Wait(AbstractHCMActionElement): """ - This action waits a specified time before it pops itself + This action does nothing. If a time is given, it will wait for that time.before it pops itself. """ def __init__(self, blackboard, dsd, parameters=None): """ :param parameters['time']: Time to wait in seconds """ - super().__init__(blackboard, dsd) - self.blackboard: HcmBlackboard - self.time = float(self.blackboard.node.get_clock().now().seconds_nanoseconds()[0] \ - + self.blackboard.node.get_clock().now().seconds_nanoseconds()[1]/1e9) \ - + float(parameters['time']) + super().__init__(blackboard, dsd, parameters) + self.duration = parameters.get("time", None) + self.start_time = self.blackboard.node.get_clock().now().nanoseconds / 1e9 def perform(self, reevaluate=False): """ Only pop when the wait-time has elapsed """ - if self.time < float(self.blackboard.node.get_clock().now().seconds_nanoseconds()[0] \ - + self.blackboard.node.get_clock().now().seconds_nanoseconds()[1]/1e9): + # Return directly if we want to wait infinitely + if self.duration is None: + return + + # Pop if the time has elapsed + if self.blackboard.node.get_clock().now().nanoseconds / 1e9 > self.start_time + self.duration: self.pop() diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/wait_for.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/wait_for.py index 6045b2df9..cc7bc5df9 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/wait_for.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/wait_for.py @@ -1,56 +1,31 @@ -from bitbots_hcm.hcm_dsd.hcm_blackboard import HcmBlackboard +from bitbots_hcm.hcm_dsd.actions import AbstractHCMActionElement -from dynamic_stack_decider.abstract_action_element import AbstractActionElement - -class WaitForIMUStartup(AbstractActionElement): +class WaitForIMUStartup(AbstractHCMActionElement): """ Waits for the IMU to connect and does not complain as we are still in start up. """ + pass - def __init__(self, blackboard, dsd, parameters=None): - super().__init__(blackboard, dsd, parameters) - self.blackboard: HcmBlackboard - - def perform(self, reevaluate=False): - pass - - -class WaitForIMU(AbstractActionElement): +class WaitForIMU(AbstractHCMActionElement): """ Waits for the IMU to connect and publishes warnings while doing so """ - - def __init__(self, blackboard, dsd, parameters=None): - super().__init__(blackboard, dsd, parameters) - self.blackboard: HcmBlackboard - def perform(self, reevaluate=False): self.blackboard.node.get_logger().warn("HCM gets no IMU data. Waiting for IMU to connect.", throttle_duration_sec=10) -class WaitForPressureStartup(AbstractActionElement): +class WaitForPressureStartup(AbstractHCMActionElement): """ Waits for the pressure sensors to connect and not complain since we are still starting up. """ + pass - def __init__(self, blackboard, dsd, parameters=None): - super().__init__(blackboard, dsd, parameters) - self.blackboard: HcmBlackboard - - def perform(self, reevaluate=False): - pass - -class WaitForPressure(AbstractActionElement): +class WaitForPressure(AbstractHCMActionElement): """ Waits for the pressure sensors to connect and publishes warnings while doing so """ - - def __init__(self, blackboard, dsd, parameters=None): - super().__init__(blackboard, dsd, parameters) - self.blackboard: HcmBlackboard - def perform(self, reevaluate=False): self.blackboard.node.get_logger().warn( "HCM gets no correct pressure data. Waiting for pressure sensors to connect.\n" @@ -61,28 +36,17 @@ def perform(self, reevaluate=False): "set the visualization_active parameter to True.", throttle_duration_sec=30) -class WaitForMotorStartup(AbstractActionElement): +class WaitForMotorStartup(AbstractHCMActionElement): """ Waits for the motors on startup without complaining if it takes a moment. """ - - def __init__(self, blackboard, dsd, parameters=None): - super().__init__(blackboard, dsd, parameters) - self.blackboard: HcmBlackboard - - def perform(self, reevaluate=False): - pass + pass -class WaitForMotors(AbstractActionElement): +class WaitForMotors(AbstractHCMActionElement): """ Waits for the motors to connect and publishes warnings while doing so """ - - def __init__(self, blackboard, dsd, parameters=None): - super().__init__(blackboard, dsd, parameters) - self.blackboard: HcmBlackboard - def perform(self, reevaluate=False): self.blackboard.node.get_logger().warn( "HCM gets no data from the motors (/joint_states). Waiting for the motors to " From b9a881abf2d40a2639a46624425892ded9d4341e Mon Sep 17 00:00:00 2001 From: Florian Vahl <git@flova.de> Date: Wed, 13 Sep 2023 19:35:10 +0200 Subject: [PATCH 11/74] Move robot state modifications to own action --- .../hcm_dsd/decisions/animation.py | 2 - .../hcm_dsd/decisions/check_hardware.py | 5 -- .../bitbots_hcm/hcm_dsd/decisions/fallen.py | 4 -- .../bitbots_hcm/hcm_dsd/decisions/falling.py | 4 -- .../bitbots_hcm/hcm_dsd/decisions/kicking.py | 5 +- .../bitbots_hcm/hcm_dsd/decisions/pickup.py | 1 - .../bitbots_hcm/hcm_dsd/decisions/startup.py | 1 - .../bitbots_hcm/hcm_dsd/decisions/walking.py | 14 ++--- bitbots_hcm/bitbots_hcm/hcm_dsd/hcm.dsd | 57 +++++++++---------- .../bitbots_hcm/hcm_dsd/hcm_blackboard.py | 18 +++--- bitbots_hcm/config/hcm_wolfgang.yaml | 2 + 11 files changed, 44 insertions(+), 69 deletions(-) diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/animation.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/animation.py index 6fd4e9ca3..d07c95880 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/animation.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/animation.py @@ -10,7 +10,6 @@ class Record(AbstractHCMDecisionElement): def perform(self, reevaluate=False): if self.blackboard.record_active: - self.blackboard.current_state = RobotControlState.RECORD return "RECORD_ACTIVE" else: # robot is not recording @@ -27,7 +26,6 @@ class PlayingExternalAnimation(AbstractHCMDecisionElement): def perform(self, reevaluate=False): if self.blackboard.external_animation_running: - self.blackboard.current_state = RobotControlState.ANIMATION_RUNNING return "ANIMATION_RUNNING" else: return "FREE" diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/check_hardware.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/check_hardware.py index 1235556e2..7b02632eb 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/check_hardware.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/check_hardware.py @@ -49,7 +49,6 @@ def perform(self, reevaluate=False): self.blackboard.motor_off_time) + " seconds. Will shut down the motors and wait for commands.", throttle_duration_sec=5) self.publish_debug_data("Time since last motor goals", self.blackboard.node.get_clock().now().nanoseconds / 1e9 - self.blackboard.last_motor_goal_time.nanoseconds / 1e9) - self.blackboard.current_state = RobotControlState.MOTOR_OFF # we do an action sequence to turn off the motors and stay in motor off return "TURN_OFF" @@ -64,7 +63,6 @@ def perform(self, reevaluate=False): # tell that we have a hardware problem self.had_problem = True # wait for motors to connect - self.blackboard.current_state = RobotControlState.HARDWARE_PROBLEM return "PROBLEM" else: # we have to turn the motors on @@ -119,7 +117,6 @@ def perform(self, reevaluate=False): # wait for the IMU to start return "IMU_NOT_STARTED" else: - self.blackboard.current_state = RobotControlState.HARDWARE_PROBLEM self.had_problem = True return "PROBLEM" @@ -160,10 +157,8 @@ def perform(self, reevaluate=False): if self.blackboard.current_state == RobotControlState.STARTUP and self.blackboard.node.get_clock().now().nanoseconds / 1e9 - \ self.blackboard.start_time.nanoseconds / 1e9 < 10: # wait for the pressure sensors to start - self.blackboard.current_state = RobotControlState.STARTUP return "PRESSURE_NOT_STARTED" else: - self.blackboard.current_state = RobotControlState.HARDWARE_PROBLEM return "PROBLEM" if self.had_problem: diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/fallen.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/fallen.py index c1c7f1452..147b8b19f 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/fallen.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/fallen.py @@ -36,22 +36,18 @@ def perform(self, reevaluate=False): # Decides which side is facing downwards. if fused_pitch > self.fallen_orientation_thresh: self.blackboard.node.get_logger().info("FALLEN TO THE FRONT") - self.blackboard.current_state = RobotControlState.FALLEN return "FALLEN_FRONT" if fused_pitch < -self.fallen_orientation_thresh: self.blackboard.node.get_logger().info("FALLEN TO THE BACK") - self.blackboard.current_state = RobotControlState.FALLEN return "FALLEN_BACK" if fused_roll > self.fallen_orientation_thresh: self.blackboard.node.get_logger().info("FALLEN TO THE RIGHT") - self.blackboard.current_state = RobotControlState.FALLEN return "FALLEN_RIGHT" if fused_roll < -self.fallen_orientation_thresh: self.blackboard.node.get_logger().info("FALLEN TO THE LEFT") - self.blackboard.current_state = RobotControlState.FALLEN return "FALLEN_LEFT" return "NOT_FALLEN" diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/falling.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/falling.py index 3602e221c..1021e13ad 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/falling.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/falling.py @@ -97,10 +97,6 @@ def perform(self, reevaluate=False): if FallDirection.STABLE in results_list: result = FallDirection.STABLE - # Check if we are falling at all - if result != FallDirection.STABLE and not reevaluate: - self.blackboard.current_state = RobotControlState.FALLING - # Return the appropriate result if result == FallDirection.STABLE: return "NOT_FALLING" diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/kicking.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/kicking.py index 660208a01..dcad299f8 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/kicking.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/kicking.py @@ -3,15 +3,14 @@ from humanoid_league_msgs.msg import RobotControlState -class Kicking(AbstractHCMDecisionElement): +class RecentKickGoals(AbstractHCMDecisionElement): """ - Decides if the robot is currently kicking + Decides if the kick is currently sending joint commands """ def perform(self, reevaluate=False): if self.blackboard.last_kick_feedback is not None and \ (self.blackboard.node.get_clock().now() - self.blackboard.last_kick_feedback).nanoseconds / 1e9 < 0.2: - self.blackboard.current_state = RobotControlState.KICKING return 'KICKING' else: return 'NOT_KICKING' diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/pickup.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/pickup.py index 4c50e8c08..be34ae8fa 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/pickup.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/pickup.py @@ -18,7 +18,6 @@ def perform(self, reevaluate=False): sum(self.blackboard.pressures) < 10 and \ abs(self.blackboard.smooth_accel[0]) < self.blackboard.pickup_accel_threshold and \ abs(self.blackboard.smooth_accel[1]) < self.blackboard.pickup_accel_threshold: - self.blackboard.current_state = RobotControlState.PICKED_UP if not reevaluate: speak("Picked up!", self.blackboard.speak_publisher, priority=50) # we do an action sequence to go to walkready and stay in picked up state diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/startup.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/startup.py index d276c263a..8cebd08d4 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/startup.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/startup.py @@ -16,7 +16,6 @@ def __init__(self, blackboard, dsd, parameters=None): def perform(self, reevaluate=False): if self.is_initial: self.is_initial = False - self.blackboard.current_state = RobotControlState.STARTUP return "START_UP" return "RUNNING" diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/walking.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/walking.py index fb02864f8..51c9142fc 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/walking.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/walking.py @@ -3,21 +3,15 @@ from humanoid_league_msgs.msg import RobotControlState -class Walking(AbstractHCMDecisionElement): +class RecentWalkingGoals(AbstractHCMDecisionElement): """ - Decides if the robot is currently walking + Decides if the robot is currently getting joint commands to from the walking node """ def perform(self, reevaluate=False): if self.blackboard.node.get_clock().now().nanoseconds / 1e9 - self.blackboard.last_walking_goal_time.nanoseconds / 1e9 < 0.1: - self.blackboard.current_state = RobotControlState.WALKING - if self.blackboard.animation_requested: - self.blackboard.animation_requested = False - # we are walking but we have to stop to play an animation - return "STOP_WALKING" - else: - # we are walking and can stay like this - return "STAY_WALKING" + # we are walking and can stay like this + return "STAY_WALKING" else: return "NOT_WALKING" diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/hcm.dsd b/bitbots_hcm/bitbots_hcm/hcm_dsd/hcm.dsd index 5409a38e0..521f6a743 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/hcm.dsd +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/hcm.dsd @@ -1,41 +1,38 @@ -->HCM $StartHCM - START_UP --> @Wait + time:0.1 + r:false, @PlayAnimationDynup + direction:walkready + initial:true + r:false + START_UP --> @RobotStateStartup, @Wait + time:0.1 + r:false, @PlayAnimationDynup + direction:walkready + r:false RUNNING --> $Stop - STOPPED --> @ForceStopWalking, @PlayAnimationDynup + direction:walkready + initial:true + r:false, @StayStopped + STOPPED --> @CancelGoals, @StopWalking, @PlayAnimationDynup + direction:walkready + r:false, @Wait FREE -->$Record - RECORD_ACTIVE --> @StayRecord + RECORD_ACTIVE --> @RobotStateRecord, @Wait FREE --> $CheckMotors - MOTORS_NOT_STARTED --> @WaitForMotorStartup - OVERLOAD --> @PlayAnimationDynup + direction:descend, @TurnMotorsOff, @StayMotorsOff - PROBLEM --> @WaitForMotors - TURN_OFF --> @PlayAnimationDynup + direction:descend, @TurnMotorsOff, @StayMotorsOff + MOTORS_NOT_STARTED --> @RobotStateStartup, @WaitForMotorStartup + OVERLOAD --> @PlayAnimationDynup + direction:descend, @TurnMotorsOff, @Wait + PROBLEM --> @RobotStateHardwareProblem, @WaitForMotors + TURN_OFF --> @RobotStateMotorOff + @PlayAnimationDynup + direction:descend, @TurnMotorsOff, @Wait TURN_ON --> @TurnMotorsOn, @PlayAnimationDynup + direction:rise OKAY --> $CheckIMU - IMU_NOT_STARTED --> @WaitForIMUStartup - PROBLEM --> @WaitForIMU + IMU_NOT_STARTED --> @RobotStateStartup, @WaitForIMUStartup + PROBLEM --> @RobotStateHardwareProblem, @WaitForIMU OKAY --> $CheckPressureSensor - PRESSURE_NOT_STARTED --> @WaitForPressureStartup - PROBLEM --> @WaitForPressure + PRESSURE_NOT_STARTED --> @RobotStateStartup, @WaitForPressureStartup + PROBLEM --> @RobotStateHardwareProblem, @WaitForPressure OKAY --> $PickedUp - PICKED_UP --> @PlayAnimationDynup + direction:walkready, @StayPickedUp + PICKED_UP --> @RobotStatePickedUp, @PlayAnimationDynup + direction:walkready, @Wait ON_GROUND --> $Fallen - FALLEN_FRONT --> @CancelGoals, @PlayAnimationDynup + direction:front - FALLEN_BACK --> @CancelGoals, @SetFootZero, @PlayAnimationDynup + direction:back - FALLEN_RIGHT --> @CancelGoals, @TurnRightToBack + duration:1.5, @PlayAnimationDynup + direction:back - FALLEN_LEFT --> @CancelGoals, @TurnLeftToBack + duration:1.5, @PlayAnimationDynup + direction:back + FALLEN_FRONT --> @RobotStateFallen, @CancelGoals, @StopWalking, @RobotStateGettingUp, @PlayAnimationDynup + direction:front + FALLEN_BACK --> @RobotStateFallen, @CancelGoals, @StopWalking, @RobotStateGettingUp, @SetFootZero, @PlayAnimationDynup + direction:back + FALLEN_RIGHT --> @RobotStateFallen, @CancelGoals, @StopWalking, @RobotStateGettingUp, @PlayAnimationTurningBackRight + FALLEN_LEFT --> @RobotStateFallen, @CancelGoals, @StopWalking, @RobotStateGettingUp, @PlayAnimationTurningBackLeft NOT_FALLEN --> $Falling - FALLING_LEFT --> @CancelGoals, @FallingPoseLeft + duration:0.5 - FALLING_RIGHT --> @CancelGoals, @FallingPoseRight + duration:0.5 - FALLING_FRONT --> @CancelGoals, @FallingPoseFront + duration:0.5 - FALLING_BACK --> @CancelGoals, @FallingPoseBack + duration:0.5 - NOT_FALLING --> $Sitting - YES --> @PlayAnimationDynup + direction:rise - NO --> $PlayingExternalAnimation - ANIMATION_RUNNING --> @StayAnimationRunning - FREE --> $Walking - STOP_WALKING --> @StopWalking - STAY_WALKING --> @StayWalking - NOT_WALKING --> $Kicking - KICKING --> @StayKicking - NOT_KICKING --> @StayControlable + FALLING_LEFT --> @RobotStateFalling, @CancelGoals, @StopWalking, @PlayAnimationFallingLeft, @Wait + FALLING_RIGHT --> @RobotStateFalling, @CancelGoals, @StopWalking, @PlayAnimationFallingRight, @Wait + FALLING_FRONT --> @RobotStateFalling, @CancelGoals, @StopWalking, @PlayAnimationFallingFront, @Wait + FALLING_BACK --> @RobotStateFalling, @CancelGoals, @StopWalking, @PlayAnimationFallingBack, @Wait + NOT_FALLING --> $PlayingExternalAnimation + ANIMATION_RUNNING --> @StopWalking, @RobotStateAnimationRunning, @Wait + FREE --> $RecentWalkingGoals + STAY_WALKING --> @RobotStateWalking, @Wait + NOT_WALKING --> $RecentKickGoals + KICKING --> @RobotStateKicking, @Wait + NOT_KICKING --> @RobotStateControllable, @Wait diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/hcm_blackboard.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/hcm_blackboard.py index 2f5c36e26..d1a335de1 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/hcm_blackboard.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/hcm_blackboard.py @@ -72,14 +72,14 @@ def __init__(self, node: Node): self.record_active: bool = False # Get animation parameters - self.falling_animation_front = self.node.get_parameter("animations.falling_front").value - self.falling_animation_back = self.node.get_parameter("animations.falling_back").value - self.falling_animation_left = self.node.get_parameter("animations.falling_left").value - self.falling_animation_right = self.node.get_parameter("animations.falling_right").value - - # Motors - - # State + self.animation_name_falling_front: str = self.node.get_parameter("animations.falling_front").value + self.animation_name_falling_back: str = self.node.get_parameter("animations.falling_back").value + self.animation_name_falling_left: str = self.node.get_parameter("animations.falling_left").value + self.animation_name_falling_right: str = self.node.get_parameter("animations.falling_right").value + self.animation_name_turning_back_left: str = self.node.get_parameter("animations.turning_back_left").value + self.animation_name_turning_back_right: str = self.node.get_parameter("animations.turning_back_right").value + + # Motor State # Initialize with current time, or motors will be turned off on start self.last_motor_goal_time: Time = self.node.get_clock().now() self.last_motor_update_time = Time() @@ -87,7 +87,7 @@ def __init__(self, node: Node): self.previous_joint_state: Optional[JointState] = None self.is_power_on: bool = False - # Parameters + # Motor Parameters self.motor_timeout_duration: float = self.node.get_parameter("motor_timeout_duration").value self.motor_off_time: float = self.node.get_parameter("motor_off_time").value self.imu_timeout_duration: float = self.node.get_parameter("imu_timeout_duration").value diff --git a/bitbots_hcm/config/hcm_wolfgang.yaml b/bitbots_hcm/config/hcm_wolfgang.yaml index 991a323ef..e1d21fe42 100644 --- a/bitbots_hcm/config/hcm_wolfgang.yaml +++ b/bitbots_hcm/config/hcm_wolfgang.yaml @@ -17,6 +17,8 @@ falling_back: "falling_back" falling_left: "falling_left" falling_right: "falling_right" + turning_back_left: "turning_back_left" + turning_back_right: "turning_back_right" anim_package: "wolfgang_animations" # Falling From 51d15ada999c5d70488fdd25324c913d02745c2e Mon Sep 17 00:00:00 2001 From: Florian Vahl <git@flova.de> Date: Wed, 13 Sep 2023 19:35:25 +0200 Subject: [PATCH 12/74] Add pause script to build --- bitbots_hcm/setup.py | 1 + 1 file changed, 1 insertion(+) diff --git a/bitbots_hcm/setup.py b/bitbots_hcm/setup.py index fb9ace321..93336689b 100644 --- a/bitbots_hcm/setup.py +++ b/bitbots_hcm/setup.py @@ -27,6 +27,7 @@ ], scripts=[ 'scripts/hcm_led.py', + 'scripts/pause.py', ], install_requires=[ 'launch', From eaa2595ff474820222a1de5df92a25d2598c2243 Mon Sep 17 00:00:00 2001 From: Florian Vahl <git@flova.de> Date: Wed, 13 Sep 2023 19:35:45 +0200 Subject: [PATCH 13/74] Cleanup cpp --- bitbots_hcm/src/hcm.cpp | 68 +++++++++++++++++++++++------------------ 1 file changed, 39 insertions(+), 29 deletions(-) diff --git a/bitbots_hcm/src/hcm.cpp b/bitbots_hcm/src/hcm.cpp index ae8454660..0b7ed1727 100644 --- a/bitbots_hcm/src/hcm.cpp +++ b/bitbots_hcm/src/hcm.cpp @@ -26,36 +26,45 @@ class HCM_CPP : public rclcpp::Node { : Node("hcm_cpp", rclcpp::NodeOptions().allow_undeclared_parameters(true).automatically_declare_parameters_from_overrides( true)) { - // these are provided by the launch and not in the yaml file therefore we need to handle them seperatly + + // These are provided by the launch and not in the yaml file therefore we need to handle them seperatly bool use_sim_time, simulation_active, visualization_active; this->get_parameter("use_sim_time", use_sim_time); this->get_parameter("simulation_active", simulation_active); this->get_parameter("visualization_active", visualization_active); + // HCM state current_state_ = humanoid_league_msgs::msg::RobotControlState::STARTUP; + // Sensor states current_imu_ = sensor_msgs::msg::Imu(); current_pressure_left_ = bitbots_msgs::msg::FootPressure(); current_pressure_right_ = bitbots_msgs::msg::FootPressure(); - current_cop_left_ = geometry_msgs::msg::PointStamped(); - current_cop_right_ = geometry_msgs::msg::PointStamped(); current_joint_state_ = sensor_msgs::msg::JointState(); + + // Walking state last_walking_time_ = builtin_interfaces::msg::Time(); + + // Animation state record_active_ = false; external_animation_running_ = false; animation_requested_ = false; last_animation_goal_time_ = builtin_interfaces::msg::Time(); - // from bitbots_hcm.humanoid_control_module import HardwareControlManager + // Initialize HCM logic + // Import Python module + // "from bitbots_hcm.humanoid_control_module import HardwareControlManager" auto hcm_module = py::module::import("bitbots_hcm.humanoid_control_module"); + + // Create HCM object // hcm = HardwareControlManager() hcm_py_ = hcm_module.attr("HardwareControlManager")(use_sim_time, simulation_active, visualization_active); - // create goal publisher + // Create publishers pub_controller_command_ = this->create_publisher<bitbots_msgs::msg::JointCommand>("DynamixelController/command", 1); pub_robot_state_ = this->create_publisher<humanoid_league_msgs::msg::RobotControlState>("robot_state", 1); - // create subscriber motor goals + // Create subscribers for goals anim_sub_ = this->create_subscription<humanoid_league_msgs::msg::Animation>( "animation", 1, std::bind(&HCM_CPP::animation_callback, this, _1)); dynup_sub_ = this->create_subscription<bitbots_msgs::msg::JointCommand>( @@ -69,63 +78,66 @@ class HCM_CPP : public rclcpp::Node { walk_sub_ = this->create_subscription<bitbots_msgs::msg::JointCommand>( "walking_motor_goals", 1, std::bind(&HCM_CPP::walking_goal_callback, this, _1)); - // subscriber for high frequency topics + // Create subscriber for high frequency sensor data joint_state_sub_ = this->create_subscription<sensor_msgs::msg::JointState>( - "joint_states", 1, std::bind(&HCM_CPP::joint_state_callback, this, _1)); - cop_l_sub_ = this->create_subscription<geometry_msgs::msg::PointStamped>( - "cop_l", 1, std::bind(&HCM_CPP::cop_l_callback, this, _1)); - cop_r_sub_ = this->create_subscription<geometry_msgs::msg::PointStamped>( - "cop_r", 1, std::bind(&HCM_CPP::cop_l_callback, this, _1)); + "joint_states", 1, std::bind(&HCM_CPP::joint_state_callback, this, _1)); pressure_l_sub_ = this->create_subscription<bitbots_msgs::msg::FootPressure>( - "foot_pressure_left/filtered", 1, std::bind(&HCM_CPP::pressure_l_callback, this, _1)); + "foot_pressure_left/filtered", 1, std::bind(&HCM_CPP::pressure_l_callback, this, _1)); pressure_r_sub_ = this->create_subscription<bitbots_msgs::msg::FootPressure>( - "foot_pressure_right/filtered", 1, std::bind(&HCM_CPP::pressure_r_callback, this, _1)); - imu_sub_ = - this->create_subscription<sensor_msgs::msg::Imu>("imu/data", 1, std::bind(&HCM_CPP::imu_callback, this, _1)); + "foot_pressure_right/filtered", 1, std::bind(&HCM_CPP::pressure_r_callback, this, _1)); + imu_sub_ = this->create_subscription<sensor_msgs::msg::Imu>( + "imu/data", 1, std::bind(&HCM_CPP::imu_callback, this, _1)); } void animation_callback(humanoid_league_msgs::msg::Animation msg) { // The animation server is sending us goal positions for the next keyframe last_animation_goal_time_ = msg.header.stamp; + // Check if the message is an animation request if (msg.request) { RCLCPP_INFO(this->get_logger(), "Got Animation request. HCM will try to get controllable now."); - // animation has to wait - // dsd should try to become controllable + // Animation has to wait + // DSD should try to become controllable animation_requested_ = true; return; } + + // TODO: REWORK MUTEX + + // Check if the message is the start of an animation if (msg.first) { if (msg.hcm) { - // coming from ourselves - // we don't have to do anything, since we must be in the right state + // This was an animation from the DSD + // We don't have to do anything, since we must be in the right state } else { - // coming from outside - // check if we can run an animation now + // Coming from outside + // Check if we can run an animation now if (current_state_ != humanoid_league_msgs::msg::RobotControlState::CONTROLLABLE) { RCLCPP_WARN(this->get_logger(), "HCM is not controllable, animation refused."); } else { - // we're already controllable, go to animation running + // We're already controllable, go to animation running external_animation_running_ = true; } } } + // Check if the message is the end of an animation if (msg.last) { if (msg.hcm) { // This was an animation from the DSD - // we don't have to do anything, since we must be in the right state + // We don't have to do anything, since we must be in the right state } else { - // this is the last frame, we want to tell the DSD that we're finished with the animations + // This is the last frame, we want to tell the DSD that we're finished with the animations external_animation_running_ = false; if (msg.position.points.size() == 0) { - // probably this was just to tell us we're finished + // Probably this was just to tell us we're finished // we don't need to set another position to the motors return; } } } - // forward positions to motors, if some where transmitted + + // Forward joint positions to motors if (msg.position.points.size() > 0 && current_state_ != humanoid_league_msgs::msg::RobotControlState::GETTING_UP) { bitbots_msgs::msg::JointCommand out_msg = bitbots_msgs::msg::JointCommand(); out_msg.positions = msg.position.points[0].positions; @@ -232,8 +244,6 @@ class HCM_CPP : public rclcpp::Node { sensor_msgs::msg::Imu current_imu_; bitbots_msgs::msg::FootPressure current_pressure_left_; bitbots_msgs::msg::FootPressure current_pressure_right_; - geometry_msgs::msg::PointStamped current_cop_left_; - geometry_msgs::msg::PointStamped current_cop_right_; sensor_msgs::msg::JointState current_joint_state_; builtin_interfaces::msg::Time last_walking_time_; bool record_active_; From f1e53cc5dad36216d0d2b023fa8222a7d873bc06 Mon Sep 17 00:00:00 2001 From: Florian Vahl <git@flova.de> Date: Wed, 13 Sep 2023 19:52:05 +0200 Subject: [PATCH 14/74] Add comments to hcm cpp --- bitbots_hcm/src/hcm.cpp | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/bitbots_hcm/src/hcm.cpp b/bitbots_hcm/src/hcm.cpp index 0b7ed1727..879a72e47 100644 --- a/bitbots_hcm/src/hcm.cpp +++ b/bitbots_hcm/src/hcm.cpp @@ -215,7 +215,9 @@ class HCM_CPP : public rclcpp::Node { } void tick() { - // update all input to the HCM + // Performs one tick of the HCM DSD + + // Pass all the data nessesary data to the python module hcm_py_.attr("set_imu")(ros2_python_extension::toPython(current_imu_)); hcm_py_.attr("set_pressure_left")(ros2_python_extension::toPython<bitbots_msgs::msg::FootPressure>(current_pressure_left_)); hcm_py_.attr("set_pressure_right")(ros2_python_extension::toPython<bitbots_msgs::msg::FootPressure>(current_pressure_right_)); @@ -226,33 +228,49 @@ class HCM_CPP : public rclcpp::Node { hcm_py_.attr("set_external_animation_running")(external_animation_running_); hcm_py_.attr("set_animation_requested")(animation_requested_); hcm_py_.attr("set_last_animation_goal_time")(ros2_python_extension::toPython<builtin_interfaces::msg::Time>(last_animation_goal_time_)); - // run HCM + + // Run HCM Python DSD code hcm_py_.attr("tick")(); - // update current HCM state for joint mutex + + // Pull the current robot state from the python module + // It is used to perform the joint mutex py::object result = hcm_py_.attr("get_state")(); current_state_ = result.cast<int>(); - // publish current state + + // Publish current robot state humanoid_league_msgs::msg::RobotControlState state_msg = humanoid_league_msgs::msg::RobotControlState(); state_msg.state = current_state_; pub_robot_state_->publish(state_msg); } private: + // Python interpreter py::scoped_interpreter python_; + // Python hcm module py::object hcm_py_; + // The current robot state int current_state_; + + // Sensor states sensor_msgs::msg::Imu current_imu_; bitbots_msgs::msg::FootPressure current_pressure_left_; bitbots_msgs::msg::FootPressure current_pressure_right_; sensor_msgs::msg::JointState current_joint_state_; + + // Walking state builtin_interfaces::msg::Time last_walking_time_; + + // Animation states bool record_active_; bool external_animation_running_; bool animation_requested_; builtin_interfaces::msg::Time last_animation_goal_time_; + // Publishers rclcpp::Publisher<bitbots_msgs::msg::JointCommand>::SharedPtr pub_controller_command_; rclcpp::Publisher<humanoid_league_msgs::msg::RobotControlState>::SharedPtr pub_robot_state_; + + // Subscribers rclcpp::Subscription<humanoid_league_msgs::msg::Animation>::SharedPtr anim_sub_; rclcpp::Subscription<bitbots_msgs::msg::JointCommand>::SharedPtr dynup_sub_; rclcpp::Subscription<bitbots_msgs::msg::JointCommand>::SharedPtr head_sub_; From fbd81d20f92ce33020fcd4a211c7f4f2f6ebf5b5 Mon Sep 17 00:00:00 2001 From: Florian Vahl <git@flova.de> Date: Wed, 13 Sep 2023 19:52:25 +0200 Subject: [PATCH 15/74] Remove duplicated build setup --- bitbots_hcm/CMakeLists.txt | 2 -- bitbots_hcm/setup.cfg | 4 ---- bitbots_hcm/setup.py | 40 -------------------------------------- 3 files changed, 46 deletions(-) delete mode 100644 bitbots_hcm/setup.cfg delete mode 100644 bitbots_hcm/setup.py diff --git a/bitbots_hcm/CMakeLists.txt b/bitbots_hcm/CMakeLists.txt index 2afd6cc93..ec932cf47 100644 --- a/bitbots_hcm/CMakeLists.txt +++ b/bitbots_hcm/CMakeLists.txt @@ -55,8 +55,6 @@ install(DIRECTORY config install(DIRECTORY scripts/ USE_SOURCE_PERMISSIONS DESTINATION lib/${PROJECT_NAME}) -install(DIRECTORY bitbots_hcm/classifier DESTINATION share/${PROJECT_NAME}) - install(DIRECTORY bitbots_hcm/hcm_dsd/actions DESTINATION share/${PROJECT_NAME} FILES_MATCHING PATTERN "*.py") install(DIRECTORY bitbots_hcm/hcm_dsd/decisions DESTINATION share/${PROJECT_NAME} FILES_MATCHING PATTERN "*.py") diff --git a/bitbots_hcm/setup.cfg b/bitbots_hcm/setup.cfg deleted file mode 100644 index 3578a0006..000000000 --- a/bitbots_hcm/setup.cfg +++ /dev/null @@ -1,4 +0,0 @@ -[develop] -script_dir=$base/lib/bitbots_hcm -[install] -install_scripts=$base/lib/bitbots_hcm diff --git a/bitbots_hcm/setup.py b/bitbots_hcm/setup.py deleted file mode 100644 index 93336689b..000000000 --- a/bitbots_hcm/setup.py +++ /dev/null @@ -1,40 +0,0 @@ -import glob -import os - -from setuptools import find_packages -from setuptools import setup - -package_name = 'bitbots_hcm' - - -setup( - name=package_name, - packages=find_packages(exclude=['test']), - data_files=[ - ('share/' + package_name, ['package.xml']), - ('share/' + package_name + '/launch', - glob.glob('launch/*.launch')), - - ('share/' + package_name + '/config', - glob.glob('config/*')), - - ('share/' + package_name + '/actions', - glob.glob(package_name + '/hcm_dsd/actions/*.py')), - ('share/' + package_name + '/decisions' , - glob.glob(package_name + '/hcm_dsd/decisions/*.py')), - ('share/' + package_name, - [package_name+'/hcm_dsd/hcm.dsd']) - ], - scripts=[ - 'scripts/hcm_led.py', - 'scripts/pause.py', - ], - install_requires=[ - 'launch', - 'setuptools', - ], - include_package_data=True, - zip_safe=True, - keywords=['ROS'], - license='MIT', -) From bf38e888cbb0511f3cf39d1b16fa8795df35de19 Mon Sep 17 00:00:00 2001 From: Florian Vahl <git@flova.de> Date: Wed, 13 Sep 2023 20:11:39 +0200 Subject: [PATCH 16/74] Rework joint mutex --- bitbots_hcm/bitbots_hcm/hcm_dsd/hcm.dsd | 8 ++++---- bitbots_hcm/src/hcm.cpp | 17 ++++++++++++----- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/hcm.dsd b/bitbots_hcm/bitbots_hcm/hcm_dsd/hcm.dsd index 521f6a743..b511babe3 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/hcm.dsd +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/hcm.dsd @@ -7,9 +7,9 @@ $StartHCM RECORD_ACTIVE --> @RobotStateRecord, @Wait FREE --> $CheckMotors MOTORS_NOT_STARTED --> @RobotStateStartup, @WaitForMotorStartup - OVERLOAD --> @PlayAnimationDynup + direction:descend, @TurnMotorsOff, @Wait + OVERLOAD --> @RobotStateMotorOff, @CancelGoals, @StopWalking, @PlayAnimationDynup + direction:descend, @TurnMotorsOff, @Wait PROBLEM --> @RobotStateHardwareProblem, @WaitForMotors - TURN_OFF --> @RobotStateMotorOff + @PlayAnimationDynup + direction:descend, @TurnMotorsOff, @Wait + TURN_OFF --> @RobotStateMotorOff, @CancelGoals, @StopWalking, @PlayAnimationDynup + direction:descend, @TurnMotorsOff, @Wait TURN_ON --> @TurnMotorsOn, @PlayAnimationDynup + direction:rise OKAY --> $CheckIMU IMU_NOT_STARTED --> @RobotStateStartup, @WaitForIMUStartup @@ -22,8 +22,8 @@ $StartHCM ON_GROUND --> $Fallen FALLEN_FRONT --> @RobotStateFallen, @CancelGoals, @StopWalking, @RobotStateGettingUp, @PlayAnimationDynup + direction:front FALLEN_BACK --> @RobotStateFallen, @CancelGoals, @StopWalking, @RobotStateGettingUp, @SetFootZero, @PlayAnimationDynup + direction:back - FALLEN_RIGHT --> @RobotStateFallen, @CancelGoals, @StopWalking, @RobotStateGettingUp, @PlayAnimationTurningBackRight - FALLEN_LEFT --> @RobotStateFallen, @CancelGoals, @StopWalking, @RobotStateGettingUp, @PlayAnimationTurningBackLeft + FALLEN_RIGHT --> @RobotStateFallen, @CancelGoals, @StopWalking, @PlayAnimationTurningBackRight + FALLEN_LEFT --> @RobotStateFallen, @CancelGoals, @StopWalking, @PlayAnimationTurningBackLeft NOT_FALLEN --> $Falling FALLING_LEFT --> @RobotStateFalling, @CancelGoals, @StopWalking, @PlayAnimationFallingLeft, @Wait FALLING_RIGHT --> @RobotStateFalling, @CancelGoals, @StopWalking, @PlayAnimationFallingRight, @Wait diff --git a/bitbots_hcm/src/hcm.cpp b/bitbots_hcm/src/hcm.cpp index 879a72e47..d8b473b42 100644 --- a/bitbots_hcm/src/hcm.cpp +++ b/bitbots_hcm/src/hcm.cpp @@ -102,8 +102,6 @@ class HCM_CPP : public rclcpp::Node { return; } - // TODO: REWORK MUTEX - // Check if the message is the start of an animation if (msg.first) { if (msg.hcm) { @@ -137,8 +135,12 @@ class HCM_CPP : public rclcpp::Node { } } - // Forward joint positions to motors - if (msg.position.points.size() > 0 && current_state_ != humanoid_league_msgs::msg::RobotControlState::GETTING_UP) { + // Forward joint positions to motors if there are any and we're in the right state + if (msg.position.points.size() > 0 && ( + current_state_ == humanoid_league_msgs::msg::RobotControlState::CONTROLLABLE || + current_state_ == humanoid_league_msgs::msg::RobotControlState::ANIMATION_RUNNING || + current_state_ == humanoid_league_msgs::msg::RobotControlState::FALLING || + current_state_ == humanoid_league_msgs::msg::RobotControlState::FALLEN)) { bitbots_msgs::msg::JointCommand out_msg = bitbots_msgs::msg::JointCommand(); out_msg.positions = msg.position.points[0].positions; out_msg.joint_names = msg.position.joint_names; @@ -162,18 +164,21 @@ class HCM_CPP : public rclcpp::Node { void dynup_callback(const bitbots_msgs::msg::JointCommand msg) { if (current_state_ == humanoid_league_msgs::msg::RobotControlState::STARTUP || - current_state_ == humanoid_league_msgs::msg::RobotControlState::FALLEN || current_state_ == humanoid_league_msgs::msg::RobotControlState::GETTING_UP || + current_state_ == humanoid_league_msgs::msg::RobotControlState::MOTOR_OFF || + current_state_ == humanoid_league_msgs::msg::RobotControlState::PICKED_UP || current_state_ == humanoid_league_msgs::msg::RobotControlState::CONTROLLABLE) { pub_controller_command_->publish(msg); } } + void head_goal_callback(const bitbots_msgs::msg::JointCommand msg) { if (current_state_ == humanoid_league_msgs::msg::RobotControlState::CONTROLLABLE || current_state_ == humanoid_league_msgs::msg::RobotControlState::WALKING) { pub_controller_command_->publish(msg); } } + void kick_goal_callback(const bitbots_msgs::msg::JointCommand msg) { if (current_state_ == humanoid_league_msgs::msg::RobotControlState::KICKING || current_state_ == humanoid_league_msgs::msg::RobotControlState::CONTROLLABLE) { @@ -181,6 +186,7 @@ class HCM_CPP : public rclcpp::Node { pub_controller_command_->publish(msg); } } + void record_goal_callback(const bitbots_msgs::msg::JointCommand msg) { if (msg.joint_names.size() == 0) { // record tells us that its finished @@ -190,6 +196,7 @@ class HCM_CPP : public rclcpp::Node { pub_controller_command_->publish(msg); } } + void walking_goal_callback(bitbots_msgs::msg::JointCommand msg) { last_walking_time_ = msg.header.stamp; if (current_state_ == humanoid_league_msgs::msg::RobotControlState::CONTROLLABLE || From 5008ecd660faaa60cdf34ceba14746cd0f1a11e7 Mon Sep 17 00:00:00 2001 From: Florian Vahl <git@flova.de> Date: Wed, 13 Sep 2023 21:19:20 +0200 Subject: [PATCH 17/74] Cleanup head mover --- bitbots_head_mover/config/head_config.yml | 16 +++ bitbots_head_mover/src/move_head.cpp | 133 +++++++++++++++------- 2 files changed, 109 insertions(+), 40 deletions(-) diff --git a/bitbots_head_mover/config/head_config.yml b/bitbots_head_mover/config/head_config.yml index 69feb1be9..ce35a1cc6 100644 --- a/bitbots_head_mover/config/head_config.yml +++ b/bitbots_head_mover/config/head_config.yml @@ -33,11 +33,13 @@ move_head: tilt_speed: type: double default_value: 6.0 + description: "Tilt speed for the look at action" validation: bounds<>: [0.0, 8.0] pan_speed: type: double default_value: 6.0 + description: "Pan speed for the look at action" validation: bounds<>: [0.0, 8.0] @@ -46,10 +48,12 @@ move_head: # search pattern speed tilt_speed: type: double + description: "Tilt speed for the search pattern" default_value: 3.0 pan_speed: type: double + description: "Pan speed for the search pattern" default_value: 3.0 # Max values for the search pattern @@ -86,10 +90,12 @@ move_head: search_pattern_penalty: tilt_speed: type: double + description: "Tilt speed for the search pattern" default_value: 1.0 pan_speed: type: double + description: "Pan speed for the search pattern" default_value: 2.0 pan_max: @@ -109,6 +115,7 @@ move_head: scan_lines: type: int default_value: 2 + description: "Number of scan horizontal lines for the search pattern" validation: gt_eq<>: [1] @@ -122,10 +129,12 @@ move_head: search_pattern_field_features: tilt_speed: type: double + description: "Tilt speed for the search pattern" default_value: 3.0 pan_speed: type: double + description: "Pan speed for the search pattern" default_value: 3.0 pan_max: @@ -145,6 +154,7 @@ move_head: scan_lines: type: int default_value: 2 + description: "Number of scan horizontal lines for the search pattern" validation: gt_eq<>: [1] @@ -158,10 +168,12 @@ move_head: front_search_pattern: tilt_speed: type: double + description: "Tilt speed for the search pattern" default_value: 3.0 pan_speed: type: double + description: "Pan speed for the search pattern" default_value: 3.0 pan_max: @@ -181,6 +193,7 @@ move_head: scan_lines: type: int default_value: 2 + description: "Number of scan horizontal lines for the search pattern" validation: gt_eq<>: [1] @@ -194,10 +207,12 @@ move_head: look_forward: tilt_speed: type: double + description: "Tilt speed for the search pattern" default_value: 3.0 pan_speed: type: double + description: "Pan speed for the search pattern" default_value: 3.0 pan_max: @@ -217,6 +232,7 @@ move_head: scan_lines: type: int default_value: 2 + description: "Number of scan horizontal lines for the search pattern" validation: gt_eq<>: [1] diff --git a/bitbots_head_mover/src/move_head.cpp b/bitbots_head_mover/src/move_head.cpp index 85ad660a4..3b46695e4 100644 --- a/bitbots_head_mover/src/move_head.cpp +++ b/bitbots_head_mover/src/move_head.cpp @@ -39,34 +39,36 @@ using std::placeholders::_1; using namespace std::chrono_literals; namespace move_head { + +#define DEG_TO_RAD M_PI / 180 + using LookAtGoal = bitbots_msgs::action::LookAt; using LookAtGoalHandle = rclcpp_action::ServerGoalHandle<LookAtGoal>; class HeadMover { std::shared_ptr<rclcpp::Node> node_; - // declare subscriber and publisher + // Declare subscriber rclcpp::Subscription<humanoid_league_msgs::msg::HeadMode>::SharedPtr head_mode_subscriber_; rclcpp::Subscription<sensor_msgs::msg::JointState>::SharedPtr joint_state_subscriber_; + // Declare publisher rclcpp::Publisher<bitbots_msgs::msg::JointCommand>::SharedPtr position_publisher_; - // declare tf + // Declare tf std::shared_ptr<tf2_ros::Buffer> tf_buffer_; - std::shared_ptr<tf2_ros::TransformListener> tf_listener_; - // declare variables - humanoid_league_msgs::msg::HeadMode head_mode_; - sensor_msgs::msg::JointState current_joint_state_; + // Declare variables + uint head_mode_; + std::shared_ptr<sensor_msgs::msg::JointState> current_joint_state_; bitbots_msgs::msg::JointCommand pos_msg_; - double DEG_TO_RAD = M_PI / 180; geometry_msgs::msg::PoseWithCovarianceStamped tf_precision_pose_; - // declare robot model and planning scene + // Declare robot model and planning scene for moveit robot_model_loader::RobotModelLoaderPtr loader_; moveit::core::RobotModelPtr robot_model_; moveit::core::RobotStatePtr robot_state_; @@ -74,21 +76,25 @@ class HeadMover { planning_scene_monitor::PlanningSceneMonitorPtr planning_scene_monitor_; planning_scene::PlanningScenePtr planning_scene_; - // declare params + // Declare parameters and parameter listener move_head::Params params_; std::shared_ptr<move_head::ParamListener> param_listener_; + // Declare timer that executes the main loop rclcpp::TimerBase::SharedPtr timer_; + // Declare variable for the current search pattern std::vector<std::pair<double, double>> pattern_; - uint prev_head_mode_; + // Store previous head mode + uint prev_head_mode_ = -1; - double threshold_; + // Declare variables for the current search patterns parameters + double threshold_ = 0; int index_ = 0; - double pan_speed_; - double tilt_speed_; + double pan_speed_ = 0; + double tilt_speed_ = 0; - // action server + // Action server for the look at action rclcpp_action::Server<LookAtGoal>::SharedPtr action_server_; bool action_running_ = false; @@ -96,15 +102,20 @@ class HeadMover { HeadMover() { node_ = std::make_shared<rclcpp::Node>("head_mover"); + // Initialize publisher for head motor goals position_publisher_ = node_->create_publisher<bitbots_msgs::msg::JointCommand>( "head_motor_goals", 10); + + // Initialize subscriber for head mode head_mode_subscriber_ = node_->create_subscription<humanoid_league_msgs::msg::HeadMode>( "head_mode", 10, [this](const humanoid_league_msgs::msg::HeadMode::SharedPtr msg) { head_mode_callback(msg); }); + + // Initialize subscriber for the current joint states of the robot joint_state_subscriber_ = node_->create_subscription<sensor_msgs::msg::JointState>( "joint_states", 10, @@ -112,12 +123,15 @@ class HeadMover { joint_state_callback(msg); }); - // load parameters from config + // Create parameter listener and load initial set of parameters param_listener_ = std::make_shared<move_head::ParamListener>(node_); params_ = param_listener_->get_params(); + // Create a seperate node for moveit, this way we can use rqt to change parameters, + // because some moveit parameters break the gui auto moveit_node = std::make_shared<rclcpp::Node>("moveit_head_mover_node"); + // Get the parameters from the move_group node auto parameters_client = std::make_shared<rclcpp::SyncParametersClient>(node_, "/move_group"); while (!parameters_client->wait_for_service(1s)) { @@ -132,14 +146,15 @@ class HeadMover { "service not available, waiting again..."); } + // Extract the robot_description rcl_interfaces::msg::ListParametersResult parameter_list = parameters_client->list_parameters( {"robot_description_kinematics"}, 10); + + // Set the robot description parameters in the moveit node auto copied_parameters = parameters_client->get_parameters(parameter_list.names); - - // set the parameters to our node for (auto & parameter : copied_parameters) { moveit_node->declare_parameter( parameter.get_name(), @@ -147,8 +162,9 @@ class HeadMover { moveit_node->set_parameter(parameter); } + + // Load robot description / robot model into moveit std::string robot_description = "robot_description"; - // get the robot description from the blackboard loader_ = std::make_shared<robot_model_loader::RobotModelLoader>( robot_model_loader::RobotModelLoader( moveit_node, robot_description, @@ -161,13 +177,16 @@ class HeadMover { "blackboard (bitbots_bringup base.launch)?", robot_description.c_str()); } + + // Recreate robot state robot_state_.reset(new moveit::core::RobotState(robot_model_)); robot_state_->setToDefaultValues(); + // Recreate collision state collision_state_.reset(new moveit::core::RobotState(robot_model_)); collision_state_->setToDefaultValues(); - // get planning scene for collision checking + // Get planning scene for collision checking planning_scene_monitor_ = std::make_shared<planning_scene_monitor::PlanningSceneMonitor>( moveit_node, loader_); @@ -178,7 +197,7 @@ class HeadMover { "failed to connect to planning scene"); } - // prepare the pos_msg + // Prepare the pos_msg with default values pos_msg_.joint_names = {"HeadPan", "HeadTilt"}; pos_msg_.positions = {0, 0}; pos_msg_.velocities = {0, 0}; @@ -186,15 +205,14 @@ class HeadMover { params_.max_acceleration_pan}; pos_msg_.max_currents = {-1, -1}; - // apparently tf_listener is necessary but unused + // Create tf buffer and listener to update it tf_buffer_ = std::make_shared<tf2_ros::Buffer>(node_->get_clock()); tf_listener_ = std::make_shared<tf2_ros::TransformListener>(*tf_buffer_); - prev_head_mode_ = -1; + // Initialize variables threshold_ = params_.position_reached_threshold * DEG_TO_RAD; - pan_speed_ = 0; - tilt_speed_ = 0; + // Initialize action server for look at action action_server_ = rclcpp_action::create_server<LookAtGoal>( node_, "look_at_goal", std::bind( @@ -203,6 +221,7 @@ class HeadMover { std::bind(&HeadMover::handle_cancel, this, std::placeholders::_1), std::bind(&HeadMover::handle_accepted, this, std::placeholders::_1)); + // Initialize timer for main loop timer_ = rclcpp::create_timer( node_, node_->get_clock(), 10ms, [this] {behave();}); @@ -210,20 +229,29 @@ class HeadMover { void head_mode_callback( const humanoid_league_msgs::msg::HeadMode::SharedPtr msg) { - head_mode_ = *msg; + head_mode_ = msg->head_mode; } void joint_state_callback(const sensor_msgs::msg::JointState::SharedPtr msg) { - current_joint_state_ = *msg; + current_joint_state_ = msg; } + /*** + * @brief Handles the goal request for the look at action + * + * @param uuid + * @param goal + */ rclcpp_action::GoalResponse handle_goal( const rclcpp_action::GoalUUID & uuid, std::shared_ptr<const LookAtGoal::Goal> goal) { - RCLCPP_INFO(node_->get_logger(), "Received goal request"); + + // Avoid unused parameter warning (void)uuid; + RCLCPP_DEBUG(node_->get_logger(), "Received goal request"); + + // Bring the goal point into the planning frame geometry_msgs::msg::PointStamped new_point; - // check if goal is in range collision wise try { new_point = tf_buffer_->transform( goal->look_at_position, @@ -235,12 +263,16 @@ class HeadMover { ex.what()); return rclcpp_action::GoalResponse::REJECT; } + + // Get the motor goals that are needed to look at the point std::pair<double, double> pan_tilt = get_motor_goals_from_point(new_point.point); + + // Check whether the goal is in range pan and tilt wise bool goal_not_in_range = check_head_collision(pan_tilt.first, pan_tilt.second); - // check whether the goal is in range pan and tilt wise + // Check whether the action goal is valid and can be executed if (action_running_ || goal_not_in_range || !(params_.max_pan[0] < pan_tilt.first && pan_tilt.first < params_.max_pan[1]) || @@ -254,13 +286,16 @@ class HeadMover { rclcpp_action::CancelResponse handle_cancel( const std::shared_ptr<LookAtGoalHandle> goal_handle) { - RCLCPP_INFO(node_->get_logger(), "Received request to cancel goal"); + // Avoid unused parameter warning (void)goal_handle; + RCLCPP_INFO(node_->get_logger(), "Received request to cancel goal"); + // Set the action_running_ flag to false, so that the action can be executed again action_running_ = false; return rclcpp_action::CancelResponse::ACCEPT; } void handle_accepted(const std::shared_ptr<LookAtGoalHandle> goal_handle) { + // Spawn a new thread that executes the look at action until we reach the goal std::thread{ std::bind(&HeadMover::execute_look_at, this, std::placeholders::_1), goal_handle} @@ -268,35 +303,51 @@ class HeadMover { } void execute_look_at(const std::shared_ptr<LookAtGoalHandle> goal_handle) { + // Yeah seems like we are executing the action action_running_ = true; RCLCPP_INFO(node_->get_logger(), "Executing goal"); + + // Get the goal from the goal handle const auto goal = goal_handle->get_goal(); + + // Create feedback and result messages auto feedback = std::make_shared<LookAtGoal::Feedback>(); - bool success = - false; // checks whether we look at the position we want to look at + // Flag that indicates whether the action was successful yet + bool success = false; auto result = std::make_shared<LookAtGoal::Result>(); - while (!success) { + // Execute the action until we reach the goal or the action is canceled + while (!success && rclcpp::ok()) { RCLCPP_INFO(node_->get_logger(), "Looking at point"); + + // Check if the action was canceled and if so, set the result accordingly if (goal_handle->is_canceling()) { goal_handle->canceled(result); RCLCPP_INFO(node_->get_logger(), "Goal was canceled"); return; } - // look at point + + // Look at the goal point success = look_at(goal->look_at_position); + + // Publish feedback to the client goal_handle->publish_feedback( feedback); // TODO: currently feedback is empty } + + // If we reach this point, the action was successful if (rclcpp::ok()) { result->success = true; goal_handle->succeed(result); RCLCPP_INFO(node_->get_logger(), "Goal succeeded"); } + + // Set the action_running_ flag to false, so that the action can be executed again action_running_ = false; } + double calculate_lower_speed( double delta_fast_joint, double delta_my_joint, @@ -309,6 +360,7 @@ class HeadMover { } } + bool send_motor_goals( double pan_position, double tilt_position, @@ -376,6 +428,7 @@ class HeadMover { std::clamp(tilt, params_.max_tilt[0], params_.max_tilt[1]); return std::make_pair(new_pan, new_tilt); } + bool avoid_collision_on_path( double goal_pan, double goal_tilt, @@ -459,11 +512,11 @@ class HeadMover { std::pair<double, double> get_head_position() { double head_pan; double head_tilt; - for (size_t i = 0; i < current_joint_state_.name.size(); i++) { - if (current_joint_state_.name[i] == "HeadPan") { - head_pan = current_joint_state_.position[i]; - } else if (current_joint_state_.name[i] == "HeadTilt") { - head_tilt = current_joint_state_.position[i]; + for (size_t i = 0; i < current_joint_state_->name.size(); i++) { + if (current_joint_state_->name[i] == "HeadPan") { + head_pan = current_joint_state_->position[i]; + } else if (current_joint_state_->name[i] == "HeadTilt") { + head_tilt = current_joint_state_->position[i]; } } return {head_pan, head_tilt}; @@ -686,7 +739,7 @@ class HeadMover { } void behave() { - uint curr_head_mode = head_mode_.head_mode; + uint curr_head_mode = head_mode_; params_ = param_listener_->get_params(); From f4e396f48ae0c44e47f5cec02b38cbe34be55ea4 Mon Sep 17 00:00:00 2001 From: Florian Vahl <git@flova.de> Date: Wed, 13 Sep 2023 21:21:53 +0200 Subject: [PATCH 18/74] Remove record gui (ROS 1) --- bitbots_recordui_rqt/AMENT_IGNORE | 0 bitbots_recordui_rqt/CMakeLists.txt | 16 - bitbots_recordui_rqt/docs/_static/logo.png | Bin 11686 -> 0 bytes bitbots_recordui_rqt/docs/conf.py | 193 ---- bitbots_recordui_rqt/docs/index.rst | 21 - bitbots_recordui_rqt/init.bag | Bin 200686 -> 0 bytes bitbots_recordui_rqt/package.xml | 41 - bitbots_recordui_rqt/plugin.xml | 17 - bitbots_recordui_rqt/resource/RecordUI.ui | 339 ------- bitbots_recordui_rqt/setup.py | 12 - .../src/bitbots_recordui_rqt/__init__.py | 0 .../animation_recording.py | 377 ------- .../src/bitbots_recordui_rqt/record_ui.py | 944 ------------------ 13 files changed, 1960 deletions(-) delete mode 100644 bitbots_recordui_rqt/AMENT_IGNORE delete mode 100644 bitbots_recordui_rqt/CMakeLists.txt delete mode 100644 bitbots_recordui_rqt/docs/_static/logo.png delete mode 100644 bitbots_recordui_rqt/docs/conf.py delete mode 100644 bitbots_recordui_rqt/docs/index.rst delete mode 100644 bitbots_recordui_rqt/init.bag delete mode 100644 bitbots_recordui_rqt/package.xml delete mode 100644 bitbots_recordui_rqt/plugin.xml delete mode 100644 bitbots_recordui_rqt/resource/RecordUI.ui delete mode 100644 bitbots_recordui_rqt/setup.py delete mode 100644 bitbots_recordui_rqt/src/bitbots_recordui_rqt/__init__.py delete mode 100644 bitbots_recordui_rqt/src/bitbots_recordui_rqt/animation_recording.py delete mode 100644 bitbots_recordui_rqt/src/bitbots_recordui_rqt/record_ui.py diff --git a/bitbots_recordui_rqt/AMENT_IGNORE b/bitbots_recordui_rqt/AMENT_IGNORE deleted file mode 100644 index e69de29bb..000000000 diff --git a/bitbots_recordui_rqt/CMakeLists.txt b/bitbots_recordui_rqt/CMakeLists.txt deleted file mode 100644 index 6b3990d2d..000000000 --- a/bitbots_recordui_rqt/CMakeLists.txt +++ /dev/null @@ -1,16 +0,0 @@ -cmake_minimum_required(VERSION 2.8.3) -project(bitbots_recordui_rqt) -# Load catkin and all dependencies required for this package -find_package(catkin REQUIRED bitbots_docs) -catkin_package() -catkin_python_setup() - -enable_bitbots_docs() - -install(FILES plugin.xml - DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} -) - -install(DIRECTORY resource - DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} -) diff --git a/bitbots_recordui_rqt/docs/_static/logo.png b/bitbots_recordui_rqt/docs/_static/logo.png deleted file mode 100644 index f8afdd5d066232e2dba94b758c6c44fe72b42820..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11686 zcmXw92RN1Q|9;Jm5r>RpWG7@(BpJsDp=`1phm^hd-h0QfqL3Xzj!i~JRv}wfGBUII zKi}VV{om_2=klKSea`bf<MX-i`*TM<SATMon4TDdpqt7{@|xh&0{jKS2*LX<cXI^z zz;{6^Ys0|d3$u&_{}VYX8MuJ!C;$7yL2_kzf|GQv3i_^E4py!n=FVuy!^4B$#{RVn z%G?pn@8E2mwIfLnE+YN!B5fO2TQr2UaYZ_~s@Wud0_Q3JJ1^_z`qIG}(zda4uxEK< zgLXk<-~5&S|8M1-(dMo;;2ZEg8WI*15)wj-qQJMx|J^I+;OOOSWBt+<dhTXnYlC8u zcd#?Jv1fVd>gp&VAb|Sc&F*NFgB@tx<-Z;YfUD5<E@&44$N$}7`M(<k47#rRA&3Q1 zmY3D`%-;6%N;P`oc3kzRV(!vAYa`cBu~zBbP%`g8J%=R`5s83OIG!Re88aEeR!-`K z5@~xw3E3K&jel31m9=-z33qBObSgYB_LNspKRq#t*FdS}ADvA-(-H5SNQ*~XU8^+K zNAl^gs>ico@ud|H^*oUSla|u+Kdso~i3-C87>d;4E{yfHSMIeSYOAHl#@;HngrMIR za(p~|u$?+a2JyvKOCTfT;B1gttk6vv#`gO?`gt~(xpedquJ|CL=|PKn?m9DD=mk^Y z`pvEr56IzTL$yfX%#R0!t^&gc*Om=4+dse|CnvY0%~O{v^gtfA1liK!FWrLd>t?nK z23GeY3%FpxffosI;X?I+nzx%0qG}<Po6mLb-;R?1g{^#oKn>G}@BNLfK7d%1$HcNQ z7^x>Pa})}-B+n*Pxp@XIxVsR(qwlQ<M_vT8`08n-W*NSCQR<a@12SrKMsrX`U4(H( zd*FWVSapul0Y`Mf;O|{ca|~y}=m%=D2)PZ{7X-VMtd<5oKIe915qQwsQXX$_ZzQJZ z^7-V^FfDy%Ow=7TKI?m9cxZ^7on4%Iaf*5?Eeu~@IP?397cV%nhU#C63iiNbx<?ik z94cSbMc=|V@4rk+qPUMB%@rbD&WWu)ET9m+>3YSMhQs<^3m)2aPq+MK?l*ksrL8ST zs;06I?Xet3C`*od*ZRSb87}nw`*$TZH8lp$TxlfCiI+zx<s(NdOQ<L;cvr>R+Pcfu z^bsrm_VzY{iAj-*s?#FwyAnt6-k#I<A3ug(6k)M1Z0+q^)#0IeDPjHHY}LODqTp=c zUPbVTZs7UPHH&O4EG_Yql<=kU$ffceIwWwRu?<n&Ac#X5DJO@wkG0_^B_r#R%O7cQ zHNIXZxFtwVlS5I!C1qe}cs@Ek{lbTP*dRUZIag?PwGb>AQqWj*6bG+pi&z_s5(nii z>D=|vk&!^nqv67*Z;)Rt_vO;jEt+E?cPupMWMMzwa`g|~)2lq>d(UJ%c~?R-Q&rul zI5l|P%aQTMxTraTkawWJ;U;L+RU)5@n2YZj@g_E&gqHvC54JT}$clI6@mgnrFp{cU zD<>z1!P3Aa^^9*I*c>6Kc8jq$X#KS2kuN`fNXM7HzCP1G*efyWD#-{1tqI0nzo~8a z20ofwfm@Mq1&Rk*Hw(D<iElw~D=XFWQ~iVBnk`&6&5{)HS><W)^L>Ue_v5;`x;4!( zoWhx;;6;k~C{99CCnLi`M~Qz`k?C<~hKZTk8V?U|VN!HEH(E!6C~dpYw@~uh5zL?Q zoktde5|NIaq$f~)R7dky`~wjg<iBFP&xDRGj7rQnl{mcZ&+mTE|Ms}4<OOfDi2xB{ zhz}8KMQrsvfu8tHYHNJfP_SJ{?%%&}bZ0Z}H^pySH?v&sbfSZb0Dio^7N_s#OR-R3 zPmiLtgTr4GG;f+jd^i6WG7awBFusv`kFSbP|3KKBaO=bGFV8ioA`3ppz<*Wg7e3Vf z)Bt1E31+$Qb8)HF|LTnsh<D?Qitq3BKnw1)cR|Y|v$I=N_)Fc<Iv6<xI#yWcB-nYr zX}TlOb3UDrb40|~WNY<iQl$X4{2l`>4GAiReDz|NhlPigDienFKeTmp>gJdCF3N_i zYIz5Q`35MF`6Jl+`UfS+`09#+^j{p;1qYe4TwXW4!P)S*Q@&qO`e8LSqH+_4k6VJl zV8%n?DzN+wR}2|B`9hv5=fI0$t{5;|6)i0-m)(Z;jp!dMn-OHUk@IbB`iN*U^Uo+m zPXN6Pjsw9dYtZ32rLJy;5f$eOMNIdgag)26kP_K#3D?u<y4ODMMqlcc9HsGMV61gu zilnFO?Pf|hj%i*a@6);MNQfSZ%Ie>Rs?@MTu-%4(UCFJE(m&mFL@8hlNXs10|83`h z$+%XA+3?o2CV#jS>N!0<Z8F>FvW~s8Pev<WS4*!x6m^fe5%<WCryNZa8bCF&_A=xb z|Fehdce;@CG4SA=M;?{;NtX$befB+5`lG`%?3gY0^9Tiv=7kN{dEXhk2JTuvy9jdT z@Hwfb6rD-8_nO=<i-_XZS?LMo<3r}`pX4iGECd-D!pUyOed|e<&=?nuE!2c<O7J4v zE$J4$STgbNlYZtPlG4aN^3yD#s&`m0+08XaoctX2Pgmtk>AkOZ?#`Cv`AW)rjgcZ0 zUclAg_I+Z)KN0?Gt{T;wE!PUyqC+8~6e)z&5JyKJcRu4yL{rPC-4qnYo&G`KeIj^b z2A7JLi<>dljF`Z_is2`*q#I#~VckCNx|m&W-)Uv|P>Ok>q$A|L2=(OoQeKp3>90A; zWEP#TodtU3_U_Cz-L7gq`=bs`KFaxKNE!77&qX0>@F5!`S#MrleZ4<-j(W^Yy&c~0 z!AD+_+K2l^_coOz<AYr3dqT)NvDg0XVi97JRJeY>h;|dC<E^r8G8Mc0t3g|cC$%S{ zJ3KF(7LEV%?Bvgz?B<<OWj}uW^1zc*D%nyv>h>ddDqoJ2uYsDx<Dv(e$j$BT%NN3# z7j3ooMataMIBe>Amm3ArRH6pb`MQ3T=}{!~CMj_^t_{*<tZ9cxF(t@N9z|W>D9|{p zG$PtwQPwv-8=F;ypgi)4H?8>K1UMfR^wM=_|BeL<y@KPVH)4I5b{GVDyRg0efk>%C zIDZ)O*5++&CA&nN;y}&rT9yM_rYaj#!g7Dwy_c_F%dsWFTTK4?C36^y8H&^jBhy#g zD$2@Ur*jZJ^4JMwfhiS_gUIFP=7wNq&g04gz1x}+@|0wP+S96qLXUUC8UwB`NHfUt z$k(neVSndh?x7Smu@8k1F|4lV+k$z156W)z2OhQKDP3MJERX%>g4&n&7Ekt;BfIA@ zI}u3MlS}{SDoN_a9Zrn%r{6p}t!nctD=QU1KXNOsg0(4-n5?WUF-jy04EMrcn#pU0 zLR-&zZjW60VmFjBrgvG~`;ZHSGRTaBUcq;mDI?*r?gYuYxzs<zukfIxHzr81ZrmT2 zma=g~e{4M+A{fPkwl4ohoQ>yM94^Y9%-MUkm@qzaCpE0M4I1Cb)>rmD9DO1SljWj9 z>gi2}nz%L1iNTQ=IuzdcCcpT9YeuiEtZXx=oOeZ>%%qAoRa5eK*2S^WC{mscq@t4_ zRsIB3lO#x(t8s6lP3OhgB<;l*WafXli4Y#*W~<URic>WAU4JAKwkEzN)*AF0L)g_< ziSceRx%i{khLmLLJvkAlQs}51mI94PGLeHE$&-c)o%ptTD`;GOdfq}%l7c?P`aXG- zqkge?L%MybD<a>99t;k?Y#?}o=ij^tCTQb2PbL}yRR|(~+6uNF@g1g>2y|8>z8g0M zGB}izK86-uJAJo=4p-$h{p~Jxm%1FA<`Tgk&LhVZE%ha_dtRNcFF7~D6MBUnJRr;( z(tZAH@FNIf@!{d&BvN@*nako})>H}?-J7bdhUgLDLG$w_q@<*(ygJj{?q6;Z8QFm) zIQG<~t*;NZo3#M>`L+M~(S9_Ecc8Cyaogi<O9QQX;mKEw4Mto{g7|XFfTg&}iiHw~ z$&bo&mHKV*4Kvc0ukq$j)fe+4tT1&cHq$K(w?jgnGm?S$^r5sLN?cpB5)~5*5ef&H zorNZ*!>YEUhBu=q%29k)T3q~dx=?zC(E_PrU(LnN#Kc4%PqeUHzzSb@^F4OTD4ArA zDcc9x47U~5ervpKZ53QCR>xt!5)_mo%iv5@#pS0pGcd4{JRlV`9MKbmc@5B%AJMjv z3Nl5#J(gn*KGF-&`P@z(0P|fFG4L*mk;=W%Y_gcOfG@S5)H%#7MLK*}I*P1;VZ)Wa zv{X2uS1xdi5mn##TsTt{+thUY2kURPe?(Uhwfwnh%iTxzjyiYFuV)sqL7JGj_a7>9 za)?Y%RVFN(ed!Rl33_@UouRASWOz5oaW^ON&W~yRTU(i|?6yOV_z6*=?Pu*bh!-w) zJc6G2vOSU@*<kMK8~fLe*S?%UTZ!7#<#4HymbUIgRT7oV*{>^T%!*u|kt#+OOqrA) zd=n&fWQ=&phU2o(+8Jizi365Qjp@9t;Lujgf(J7kM#W#_z+4a|-{BLMsI6l*UX&?D zcq2&qLXJiE3y&5rq3`K{jKkkSA4&3h=R4XuIgw>NgrRWIxYXrYEE6q$e&YxFBx)VT zURFg|Inw{lp3|aMUVr~D3pg2`$Aa<aitQPSd%K0)(Zc3+YJ@51w<B*(R|SSIHB@^~ zJatW}Aj3vVY-Px@I3ir*lWEa&=4a;ktY7$|e{Ipfl3;yk@BuGu^}Hj*fI{0h%%G5t zc&J%VFXAgwJ{?`IUyTdk7N#h_w)PhP8xk4!_sKswlOxEjk2JYOZ$HxAP5&{5Ydrb% z-&Aygz5*;$_#vi}#PdZ@L2%`!j2+JU%u<(3Nl|eTPE{LO^ZH}0s>uoU%x5RQQq5Oq zo1eXpc%b$TSBv4?$C2F@00x$ia6BK6X3j}TQnHMT*@&0UBe&vK9b%pA)jIR{E_Mk` zET9uw>M9n!w_dzFn3)_U&r4{86+OV(Sk1`lKIDlGo>#7U#FW6EsoJ^Z7`X10n0?QJ zxZkx74|<<@uU!-l4WlO`$|(`ao6FoJPs0!zu9BL$6u7-Oa&jUhv%W6o4<FOc?vxYU zzYR{9cw?WMq^}ZX8ar}O;)>o+QzVB@E(!d!-?s%=-0rR^x9Flz++1#?(^#A?@AHU+ zK^=>OxHI+WNA*<CiDzBM2RA!dI0I6amzSqLns<fz+S}ORphz)A=(5qHaxP4K(+-c_ zn!tcaw<X!imO-S&1Lr=`Ax+Eg7wjOll<j#M>FBu4FY*r5AfV3(JdefpLEI+yp~Ny5 zBs_2^tM*pQM(AyEXp+Obb4l>epFg`v3BLHuAecEV$B9|I9Q)u(gzNZwWbi@jep=_5 z?Sm8FcGHXQ!OgE6zeh&CL}nyV#0tG1w~>FRai1o}CZh-D|6)lB+1FEDUHu5>0*_Vx zT`DG3v&V^%8b3&nDol^6+ooZrB=df**PC&ovt{P4i-ET6Y3v-C<T2w%>t{}!C>`qE zmcP`^3desVUMJuCB1me~<ZfpX@a3?@!$d{s-*+uRkH5Jul6b9cum|7D8zpCY6=Bbf zZ(j5UP+et^F$VgK;bx)@R43gyQk2=55_(g<zPCYy+ZfQ)^2X?=E6|~E1BY=vlY}0i z*+jx9LK9aZBghw;jTOo$A`)508L||P>|G{pr%+DzXICC;fs7b?Wf_?x{Fjgu0itw< z4Y&cv9__Sk8Fl)^-1oEi&c~!L%qQvuZ`1P2#CEq+3o762;u2qWm&k#ecoD31$F!H) z;M^6Phh>Z7Y|Y#-Y7|c6SE+3+K@SA3=iQjL9&CZs@UHvVKjeMNttfp}3KCk9tHh-g z)MO<k8l(v2By)iM+>+5I-aWZ;eBN~7AJ9~}xgpP%q+F=^f-^<K&3IU_XA8Q3gdqu> z*q8!OyE&}eeHr(JX|zH3UJpZ97BhW6mRdc#ueIC;_u*;`xgXc2Zx)&;ec=;PPNwSD znMwc^vDxZ~+Ce-BYC9otTv5`E6(Zc4!f9T<-M%wdOHY3|V5&IhGMq1U7b%iSip65d zN=vaZa7}`@BtJitX&{vpsT7pc(La|QBi);f*St)~!jO;Oy?b~2RN^iI&_?fPZf-{& z&fL_T?Fc!}6dcqbKr<WKJZbemZQpb*?Xm;Xt^DLk@9k5Cf~!5JP$qxG*44RnfKyN4 z&d$~s@JK%|wY+fiJaJpwP8mK?(Q_-j6{GB!(rd;2*VJY>aUe4CgTQ8zzr3O%N02JG z!%PA}DrMF%Q+4Ls+NM@KK4AACOD!D@a;19uD$;=RP>I8N0l>UGLT5m)`x+Mf&%as< zH%jE>1|)b0XUYp_`aXoiE}q)iZ8tD5Fr*o+ia!#@y*%6~|6st?X%1s}u!zNAYC<M? z2ReT`ia#B<-PxsVcbJb|t)5C{iE>&07H27(nHCopH!P9!&4c#VHrIeKnA_pM3vB_n zP`q+DG8(Bv4fEcc`xY6H<+}nyaL}Oyp0FipUr7{F4Y@!1?DLmzDDF8donU9)XVkVq zfGaprGnyvr=0!zA`WgyD*3<s@gr#|Dmx}W@mTX)!1fm4OKt=Z$M!gt-`FLuk1Z$E+ z5mUh5<|n78c|d;(Hm0#|uOA2M4%D1|QvQdXTn)Y+yW{BdFLlitL#jj2U`>AUhQGtG zJ(Z7|NkR6tFp>X(70Ws$H_@K>=i^q|);Fe#1D`ag;}qQnYI1QM=YX8V5PkHhq%=A` zod$r#ofesR3j2npJG!xk;y2=#pPQQg{W!CI6mIT&moiE<^WlB$+{<Qf>Wd*UJnLZ^ zV*zM!%V1Y*A-1PXZ}fBE+n^1{d&IiCk}ElnIxa_<ak^vudt`FG2s_;-^H2BDqSSD^ zB}dOe(V_KicOO4FxsZ_MXctu=!Ne&pxi=XGGP0|VivnB}{qId=0ZfA`lXoB*Z7>`k z8!KP*?CL`Ot}cd?(dRh$`lL4~<v_kHPm<_rnK=UW*Q8uj?Sz)KebBxEWv6zN-v5w2 z@}6FB+a^DNb<n)8$m`CcaTz_@-GjW4rfdJ*ii!_cfAp&BONoCF{MOK+E-fV!>N!Ij zxbI31?~81owj;VmM&O_`fwPjxNw=2b;^N;YS_bJ(|F(WEf!H{SK(WfgTN#MMr2ZbC z7jCTTeii=J8*jcM$BY~k?T~oXF+JUm!N}m^B<3<D4!l`f6#wqXm|fT-n-)ahz;GYZ z)T=bRNP3dUiH|Aj5LSy!#?RFBgv8gCrAHSQm?zvWWg!FugU|NX&)TkJjvv(QzX)Vy z92^8(jVJ#%O5Y<m)h5?NxT1e=Y!C_e5aP58#!55O)1T=Bg5k%CUUijNlK*#aq|!KK ze)2|_VEch2z_j{0I!V3^g`M^d@7_04r6j6y0=h6P+!K!rp|+-Pd(2YshEa5w!HaDE zv~!rI3|WPgmMRr$9z=5~C&S4i?gqa{pp?f&uf1QseEF?T6$#@|4ldx@^^|;0MUc$V z!l$awb#{I(hpm(rJbfX~NH%yE!#jYK$O$(`I9hez#&Kq6OH(lbTHM+B{IQg|nHf~o zb|rz#hyU6;35{XDKEgGyk55SOcxK-&Iurn6km-jKkZf$P8wf^UejjtYr0$tY4NCzN zP#GRhDA?1E0Gi`1d$0KA#XZmG0I~2H*1xT<rzuv?>CYB->cpSNj6?z2f7gg#F9vN8 zyDV<s9Zh}VGk?IuFnj<DLju_XK~E1@0n*qw=X9C*`sAAu$Ns_BP)A0OhRIF8nz}l- zC6VIm0<+j9pcT9;Ewwj`RolC~7hU7C(CQ}uG>SMEi5xH-GFn=<0CD)WCvM`q*De3- zSwaT_#n_t!`r0}=I;s{c<kHz)?R&a^@Oq*=b9btH+3A6(D3w~FCKe1c??7|!^3oeV zL(b!)qiz$wqaP1?^nE4r3%HnoBIqA6xoO<)JQZMkcyy%jZuIx0sG5)K*<)m6jonOr zYf%xWH49v+ciBlxM~6L4g`#-;>*VC552u6g!+@)cu$`Tq`!edH6v#glRi@J2Motnr zUp8C;VE9;PHH1+`q24`SpKf1VT-0afgaRu!J#LbcUMQxo#&-`69lM*kx{BV8QzWOd zz=Z^RD1mJEjzP@6{FR*@wWWa~_+8V_j<ThdmAU5KV8*3c-^T;F7)OSxyMmVAX!rQ| zc=&^n&X3TprH|_<$=9!613jkkXCykd+s(MGqN&N}b86tn>pvi8>k1;8KWv`$uJQC9 zToB|9-^dzDPl%~2DV6Ao+}PgkK0R3XE8w!nb7lwYSIlARBaTYYlqL{{o95!RdBRfe zJ|ipCEb-)}+02YV^i1ifY&>bgVsj1aUg;bKJSlrA>|CN$wSo0#K-qp9In?KMUu_S< zqup|Ea_+h*COWh2{((SPvHsJix22`T#n1BWapx)3;{F+AzYaJ54ITxSEAI5GTZUy9 zhT=6M-2<v98&KE0eSEGzRa9)ZRqQ`dyJc)_{0>{$79pg|viOPzH>jN!$2ST73k#-w z(*E;Oc+<_UjA~LP?yx!g8?5hfJYy)XeyXbXWVl_N?Bx;S2Hha0$-o1<hcnv3(8J@n zcY0=~<!Lo}Q}S~iYS1>T@uc)ugimd%wae4|yw^51OWW?}^GLL3?h~mFVge|B*(%4( zN|+Ai=(xM28JR(<HZGN?#BufeS9eT)n60?Mt1lKpn`4DfaddPR(3rJn{T0?`W{XRz zoFbbs>*xL^ih@1f2oyTBw}qff@alfb*XCnzYlo%q=|8J50bF)=_Kn=!Trn_n`QMWS zZ^u?=*kD>}=khvXx$D+wpmFd;7nB>qgdj76iK_c*O{YK_dDGj|lP>z#z1l1`zo9`) zLR9pyz#Jha(nB0dl1`|gF)>gxD?D@QyD<ESZKB*@9B}0;n|yp62*vw$^Xz7j%;L2% z)|Fd(D|%6rg)%B*{aX%0l;XR9LYwK<Ss@rncmdaSv-i=T_@6uL=b(6?vXLEA&XiCb z0@u`0v5)%Mj(CdWDa~q$0t0#s^g7|H$=Ach#6#Q6T#xR2G3xt!HaIFoL5GOxwkR!a z1wToPK(VL2N&t#7Xmz5oe+9G}sKharVaSK65R?r|u@&m^U*7X1n|B>o%M(&_u}A=b z6@fqmwuRcg=w{1Ne^*pQ7+t{9CJhq)q-nrqou{PKx_pIdqR|4iJpVH<cP3dFMOkTS zs8{DbKB~M&<s4KhcSq;uZVuG&<hu8Xs!iF})9q=5CjM$*OPk`T@e{kpRVc|S{~nSA zh@{jy{`oB(9TA8JS<V$rz!qB!bf{b@pMP6F4%UaCAoCNe;k9C*7sbU-9((M}Itn7T zvZ^G95B~BsRc9)#oK>;_Ed+?Q+7J^{;1jCuhb=CcqMO5FbpkZ8)y%h$FK~FZs0vw* zAIAHrjei>Muepc`3JRJG?pQpBw6#>cWZ@Yc%FSHSH5|(BvT!B!2}4ZL9UYyaml&%J zth%$PsZ}iBxZ5RR@%X7fw7|dX&xGt#huR8K{j=bjT?oUE_-3&ie0+ReQ2Ma0A{?J# zKQ@uWMqLpg99*H})gU+<&WEG(OKBT$Ks5vLnW}{9#kUH$IyaBz*Y-SHdz`XK+V@mB z5AHTvpQ>_dF(>pgK%$x|hT`#t9f+q{MP8XgG?3%Xc9uXmDwYDNtDJo3@@C*D3h<+a zHylJjODNGMPSph3Te)eQzlW*m0=Bial{!`Pl|lLq8I8*9)3>Fsg5ua6WT_M$LF5h% zGn-zydG`swh^l=koi-#YfB>y5*u-jSq`CqSLrEOw2-sGqs2X5WMlIgdn-dkACr4EQ zEwRg=Q%g%5peb^w(e?<h(NrT5eM+O8tg2#j`R7O3n{EpsS9f>tTm@Jxy+G>;8<j#3 z?*JVH1{b7E6YY2ky#wVH63~rTpby-IpZxi?glJ;uKv{-1jU^iX3yvQIIpPWyjB@QX zAE<-2e$D&*RWLMUcwuOGz<~cScO4zSoX+=NO=W}AAU%mBDx!C}1E}eHqY3_018)R+ zTm8;~GIikdm_vh#C~zOwj)Wys^@@!qW(doaC^EyqHGJUaB4lA}Yda_yYk+Ki8m^bj zk-P3yl}X^4+Y9jHe`4cayhr=rV|JRDAWan*E18N-V-O7lqLHNr6?&j1709<hVfs%; z2!*@4y2_-Z`)aZmyjN2>lvl(nE$VB{5e}iqd;??oM$3J-RJf*~d8G{oY^e6BsSJat z5`Qui<zx<(5{AI9PK*!irtyo%qd+BVS297TOt)j(Jw&L70=X5MNT9&B5<lT2*u%*G z=AJ<K;*s~#@p-lF&zcK+om+vtFx<N^<W~b8YdjP$RZRCM8J6dcTE5@#Hs7Uco*#x~ zfgA!VaR6}LDB!w66-NH@Y7N)q$tWtp6`ZpdYrWidK!MU52tRV-j6EX5k|_)Cx%MOl zw1X)ad%wmC5kczN;z3%)>PwwrB;qb>q`BUIxIY_JHoqL>E+i~;-D$zS6TE)vumgTz z&(oI;J;HG&!(F$RIz~q`J~f5dX}k8nI4qXl{`>cD-W@sx1N{3dvxt(ty}i<RPZG#* zK9Vttx6jx<P#*u3!2;uf($$MgIFvu(#x4@EW*6D40nXr!GcsQMEC%p6z5xr#;jC26 z52b(b%_xzsmSQW~q?ebM33*a}XSG0OeKwHtOzI)K3uoc?o&!l~^ecuqMW;(3Dnfu9 zs*Ci{zz3wL8GG-qB!2*yFPH`9777KNoL&>O4aeNQ+V(nbH`674g>jFvqV5jPRu6?I z!I7%tR9?9b1cCo12z@VKn?fkkyvxffbIIgDa|EkpLs=$cua0Pr2#Oc$zCEo4y?9_h z8~OANzxh5sX5A~(nNbWa4>-T=d@~)W5Ydz2<C>Oo$U=X(3OS)5c(U8IW-xi{^#kAi zdGhx4EQ@kjXkzj|KU!oZnIoeZ#hU>V$$E#GP&-30^{sCOsaVL94#ipc>DT(+;qkGw z^Y4-Tr7U}_O}OVTarHHqTjfN6VRQ*Pg3SAF&$IbU##y5*_YoXP3W3^q4%E&Y9?`ac zGcq`^<FyuJo+R`tt){RILZE0^*^(mEfM>z}KQDk~r!PU^bFSc~ovVensVq6)yqmmo zX&=VF?oTsKEYyYVd0upa9GGA`hdsg@?-C|rec*o<3CG77mOL2D1i<W>4h8}Fep5{q z$y7~V_u|h{Kfdkh<(%xG1d3)~Yj}e+`zeq#pO3gU%Q-?{Zn#RkFMS0{<Dus_<|Paa zsJeBHCq<wPw80wkXw3FAz!`YYq%RLuKxx~3-wo_QruI|>W>&-WnEF=ra~>G0=z5n| z7r@qWy~|DG8;27%=xO21!I*IK3ntc;KIE|fKmsg&IX9|z8QLYsR$kjW(<vwCek0J7 zwlkQ>Gfz@yN5zI2@lWE_)zt|!&S@oQ+`Cv&VAavl(9yXA;?I@Y@y;BP@gxcq{36cJ z&WP{w@_<Sen{x8X!D%Zwi;aQq*yhpINKLsYqzGG@wHG62X-AwB4j)j`{PwqwrIQ?% zOMWlVUz2SW>sMV``iC4yUocjhLT#YPkg1fYazEa5Z}J1u1odO)5>QkeEh;K94rbwM za^J3ri;v$gEk*X<d9ft^ts@~WE=N?YHf>oP=-eO*D7>h(QX@&c$r=F45&>GWm=AOI zv;cDJx=w!u2%R8?Qx-llI_e}xWT$)9$K3n)c(#_it=0MJ!mAnRFhJ7}H)mla%LDsu zaz6%Ht<URn_<Quf7&Y_vxar*}SCl+k?>!~0hXS9?MzwoT)M$B8dcVubwyUG!Ir|1+ zSzy<zG@^S7)Qo16D!#i9B0M9ys-^z^0=lO|F4&h=$Ub4{^yg~1Q)OX6s?l?=)SpQy zc><Y9vDMMSpj;w-{9Wr=PXFbjK?F&CUEOUwN0DBqk3VfUy;dv*QKZ0kVX^a93OcB? zN(*vERF4o~lJf-CLo!KXt2qL-QmXExd?iUo&t>1z<E-O-Dn^P2P_9&pDktsv?Aje# zHS{+*p3-s>)=X9ZjqfE|4zDnT12wKvARX-g9(`8~mWh~F$@fKz2UqTqMYH%dE4?&h zRzgagDU&ePhC7r|*LW=bK>tv9ME@C@CmVhLEiLmioaT=%H$WAvPyi|KFQNY0x7h-A z`TY_irkwS-!@Q^Vg9?xJeO2T_KRslOfAcUt#fFBl*GaP1i6u0nk4L8;u?(uvs^gaF zKnpVu<sI<8BNqA;P|koMr`he$#Oc{+=2h|dwOLM1R4iV*NROF8y179*8pDZaR-{>S z<7U@~6OD{obMA+KORK6JoSWuuF$w(VR`Hf1$?SGwT=nv2du*hh{r&jxaFC8jh(SF5 z^^0nY?xU0{H7RPTg$dW{w6B(qtNm&H5%k}J3N1rbxpQjjWw^sQlut{pj4W!5_Ou;~ zzxig35wWs_YVUmd$@bAw0@xwKQrj{sjZO_FTpBZ`7St6T8P~bQ(%o=4Z4F}kDonL~ z)hzgV>DXbcl>}S-d}VS5ndwUQ#(qxE+H&UClJCpg{A9;njVY>8)U=nsa2F01D&jSh zPyLa9sybB2R$PA1U**zBU-LFal)Q>mKW~~!hv-lZ+d~A(mxGe~?9(lltPu}SPefmM z7(ZQlEJZrHkunNjMR_qpdTBs($e9lzL`5unFSXo{W~Ek2Ks2^ko3}6?J~KVN|Fs|* zclbcR*6Jp{EZ4o26is@=R$nh=y3{+$NI-G93aNh%>hq?LO>$g&j8e!vKz^LH9_Y~I z*{m@wHxi**H8gB%iG7>OztY{mJyK)*`{{O&aX--<(xiO$G*Dy5?5yH81&LQR!DsQo zYx6Inyu01$MxvMG?8NVk6jS*yA3r_CfBLGGzcF54X?9Dq!f?IX(r7p#5~RVtlamuO z`$yD9{7q&3%gJ<s`T35>ABUl6gKTre*ZBB&H^$x}pR-BEkNd+WSl12S!td!r9kMGr zId&%T?`&U+TZVRy3PSqnX}VP1K(3qFo#DlZL%^~GYU|IU3#M3=HJ_mT;;z3WS?4_Q z-}^Ma>@@K-`4iBa1!F@}5YH=XauGmqUJ&f@%o>_7Pg(7`dwn{*U3InfD1IWHuz`1A zyN0)+taQ4<=7qSPzcO95Wn5;_#vtEV?X1*&$Y3e&>xbuePeVAXR?xz9zp*Cic=1At zJ-xjLnf84vpG!MlcO{}J!uQgpKvR~nnT@HGB+|0)@xeMF?Q(Q?bL&`g)K5pF_kUUk zcfcRmoeM%NNrRkYW1@UFWomgz=H}*DLaC%yyqSJuuYkSC0vMk3)4Ns22L*e~^huBX z)`n|bGdZE;;f41&f*?4XVb+qZ$W4Stf#C}^G&FP?$DZ)y-KYo%Wb{!zKVNbMFC_`l z#P!@tQhGll7+Zyh;0%3x$47gw!+BbibUAq8Z^BCOE!BvwJ@V30lM%Pa$tq<Vv88g8 zYR2QAKwxMD?Ox}=Er8I`Zr>oF`{!-2eho!Z$}rg7z`_yWIQ;my{6<XyP}gn%9{;|+ zUKi)%#p)Z=s}QjT-vb6-9~SdY(V>_FZD|JF(o#htRuf1cY|p!YThDiXK)|(?U?vy| zuw{OJeg|Ir!QuF`03HM>rhsd$fnYo=+?OV%(DiKf-8Vj2cqq6m6v?_ZRgIT-by&Q& z7()J^lj`W`2o#*LXafld&=0QuSXJxT4S=Q+_Rz^327q?Z3YdJkE44>7>#^WB)!@Jk z9A=Boji7`c(NM4)@MvxkTj{ZS^$A}VPTB>EvZmx!lQDI#Cy~h<z8A~Py+3QM51yuR z4lpSq%wp4W!h}-39^%}xr*sB#sP7i)XSvg<`@&JB2P+kE(7Kn<b;nE0M3eSA9DQ6x z0GNOM9Lf@F1DR8|XW1!a`7>wkdIJbmi-#NIBceCEy1M!-g*}(TXayxChzDwXlR4%r z5QN$~kDC+!>F8WGcuH38OSUBoO)$amKL%X;gOV;Vw}A?C$PMy>vN96JUb|$pmmg1> z1sMJ9NA6qVV<7+8a;yGSaCqC&;<r5KvCzT@<$C@i>Z{p$<>27q=IXjQk}oIjyaKat zInvF3=wkJ&odk*=UiW#z0{^YfnL-k+3k+3ZW`ZZtT}%2}#>U$~BjW=OEdTwKJTqX! zIaw75005!dyo(U15mmr-#+l;zJ3m4K#(KM|<==E4ko6g$K}i*`SiV!p!uGsc=A(|* zT6~TzTwSSv|IOEz(Y}G<jeu#-aoe?@QL`rnu%z$+!b3qy2=aIbP^yPW=Bx%0wHDP= zK(5M(nsq|`C-gBgemQPEehf6UAfa$ze*<6>tcY3v^X*%EAN|`F1`aODiCpi6b<?Qv z0nzZ5@?Cm*`j4nyvhS0V%TJ`wDE<SiKw*>_7X?;}t+^)JyXx8PO$(Ry<p#Aq4z)k6 zhQjoSVXQX+Nxxb+%~|N!7%z4j;A>bs+pKz`qeBfGOW|r+50<8?QTlbSsDZsF{@b^2 zQP%%S0f3wSaM3oU;4OW*f9hN2C$*5;OaqJ~_=QyL>_1(}gIN~C8SFEz7;PV9{XX(u zAX+>M8)F@Cw${>0F@=XlQ56NVsBSn$bOqgiJu$fZx^d3FucrBTEEq%9Xp4ix6x)N_ z)lSPj!NUNHQcDhZS=9zDf5xbc<a4R`Nwsb5Y}{>K|A-!-fifrx@*dgQj?UeVkzn)8 zZ5T=~sw^sUWL|dxP%zXeeSiQUG_0@EknOtVVA^rIY4E`;O&yN$WSM|zD=8@0J<b{3 z$gX1#w2dyv&u1mQd6N}*3It=Lv*}+W!p|2wLL9{zcTaskl$8zSrHQ^Px4{7Q@4r{K z1$ck1Q&&pqIvA#a#xG0-UXCxzPWU0RUw|oX=k3LNyJ#+OH@LM6>$drpi&#BZ(jX~x zBQ!A=IAaSyIe*C!0c@+ET{kp4cAw?00~2DlI*@;9=@}TD0M=KKwlc4#>kw5F0So4I zV`F?x&fcP7aq9vCG`Q;M__%AswR8QTWBp(WyIGlaK-Yr+@-$HSZk1@i8r9pRaT8%@ z{c>+$pR;YDt!v4V*Q069ziDo#I5j#Qt-+FI9|X6^ETa1%%7;-YEGW_DDc$sT;GjG; z;h@Ys2(4n<aMae*YcteHbqi+Ut)1Cs${Jcr=lH6?U3dyTNDl*^rOs-7Tk#|%MrI}^ ksc735o4-Qb2imW1jM*<3*M8790M=$mSwUUC5@{Cve@X3082|tP diff --git a/bitbots_recordui_rqt/docs/conf.py b/bitbots_recordui_rqt/docs/conf.py deleted file mode 100644 index 586c7734e..000000000 --- a/bitbots_recordui_rqt/docs/conf.py +++ /dev/null @@ -1,193 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Full list of options at http://www.sphinx-doc.org/en/master/config - -# -- Path setup -------------------------------------------------------------- - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -# -import os -import sys -import catkin_pkg.package - -from exhale import utils - -package_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) -catkin_package = catkin_pkg.package.parse_package( - os.path.join(package_dir, catkin_pkg.package.PACKAGE_MANIFEST_FILENAME)) -sys.path.insert(0, os.path.abspath(os.path.join(package_dir, "src"))) - - -# -- Helper functions -------------------------------------------------------- - -def count_files(): - """:returns tuple of (num_py, num_cpp)""" - num_py = 0 - num_cpp = 0 - - for root, dirs, files in os.walk(os.path.join(package_dir, "src")): - for f in files: - if f.endswith(".py"): - num_py += 1 - for root, dirs, files in os.walk(os.path.join(package_dir, "include")): - for f in files: - if f.endswith(".h") or f.endswith(".hpp"): - num_cpp += 1 - - return num_py, num_cpp - - -# -- Project information ----------------------------------------------------- - -project = catkin_package.name -copyright = '2019, Bit-Bots' -author = ", ".join([a.name for a in catkin_package.authors]) - -# The short X.Y version -version = str(catkin_package.version) -# The full version, including alpha/beta/rc tags -release = str(catkin_package.version) - -# -- General configuration --------------------------------------------------- - -# If your documentation needs a minimal Sphinx version, state it here. -# -# needs_sphinx = '1.0' - -# Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom -# ones. -extensions = [ - 'sphinx.ext.autodoc', - 'sphinx.ext.doctest', - 'sphinx.ext.intersphinx', - 'sphinx.ext.todo', - 'sphinx.ext.coverage', - 'sphinx.ext.imgmath', - 'sphinx.ext.viewcode', - 'sphinx_rtd_theme', -] - -# Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] - -# The suffix(es) of source filenames. -# You can specify multiple suffix as a list of string: -# -# source_suffix = ['.rst', '.md'] -source_suffix = '.rst' - -# The master toctree document. -master_doc = 'index' - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -# -# This is also used if you do content translation via gettext catalogs. -# Usually you set "language" from the command line for these cases. -language = None - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -# This pattern also affects html_static_path and html_extra_path. -exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = None - -# -- Exhale and Breath setup ------------------------------------------------- - -# Tell sphinx what the primary language being documented is. -num_files_py, num_files_cpp = count_files() -primary_domain = "py" if num_files_py >= num_files_cpp else "cpp" - -# Tell sphinx what the pygments highlight language should be. -highlight_language = primary_domain - -if num_files_cpp > 0: - extensions += [ - 'breathe', - 'exhale', - ] - - breathe_projects = { - project: os.path.join("_build", "doxyoutput", "xml") - } - breathe_default_project = project - - def specifications_for_kind(kind): - # Show all members for classes and structs - if kind == "class" or kind == "struct": - return [ - ":members:", - ":protected-members:", - ":private-members:", - ":undoc-members:" - ] - # An empty list signals to Exhale to use the defaults - else: - return [] - - exhale_args = { - # These arguments are required - "containmentFolder": "cppapi", - "rootFileName": "library_root.rst", - "rootFileTitle": "C++ Library API", - "doxygenStripFromPath": "..", - "customSpecificationsMapping": utils.makeCustomSpecificationsMapping( - specifications_for_kind - ), - # Suggested optional arguments - "createTreeView": True, - "exhaleExecutesDoxygen": True, - "exhaleDoxygenStdin": "INPUT = {}".format(os.path.join(package_dir, "include")) - } - -# -- Options for HTML output ------------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -# -html_theme = 'sphinx_rtd_theme' - -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -# -# html_theme_options = {} - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['_static'] - -# Custom sidebar templates, must be a dictionary that maps document names -# to template names. -# -# The default sidebars (for documents that don't match any pattern) are -# defined by theme itself. Builtin themes are using these templates by -# default: ``['localtoc.html', 'relations.html', 'sourcelink.html', -# 'searchbox.html']``. -# -# html_sidebars = {} - -html_logo = os.path.join('_static', 'logo.png') -html_favicon = os.path.join('_static', 'logo.png') - - -# -- Options for intersphinx extension --------------------------------------- - -# Example configuration for intersphinx: refer to the Python standard library. -intersphinx_mapping = {'https://docs.python.org/': None} - -# -- Options for todo extension ---------------------------------------------- - -# If true, `todo` and `todoList` produce output, else they produce nothing. -todo_include_todos = True - -# -- RST Standard variables --------------------------------------------------- -rst_prolog = ".. |project| replace:: {}\n".format(project) -rst_prolog += ".. |description| replace:: {}\n".format(catkin_package.description.replace("\n\n", "\n")) -rst_prolog += ".. |modindex| replace:: {}\n".format(":ref:`modindex`" if num_files_py > 0 else "Python module index is not available") diff --git a/bitbots_recordui_rqt/docs/index.rst b/bitbots_recordui_rqt/docs/index.rst deleted file mode 100644 index e76aa433a..000000000 --- a/bitbots_recordui_rqt/docs/index.rst +++ /dev/null @@ -1,21 +0,0 @@ -Welcome to |project|'s documentation! -================================================ - -Description ------------ - -|description| - -.. toctree:: - :maxdepth: 2 - - cppapi/library_root - pyapi/modules - - -Indices and tables -================== - -* :ref:`genindex` -* |modindex| -* :ref:`search` diff --git a/bitbots_recordui_rqt/init.bag b/bitbots_recordui_rqt/init.bag deleted file mode 100644 index 69929cfc1fd2c4426fcd9e7baeeeaac7bff0f20c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 200686 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 diff --git a/bitbots_recordui_rqt/package.xml b/bitbots_recordui_rqt/package.xml deleted file mode 100644 index b2cc1151f..000000000 --- a/bitbots_recordui_rqt/package.xml +++ /dev/null @@ -1,41 +0,0 @@ -<?xml version="1.0"?> -<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?> -<package format="3"> - <name>bitbots_recordui_rqt</name> - <version>1.0.0</version> - <description>TODO - </description> - - <maintainer email="6stelter@informatik.uni-hamburg.de">Sebastian Stelter</maintainer> - <maintainer email="info@bit-bots.de">Hamburg Bit-Bots</maintainer> - - <author email="5guelden@informatik.uni-hamburg.de">Jasper Güldenstein</author> - - <license>MIT</license> - - <buildtool_depend>catkin</buildtool_depend> - - <exec_depend version_gte="0.2.19">python_qt_binding</exec_depend> - <exec_depend>python3-rospkg</exec_depend> - <exec_depend>qt_dotgraph</exec_depend> - <exec_depend>rosgraph</exec_depend> - <exec_depend>rosgraph_msgs</exec_depend> - <exec_depend>roslib</exec_depend> - <exec_depend>rosnode</exec_depend> - <exec_depend>rospy</exec_depend> - <exec_depend>rosservice</exec_depend> - <exec_depend>rostopic</exec_depend> - <exec_depend>rqt_gui</exec_depend> - <exec_depend>rqt_gui_py</exec_depend> - <exec_depend>bitbots_hcm</exec_depend> - - <export> - <architecture_independent/> - <rqt_gui plugin="${prefix}/plugin.xml"/> - <bitbots_documentation> - <status>tested_robot</status> - <language>python3</language> - </bitbots_documentation> - </export> -</package> - diff --git a/bitbots_recordui_rqt/plugin.xml b/bitbots_recordui_rqt/plugin.xml deleted file mode 100644 index a7e1e35b4..000000000 --- a/bitbots_recordui_rqt/plugin.xml +++ /dev/null @@ -1,17 +0,0 @@ -<library path="src"> - <class name="RecordUI" type="bitbots_recordui_rqt.record_ui.RecordUI" base_class_type="rqt_gui_py::Plugin"> - <description> - TODO - </description> - <qtgui> - <group> - <label>RoboCup</label> - <icon type="theme">folder</icon> - <statustip>Plugins related to RoboCup.</statustip> - </group> - <label>Animation record</label> - <icon type="theme">preferences-system-network</icon> - <statustip>TODO</statustip> - </qtgui> - </class> -</library> diff --git a/bitbots_recordui_rqt/resource/RecordUI.ui b/bitbots_recordui_rqt/resource/RecordUI.ui deleted file mode 100644 index dd5d6ca4e..000000000 --- a/bitbots_recordui_rqt/resource/RecordUI.ui +++ /dev/null @@ -1,339 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<ui version="4.0"> - <class>MainWindow</class> - <widget class="QMainWindow" name="MainWindow"> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>1285</width> - <height>670</height> - </rect> - </property> - <property name="windowTitle"> - <string>MainWindow</string> - </property> - <widget class="QWidget" name="centralwidget"> - <layout class="QGridLayout" name="gridLayout_2"> - <item row="0" column="0"> - <layout class="QHBoxLayout" name="contentLayout" stretch="1,3,1"> - <property name="sizeConstraint"> - <enum>QLayout::SetNoConstraint</enum> - </property> - <item> - <layout class="QVBoxLayout" name="verticalLayout_2"> - <item> - <layout class="QGridLayout" name="gridLayout"> - <item row="0" column="1"> - <widget class="QLineEdit" name="lineAnimationName"/> - </item> - <item row="1" column="0"> - <widget class="QLabel" name="label_2"> - <property name="text"> - <string>Author</string> - </property> - </widget> - </item> - <item row="3" column="1"> - <widget class="QPlainTextEdit" name="fieldDescription"> - <property name="maximumSize"> - <size> - <width>16777215</width> - <height>150</height> - </size> - </property> - </widget> - </item> - <item row="0" column="0"> - <widget class="QLabel" name="label_3"> - <property name="text"> - <string>Animation Name</string> - </property> - </widget> - </item> - <item row="1" column="1"> - <widget class="QLineEdit" name="lineAuthor"/> - </item> - <item row="2" column="0"> - <widget class="QLabel" name="label"> - <property name="text"> - <string>Version</string> - </property> - </widget> - </item> - <item row="2" column="1"> - <widget class="QLineEdit" name="lineVersion"/> - </item> - <item row="3" column="0"> - <widget class="QLabel" name="label_4"> - <property name="text"> - <string>Description</string> - </property> - <property name="alignment"> - <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> - </property> - </widget> - </item> - </layout> - </item> - </layout> - </item> - <item> - <layout class="QVBoxLayout" name="verticalLayout_3"> - <item> - <layout class="QHBoxLayout" name="horizontalLayout"> - <item> - <widget class="QLabel" name="label_5"> - <property name="text"> - <string>Frame Name</string> - </property> - </widget> - </item> - <item> - <widget class="QLineEdit" name="lineFrameName"/> - </item> - <item> - <widget class="QLabel" name="label_6"> - <property name="text"> - <string>Duration</string> - </property> - </widget> - </item> - <item> - <widget class="QDoubleSpinBox" name="spinBoxDuration"> - <property name="singleStep"> - <double>0.100000000000000</double> - </property> - <property name="value"> - <double>1.000000000000000</double> - </property> - </widget> - </item> - <item> - <widget class="QLabel" name="label_7"> - <property name="text"> - <string>Pause</string> - </property> - </widget> - </item> - <item> - <widget class="QDoubleSpinBox" name="spinBoxPause"> - <property name="singleStep"> - <double>0.100000000000000</double> - </property> - </widget> - </item> - <item> - <widget class="QPushButton" name="buttonRecord"> - <property name="text"> - <string>Record</string> - </property> - </widget> - </item> - </layout> - </item> - <item> - <layout class="QGridLayout" name="motorControlLayout"/> - </item> - </layout> - </item> - <item> - <layout class="QVBoxLayout" name="treeLayout"> - <item> - <widget class="QComboBox" name="treeModeSelector"> - <item> - <property name="text"> - <string>Power mode</string> - </property> - </item> - <item> - <property name="text"> - <string>Save mode</string> - </property> - </item> - </widget> - </item> - <item> - <widget class="QTreeWidget" name="motorTree"> - <column> - <property name="text"> - <string notr="true">1</string> - </property> - </column> - </widget> - </item> - </layout> - </item> - </layout> - </item> - </layout> - </widget> - <widget class="QToolBar" name="toolBar"> - <property name="windowTitle"> - <string>toolBar</string> - </property> - <attribute name="toolBarArea"> - <enum>TopToolBarArea</enum> - </attribute> - <attribute name="toolBarBreak"> - <bool>false</bool> - </attribute> - <addaction name="actionNew"/> - <addaction name="actionOpen"/> - <addaction name="actionSave"/> - <addaction name="actionSave_as"/> - <addaction name="actionInit"/> - <addaction name="actionCurrent_Frame"/> - <addaction name="actionNext_Frame"/> - <addaction name="actionAnimation"/> - <addaction name="actionAnimation_until_Frame"/> - <addaction name="actionDuplicate_Frame"/> - <addaction name="actionDelete_Frame"/> - <addaction name="actionLeft"/> - <addaction name="actionRight"/> - <addaction name="actionInvert"/> - <addaction name="actionUndo"/> - <addaction name="actionRedo"/> - <addaction name="actionHelp"/> - </widget> - <widget class="QStatusBar" name="statusBar"/> - <action name="actionNew"> - <property name="text"> - <string>New</string> - </property> - <property name="shortcut"> - <string>Ctrl+N</string> - </property> - </action> - <action name="actionOpen"> - <property name="text"> - <string>Open</string> - </property> - <property name="shortcut"> - <string>Ctrl+O</string> - </property> - </action> - <action name="actionSave"> - <property name="text"> - <string>Save</string> - </property> - <property name="shortcut"> - <string>Ctrl+S</string> - </property> - </action> - <action name="actionSave_as"> - <property name="text"> - <string>Save as</string> - </property> - <property name="shortcut"> - <string>Ctrl+Shift+S</string> - </property> - </action> - <action name="actionInit"> - <property name="text"> - <string>Play Init</string> - </property> - <property name="shortcut"> - <string>Ctrl+I</string> - </property> - </action> - <action name="actionCurrent_Frame"> - <property name="text"> - <string>Play Frame</string> - </property> - <property name="shortcut"> - <string>Ctrl+P</string> - </property> - </action> - <action name="actionNext_Frame"> - <property name="text"> - <string>Play Next</string> - </property> - <property name="shortcut"> - <string>Alt+P</string> - </property> - </action> - <action name="actionAnimation"> - <property name="text"> - <string>Play Animation</string> - </property> - <property name="shortcut"> - <string>Ctrl+Shift+P</string> - </property> - </action> - <action name="actionAnimation_until_Frame"> - <property name="text"> - <string>Play Until</string> - </property> - <property name="shortcut"> - <string>Ctrl+Alt+P</string> - </property> - </action> - <action name="actionDuplicate_Frame"> - <property name="text"> - <string>Duplicate Frame</string> - </property> - <property name="shortcut"> - <string>+</string> - </property> - </action> - <action name="actionDelete_Frame"> - <property name="text"> - <string>Delete Frame</string> - </property> - <property name="shortcut"> - <string>-</string> - </property> - </action> - <action name="actionUndo"> - <property name="text"> - <string>Undo</string> - </property> - <property name="shortcut"> - <string>Ctrl+Z</string> - </property> - </action> - <action name="actionRedo"> - <property name="text"> - <string>Redo</string> - </property> - <property name="shortcut"> - <string>Ctrl+Y</string> - </property> - </action> - <action name="actionLeft"> - <property name="text"> - <string>Mirror to Left</string> - </property> - <property name="shortcut"> - <string>Ctrl+Left</string> - </property> - </action> - <action name="actionRight"> - <property name="text"> - <string>Mirror to Right</string> - </property> - <property name="shortcut"> - <string>Ctrl+Right</string> - </property> - </action> - <action name="actionInvert"> - <property name="text"> - <string>Invert</string> - </property> - <property name="shortcut"> - <string>Ctrl+Down</string> - </property> - </action> - <action name="actionHelp"> - <property name="text"> - <string>Help</string> - </property> - <property name="shortcut"> - <string>Ctrl+H</string> - </property> - </action> - </widget> - <resources/> - <connections/> -</ui> diff --git a/bitbots_recordui_rqt/setup.py b/bitbots_recordui_rqt/setup.py deleted file mode 100644 index 1d654f18e..000000000 --- a/bitbots_recordui_rqt/setup.py +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env python - -from distutils.core import setup -from catkin_pkg.python_setup import generate_distutils_setup - -d = generate_distutils_setup( - packages=['bitbots_recordui_rqt'], - package_dir={'': 'src'}, - #scripts=['scripts/motion_viz'] -) - -setup(**d) diff --git a/bitbots_recordui_rqt/src/bitbots_recordui_rqt/__init__.py b/bitbots_recordui_rqt/src/bitbots_recordui_rqt/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/bitbots_recordui_rqt/src/bitbots_recordui_rqt/animation_recording.py b/bitbots_recordui_rqt/src/bitbots_recordui_rqt/animation_recording.py deleted file mode 100644 index cc7db92bb..000000000 --- a/bitbots_recordui_rqt/src/bitbots_recordui_rqt/animation_recording.py +++ /dev/null @@ -1,377 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -import datetime - -# todo -# copy paste of frames, from one animation to another -# record button next to frame name filed -# set min max for joint value fields - -import json -import os -import math - -import actionlib -import humanoid_league_msgs -import rosparam -from rosgraph import MasterException -import rospy -from copy import deepcopy -from socket import gethostname -import rospkg -from humanoid_league_msgs.msg import PlayAnimationAction - -import subprocess - - -class AnimationData(object): - ''' - Defines a current status of the recorded Animation - ''' - - def __init__(self): - self.anim_steps = [] - self.name = "None yet" - self.version = 0 - self.last_edited = datetime.datetime.isoformat(datetime.datetime.now(), ' ') - self.author = "Unknown" - self.last_hostname = "Unknown" - self.description = "Edit me!" - - -class Recorder(object): - ''' Recorder Methods are gathered in this class - - :param ipc: Shared Memory provider to set data - :param gui: urwid-gui responsible for displaying this reocrd-instance - :param logger: - the logger to use, defaults to 'record-gui' the logger is - important for the commuication with the gui-console - ''' - - def __init__(self): - self.steps = [] - self.redo_steps = [] - self.current_state = AnimationData() - self.anim_client = actionlib.SimpleActionClient('animation', PlayAnimationAction) - self.save_step('Initial step') - - def get_animation_state(self): - return self.current_state.anim_steps - - def get_meta_data(self): - data = self.current_state - return data.name, data.version, data.author, data.description - - def set_meta_data(self, name, version, author, description): - self.current_state.name = name - self.current_state.version = version - self.current_state.author = author - self.current_state.description = description - - def save_step(self, description, state=None): - ''' Save the current state of the Animation - for later restoration by the undo-command - - (Yes we might save only a diff, but the Memory consumption - should still be relatively low this way and saving / undoing - is really cheap in terms of CPU and effort spent programming) - - :param description: A string describing the saved action for the user - :param state: a AnimState can be given otherwise the current one is used - ''' - - rospy.logdebug("Saving step: %s" % description) - if not state: - state = deepcopy(self.current_state) - self.steps.append((state, description)) - self.save_animation("backup") - - def undo(self, amount=1): - ''' Undo <amount> of steps or the last Step if omitted - ''' - if amount > len(self.steps) or self.steps[-1][1] == "Initial step": - rospy.logwarn("I cannot undo what did not happen!") - return "I cannot undo what did not happen!" - if amount == 1: - state, description = self.steps.pop() - self.redo_steps.append((state, description, self.current_state)) - rospy.loginfo("Undoing: %s" % description) - if self.steps: - state, description = self.steps[-1] - self.current_state = state - rospy.loginfo("Last noted action: %s" % description) - return "Undoing. Last noted action: %s" % description - else: - rospy.loginfo("There are no previously noted steps") - return "Undoing. There are no more previous steps." - else: - rospy.loginfo("Undoing %i steps" % amount) - state, description = self.steps[-amount] - self.current_state = state - self.redo_steps = self.steps[-amount:].reverse() - self.steps = self.steps[:-amount] - return "Undoing %i steps" % amount - - def redo(self, amount=1): - ''' Redo <amount> of steps, or the last step if omitted - ''' - post_state = None - if not self.redo_steps: - rospy.logwarn("Cannot redo what was not undone!") - return "Cannot redo what was not undone!" - if amount < 0: - rospy.logwarn("Amount cannot be negative! (What where you even thinking?)") - return "Amount cannot be negative! (What where you even thinking?)" - while amount and self.redo_steps: - pre_state, description, post_state = self.redo_steps.pop() - self.steps.append((pre_state, description)) - amount -= 1 - self.current_state = post_state - rospy.loginfo("Last noted step is now: %s " % self.steps[-1][1]) - return "Last noted step is now: %s " % self.steps[-1][1] - - def record(self, motor_pos, motor_torque, frame_name, duration, pause, seq_pos=None, override=False): - ''' Record Command, save current keyframe-data - ''' - frame = { - "name": frame_name, - "duration": duration, - "pause": pause, - "goals": motor_pos, - "torque": motor_torque - } - new_frame = deepcopy(frame) - if seq_pos is None: - self.current_state.anim_steps.append(new_frame) - self.save_step("Appending new keyframe " + frame_name) - elif not override: - self.current_state.anim_steps.insert(seq_pos, new_frame) - self.save_step("Inserting new keyframe " + frame_name + " to position " + str(seq_pos)) - else: - self.current_state.anim_steps[seq_pos] = new_frame - self.save_step("overriding keyframe " + frame_name + " at position " + str(seq_pos)) - return True - - def clear(self): - ''' Record Command, clear all keyframe-data - ''' - newsteps = [] - for i in self.steps: - if i[1] == 'Initial step': - newsteps.append(i) - self.steps = deepcopy(newsteps) - self.current_state.anim_steps = [] - return True - - def save_animation(self, path, file_name=None, save_checkbox=None): - ''' Record Command, dump all keyframedata to an animation .json file - - :param file_name: what name the new file should receive - ''' - if not self.current_state.anim_steps: - rospy.loginfo("There is nothing to save.") - return "There is nothing to save." - - if not file_name: - file_name = self.current_state.name - - if not os.path.isdir(path): - path = os.path.expanduser('~') - path = os.path.join(path, file_name + '.json') - rospy.logdebug("Saving to '%s'" % path) - - savedKeyframes = deepcopy(self.current_state.anim_steps) - - for kf in savedKeyframes: - if not save_checkbox == None: - if kf["name"] in save_checkbox: - for k, v in save_checkbox[kf["name"]].items(): - if v == 0: - kf["goals"].pop(k) - - anim = { - "name": self.current_state.name, - "version": self.current_state.version, - "last_edited": datetime.datetime.isoformat(datetime.datetime.now(), ' '), - "author": self.current_state.author, - "description": self.current_state.description, - "keyframes": savedKeyframes, - "hostname": gethostname() - } - - for kf in anim['keyframes']: - for k, v in kf['goals'].items(): - kf['goals'][k] = int(math.degrees(v)) - - with open(path, "w") as fp: - json.dump(anim, fp, sort_keys=True, indent=4) - return ("Saving to '%s'" % path + ". Done.") - - def remove(self, framenumber=None): - ''' Record Command, remove the last keyframedata - - :param framenumber: The Number of frame to remove. default is last - ''' - if not framenumber: - if not self.current_state.anim_steps: - rospy.logwarn("Nothing to revert, framelist is empty!") - return False - self.save_step("Reverting the last Keyframe (#%i)" % len(self.current_state.anim_steps)) - self.current_state.anim_steps.pop() - return True - else: - try: - framenumber = int(framenumber) - except TypeError: - rospy.logwarn("Optional framenumber must be Integer! (got %s)" % framenumber) - return False - if len(self.current_state.anim_steps) < framenumber: - rospy.logwarn("Invalid framenumber: %i" % framenumber) - return False - self.save_step("Reverting keyframe #%i" % framenumber) - framenumber -= 1 # Frameindices in the GUI are starting with 1, not 0 - self.current_state.anim_steps.pop(framenumber) - return True - - def load_animation(self, path): - ''' Record command, load a animation '.json' file - - :param path: path of the animation to load - ''' - data = [] - with open(path) as fp: - try: - data = json.load(fp) - i = 0 - for kf in data['keyframes']: - if not 'name' in kf: - kf['name'] = 'frame'+str(i) - i += 1 - for kf in data['keyframes']: - for k, v in kf['goals'].items(): - kf['goals'][k] = math.radians(v) - except ValueError as e: - rospy.logerr("Animation %s is corrupt:\n %s" % - (path, e.message.partition('\n')[0])) - return ("Animation %s is corrupt:\n %s" % (path, e.message.partition('\n')[0])) - - - # Ensure Data retrieval was a success - if not data: - return False - - self.save_step("Loading of animation named %s" % path) - - self.current_state.anim_steps = data['keyframes'] - - def play(self, anim_path, until_frame=None): - ''' Record command, start playing an animation - - Can play a certain (named) animation or the current one by default. - Also can play only a part of an animation if end is defined - - :param until_frame: the frame until which the animation should be played - ''' - try: - if not self.current_state.anim_steps: - rospy.loginfo("Refusing to play, because nothing to play exists!") - return "Refusing to play, because nothing to play exists!" - if not until_frame: - # play complete animation - n = len(self.current_state.anim_steps) - else: - # play the given number if not higher than current steps - n = min(until_frame, len(self.current_state.anim_steps)) - - anim_dict = { - "name": "Record-play", - "keyframes": deepcopy(self.current_state.anim_steps[0:n]) - } - for kf in anim_dict['keyframes']: - for k, v in kf['goals'].items(): - kf['goals'][k] = int(math.degrees(v)) - - rospy.loginfo("playing %d frames..." % len(anim_dict['keyframes'])) - self.execute_play(anim_dict, anim_path) - return "playing %d frames..." % len(anim_dict['keyframes']) - except MasterException: - rospy.logwarn("There is no Robot! Can't play Animation!") - return "There is no Robot! Can't play Animation!" - - def execute_play(self, anim_dict, anim_path): - ''' We make a temporary copy of the animation and call the animation play action to play it''' - anim_package = rosparam.get_param("robot_type_name").lower() + "_animations" - rospack = rospkg.RosPack() - path = rospack.get_path(anim_package) - path = os.path.join(path, "record" + '.json') - - - with open(path, "w") as fp: - json.dump(anim_dict, fp, sort_keys=True, indent=4) - p = subprocess.Popen(["scp", path, anim_path]).wait() - self.play_animation("record") - - def play_animation(self, name): - '''Sends the animation to the animation server ''' - first_try = self.anim_client.wait_for_server( - rospy.Duration(rospy.get_param("hcm/anim_server_wait_time", 10))) - if not first_try: - rospy.logerr( - "Animation Action Server not running! Will now wait until server is accessible!") - self.anim_client.wait_for_server() - rospy.logwarn("Animation server now running, hcm will go on.") - goal = humanoid_league_msgs.msg.PlayAnimationGoal() - goal.animation = name - goal.hcm = True # force - self.anim_client.send_goal_and_wait(goal) - rospy.sleep(0.5) - - def change_frame_order(self, new_order): - ''' Changes the order of the frames given an array of frame names''' - new_ordered_frames = [] - for frame_name in new_order: - for frame in self.current_state.anim_steps: - if frame_name == frame["name"]: - new_ordered_frames.append(frame) - - self.current_state.anim_steps = new_ordered_frames - self.save_step("Reordered frames") - - def duplicate(self, frame_name): - ''' - Duplicates a frame - ''' - new_frames = [] - for frame in self.current_state.anim_steps: - new_frames.append(frame) - if frame_name == frame["name"]: - duplicate = deepcopy(frame) - newname = frame_name + "d" - x = True - n = 0 - for frame in self.current_state.anim_steps: - if newname == frame["name"]: - while(x): - x = False - for frame in self.current_state.anim_steps: - if newname + str(n) == frame["name"]: - n+=1 - x = True - newname = newname+str(n) - - duplicate["name"] = newname - new_frames.append(duplicate) - self.current_state.anim_steps = new_frames - self.save_step("Duplicated Frame " + frame_name) - - def delete(self, frame_name): - ''' - Deletes a frame - ''' - new_frames = [] - for frame in self.current_state.anim_steps: - if not frame_name == frame["name"]: - new_frames.append(frame) - self.current_state.anim_steps = new_frames - self.save_step("Duplicated Frame " + frame_name) diff --git a/bitbots_recordui_rqt/src/bitbots_recordui_rqt/record_ui.py b/bitbots_recordui_rqt/src/bitbots_recordui_rqt/record_ui.py deleted file mode 100644 index 83f79a765..000000000 --- a/bitbots_recordui_rqt/src/bitbots_recordui_rqt/record_ui.py +++ /dev/null @@ -1,944 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -import rospkg -import rospy -import time -import math -import inspect -from copy import deepcopy - -from python_qt_binding.QtCore import Qt, QMetaType, QDataStream, QVariant, pyqtSignal -from python_qt_binding import loadUi -from rqt_gui_py.plugin import Plugin -from python_qt_binding.QtWidgets import QMainWindow, QTreeWidget, QTreeWidgetItem,QListWidgetItem, \ - QSlider, QGroupBox, QVBoxLayout, QLabel, QLineEdit, QListWidget, QAbstractItemView, QFileDialog, QDoubleSpinBox, QMessageBox, \ - QInputDialog, QShortcut -from python_qt_binding.QtGui import QDoubleValidator, QKeySequence - -from bitbots_msgs.msg import JointCommand, JointTorque -from sensor_msgs.msg import JointState -from trajectory_msgs.msg import JointTrajectory, JointTrajectoryPoint - -import os - -from .animation_recording import Recorder - - - -class DragDropList(QListWidget): - ''' QListWidget with an event that is called when a drag and drop action was performed.''' - keyPressed = pyqtSignal() - - def __init__(self, parent, ui): - super(DragDropList, self).__init__(parent) - - self.ui = ui - self.setAcceptDrops(True) - - - def dropEvent(self, e): - super(DragDropList, self).dropEvent(e) - items = [] - for i in range(0, self.count()): - items.append(self.item(i).text()) - self.ui.change_frame_order(items) - - def keyPressEvent(self, event): - if event.key() == Qt.Key_Delete: - super(DragDropList, self).keyPressEvent(event) - self.keyPressed.emit() - elif event.key() == Qt.Key_Up and self.currentRow()-1 >= 0: - self.setCurrentRow(self.currentRow()-1) - elif event.key() == Qt.Key_Down and self.currentRow()+1 < self.count(): - self.setCurrentRow(self.currentRow()+1) - - - - -class RecordUI(Plugin): - ''' class containing the UI part of the framework''' - def __init__(self, context): - super(RecordUI, self).__init__(context) - - - self._widget = QMainWindow() - rp = rospkg.RosPack() - ui_file = os.path.join(rp.get_path('bitbots_recordui_rqt'), 'resource', 'RecordUI.ui') - loadUi(ui_file, self._widget, {}) - - self._recorder = Recorder() - self._sliders = {} - self._textFields = {} - self._motorSwitched = {} - self._selected_frame = None - - self._currentGoals = {} # this is the data about the current unsaved frame - self._currentDuration = 1.0 - self._currentPause = 0.0 - self._currentName = "new frame" - - self._workingValues = {} # this is the data about the frame that is displayed - self._workingDuration = 1.0 - self._workingPause = 0.0 - self._workingName = self._currentName - - self._current = True - - self._saveDir = None - - self._robot_anim_path = None - - #save current frame when switching to other frames for reference - #working frame - - self._treeItems = {} - self._motorCheckBody = QTreeWidgetItem(self._widget.motorTree) - self._motorCheckLegs = QTreeWidgetItem(self._motorCheckBody) - self._motorCheckArms = QTreeWidgetItem(self._motorCheckBody) - self._motorCheckHead = QTreeWidgetItem(self._motorCheckBody) - self._motorCheckLArm = QTreeWidgetItem(self._motorCheckArms) - self._motorCheckRArm = QTreeWidgetItem(self._motorCheckArms) - self._motorCheckLLeg = QTreeWidgetItem(self._motorCheckLegs) - self._motorCheckRLeg = QTreeWidgetItem(self._motorCheckLegs) - - #saves configuration of the trees checkboxes for each of the tree modes. - self._checkBoxesSave = {} - self._checkBoxesPower = {} - self._previousTreeMode = 0 - - self.setObjectName('Record Animation') - - self._initial_joints = None - - self._widget.frameList = DragDropList(self._widget, self) - self._widget.verticalLayout_2.insertWidget(0, self._widget.frameList) - self._widget.frameList.setDragDropMode(QAbstractItemView.InternalMove) - - self.state_sub = rospy.Subscriber("joint_states", JointState, self.state_update, queue_size=1, tcp_nodelay=True) - self._joint_pub = rospy.Publisher("record_motor_goals", JointCommand, queue_size=1) - self.effort_pub = rospy.Publisher("ros_control/set_torque_individual", JointTorque, queue_size=1) - - self.ids = {"HeadPan": 0, - "HeadTilt": 1, - "LShoulderPitch": 2, - "LShoulderRoll": 3, - "LElbow": 4, - "RShoulderPitch": 5, - "RShoulderRoll": 6, - "RElbow": 7, - "LHipYaw": 8, - "LHipRoll": 9, - "LHipPitch": 10, - "LKnee": 11, - "LAnklePitch": 12, - "LAnkleRoll": 13, - "RHipYaw": 14, - "RHipRoll": 15, - "RHipPitch": 16, - "RKnee": 17, - "RAnklePitch": 18, - "RAnkleRoll": 19} - - self._initial_joints = JointState() - - self.update_time = rospy.Duration(0.1) - - for k,v in self.ids.items(): - rospy.loginfo(k) - self._initial_joints.name.append(k) - self._initial_joints.position.append(0) - - while not self._initial_joints: - if not rospy.is_shutdown(): - time.rospy.sleep(0.5) - rospy.logwarn("wait") - else: - return - - self.initialize() - - context.add_widget(self._widget) - self._widget.statusBar.showMessage("Initialization complete.") - - def initialize(self): - for i in range(0, len(self._initial_joints.name)): - self._currentGoals[self._initial_joints.name[i]] = self._initial_joints.position[i] - self._workingValues[self._initial_joints.name[i]] = self._initial_joints.position[i] - self._motorSwitched[self._initial_joints.name[i]] = True - - - host = os.environ['ROS_MASTER_URI'].split('/')[2].split(':')[0] - self._robot_anim_path = "bitbots@{}:~/wolfgang_ws/src/wolfgang_robot/wolfgang_animations/animations/motion/".format(host) - - rospy.loginfo("Set animation path to: "+str(self._robot_anim_path+"record.json")) - - initTorque = {} - for k, v in self._workingValues.items(): - initTorque[k] = 2 - - self._checkBoxesPower['#CURRENT_FRAME'] = initTorque - - self.motor_controller() - self.motor_switcher() - self.action_connect() - self.box_ticked() - self.frame_list() - self.update_frames() - self.set_sliders_and_text_fields(manual=True) - - def state_update(self, joint_states): - ''' - Callback method for /joint_states. Updates the sliders to the actual values of the motors when the robot moves. - ''' - if not self._initial_joints: - self._initial_joints = joint_states - time.rospy.sleep(1) - else: - for i in range(0, len(joint_states.name)): - if (not self._motorSwitched[joint_states.name[i]]): - self._workingValues[joint_states.name[i]] = joint_states.position[i] - - - rospy.sleep(self.update_time) - self.set_sliders_and_text_fields(manual=False) - - - def motor_controller(self): - ''' - Sets up the GUI in the middle of the Screen to control the motors. - Uses self._motorValues to determine which motors are present. - ''' - i = 0 - for k, v in sorted(self._currentGoals.items()): - group = QGroupBox() - slider = QSlider(Qt.Horizontal) - slider.setTickInterval(1) - slider.setMinimum(-181) - slider.setMaximum(181) - slider.sliderMoved.connect(self.slider_update) # This has to be a sliderMoved signal, since valueChanged is - # triggered by other sources than user action. - self._sliders[k] = slider - - textfield = QLineEdit() - textfield.setText('0') - textfield.textEdited.connect(self.textfield_update) - self._textFields[k] = textfield - - label = QLabel() - label.setText(k) - - layout = QVBoxLayout() - layout.addWidget(label) - layout.addWidget(self._sliders[k]) - layout.addWidget(self._textFields[k]) - group.setLayout(layout) - self._widget.motorControlLayout.addWidget(group, i / 5, i % 5) - i = i+1 - - def action_connect(self): - ''' - Connects the actions in the top bar to the corresponding functions, and sets their shortcuts - :return: - ''' - self._widget.actionNew.triggered.connect(self.new) - self._widget.actionOpen.triggered.connect(self.open) - self._widget.actionSave.triggered.connect(self.save) - self._widget.actionSave_as.triggered.connect(self.save_as) - self._widget.actionInit.triggered.connect(self.goto_init) - self._widget.actionCurrent_Frame.triggered.connect(self.goto_frame) - self._widget.actionNext_Frame.triggered.connect(self.goto_next) - self._widget.actionAnimation.triggered.connect(self.play) - self._widget.actionAnimation_until_Frame.triggered.connect(self.play_until) - self._widget.actionDuplicate_Frame.triggered.connect(self.duplicate) - self._widget.actionDelete_Frame.triggered.connect(self.delete) - self._widget.actionLeft.triggered.connect(lambda: self.mirrorFrame("L")) - self._widget.actionRight.triggered.connect(lambda: self.mirrorFrame("R")) - self._widget.actionInvert.triggered.connect(self.invertFrame) - self._widget.actionUndo.triggered.connect(self.undo) - self._widget.actionRedo.triggered.connect(self.redo) - self._widget.actionHelp.triggered.connect(self.help) - - self._widget.buttonRecord.clicked.connect(self.record) - self._widget.buttonRecord.shortcut = QShortcut(QKeySequence("Space"), self._widget) - self._widget.buttonRecord.shortcut.activated.connect(self.record) - - - self._widget.frameList.keyPressed.connect(self.delete) - - self._widget.treeModeSelector.currentIndexChanged.connect(self.treeModeChanged) - - def help(self): - ''' - Prints out the help dialogue - ''' - helpDialog = QMessageBox.about(self._widget, "About RecordUI", "This is RecordUI, a tool to record robot animations.\n \n Keyboard shortcuts: \n \n \ - New: Ctrl + N \n \ - Open: Ctrl + O \n \ - Save: Ctrl + S \n \ - Save as: Ctrl + Shift + S \n \n \ - Play Init: Ctrl + I \n \ - Play Frame: Ctrl + P \n \ - Play Next: Alt + P \n \ - Play Animation: Ctrl + Shift + P \n \ - Play Until: Ctrl + Alt + P \n \n \ - Record Frame: Space \n \ - Duplicate Frame: '+' \n \ - Delete Frame: '-' \n \ - Undo: Ctrl + Z \n \ - Redo: Ctrl + Y \n \ - Help: Ctrl + H \n \n \ - Mirror to Left: Ctrl + Left Arrow \n \ - Mirror to Right: Ctrl + Right Arrow \n \ - Invert: Ctrl + Down Arrow") - - def new(self): - ''' - Deletes all currently recorded frames - ''' - if len(self._widget.frameList) > 1: - message = "This will discard your current Animation. Continue?" - sure = QMessageBox.question(self._widget, 'Sure?', message, QMessageBox.Yes | QMessageBox.No) - if sure == QMessageBox.Yes: - self._recorder.clear() - self.update_frames() - - def save(self): - ''' - Saves all currently recorded frames into a json file - ''' - if self._recorder.get_animation_state(): - self.treeModeChanged(self._previousTreeMode) - self.set_metadata() - if not self._saveDir: - rp = rospkg.RosPack() - #QFileDialogue throws a gtk warning, that can not be suppressed or fixed. Should be ignored. - self._saveDir = QFileDialog.getExistingDirectory(directory=str(rp.get_path('wolfgang_animations')+"/animations")) - status = self._recorder.save_animation(self._saveDir, self._widget.lineAnimationName.text(), self._checkBoxesSave) - self._widget.statusBar.showMessage(status) - else: - self._widget.statusBar.showMessage("There is nothing to save!") - return - - def save_as(self): - ''' - Saves all currently recorded frames into a json file, which is saved at a user specified location - ''' - if self._recorder.get_animation_state(): - self.treeModeChanged(self._previousTreeMode) - rp = rospkg.RosPack() - self._saveDir = QFileDialog.getExistingDirectory(directory=str(rp.get_path('wolfgang_animations')+"/animations")) - self._recorder.save_animation(self._saveDir, self._widget.lineAnimationName.text(), self._checkBoxesSave) - else: - self._widget.statusBar.showMessage("There is nothing to save!") - return - - - def set_metadata(self): - status = self._recorder.set_meta_data(self._widget.lineAnimationName.text(), - self._widget.lineVersion.text(), - self._widget.lineAuthor.text(), - self._widget.fieldDescription.toPlainText()) - self._widget.statusBar.showMessage(status) - def open(self): - ''' - Deletes all current frames and instead loads an animation from a json file - ''' - if len(self._widget.frameList) > 1: - message = "This will discard your current Animation. Continue?" - sure = QMessageBox.question(self._widget, 'Sure?', message, QMessageBox.Yes | QMessageBox.No) - if sure == QMessageBox.No: - return - rp = rospkg.RosPack() - my_file = QFileDialog.getOpenFileName(directory=str(rp.get_path('wolfgang_animations')+"/animations"))[0] - if my_file: - status = self._recorder.load_animation(my_file) - if status == "": - status = "Load successful." - self._widget.statusBar.showMessage(status) - - animstate = self._recorder.get_animation_state() - for i in animstate: - try: - self._checkBoxesPower[i['name']] = i['torque'] - except KeyError: - self._checkBoxesPower[i['name']] = {} - for key in self.ids: - self._checkBoxesPower[i['name']][key] = 2 - - - - self.update_frames() - - metadata = self._recorder.get_meta_data() - - self._widget.lineAnimationName.setText(metadata[0]) - self._widget.lineAuthor.setText(metadata[2]) - self._widget.lineVersion.setText(str(metadata[1])) - self._widget.fieldDescription.setPlainText(metadata[3]) - - def play(self): - ''' - Plays the animation - ''' - status = self._recorder.play(self._robot_anim_path) - self._widget.statusBar.showMessage(status) - - def play_until(self): - ''' - Plays the animation up to a certain frame - ''' - steps = self._recorder.get_animation_state() - j = 0 - for i in range(0, len(steps)): - j += 1 - rospy.loginfo(steps[i]["name"]) - if steps[i]["name"] == self._selected_frame["name"]: - break - self._recorder.play(self._robot_anim_path, j) - - def goto_frame(self): - ''' - Plays one single frame - ''' - self.set_all_joints_stiff() - - pos_msg = JointCommand() - pos_msg.joint_names = [] - pos_msg.velocities = [1.0] * 20 - pos_msg.positions = [] - pos_msg.accelerations = [-1.0] * 20 - pos_msg.max_currents = [-1.0] * 20 - - - for k,v in self._workingValues.items(): - pos_msg.joint_names.append(k) - pos_msg.positions.append(v) - - torque_msg = JointTorque() - torque_msg.joint_names = [] - torque_msg.on = [] - - for k, v in self._checkBoxesPower[self._widget.frameList.currentItem().text()].items(): - torque_msg.joint_names.append(k) - torque_msg.on.append(v) - - self.effort_pub.publish(torque_msg) - self._joint_pub.publish(pos_msg) - - def goto_next(self): - if self._widget.frameList.currentRow() < self._widget.frameList.count() - 2: - self._widget.frameList.setCurrentRow(self._widget.frameList.currentRow()+1) - self.goto_frame() - - def goto_init(self): - ''' - Plays init frame, sets all motor values to 0 - ''' - self.set_all_joints_stiff() - - if self._widget.frameList.currentItem().text() == "#CURRENT_FRAME": - for k, v in self._workingValues.items(): - self._workingValues[k] = 0.0 - for k, v in self._currentGoals.items(): - self._currentGoals[k] = 0.0 - self.set_sliders_and_text_fields(manual=False) - - pos_msg = JointCommand() - pos_msg.joint_names = self._initial_joints.name - pos_msg.velocities = [1.0] * len(self._initial_joints.name) - pos_msg.positions = [0.0] * len(self._initial_joints.name) - pos_msg.accelerations = [-1.0] * len(self._initial_joints.name) - pos_msg.max_currents = [-1.0] * len(self._initial_joints.name) - - self._joint_pub.publish(pos_msg) - - def set_all_joints_stiff(self): - ''' - Enables torque for all motors - ''' - if self._widget.frameList.currentItem().text() == '#CURRENT_FRAME': - for k, v in self._treeItems.items(): - v.setCheckState(0, Qt.Checked) - - torque_msg = JointTorque() - torque_msg.joint_names = [] - torque_msg.on = [] - - for k, v in sorted(self._treeItems.items()): - torque_msg.joint_names.append(k) - torque_msg.on.append(True) - - self.effort_pub.publish(torque_msg) - - def duplicate(self): - ''' - Creates a copy of the selected frame - ''' - try: - frame = self._widget.frameList.selectedItems()[0].text() - except: - return - if frame: - if not frame == "#CURRENT_FRAME": - self._recorder.duplicate(frame) - self._widget.statusBar.showMessage("Duplicated frame "+ frame) - else: - self._widget.statusBar.showMessage("Cannot duplicate current frame. Record first.") - self.update_frames() - - def delete(self): - ''' - Deletes a frame - ''' - try: - frame = self._widget.frameList.selectedItems()[0].text() - except: - return - if frame: - if not frame == "#CURRENT_FRAME": - self._recorder.delete(frame) - self._widget.statusBar.showMessage("Deleted frame "+ frame) - else: - self._widget.statusBar.showMessage("Cannot delete current frame.") - self.update_frames() - - def record(self, keep=False): - ''' - Records a frame - ''' - if not self._widget.frameList.currentItem() == None: - if self._widget.frameList.currentItem().text() == "#CURRENT_FRAME": - x = True - n = 0 - for state in self._recorder.get_animation_state(): - if self._workingName == state["name"]: - while(x): - x = False - for state in self._recorder.get_animation_state(): - if self._workingName+str(n) == state["name"]: - n+=1 - x = True - self._workingName = self._workingName+str(n) - - self.set_sliders_and_text_fields(manual=True) - - self._checkBoxesPower[self._workingName] = {} - initTorque = {} - for k, v in self._workingValues.items(): - initTorque[k] = 2 - - self._checkBoxesPower[self._workingName] = initTorque - - self._recorder.record(self._workingValues, - initTorque, - self._widget.lineFrameName.text(), - self._widget.spinBoxDuration.value(), - self._widget.spinBoxPause.value()) - self._currentGoals = deepcopy(self._workingValues) - else: - current_row = self._widget.frameList.currentRow() - - self._recorder.record(self._workingValues, - self._checkBoxesPower[self._widget.frameList.currentItem().text()], - self._widget.lineFrameName.text(), - self._widget.spinBoxDuration.value(), - self._widget.spinBoxPause.value(), - current_row, - True) - - - self._widget.statusBar.showMessage("Recorded frame "+ self._workingName) - self.update_frames(keep) - - - def undo(self): - ''' - Undos the previous action - ''' - status = self._recorder.undo() - self._widget.statusBar.showMessage(status) - self.update_frames() - - def redo(self): - ''' - Redos an action - ''' - status = self._recorder.redo() - self._widget.statusBar.showMessage(status) - self.update_frames() - - def mirrorFrame(self, direction): - ''' - Copies all motor values from one side of the robot to the other. Inverts values, if necessary - ''' - opposite = "L" - if direction == "L": - opposite = "R" - for k, v in self._workingValues.items(): - if k[0] == opposite: - for k1, v1 in self._workingValues.items(): - if k1 == str(direction)+k[1:]: - self._workingValues[k1] = v * -1 - - boxmode = 0 - if self._widget.treeModeSelector.currentIndex() == 0: - boxmode = self._checkBoxesPower[self._widget.frameList.currentItem().text()] - elif self._widget.treeModeSelector.currentIndex() == 1: - boxmode = self._checkBoxesSave[self._widget.frameList.currentItem().text()] - - for k, v in boxmode.items(): - if k[0] == opposite: - for k1, v1 in boxmode.items(): - if k1 == str(direction)+k[1:]: - if boxmode[k] == 0: - boxmode[k1] = 0 - elif boxmode[k] ==2: - boxmode[k1] = 2 - - self.updateTreeConfig(self._widget.treeModeSelector.currentIndex()) - self.box_ticked() - self._widget.statusBar.showMessage("Mirrored frame to "+ direction) - - - def invertFrame(self): - ''' - Copies all values from the left side to the right and all values from the right side to the left. - Inverts values, if necessary - ''' - tempDict={} - for k, v in self._workingValues.items(): - if k[0] == "L": - tempDict["R"+k[1:]] = -v - elif k[0] == "R": - tempDict["L"+k[1:]] = -v - for k, v in tempDict.items(): - self._workingValues[k] = v - - boxmode = 0 - if self._widget.treeModeSelector.currentIndex() == 0: - boxmode = self._checkBoxesPower - elif self._widget.treeModeSelector.currentIndex() == 1: - boxmode = self._checkBoxesSave - - for k, v in boxmode[self._widget.frameList.currentItem().text()].items(): - - if k[0] == "L": - if v == 2: - tempDict["R"+k[1:]] = 2 - elif v == 0: - tempDict["R"+k[1:]] = 0 - elif k[0] == "R": - if v == 2: - tempDict["L"+k[1:]] = 2 - elif v == 0: - tempDict["L"+k[1:]] = 0 - - boxmode[self._widget.frameList.currentItem().text()] = deepcopy(tempDict) - self.updateTreeConfig(self._widget.treeModeSelector.currentIndex()) - self.box_ticked() - self._widget.statusBar.showMessage("Inverted frame") - - def frame_list(self): - ''' - Connects triggers from the frame list to their callback methods. - ''' - self._widget.frameList.itemSelectionChanged.connect(self.frame_select) - self._widget.lineFrameName.textEdited.connect(self.frame_meta_update) - self._widget.spinBoxPause.valueChanged.connect(self.frame_meta_update) - self._widget.spinBoxDuration.valueChanged.connect(self.frame_meta_update) - - def frame_meta_update(self): - ''' - Updates the respective values for the two spin boxes and the frame name, when they are changed - ''' - self._workingDuration = self._widget.spinBoxDuration.value() - self._workingPause = self._widget.spinBoxPause.value() - self._workingName = self._widget.lineFrameName.text() - - def frame_select(self): - ''' - Loads all information on a specific frame into the working values, if the frame selection changes - ''' - if not (self._widget.frameList.currentItem() == None): - self.copyOldTreeConfig() - selected_frame_name = self._widget.frameList.currentItem().text() - self._selected_frame = None - - - for v in self._recorder.get_animation_state(): - if v["name"] == selected_frame_name: - self._selected_frame = v - break - - #save current values to _currentValues if switching from current frame to different one - #when switching from current to different, save current values - - - if selected_frame_name == "#CURRENT_FRAME": - self._widget.treeModeSelector.setCurrentIndex(0) - self.updateTreeConfig(0) - self._widget.treeModeSelector.setEnabled(False) - self._workingValues = deepcopy(self._currentGoals) - self._workingName = deepcopy(self._currentName) - self._workingDuration = deepcopy(self._currentDuration) - self._workingPause = deepcopy(self._currentPause) - - self._current = True - else: - if self._selected_frame == None: - return - self._widget.treeModeSelector.setEnabled(True) - if self._current: - self._currentGoals = deepcopy(self._workingValues) - self._currentName = deepcopy(self._workingName) - self._currentDuration = deepcopy(self._workingDuration) - self._currentPause = deepcopy(self._workingPause) - - self._workingValues = self._selected_frame["goals"] - self._workingName = self._selected_frame["name"] - self._workingPause = self._selected_frame["pause"] - self._workingDuration = float(self._selected_frame["duration"]) - - self._widget.lineFrameName.setText(self._widget.frameList.currentItem().text()) - self._current = False - self.updateTreeConfig(self._previousTreeMode) - - if self._widget.treeModeSelector.currentIndex() == 0: - for k, v in self._treeItems.items(): - self._motorSwitched[k] = (v.checkState(0) == 2) - - - for k, v in self._motorSwitched.items(): - self._textFields[k].setEnabled(v) - self._sliders[k].setEnabled(v) - - self.box_ticked() - - def motor_switcher(self): - ''' - Loads the motors into the tree and adds the checkboxes - ''' - self._widget.motorTree.setHeaderLabel("Stiff Motors") - self._motorCheckBody.setText(0, "Body") - self._motorCheckBody.setFlags(self._motorCheckBody.flags() | Qt.ItemIsTristate | Qt.ItemIsUserCheckable) - self._motorCheckBody.setExpanded(True) - self._motorCheckHead.setText(0, "Head") - self._motorCheckHead.setFlags(self._motorCheckHead.flags() | Qt.ItemIsTristate | Qt.ItemIsUserCheckable) - self._motorCheckHead.setExpanded(True) - self._motorCheckArms.setText(0, "Arms") - self._motorCheckArms.setFlags(self._motorCheckArms.flags() | Qt.ItemIsTristate | Qt.ItemIsUserCheckable) - self._motorCheckArms.setExpanded(True) - self._motorCheckLegs.setText(0, "Legs") - self._motorCheckLegs.setFlags(self._motorCheckLegs.flags() | Qt.ItemIsTristate | Qt.ItemIsUserCheckable) - self._motorCheckLegs.setExpanded(True) - self._motorCheckLArm.setText(0, "Left Arm") - self._motorCheckLArm.setFlags(self._motorCheckLArm.flags() | Qt.ItemIsTristate | Qt.ItemIsUserCheckable) - self._motorCheckLArm.setExpanded(True) - self._motorCheckRArm.setText(0, "Right Arm") - self._motorCheckRArm.setFlags(self._motorCheckRArm.flags() | Qt.ItemIsTristate | Qt.ItemIsUserCheckable) - self._motorCheckRArm.setExpanded(True) - self._motorCheckLLeg.setText(0, "Left Leg") - self._motorCheckLLeg.setFlags(self._motorCheckLLeg.flags() | Qt.ItemIsTristate | Qt.ItemIsUserCheckable) - self._motorCheckLLeg.setExpanded(True) - self._motorCheckRLeg.setText(0, "Right Leg") - self._motorCheckRLeg.setFlags(self._motorCheckRLeg.flags() | Qt.ItemIsTristate | Qt.ItemIsUserCheckable) - self._motorCheckRLeg.setExpanded(True) - - for k, v in self._currentGoals.items(): - parent = None - if 'LHip' in k or 'LKnee' in k or 'LAnkle' in k: - parent = self._motorCheckLLeg - elif 'RHip' in k or 'RKnee' in k or 'RAnkle' in k: - parent = self._motorCheckRLeg - elif 'LShoulder' in k or 'LElbow' in k: - parent = self._motorCheckLArm - elif 'RShoulder' in k or 'RElbow' in k: - parent = self._motorCheckRArm - elif 'Head' in k: - parent = self._motorCheckHead - child = QTreeWidgetItem(parent) - child.setText(0, k) - child.setFlags(child.flags() | Qt.ItemIsUserCheckable) - child.setCheckState(0, Qt.Checked) - self._treeItems[k] = child - - self._widget.motorTree.itemClicked.connect(self.box_ticked) - - def copyOldTreeConfig(self): - ''' - Saves the current configuration of the motor tree checkboxes into the corresponding dictionary - ''' - if not self._selected_frame == None: - tempDict={} - for k, v in self._treeItems.items(): - tempDict[k]= self._treeItems[k].checkState(0) - - if self._previousTreeMode == 1: - self._checkBoxesSave[self._selected_frame["name"]] = deepcopy(tempDict) - elif self._previousTreeMode == 0: - self._checkBoxesPower[self._selected_frame["name"]] = deepcopy(tempDict) - - def updateTreeConfig(self, index): - ''' - Loads the new configuration of the motor tree depending on the change - ''' - tempDict2={} - if not self._widget.frameList.currentItem() == None: - if not self._widget.frameList.currentItem().text() == "#CURRENT_FRAME": - if index == 1: - if self._selected_frame["name"] in self._checkBoxesSave.keys(): - tempDict2 = deepcopy(self._checkBoxesSave[self._selected_frame["name"]]) - else: - for k in self._workingValues: - tempDict2[k] = 2 - elif index == 0: - if self._selected_frame["name"] in self._checkBoxesPower.keys(): - tempDict2 = deepcopy(self._checkBoxesPower[self._selected_frame["name"]]) - else: - for k in self._workingValues: - tempDict2[k] = 2 - else: - for k in self._workingValues: - tempDict2[k] = 2 - self._previousTreeMode = index - for k, v in tempDict2.items(): - if v == 0: - self._treeItems[k].setCheckState(0, Qt.Unchecked) - elif v == 1: - self._treeItems[k].setCheckState(0, Qt.PartiallyChecked) - elif v == 2: - self._treeItems[k].setCheckState(0, Qt.Checked) - - def treeModeChanged(self, index): - self.copyOldTreeConfig() - self.updateTreeConfig(index) - - - def slider_update(self): - ''' - Updates all sliders, checks whether a value is too large, then replaces it - ''' - for k, v in self._sliders.items(): - self._workingValues[k] = math.radians(v.value()) - if self._workingValues[k] < -math.pi: - self._workingValues[k] = -math.pi - elif self._workingValues[k] > math.pi: - self._workingValues[k] = math.pi - self.set_sliders_and_text_fields(manual=True) - - def textfield_update(self): - ''' - Updates all textfields. - ''' - for k, v in self._textFields.items(): - try: - self._workingValues[k] = math.radians(float(v.text())) - except ValueError: - continue - self.set_sliders_and_text_fields(manual=True) - - def set_sliders_and_text_fields(self, manual): - ''' - Updates the text fields and sliders in self._sliders and self._textfields and also frame name and duration and pause - to the values in self._workingValues. - ''' - for k, v in self._workingValues.items(): - try: - if not self._treeItems[k].checkState(0) == 0: - self._textFields[k].setText(str(int(round(math.degrees(v))))) - self._sliders[k].setValue(int(round(math.degrees(v)))) - - except KeyError: - rospy.logwarn("Found a key-value pair for motor (%s), which doesn't seem to exist (yet). Ignoring it." % k) - self._widget.statusBar.showMessage("Found a key-value pair for motor (%s), which doesn't seem to exist (yet). Ignoring it.") - continue - except RuntimeError: - rospy.logwarn("Tried to access a PyQt element that no longer exists. This happens when you close the framework.") - self._widget.statusBar.showMessage("Tried to access a PyQt element that no longer exists. This happens when you close the framework.") - break - if manual: - self._widget.lineFrameName.setText(self._workingName) - self._widget.spinBoxDuration.setValue(self._workingDuration) - self._widget.spinBoxPause.setValue(self._workingPause) - - def box_ticked(self): - - ''' - Controls whether a checkbox has been clicked, and reacts. - ''' - for k, v in self._treeItems.items(): - self._motorSwitched[k] = (v.checkState(0) == 2) - - - for k, v in self._motorSwitched.items(): - self._textFields[k].setEnabled(v) - self._sliders[k].setEnabled(v) - - self.set_sliders_and_text_fields(manual=False) - - torque_msg = JointTorque() - torque_msg.joint_names = [] - torque_msg.on = [] - - if self._widget.treeModeSelector.currentIndex() == 0: - for k, v in sorted(self._treeItems.items()): - torque_msg.joint_names.append(k) - torque_msg.on.append(v.checkState(0) == 2) - - - pos_msg = JointCommand() - pos_msg.joint_names = [] - pos_msg.velocities = [1.0] * 20 - pos_msg.positions = [] - pos_msg.accelerations = [-1.0] * 20 - pos_msg.max_currents = [-1.0] * 20 - - for k,v in self._workingValues.items(): - pos_msg.joint_names.append(k) - pos_msg.positions.append(v) - - self._joint_pub.publish(pos_msg) - self.effort_pub.publish(torque_msg) - if not self._widget.frameList.currentItem() == None: - if not self._widget.frameList.currentItem().text() == "#CURRENT_FRAME": - self.treeModeChanged(self._widget.treeModeSelector.currentIndex()) - - def update_frames(self, keep=False): - - ''' - updates the list of frames present in the current animation - :return: - ''' - current_index = self._widget.frameList.currentIndex() - current_mode = self._widget.treeModeSelector.currentIndex() - current_state = self._recorder.get_animation_state() - while self._widget.frameList.takeItem(0): - continue - - for i in range(0, len(current_state)): - item = QListWidgetItem() - if "name" in current_state[i]: - item.setText(current_state[i]["name"]) - else: #older animations without names for the frames - item.setText(str(i)) - self._widget.frameList.addItem(item) - - current = QListWidgetItem() - current.setText("#CURRENT_FRAME") - self._widget.frameList.addItem(current) - if keep: - self._widget.frameList.setCurrentIndex(current_index) - self._widget.treeModeSelector.setCurrentIndex(current_mode) - else: - self._widget.frameList.setCurrentItem(current) - self._current = True - - def change_frame_order(self, new_order): - ''' Calls the recorder to update frame order and updates the gui''' - self._recorder.change_frame_order(new_order) - self.update_frames() - - def shutdown_plugin(self): - '''Clean up by sending the HCM a signal that we are no longer recording''' - self._joint_pub.publish(JointCommand()) - rospy.sleep(1) From b7adbee0eeb08ae8fbee28a2393121707ed8cfd2 Mon Sep 17 00:00:00 2001 From: Florian Vahl <git@flova.de> Date: Tue, 19 Sep 2023 21:59:22 +0200 Subject: [PATCH 19/74] Cleanup headmover --- bitbots_head_mover/src/move_head.cpp | 308 +++++++++++++++++++-------- 1 file changed, 220 insertions(+), 88 deletions(-) diff --git a/bitbots_head_mover/src/move_head.cpp b/bitbots_head_mover/src/move_head.cpp index 3b46695e4..231b17992 100644 --- a/bitbots_head_mover/src/move_head.cpp +++ b/bitbots_head_mover/src/move_head.cpp @@ -227,11 +227,19 @@ class HeadMover { [this] {behave();}); } + + /** + * @brief Callback used to update the head mode + */ void head_mode_callback( const humanoid_league_msgs::msg::HeadMode::SharedPtr msg) { head_mode_ = msg->head_mode; } + + /** + * @brief Callback used to get updates of the current joint states of the robot + */ void joint_state_callback(const sensor_msgs::msg::JointState::SharedPtr msg) { current_joint_state_ = msg; } @@ -284,6 +292,12 @@ class HeadMover { return rclcpp_action::GoalResponse::ACCEPT_AND_EXECUTE; } + /** + * @brief Handles the cancel request for the look at action + * + * @param goal_handle + * @return rclcpp_action::CancelResponse + */ rclcpp_action::CancelResponse handle_cancel( const std::shared_ptr<LookAtGoalHandle> goal_handle) { // Avoid unused parameter warning @@ -294,6 +308,11 @@ class HeadMover { return rclcpp_action::CancelResponse::ACCEPT; } + /** + * @brief Handles the accepted request for the look at action + * + * @param goal_handle + */ void handle_accepted(const std::shared_ptr<LookAtGoalHandle> goal_handle) { // Spawn a new thread that executes the look at action until we reach the goal std::thread{ @@ -302,6 +321,11 @@ class HeadMover { .detach(); } + /** + * @brief Executes the look at action that looks at a specific point in a given frame until the goal is reached or the action is canceled + * + * @param goal_handle + */ void execute_look_at(const std::shared_ptr<LookAtGoalHandle> goal_handle) { // Yeah seems like we are executing the action action_running_ = true; @@ -348,12 +372,20 @@ class HeadMover { } + /** + * @brief Slows down the speed of the joint that needs to travel less distance so both joints reach the goal at the same time + * + * @param delta_fast_joint The delta of the joint that needs to travel less distance and therefore reaches the goal faster + * @param delta_my_joint The delta of the joint that needs to travel more distance and therefore reaches the goal slower + * @param speed The maximum speed of the faster joint (the joint that needs to travel less distance) + * @return double The adjusted speed of the faster joint + */ double calculate_lower_speed( double delta_fast_joint, double delta_my_joint, double speed) { double estimated_time = delta_fast_joint / speed; - if (estimated_time) { + if (estimated_time != 0) { return delta_my_joint / estimated_time; } else { return 0; @@ -361,6 +393,10 @@ class HeadMover { } + /** + * @brief Send the goal positions to the head motors, but resolve collisions with the body if necessary. + * + */ bool send_motor_goals( double pan_position, double tilt_position, @@ -370,19 +406,24 @@ class HeadMover { double current_pan_position = 0.0, double current_tilt_position = 0.0, bool clip = true) { + + // Debug log the target pan and tilt position RCLCPP_DEBUG_STREAM( node_->get_logger(), "target pan/tilt: " << pan_position << "/" << tilt_position); + + // Clip the target pan and tilt position at the maximum pan and tilt values as defined in the parameters if (clip) { - std::pair<double, double> clipped = pre_clip(pan_position, tilt_position); - pan_position = clipped.first; - tilt_position = clipped.second; + std::tie(pan_position, tilt_position) = pre_clip(pan_position, tilt_position); } + // Resolve collisions if necessary if (resolve_collision) { + // Call behavior that resolves collisions and might change the target pan and tilt position bool success = avoid_collision_on_path( pan_position, tilt_position, current_pan_position, current_tilt_position, pan_speed, tilt_speed); + // Report error message of we were not able to move to an alternative collision free position if (!success) { RCLCPP_ERROR_STREAM_THROTTLE( node_->get_logger(), *node_->get_clock(), @@ -390,6 +431,7 @@ class HeadMover { } return success; } else { + // Move the head to the target position but adjust the speed of the joints so both reach the goal at the same time move_head_to_position_with_speed_adjustment( pan_position, tilt_position, current_pan_position, current_tilt_position, pan_speed, tilt_speed); @@ -397,38 +439,21 @@ class HeadMover { } } - bool send_motor_goals( - double pan_position, - double tilt_position, - double pan_speed = 1.5, - double tilt_speed = 1.5, - bool clip = true) { - RCLCPP_DEBUG_STREAM( - node_->get_logger(), - "target pan/tilt: " << pan_position << "/" << tilt_position); - if (clip) { - std::pair<double, double> clipped = pre_clip(pan_position, tilt_position); - pan_position = clipped.first; - tilt_position = clipped.second; - } - - pos_msg_.positions = {pan_position, tilt_position}; - pos_msg_.velocities = {pan_speed, tilt_speed}; - - pos_msg_.accelerations = {params_.max_acceleration_pan, - params_.max_acceleration_pan}; - pos_msg_.header.stamp = node_->get_clock()->now(); - position_publisher_->publish(pos_msg_); - return true; - } - + /** + * @brief Applies clipping to the pan and tilt values based on the loaded config parameters + * + */ std::pair<double, double> pre_clip(double pan, double tilt) { double new_pan = std::clamp(pan, params_.max_pan[0], params_.max_pan[1]); double new_tilt = std::clamp(tilt, params_.max_tilt[0], params_.max_tilt[1]); - return std::make_pair(new_pan, new_tilt); + return {new_pan, new_tilt}; } - + + /** + * @brief Tries to move the head to the target position but resolves collisions with the body if necessary. + * + */ bool avoid_collision_on_path( double goal_pan, double goal_tilt, @@ -438,17 +463,21 @@ class HeadMover { double tilt_speed, int max_depth = 4, int depth = 0) { + + // Check if we reached the maximum depth of the recursion and if so, return false if (depth > max_depth) { - move_head_to_position_with_speed_adjustment( - 0.0, 0.0, current_pan, current_tilt, pan_speed, tilt_speed); return false; } + + // Calculate the distance between the current and the goal position double distance = sqrt(pow(goal_pan - current_pan, 2) - pow(goal_tilt - current_tilt, 2)); - int step_count = distance / 3 * DEG_TO_RAD; + // Calculate the number of steps we need to take to reach the goal position + // This assumes that we move 3 degrees per step + int step_count = distance / (3 * DEG_TO_RAD); - // calculate path + // Calculate path by performing linear interpolation between the current and the goal position std::vector<std::pair<double, double>> pan_and_tilt_steps; for (int i = 0; i < step_count; i++) { pan_and_tilt_steps[i].first = @@ -456,23 +485,32 @@ class HeadMover { pan_and_tilt_steps[i].second = current_tilt + (goal_tilt - current_tilt) / step_count * i; } - // check if we have collisions on our path + + // Check if we have collisions on our path for (int i = 0; i < step_count; i++) { if (check_head_collision( pan_and_tilt_steps[i].first, pan_and_tilt_steps[i].second)) { + // If we have a collision, try to move the head to an alternative position + // The new position looks 10 degrees further up and is less likely to have a collision with the body + // Also increase the depth of the recursion as this is a new attempt to move the head to the goal position return avoid_collision_on_path( goal_pan, goal_tilt + 10 * DEG_TO_RAD, current_pan, current_tilt, pan_speed, tilt_speed, max_depth, depth + 1); } } + + // We do not have any collisions on our path, so we can move the head to the goal position move_head_to_position_with_speed_adjustment( goal_pan, goal_tilt, current_pan, current_tilt, pan_speed, tilt_speed); return true; } + /** + * @brief Checks if the head collides with the body at a given pan and tilt position + */ bool check_head_collision(double pan, double tilt) { collision_state_->setJointPositions("HeadPan", &pan); collision_state_->setJointPositions("HeadTilt", &tilt); @@ -484,6 +522,9 @@ class HeadMover { return res.collision; } + /** + * @brief Move the head to the target position but adjust the speed of the joints so both reach the goal at the same time + */ void move_head_to_position_with_speed_adjustment( double goal_pan, double goal_tilt, @@ -491,27 +532,38 @@ class HeadMover { double current_tilt, double pan_speed, double tilt_speed) { + // Calculate the delta between the current and the goal positions double delta_pan = std::abs(goal_pan - current_pan); double delta_tilt = std::abs(goal_tilt - current_tilt); - if (delta_pan > 0) { + // Check which axis has to move further and adjust the speed of the other axis so both reach the goal at the same time + if (delta_pan > delta_tilt) { + // Slow down the tilt axis to match the time it takes for the pan axis to reach the goal tilt_speed = std::min( tilt_speed, calculate_lower_speed(delta_pan, delta_tilt, pan_speed)); } else { + // Slow down the pan axis to match the time it takes for the tilt axis to reach the goal pan_speed = std::min( pan_speed, calculate_lower_speed(delta_tilt, delta_pan, tilt_speed)); } + + // Send the motor goals including the position, speed and acceleration pos_msg_.positions = {goal_pan, goal_tilt}; pos_msg_.velocities = {pan_speed, tilt_speed}; - pos_msg_.accelerations = {params_.max_acceleration_pan, params_.max_acceleration_pan}; + pos_msg_.header.stamp = rclcpp::Clock().now(); position_publisher_->publish(pos_msg_); } + /** + * @brief Returns the current position of the head motors + */ std::pair<double, double> get_head_position() { - double head_pan; - double head_tilt; + double head_pan = 0.0; + double head_tilt = 0.0; + + // Iterate over all joints and find the head pan and tilt joints for (size_t i = 0; i < current_joint_state_->name.size(); i++) { if (current_joint_state_->name[i] == "HeadPan") { head_pan = current_joint_state_->position[i]; @@ -522,40 +574,40 @@ class HeadMover { return {head_pan, head_tilt}; } + + /** + * @brief Converts a scanline number to a tilt angle + */ double lineAngle( int line, int line_count, double min_angle, double max_angle) { + // Get the angular delta that is covered by the scanlines in the tilt axis double delta = std::abs(max_angle - min_angle); - int steps = delta / (line_count - 1); - double value = steps * line + min_angle; - return value; - } - - double calculateHorizonAngle( - bool is_right, - double angle_right, - double angle_left) { - if (is_right) { - return angle_right; - } else { - return angle_left; - } + // Calculate the angular step size between two scanlines + double steps = delta / (line_count - 1); + // Calculate the tilt angle of the given scanline + return steps * line + min_angle; } + /** + * @brief Performs a linear interpolation between the min and max pan values and returns the interpolated steps + */ std::vector<std::pair<double, double>> interpolatedSteps( int steps, double tilt, double min_pan, double max_pan) { - if (steps == 0) { - return {}; - } + // Add one to the step count as we need to include the min and max pan values steps += 1; + // Create a vector that stores the interpolated steps std::vector<std::pair<double, double>> output_points; + // Calculate the delta between the min and max pan values double delta = std::abs(max_pan - min_pan); + // Calculate the step size between two interpolated steps double step_size = delta / steps; + // Iterate over all steps and calculate the interpolated pan values for (int i = 1; i <= steps; i++) { double pan = min_pan + step_size * i; output_points.emplace_back(pan, tilt); @@ -563,6 +615,9 @@ class HeadMover { return output_points; } + /** + * @brief Generates a parameterized search pattern + */ std::vector<std::pair<double, double>> generatePattern( int line_count, double max_horizontal_angle_left, @@ -571,41 +626,61 @@ class HeadMover { double max_vertical_angle_down, int reduce_last_scanline = 0.2, // TODO: needs to be changed to 1 int interpolation_steps = 0) { + // Store the keyframes of the search pattern std::vector<std::pair<double, double>> keyframes; - bool down_direction = false; - bool right_side = false; - bool right_direction = true; + // Store the state of the generation process + bool down_direction = false; // true = down, false = up + bool right_side = false; // true = right, false = left + bool right_direction = true; // true = moving right, false = moving left int line = line_count - 1; + // Calculate the number of iterations that are needed to generate the search pattern int iterations = std::max(line_count * 4 - 4, 2); + // Iterate over all iterations and generate the search pattern for (int i = 0; i < iterations; i++) { - std::pair<double, double> current_point = { - calculateHorizonAngle( - right_side, max_horizontal_angle_right, - max_horizontal_angle_left), - lineAngle( - line, line_count, max_vertical_angle_down, - max_vertical_angle_up)}; - keyframes.push_back(current_point); + // Get the maximum pan values (left and right) for the current pan position + // Select the relevant one based on the current side we are on + double current_pan; + if (right_side) { + current_pan = max_horizontal_angle_right; + } else { + current_pan = max_horizontal_angle_left; + } + + // Get the current tilt angle based on the current line we are on + double current_tilt = lineAngle( + line, line_count, max_vertical_angle_down, + max_vertical_angle_up); + + // Store the keyframe + keyframes.push_back({current_pan, current_tilt}); + // Check if we move horizontally or vertically in the pattern if (right_side != right_direction) { + // We move horizontally, so we might need to interpolate between the current and the next keyframe std::vector<std::pair<double, double>> interpolated_points = interpolatedSteps( - interpolation_steps, current_point.second, + interpolation_steps, current_tilt, max_horizontal_angle_right, max_horizontal_angle_left); + // Reverse the order of the interpolated points if we are moving to the right if (right_direction) { std::reverse(interpolated_points.begin(), interpolated_points.end()); } + // Add the interpolated points to the keyframes keyframes.insert( keyframes.end(), interpolated_points.begin(), interpolated_points.end()); + // Change the direction we are moving in right_side = right_direction; } else { + // Change the horizontal direction we are moving in right_side = !right_direction; + // Check if we reached the top or bottom of the pattern and need to change the direction if (0 <= line && line <= line_count - 1) { down_direction = !down_direction; } + // Change the line we are on based on the direction we are moving in if (down_direction) { line -= 1; } else { @@ -613,6 +688,8 @@ class HeadMover { } } } + + // Reduce the last scanline by a given factor for (auto & keyframe : keyframes) { if (keyframe.second == max_vertical_angle_down) { keyframe = {keyframe.first * reduce_last_scanline, @@ -622,21 +699,28 @@ class HeadMover { return keyframes; } + + /** + * @brief Calculates the motor goals that are needed to look at a given point using the inverse kinematics + */ std::pair<double, double> get_motor_goals_from_point( geometry_msgs::msg::Point point) { + + // Create a new IK options object bio_ik::BioIKKinematicsQueryOptions ik_options; ik_options.return_approximate_solution = true; ik_options.replace = true; - bio_ik::LookAtGoal goal; - goal.setTarget({point.x, point.y, point.z}); - goal.setWeight(1.0); - goal.setAxis({1.0, 0.0, 0.0}); - goal.setLinkName("camera"); - ik_options.goals.emplace_back(new bio_ik::LookAtGoal(goal)); + // Create a new look at goal and set the target point as the position the camera link should look at + ik_options.goals.emplace_back(new bio_ik::LookAtGoal( + "camera", + {1.0, 0.0, 0.0}, + {point.x, point.y, point.z})); + // Get the joint model group for the head auto joint_model_group = robot_model_->getJointModelGroup("Head"); + // Try to calculate the inverse kinematics double timeout_seconds = 1.0; bool success = robot_state_->setFromIK( joint_model_group, EigenSTL::vector_Isometry3d(), @@ -644,88 +728,118 @@ class HeadMover { moveit::core::GroupStateValidityCallbackFn(), ik_options); robot_state_->update(); + // Get the solution from the IK response bio_ik_msgs::msg::IKResponse response; moveit::core::robotStateToRobotStateMsg(*robot_state_, response.solution); response.solution_fitness = ik_options.solution_fitness; + // Return the motor goals if the IK was successful if (success) { - std::pair<double, double> states = { - response.solution.joint_state.position[0], - response.solution.joint_state.position[1]}; - return states; + return {response.solution.joint_state.position[0], response.solution.joint_state.position[1]}; } else { - std::cout << "BioIK failed with error code: " << response.error_code.val - << std::endl; - std::pair<double, double> states = {0.0, 0.0}; - return states; + RCLCPP_ERROR_STREAM_THROTTLE( + node_->get_logger(), *node_->get_clock(), + 1000, "BioIK failed with error code: " << response.error_code.val); + return {0.0, 0.0}; } } + /** + * @brief Looks at a given point and returns true if the goal position was reached + */ bool look_at( geometry_msgs::msg::PointStamped point, double min_pan_delta = 0.02, double min_tilt_delta = 0.02) { try { + // Transform the point into the planning frame geometry_msgs::msg::PointStamped new_point = tf_buffer_->transform( point, planning_scene_->getPlanningFrame(), tf2::durationFromSec(0.9)); + // Get the motor goals that are needed to look at the point from the inverse kinematics std::pair<double, double> pan_tilt = get_motor_goals_from_point(new_point.point); + // Get the current head position std::pair<double, double> current_pan_tilt = get_head_position(); + // Check if we reached the goal position if (std::abs(pan_tilt.first - current_pan_tilt.first) > min_pan_delta || std::abs(pan_tilt.second - current_pan_tilt.second) > min_tilt_delta) { + // Send the motor goals to the head motors send_motor_goals( pan_tilt.first, pan_tilt.second, true, params_.look_at.pan_speed, params_.look_at.tilt_speed); + // Return false as we did not reach the goal position yet return false; } + // Return true as we reached the goal position return true; } catch (tf2::TransformException & ex) { + // Report error message if we were not able to transform the point RCLCPP_ERROR(node_->get_logger(), "Transform error: %s", ex.what()); + // We obviously did not reach the goal position return false; } } + /** + * @brief Returns the index of the pattern keypoint that is closest to the current head position + * + * @param pattern The search pattern + * @param pan The current pan position + * @param tilt The current tilt position + * @return int The index of the pattern keypoint that is closest to the current head position + */ int get_near_pattern_position( std::vector<std::pair<double, double>> pattern, double pan, double tilt) { + // Store the index and distance of the closest keypoint std::pair<double, int> min_distance_point = {10000.0, -1}; + // Iterate over all keypoints and calculate the distance to the current head position for (size_t i = 0; i < pattern.size(); i++) { + // Calculate the cartesian distance between the current head position and the keypoint double distance = std::sqrt( std::pow(pattern[i].first - pan, 2) + std::pow(pattern[i].second - tilt, 2)); + // Check if the distance is smaller than the current minimum distance + // and if so, update the minimum distance accordingly if (distance < min_distance_point.first) { min_distance_point.first = distance; min_distance_point.second = i; } } + // Return the index of the closest keypoint return min_distance_point.second; } + /** + * @brief Performs the search pattern that is currently loaded + */ void perform_search_pattern() { + // Do not perform the search pattern if it is empty if (pattern_.size() == 0) { return; } + // Wrap the index that points to the current keypoint around if necessary index_ = index_ % int(pattern_.size()); + // Get the current keypoint and convert it to radians double head_pan = pattern_[index_].first * DEG_TO_RAD; double head_tilt = pattern_[index_].second * DEG_TO_RAD; - double current_head_pan; - double current_head_tilt; - std::pair<double, double> head_position = get_head_position(); - current_head_pan = head_position.first; - current_head_tilt = head_position.second; + // Get the current head position + auto [current_head_pan, current_head_tilt] = get_head_position(); + // Send the motor goals to the head motors bool success = send_motor_goals( head_pan, head_tilt, true, pan_speed_, tilt_speed_, current_head_pan, current_head_tilt); if (success) { + // Check if we reached the current keypoint and if so, increase the index double distance_to_goal = std::sqrt( std::pow(head_pan - current_head_pan, 2) + @@ -734,15 +848,22 @@ class HeadMover { index_++; } } else { + // Skip the keypoint if we were not able to reach it (e.g. due to an unresolvable collision) index_++; } } + /** + * @brief Callback for the ticks of the main loop + */ void behave() { + // Get the current head mode uint curr_head_mode = head_mode_; + // Pull the parameters from the parameter server params_ = param_listener_->get_params(); + // Check if the head mode changed and if so, update the search pattern if (prev_head_mode_ != curr_head_mode) { switch (curr_head_mode) { case humanoid_league_msgs::msg::HeadMode::BALL_MODE: // 0 @@ -809,26 +930,37 @@ class HeadMover { default: return; } + + // Get the current head position std::pair<double, double> head_position = get_head_position(); + // Select the closest keypoint in the search pattern as a starting point index_ = get_near_pattern_position( pattern_, head_position.first, head_position.second); } + // Check if no look at action is running or if the head mode is DONT_MOVE + // if this is not the case, perform the search pattern if (!action_running_ && curr_head_mode != humanoid_league_msgs::msg::HeadMode::DONT_MOVE) // here DONT_MOVE // is implemented { + // Store the current head mode as the previous head mode to detect changes prev_head_mode_ = curr_head_mode; + // Execute the search pattern perform_search_pattern(); } } + /** + * @brief A getter that returns the node + */ std::shared_ptr<rclcpp::Node> get_node() {return node_;} }; } // namespace move_head + int main(int argc, char * argv[]) { rclcpp::init(argc, argv); rclcpp::experimental::executors::EventsExecutor exec; From 17090d651a83eeff539464f886136d7c5958a74f Mon Sep 17 00:00:00 2001 From: Florian Vahl <git@flova.de> Date: Tue, 19 Sep 2023 22:03:21 +0200 Subject: [PATCH 20/74] Remove unused dep --- bitbots_head_mover/CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/bitbots_head_mover/CMakeLists.txt b/bitbots_head_mover/CMakeLists.txt index cd2564639..4cc65fe7f 100644 --- a/bitbots_head_mover/CMakeLists.txt +++ b/bitbots_head_mover/CMakeLists.txt @@ -21,7 +21,6 @@ find_package(rclcpp REQUIRED) find_package(sensor_msgs REQUIRED) find_package(std_msgs REQUIRED) find_package(tf2_geometry_msgs REQUIRED) -find_package(tf2_kdl REQUIRED) find_package(tf2_ros REQUIRED) set(CMAKE_BUILD_TYPE Debug) From 07fd7c91173c1d0c8ddca1dab787463ef048f93b Mon Sep 17 00:00:00 2001 From: Florian Vahl <git@flova.de> Date: Tue, 19 Sep 2023 22:03:35 +0200 Subject: [PATCH 21/74] Sort imports in moveit bindings --- .../bitbots_moveit_bindings/__init__.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/bitbots_moveit_bindings/bitbots_moveit_bindings/__init__.py b/bitbots_moveit_bindings/bitbots_moveit_bindings/__init__.py index 92d1cdc54..3855b179a 100644 --- a/bitbots_moveit_bindings/bitbots_moveit_bindings/__init__.py +++ b/bitbots_moveit_bindings/bitbots_moveit_bindings/__init__.py @@ -1,10 +1,10 @@ +from bio_ik_msgs.msg import IKRequest +from bio_ik_msgs.srv import GetIK +from bitbots_moveit_bindings.libbitbots_moveit_bindings import \ + BitbotsMoveitBindings from moveit_msgs.srv import GetPositionFK, GetPositionIK -from bitbots_moveit_bindings.libbitbots_moveit_bindings import BitbotsMoveitBindings -from rclpy.serialization import serialize_message, deserialize_message from rcl_interfaces.msg import Parameter -from bio_ik_msgs.srv import GetIK -from bio_ik_msgs.msg import IKRequest -from sensor_msgs.msg import JointState +from rclpy.serialization import deserialize_message, serialize_message # this state is only used for IK and FK calls and does not listen to current joint_states ik_fk_state = None From e66c824f1d78dd785c5a56035be6c95bc4bc059c Mon Sep 17 00:00:00 2001 From: Florian Vahl <git@flova.de> Date: Tue, 19 Sep 2023 22:19:27 +0200 Subject: [PATCH 22/74] Fix fused angles --- bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/fallen.py | 2 +- bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/falling.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/fallen.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/fallen.py index 147b8b19f..e848f3ca8 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/fallen.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/fallen.py @@ -31,7 +31,7 @@ def perform(self, reevaluate=False): return "NOT_FALLEN" # Convert quaternion to fused angles - fused_roll, fused_pitch, _ = quat2fused(self.blackboard.quaternion, order="xyzw") + fused_roll, fused_pitch, _, _ = quat2fused(self.blackboard.quaternion, order="xyzw") # Decides which side is facing downwards. if fused_pitch > self.fallen_orientation_thresh: diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/falling.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/falling.py index 1021e13ad..7e1c8565d 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/falling.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/falling.py @@ -47,7 +47,7 @@ def perform(self, reevaluate=False): angular_velocity = self.blackboard.gyro # Convert orientation to fused angles - fused_roll, fused_pitch, _ = quat2fused(self.blackboard.quaternion, order="xyzw") + fused_roll, fused_pitch, _, _ = quat2fused(self.blackboard.quaternion, order="xyzw") # setting the fall quantification function roll_fall_quantification = self.calc_fall_quantification( From 3530ce359161c52510a0211ff04c252b54d11733 Mon Sep 17 00:00:00 2001 From: Florian Vahl <git@flova.de> Date: Tue, 19 Sep 2023 22:19:40 +0200 Subject: [PATCH 23/74] Fix unused variable --- bitbots_hcm/bitbots_hcm/hcm_dsd/actions/play_animation.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/play_animation.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/play_animation.py index 2b8b22f34..9dd7aa946 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/play_animation.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/play_animation.py @@ -159,7 +159,7 @@ def start_animation(self): timeout_sec=self.blackboard.node.get_parameter('hcm.anim_server_wait_time').get_parameter_value().double_value) if not first_try: server_running = False - while not server_running and not self.blackboard.shut_down_request and rclpy.ok(): + while not server_running and rclpy.ok(): self.blackboard.node.get_logger().warn( "Dynup Action Server not running! Dynup cannot work without dynup server!" "Will now wait until server is accessible!", From 16a9f78f1f9d4146f3e3140f261f3740f548b07e Mon Sep 17 00:00:00 2001 From: Florian Vahl <git@flova.de> Date: Wed, 20 Sep 2023 22:01:22 +0200 Subject: [PATCH 24/74] Fix typo in use_sim_time --- bitbots_hcm/bitbots_hcm/humanoid_control_module.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bitbots_hcm/bitbots_hcm/humanoid_control_module.py b/bitbots_hcm/bitbots_hcm/humanoid_control_module.py index 271007d64..3f1bbc0ac 100755 --- a/bitbots_hcm/bitbots_hcm/humanoid_control_module.py +++ b/bitbots_hcm/bitbots_hcm/humanoid_control_module.py @@ -41,7 +41,7 @@ def __init__(self, use_sim_time, simulation_active, visualization_active): for parameter_msg in parameter_msgs: parameters.append(Parameter.from_parameter_msg(parameter_msg)) if use_sim_time: - parameters.append(Parameter("use_sime_time", type_=Parameter.Type.BOOL, value=True)) + parameters.append(Parameter("use_sim_time", type_=Parameter.Type.BOOL, value=True)) if simulation_active: parameters.append(Parameter("simulation_active", type_=Parameter.Type.BOOL, value=True)) if visualization_active: From 93481e478c47ef10f88b9c52f5b4b9c59506a44b Mon Sep 17 00:00:00 2001 From: Florian Vahl <git@flova.de> Date: Wed, 20 Sep 2023 22:03:18 +0200 Subject: [PATCH 25/74] Add debug log for descision --- bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/walking.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/walking.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/walking.py index 51c9142fc..ea055f8d9 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/walking.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/walking.py @@ -9,7 +9,11 @@ class RecentWalkingGoals(AbstractHCMDecisionElement): """ def perform(self, reevaluate=False): - if self.blackboard.node.get_clock().now().nanoseconds / 1e9 - self.blackboard.last_walking_goal_time.nanoseconds / 1e9 < 0.1: + time_delta = self.blackboard.node.get_clock().now().nanoseconds / 1e9 - self.blackboard.last_walking_goal_time.nanoseconds / 1e9 + # Log the time delta between now and the last walking goal + self.publish_debug_data("Last Walking Goal Time Delta", time_delta) + # If the time delta is smaller enough, we are still walking + if time_delta < 0.1: # we are walking and can stay like this return "STAY_WALKING" else: From f26481b104750c77f0c320b39b338a50061d91e5 Mon Sep 17 00:00:00 2001 From: Florian Vahl <git@flova.de> Date: Wed, 20 Sep 2023 22:17:06 +0200 Subject: [PATCH 26/74] Fix run animation script --- .../scripts/run_animation.py | 38 +++++++------------ 1 file changed, 14 insertions(+), 24 deletions(-) diff --git a/bitbots_animation_server/scripts/run_animation.py b/bitbots_animation_server/scripts/run_animation.py index 05e2593bd..c3aabd515 100755 --- a/bitbots_animation_server/scripts/run_animation.py +++ b/bitbots_animation_server/scripts/run_animation.py @@ -1,9 +1,11 @@ #!/usr/bin/env python3 import sys +import threading import rclpy from actionlib_msgs.msg import GoalStatus from rclpy.action import ActionClient +from rclpy.executors import MultiThreadedExecutor from rclpy.node import Node from humanoid_league_msgs.action import PlayAnimation @@ -12,6 +14,12 @@ def anim_run(anim=None, hcm=False): node = Node("run_animation") + # Create own executor for Python part + multi_executor = MultiThreadedExecutor(num_threads=4) + multi_executor.add_node(node) + spin_thread = threading.Thread(target=multi_executor.spin, args=(), daemon=True) + spin_thread.start() + anim_client = ActionClient(node, PlayAnimation, 'animation') if anim is None or anim == "": @@ -31,30 +39,12 @@ def anim_run(anim=None, hcm=False): goal.animation = anim goal.hcm = hcm - # todo not .send_goal does never return - state = anim_client.send_goal_async(goal) - if state == GoalStatus.PENDING: - print('Pending') - elif state == GoalStatus.ACTIVE: - print('Active') - elif state == GoalStatus.PREEMPTED: - print('Preempted') - elif state == GoalStatus.SUCCEEDED: - print('Succeeded') - elif state == GoalStatus.ABORTED: - print('Aborted') - elif state == GoalStatus.REJECTED: - print('Rejected') - elif state == GoalStatus.PREEMPTING: - print('Preempting') - elif state == GoalStatus.RECALLING: - print('Recalling') - elif state == GoalStatus.RECALLED: - print('Recalled') - elif state == GoalStatus.LOST: - print('Lost') - else: - print('Unknown state', state) + state: PlayAnimation.Result = anim_client.send_goal(goal).result + + print(f"Animation {anim} {['failed', 'successfully finished'][int(state.successful)]}.") + + node.destroy_node() + rclpy.shutdown() if __name__ == '__main__': From b74c7e6bf76ea0b964c000b1b066a4b300adc612 Mon Sep 17 00:00:00 2001 From: Florian Vahl <git@flova.de> Date: Wed, 20 Sep 2023 23:53:55 +0200 Subject: [PATCH 27/74] Add printout at animation start --- bitbots_animation_server/scripts/run_animation.py | 1 + 1 file changed, 1 insertion(+) diff --git a/bitbots_animation_server/scripts/run_animation.py b/bitbots_animation_server/scripts/run_animation.py index c3aabd515..7e6e56c41 100755 --- a/bitbots_animation_server/scripts/run_animation.py +++ b/bitbots_animation_server/scripts/run_animation.py @@ -39,6 +39,7 @@ def anim_run(anim=None, hcm=False): goal.animation = anim goal.hcm = hcm + print(f"Sending animation {anim} to {'hcm' if hcm else 'motion'}.") state: PlayAnimation.Result = anim_client.send_goal(goal).result print(f"Animation {anim} {['failed', 'successfully finished'][int(state.successful)]}.") From c01cbb5d1ac9be3678f2dba04547b73809b88503 Mon Sep 17 00:00:00 2001 From: Florian Vahl <git@flova.de> Date: Wed, 20 Sep 2023 23:55:47 +0200 Subject: [PATCH 28/74] Fix kick, walking and animation feedback --- .../hcm_dsd/actions/play_animation.py | 17 ++++++++++++----- .../bitbots_hcm/hcm_dsd/decisions/kicking.py | 19 +++++++++++++++---- .../bitbots_hcm/hcm_dsd/decisions/walking.py | 7 +++++++ .../bitbots_hcm/hcm_dsd/hcm_blackboard.py | 4 ++-- .../bitbots_hcm/humanoid_control_module.py | 3 +++ bitbots_hcm/src/hcm.cpp | 10 +++++++++- 6 files changed, 48 insertions(+), 12 deletions(-) diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/play_animation.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/play_animation.py index 9dd7aa946..de3e7ab67 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/play_animation.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/play_animation.py @@ -75,14 +75,16 @@ def start_animation(self, anim): goal.animation = anim goal.hcm = True # the animation is from the hcm self.blackboard.animation_action_current_goal = self.blackboard.animation_action_client.send_goal_async( - goal, feedback_callback=self.kick_feedback_cb) + goal, feedback_callback=self.animation_feedback_cb) return True - def kick_feedback_cb(self, msg: PlayAnimation.Feedback): - self.blackboard.last_kick_feedback = self.blackboard.node.get_clock().now() + def animation_feedback_cb(self, msg): + feedback: PlayAnimation.Feedback = msg.feedback + self.publish_debug_data("Animation Percent Done", str(feedback.percent_done)) def animation_finished(self): - return self.blackboard.animation_action_current_goal.cancelled() or self.blackboard.animation_action_current_goal.done() + return (self.blackboard.animation_action_current_goal.done() and self.blackboard.animation_action_current_goal.result().status == GoalStatus.STATUS_SUCCEEDED) \ + or self.blackboard.animation_action_current_goal.cancelled() class PlayAnimationFallingLeft(AbstractPlayAnimation): @@ -173,9 +175,14 @@ def start_animation(self): goal = Dynup.Goal() goal.direction = self.direction - self.blackboard.dynup_action_current_goal = self.blackboard.dynup_action_client.send_goal_async(goal) + self.blackboard.dynup_action_current_goal = self.blackboard.dynup_action_client.send_goal_async( + goal, feedback_callback=self.animation_feedback_cb) return True + def animation_feedback_cb(self, msg): + feedback: Dynup.Feedback = msg.feedback + self.publish_debug_data("Dynup Percent Done", str(feedback.percent_done)) + def animation_finished(self): return (self.blackboard.dynup_action_current_goal.done() and self.blackboard.dynup_action_current_goal.result().status == GoalStatus.STATUS_SUCCEEDED) \ or self.blackboard.dynup_action_current_goal.cancelled() diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/kicking.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/kicking.py index dcad299f8..6c3b4d2a7 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/kicking.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/kicking.py @@ -9,11 +9,22 @@ class RecentKickGoals(AbstractHCMDecisionElement): """ def perform(self, reevaluate=False): - if self.blackboard.last_kick_feedback is not None and \ - (self.blackboard.node.get_clock().now() - self.blackboard.last_kick_feedback).nanoseconds / 1e9 < 0.2: - return 'KICKING' + # Check if we have received a kick goal at all + if self.blackboard.last_kick_goal_time is None: + return "NOT_KICKING" + + # Calculate the time delta between now and the last kick goal + time_delta = self.blackboard.node.get_clock().now().nanoseconds / 1e9 - self.blackboard.last_kick_goal_time.nanoseconds / 1e9 + + # Log the time delta between now and the last kick goal + self.publish_debug_data("Last Kick Goal Time Delta", time_delta) + + # If the time delta is smaller enough, we are still kicking + if time_delta < 0.1: + # we are walking and can stay like this + return "KICKING" else: - return 'NOT_KICKING' + return "NOT_KICKING" def get_reevaluate(self): return True \ No newline at end of file diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/walking.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/walking.py index ea055f8d9..81be75737 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/walking.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/walking.py @@ -9,9 +9,16 @@ class RecentWalkingGoals(AbstractHCMDecisionElement): """ def perform(self, reevaluate=False): + # Check if we have received a walking goal at all + if self.blackboard.last_walking_goal_time is None: + return "NOT_WALKING" + + # Calculate the time delta between now and the last walking goal time_delta = self.blackboard.node.get_clock().now().nanoseconds / 1e9 - self.blackboard.last_walking_goal_time.nanoseconds / 1e9 + # Log the time delta between now and the last walking goal self.publish_debug_data("Last Walking Goal Time Delta", time_delta) + # If the time delta is smaller enough, we are still walking if time_delta < 0.1: # we are walking and can stay like this diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/hcm_blackboard.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/hcm_blackboard.py index d1a335de1..d4589aeb4 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/hcm_blackboard.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/hcm_blackboard.py @@ -93,7 +93,7 @@ def __init__(self, node: Node): self.imu_timeout_duration: float = self.node.get_parameter("imu_timeout_duration").value # Walking state - self.last_walking_goal_time = self.node.get_clock().now() + self.last_walking_goal_time: Optional[Time] = None # Falling # Paramerters @@ -102,7 +102,7 @@ def __init__(self, node: Node): # Kicking # State - self.last_kick_feedback: Optional[Time] = None + self.last_kick_goal_time: Optional[Time] = None # IMU state self.imu_msg: Optional[Imu] = None diff --git a/bitbots_hcm/bitbots_hcm/humanoid_control_module.py b/bitbots_hcm/bitbots_hcm/humanoid_control_module.py index 3f1bbc0ac..befe6f0b5 100755 --- a/bitbots_hcm/bitbots_hcm/humanoid_control_module.py +++ b/bitbots_hcm/bitbots_hcm/humanoid_control_module.py @@ -158,6 +158,9 @@ def set_last_animation_goal_time(self, time_msg_serialized: bytes): def set_last_walking_goal_time(self, time_msg_serialized: bytes): self.blackboard.last_walking_goal_time = Time.from_msg(deserialize_message(time_msg_serialized, TimeMsg)) + def set_last_kick_goal_time(self, time_msg_serialized: bytes): + self.blackboard.last_kick_goal_time = Time.from_msg(deserialize_message(time_msg_serialized, TimeMsg)) + def set_last_motor_update_time(self, time_msg_serialized: bytes): self.blackboard.last_motor_update_time = deserialize_message(time_msg_serialized, TimeMsg) diff --git a/bitbots_hcm/src/hcm.cpp b/bitbots_hcm/src/hcm.cpp index d8b473b42..185893b49 100644 --- a/bitbots_hcm/src/hcm.cpp +++ b/bitbots_hcm/src/hcm.cpp @@ -45,6 +45,9 @@ class HCM_CPP : public rclcpp::Node { // Walking state last_walking_time_ = builtin_interfaces::msg::Time(); + // Kick state + last_kick_time_ = builtin_interfaces::msg::Time(); + // Animation state record_active_ = false; external_animation_running_ = false; @@ -180,6 +183,7 @@ class HCM_CPP : public rclcpp::Node { } void kick_goal_callback(const bitbots_msgs::msg::JointCommand msg) { + last_kick_time_ = msg.header.stamp; if (current_state_ == humanoid_league_msgs::msg::RobotControlState::KICKING || current_state_ == humanoid_league_msgs::msg::RobotControlState::CONTROLLABLE) { // we can perform a kick @@ -196,7 +200,7 @@ class HCM_CPP : public rclcpp::Node { pub_controller_command_->publish(msg); } } - + void walking_goal_callback(bitbots_msgs::msg::JointCommand msg) { last_walking_time_ = msg.header.stamp; if (current_state_ == humanoid_league_msgs::msg::RobotControlState::CONTROLLABLE || @@ -231,6 +235,7 @@ class HCM_CPP : public rclcpp::Node { hcm_py_.attr("set_last_motor_update_time")(ros2_python_extension::toPython<builtin_interfaces::msg::Time>(current_joint_state_.header.stamp)); hcm_py_.attr("set_current_joint_state")(ros2_python_extension::toPython<sensor_msgs::msg::JointState>(current_joint_state_)); hcm_py_.attr("set_last_walking_goal_time")(ros2_python_extension::toPython<builtin_interfaces::msg::Time>(last_walking_time_)); + hcm_py_.attr("set_last_kick_goal_time")(ros2_python_extension::toPython<builtin_interfaces::msg::Time>(last_kick_time_)); hcm_py_.attr("set_record_active")(record_active_); hcm_py_.attr("set_external_animation_running")(external_animation_running_); hcm_py_.attr("set_animation_requested")(animation_requested_); @@ -267,6 +272,9 @@ class HCM_CPP : public rclcpp::Node { // Walking state builtin_interfaces::msg::Time last_walking_time_; + // Kick state + builtin_interfaces::msg::Time last_kick_time_; + // Animation states bool record_active_; bool external_animation_running_; From 01b0962c2da0f21f4d54a9b011cd22e232889141 Mon Sep 17 00:00:00 2001 From: Florian Vahl <git@flova.de> Date: Wed, 20 Sep 2023 23:55:59 +0200 Subject: [PATCH 29/74] Fix foot reset service --- bitbots_hcm/bitbots_hcm/hcm_dsd/actions/set_foot_zero.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/set_foot_zero.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/set_foot_zero.py index 95ce01446..5241870b1 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/set_foot_zero.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/set_foot_zero.py @@ -16,7 +16,7 @@ def perform(self, reevaluate=False): self.first_perform = False try: self.blackboard.foot_zero_service.wait_for_service(0.5) - self.blackboard.foot_zero_service() + self.blackboard.foot_zero_service.call_async({}) except: self.blackboard.node.get_logger().warn("No foot zeroing service accessible, will not reset sensors") From 18515dfd115e1cc88bd76f4495e55c77abb6fb07 Mon Sep 17 00:00:00 2001 From: Florian Vahl <7vahl@informatik.uni-hamburg.de> Date: Tue, 26 Sep 2023 17:34:27 +0200 Subject: [PATCH 30/74] Cleanup kick deps --- bitbots_dynamic_kick/CMakeLists.txt | 3 --- bitbots_dynamic_kick/package.xml | 7 +++++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/bitbots_dynamic_kick/CMakeLists.txt b/bitbots_dynamic_kick/CMakeLists.txt index f232b08e6..a4e976ada 100644 --- a/bitbots_dynamic_kick/CMakeLists.txt +++ b/bitbots_dynamic_kick/CMakeLists.txt @@ -18,7 +18,6 @@ find_package(Eigen3 REQUIRED) find_package(geometry_msgs REQUIRED) find_package(humanoid_league_msgs REQUIRED) find_package(moveit_ros_planning_interface REQUIRED) -find_package(nav_msgs REQUIRED) find_package(rclcpp REQUIRED) find_package(rosidl_default_generators REQUIRED) find_package(rot_conv REQUIRED) @@ -63,7 +62,6 @@ ament_target_dependencies(KickNode geometry_msgs humanoid_league_msgs moveit_ros_planning_interface - nav_msgs rclcpp rot_conv sensor_msgs @@ -94,7 +92,6 @@ target_link_libraries(KickNode "${cpp_typesupport_target}") # geometry_msgs # humanoid_league_msgs # moveit_ros_planning_interface -# nav_msgs # rclcpp # ros2_python_extension # rot_conv diff --git a/bitbots_dynamic_kick/package.xml b/bitbots_dynamic_kick/package.xml index 4438ac255..6bc0faf8b 100644 --- a/bitbots_dynamic_kick/package.xml +++ b/bitbots_dynamic_kick/package.xml @@ -22,6 +22,8 @@ <buildtool_depend>rosidl_default_generators</buildtool_depend> <depend>bio_ik</depend> + <depend>backward_ros</depend> + <depend>biped_interfaces</depend> <depend>bitbots_docs</depend> <depend>bitbots_msgs</depend> <depend>bitbots_robot_description</depend> @@ -32,16 +34,17 @@ <depend>humanoid_league_msgs</depend> <depend>moveit_core</depend> <depend>moveit_ros_move_group</depend> - <depend>moveit_ros_robot_interaction</depend> <depend>moveit_ros_planning_interface</depend> + <depend>moveit_ros_robot_interaction</depend> <depend>rclcpp</depend> <depend>ros2_python_extension</depend> <depend>rot_conv</depend> + <depend>sensor_msgs</depend> <depend>std_msgs</depend> - <depend>tf2</depend> <depend>tf2_eigen</depend> <depend>tf2_geometry_msgs</depend> <depend>tf2_ros</depend> + <depend>tf2</depend> <member_of_group>rosidl_interface_packages</member_of_group> From 6f4218dc23adce13caf33c5dfbf9c7e035ed9890 Mon Sep 17 00:00:00 2001 From: Florian Vahl <7vahl@informatik.uni-hamburg.de> Date: Tue, 26 Sep 2023 17:49:55 +0200 Subject: [PATCH 31/74] Fix out of bounds access --- bitbots_head_mover/src/move_head.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/bitbots_head_mover/src/move_head.cpp b/bitbots_head_mover/src/move_head.cpp index 231b17992..87b7250fc 100644 --- a/bitbots_head_mover/src/move_head.cpp +++ b/bitbots_head_mover/src/move_head.cpp @@ -480,10 +480,10 @@ class HeadMover { // Calculate path by performing linear interpolation between the current and the goal position std::vector<std::pair<double, double>> pan_and_tilt_steps; for (int i = 0; i < step_count; i++) { - pan_and_tilt_steps[i].first = - current_pan + (goal_pan - current_pan) / step_count * i; - pan_and_tilt_steps[i].second = - current_tilt + (goal_tilt - current_tilt) / step_count * i; + pan_and_tilt_steps.push_back({ + current_pan + (goal_pan - current_pan) / step_count * i, + current_tilt + (goal_tilt - current_tilt) / step_count * i + }); } // Check if we have collisions on our path From dd3da96cf27c09319f6941c53be7bd71d9a06332 Mon Sep 17 00:00:00 2001 From: Florian Vahl <git@flova.de> Date: Wed, 27 Sep 2023 22:32:08 +0200 Subject: [PATCH 32/74] Fix stuck head mode --- bitbots_head_mover/src/move_head.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/bitbots_head_mover/src/move_head.cpp b/bitbots_head_mover/src/move_head.cpp index 87b7250fc..f282ec579 100644 --- a/bitbots_head_mover/src/move_head.cpp +++ b/bitbots_head_mover/src/move_head.cpp @@ -599,6 +599,10 @@ class HeadMover { double tilt, double min_pan, double max_pan) { + // Handle edge case where we do not need to interpolate + if (steps == 0) { + return {}; + } // Add one to the step count as we need to include the min and max pan values steps += 1; // Create a vector that stores the interpolated steps From edafe315853e24029f63850916721415422f88f7 Mon Sep 17 00:00:00 2001 From: Florian Vahl <7vahl@informatik.uni-hamburg.de> Date: Tue, 17 Oct 2023 21:11:44 +0200 Subject: [PATCH 33/74] Remove hlm --- .../animation_node.py | 5 +- bitbots_animation_server/package.xml | 2 +- .../scripts/animation_hcm_bridge.py | 4 +- .../scripts/run_animation.py | 3 +- bitbots_dynamic_kick/CMakeLists.txt | 3 - bitbots_dynamic_kick/package.xml | 1 - bitbots_hcm/CMakeLists.txt | 2 - .../hcm_dsd/actions/play_animation.py | 3 +- .../bitbots_hcm/hcm_dsd/actions/state.py | 2 +- .../hcm_dsd/decisions/animation.py | 2 - .../hcm_dsd/decisions/check_hardware.py | 4 +- .../bitbots_hcm/hcm_dsd/decisions/fallen.py | 4 +- .../bitbots_hcm/hcm_dsd/decisions/falling.py | 2 +- .../bitbots_hcm/hcm_dsd/decisions/kicking.py | 4 +- .../bitbots_hcm/hcm_dsd/decisions/pickup.py | 4 +- .../bitbots_hcm/hcm_dsd/decisions/startup.py | 2 +- .../bitbots_hcm/hcm_dsd/decisions/walking.py | 4 +- .../bitbots_hcm/hcm_dsd/hcm_blackboard.py | 10 ++-- .../bitbots_hcm/humanoid_control_module.py | 5 +- bitbots_hcm/docs/index.rst | 4 +- bitbots_hcm/package.xml | 1 - bitbots_hcm/scripts/hcm_led.py | 2 +- bitbots_hcm/scripts/pause.py | 2 +- bitbots_hcm/src/hcm.cpp | 58 +++++++++---------- bitbots_head_mover/CMakeLists.txt | 3 +- bitbots_head_mover/package.xml | 1 - bitbots_head_mover/src/move_head.cpp | 24 ++++---- bitbots_odometry/launch/odometry.launch | 1 - bitbots_odometry/src/odometry_fuser.cpp | 6 +- bitbots_quintic_walk/CMakeLists.txt | 3 - .../include/bitbots_quintic_walk/walk_node.h | 10 ++-- .../bitbots_quintic_walk/walk_pywrapper.h | 10 ++-- bitbots_quintic_walk/package.xml | 1 - bitbots_quintic_walk/src/walk_node.cpp | 16 ++--- bitbots_quintic_walk/src/walk_pywrapper.cpp | 4 +- 35 files changed, 94 insertions(+), 118 deletions(-) diff --git a/bitbots_animation_server/bitbots_animation_server/animation_node.py b/bitbots_animation_server/bitbots_animation_server/animation_node.py index 6d099073f..ccd0f8a3f 100755 --- a/bitbots_animation_server/bitbots_animation_server/animation_node.py +++ b/bitbots_animation_server/bitbots_animation_server/animation_node.py @@ -18,9 +18,8 @@ from bitbots_animation_server.animation import parse from bitbots_animation_server.resource_manager import ResourceManager from bitbots_animation_server.spline_animator import SplineAnimator -from humanoid_league_msgs.action import PlayAnimation -from humanoid_league_msgs.msg import Animation as AnimationMsg -from humanoid_league_msgs.msg import RobotControlState +from bitbots_msgs.action import PlayAnimation +from bitbots_msgs.msg import Animation as AnimationMsg, RobotControlState class AnimationNode(Node): diff --git a/bitbots_animation_server/package.xml b/bitbots_animation_server/package.xml index 85ce516b3..be494fc64 100644 --- a/bitbots_animation_server/package.xml +++ b/bitbots_animation_server/package.xml @@ -15,10 +15,10 @@ <license>MIT</license> <depend>bitbots_docs</depend> + <depend>bitbots_msgs</depend> <depend>bitbots_robot_description</depend> <depend>bitbots_splines</depend> <depend>bitbots_utils</depend> - <depend>humanoid_league_msgs</depend> <depend>rclpy</depend> <depend>std_msgs</depend> diff --git a/bitbots_animation_server/scripts/animation_hcm_bridge.py b/bitbots_animation_server/scripts/animation_hcm_bridge.py index c7b12e431..058c408c3 100755 --- a/bitbots_animation_server/scripts/animation_hcm_bridge.py +++ b/bitbots_animation_server/scripts/animation_hcm_bridge.py @@ -9,7 +9,7 @@ from bitbots_msgs.msg import JointCommand # List of all joint names. Do not change the order as it is important for Gazebo -from humanoid_league_msgs.msg import Animation +from bitbots_msgs.msg import Animation JOINT_NAMES = ['HeadPan', 'HeadTilt', 'LShoulderPitch', 'LShoulderRoll', 'LElbow', 'RShoulderPitch', 'RShoulderRoll', 'RElbow', 'LHipYaw', 'LHipRoll', 'LHipPitch', 'LKnee', 'LAnklePitch', @@ -42,4 +42,4 @@ def animation_cb(self, msg: Animation): if __name__ == '__main__': bridge = AnimationHcmBridge() - rclpy.spin(bridge) \ No newline at end of file + rclpy.spin(bridge) diff --git a/bitbots_animation_server/scripts/run_animation.py b/bitbots_animation_server/scripts/run_animation.py index 7e6e56c41..e45157f11 100755 --- a/bitbots_animation_server/scripts/run_animation.py +++ b/bitbots_animation_server/scripts/run_animation.py @@ -3,12 +3,11 @@ import threading import rclpy -from actionlib_msgs.msg import GoalStatus from rclpy.action import ActionClient from rclpy.executors import MultiThreadedExecutor from rclpy.node import Node -from humanoid_league_msgs.action import PlayAnimation +from bitbots_msgs.action import PlayAnimation def anim_run(anim=None, hcm=False): diff --git a/bitbots_dynamic_kick/CMakeLists.txt b/bitbots_dynamic_kick/CMakeLists.txt index a4e976ada..405825b00 100644 --- a/bitbots_dynamic_kick/CMakeLists.txt +++ b/bitbots_dynamic_kick/CMakeLists.txt @@ -16,7 +16,6 @@ find_package(control_msgs REQUIRED) find_package(control_toolbox REQUIRED) find_package(Eigen3 REQUIRED) find_package(geometry_msgs REQUIRED) -find_package(humanoid_league_msgs REQUIRED) find_package(moveit_ros_planning_interface REQUIRED) find_package(rclcpp REQUIRED) find_package(rosidl_default_generators REQUIRED) @@ -60,7 +59,6 @@ ament_target_dependencies(KickNode control_msgs control_toolbox geometry_msgs - humanoid_league_msgs moveit_ros_planning_interface rclcpp rot_conv @@ -90,7 +88,6 @@ target_link_libraries(KickNode "${cpp_typesupport_target}") # control_msgs # control_toolbox # geometry_msgs -# humanoid_league_msgs # moveit_ros_planning_interface # rclcpp # ros2_python_extension diff --git a/bitbots_dynamic_kick/package.xml b/bitbots_dynamic_kick/package.xml index 6bc0faf8b..0c3c650db 100644 --- a/bitbots_dynamic_kick/package.xml +++ b/bitbots_dynamic_kick/package.xml @@ -31,7 +31,6 @@ <depend>bitbots_utils</depend> <depend>control_toolbox</depend> <depend>geometry_msgs</depend> - <depend>humanoid_league_msgs</depend> <depend>moveit_core</depend> <depend>moveit_ros_move_group</depend> <depend>moveit_ros_planning_interface</depend> diff --git a/bitbots_hcm/CMakeLists.txt b/bitbots_hcm/CMakeLists.txt index ec932cf47..401ad901b 100644 --- a/bitbots_hcm/CMakeLists.txt +++ b/bitbots_hcm/CMakeLists.txt @@ -10,7 +10,6 @@ find_package(bitbots_docs REQUIRED) find_package(bitbots_msgs REQUIRED) find_package(builtin_interfaces REQUIRED) find_package(geometry_msgs REQUIRED) -find_package(humanoid_league_msgs REQUIRED) find_package(pybind11 REQUIRED) find_package(Python3 REQUIRED) find_package(PythonLibs REQUIRED) @@ -34,7 +33,6 @@ ament_target_dependencies(HCM bitbots_msgs builtin_interfaces geometry_msgs - humanoid_league_msgs rclcpp ros2_python_extension sensor_msgs diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/play_animation.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/play_animation.py index de3e7ab67..226d1e2e3 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/play_animation.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/play_animation.py @@ -2,8 +2,7 @@ from action_msgs.msg import GoalStatus from bitbots_hcm.hcm_dsd.actions import AbstractHCMActionElement -from bitbots_msgs.action import Dynup -from humanoid_league_msgs.action import PlayAnimation +from bitbots_msgs.action import Dynup, PlayAnimation class AbstractPlayAnimation(AbstractHCMActionElement): diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/state.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/state.py index ab6d50113..e1a92b95c 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/state.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/state.py @@ -1,6 +1,6 @@ from bitbots_hcm.hcm_dsd.actions import AbstractHCMActionElement -from humanoid_league_msgs.msg import RobotControlState +from bitbots_msgs.msg import RobotControlState class AbstractRobotState(AbstractHCMActionElement): diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/animation.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/animation.py index d07c95880..6915e0d09 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/animation.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/animation.py @@ -1,7 +1,5 @@ from bitbots_hcm.hcm_dsd.decisions import AbstractHCMDecisionElement -from humanoid_league_msgs.msg import RobotControlState - class Record(AbstractHCMDecisionElement): """ diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/check_hardware.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/check_hardware.py index 7b02632eb..fcbf40687 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/check_hardware.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/check_hardware.py @@ -1,7 +1,7 @@ from rclpy.time import Time from bitbots_hcm.hcm_dsd.decisions import AbstractHCMDecisionElement -from humanoid_league_msgs.msg import RobotControlState +from bitbots_msgs.msg import RobotControlState class CheckMotors(AbstractHCMDecisionElement): @@ -169,4 +169,4 @@ def perform(self, reevaluate=False): return "OKAY" def get_reevaluate(self): - return True \ No newline at end of file + return True diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/fallen.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/fallen.py index e848f3ca8..e232a715d 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/fallen.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/fallen.py @@ -4,7 +4,7 @@ from bitbots_hcm.hcm_dsd.decisions import AbstractHCMDecisionElement from bitbots_utils.transforms import quat2fused -from humanoid_league_msgs.msg import RobotControlState +from bitbots_msgs.msg import RobotControlState class Fallen(AbstractHCMDecisionElement): @@ -53,4 +53,4 @@ def perform(self, reevaluate=False): return "NOT_FALLEN" def get_reevaluate(self): - return True \ No newline at end of file + return True diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/falling.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/falling.py index 7e1c8565d..80c4d3b96 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/falling.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/falling.py @@ -6,7 +6,7 @@ from bitbots_utils.transforms import quat2fused from rclpy.duration import Duration -from humanoid_league_msgs.msg import RobotControlState +from bitbots_msgs.msg import RobotControlState class FallDirection(Enum): diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/kicking.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/kicking.py index 6c3b4d2a7..f9e5e935a 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/kicking.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/kicking.py @@ -1,6 +1,6 @@ from bitbots_hcm.hcm_dsd.decisions import AbstractHCMDecisionElement -from humanoid_league_msgs.msg import RobotControlState +from bitbots_msgs.msg import RobotControlState class RecentKickGoals(AbstractHCMDecisionElement): @@ -27,4 +27,4 @@ def perform(self, reevaluate=False): return "NOT_KICKING" def get_reevaluate(self): - return True \ No newline at end of file + return True diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/pickup.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/pickup.py index be34ae8fa..1ac374a4a 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/pickup.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/pickup.py @@ -1,7 +1,7 @@ from bitbots_hcm.hcm_dsd.decisions import AbstractHCMDecisionElement from humanoid_league_speaker.speaker import speak -from humanoid_league_msgs.msg import RobotControlState +from bitbots_msgs.msg import RobotControlState class PickedUp(AbstractHCMDecisionElement): @@ -27,4 +27,4 @@ def perform(self, reevaluate=False): return "ON_GROUND" def get_reevaluate(self): - return True \ No newline at end of file + return True diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/startup.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/startup.py index 8cebd08d4..913ce9dc2 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/startup.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/startup.py @@ -2,7 +2,7 @@ from bitbots_hcm.hcm_dsd.decisions import AbstractHCMDecisionElement -from humanoid_league_msgs.msg import RobotControlState +from bitbots_msgs.msg import RobotControlState class StartHCM(AbstractHCMDecisionElement): diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/walking.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/walking.py index 81be75737..de016e561 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/walking.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/walking.py @@ -1,6 +1,6 @@ from bitbots_hcm.hcm_dsd.decisions import AbstractHCMDecisionElement -from humanoid_league_msgs.msg import RobotControlState +from bitbots_msgs.msg import RobotControlState class RecentWalkingGoals(AbstractHCMDecisionElement): @@ -27,4 +27,4 @@ def perform(self, reevaluate=False): return "NOT_WALKING" def get_reevaluate(self): - return True \ No newline at end of file + return True diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/hcm_blackboard.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/hcm_blackboard.py index d4589aeb4..b2382a837 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/hcm_blackboard.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/hcm_blackboard.py @@ -7,17 +7,15 @@ from geometry_msgs.msg import PointStamped, Twist from rclpy.action import ActionClient from rclpy.node import Node -from rclpy.time import Time from rclpy.task import Future +from rclpy.time import Time from sensor_msgs.msg import Imu, JointState from std_msgs.msg import Empty as EmptyMsg from std_srvs.srv import Empty as EmptySrv from std_srvs.srv import SetBool -from bitbots_msgs.action import Dynup -from bitbots_msgs.msg import JointCommand -from humanoid_league_msgs.action import PlayAnimation -from humanoid_league_msgs.msg import Audio, RobotControlState +from bitbots_msgs.action import Dynup, PlayAnimation +from bitbots_msgs.msg import Audio, RobotControlState class HcmBlackboard(): @@ -114,4 +112,4 @@ def __init__(self, node: Node): self.pressure_diag_error: bool = False def cancel_path_planning(self): - self.cancel_path_planning_pub.publish(EmptyMsg()) \ No newline at end of file + self.cancel_path_planning_pub.publish(EmptyMsg()) diff --git a/bitbots_hcm/bitbots_hcm/humanoid_control_module.py b/bitbots_hcm/bitbots_hcm/humanoid_control_module.py index befe6f0b5..e80477341 100755 --- a/bitbots_hcm/bitbots_hcm/humanoid_control_module.py +++ b/bitbots_hcm/bitbots_hcm/humanoid_control_module.py @@ -21,10 +21,9 @@ from sensor_msgs.msg import Imu, JointState from std_msgs.msg import Bool -from bitbots_msgs.msg import FootPressure +from bitbots_msgs.action import PlayAnimation +from bitbots_msgs.msg import FootPressure, RobotControlState from dynamic_stack_decider.dsd import DSD -from humanoid_league_msgs.action import PlayAnimation -from humanoid_league_msgs.msg import Audio, RobotControlState class HardwareControlManager: diff --git a/bitbots_hcm/docs/index.rst b/bitbots_hcm/docs/index.rst index e2ec73c46..0b9117344 100644 --- a/bitbots_hcm/docs/index.rst +++ b/bitbots_hcm/docs/index.rst @@ -53,7 +53,7 @@ How the HCM works The HCM uses a DSD to decide what the state of the robot is and to decide on the actions that should be performed. This state is then published as a ROS message (`/robot_state`). -To see which state is which, you have to look at the message definition (`ros2 interface show humanoid_league_msgs/msg/RobotControlState`). +To see which state is which, you have to look at the message definition (`ros2 interface show bitbots_msgs/msg/RobotControlState`). The HCM subscribes to all joint goal topics of the different software parts. Dependend on its state, it forwards the goals or not. @@ -74,7 +74,7 @@ What to do when it does not work 1. Is `ros_control` running? Do you recieve joint states (`/joint_states`) or IMU data (`/imu/data_raw`)? 2. What is the state of the HCM (`rostopic echo /robot_state`)? The number has to be matched with the message - description (`ros2 interface show humanoid_league_msgs/msg/RobotControlState`). + description (`ros2 interface show bitbots_msgs/msg/RobotControlState`). 3. The visualization of the DSD is possible with the standard DSD visualization using the rqt plugin. There you can see exactly which decision is responsible for the current behavior and then you can look into the code. diff --git a/bitbots_hcm/package.xml b/bitbots_hcm/package.xml index 33494f614..eb06dcddd 100644 --- a/bitbots_hcm/package.xml +++ b/bitbots_hcm/package.xml @@ -23,7 +23,6 @@ <depend>bitbots_robot_description</depend> <depend>bitbots_utils</depend> <depend>geometry_msgs</depend> - <depend>humanoid_league_msgs</depend> <depend>pybind11-dev</depend> <depend>python3-numpy</depend> <depend>python3-sklearn</depend> diff --git a/bitbots_hcm/scripts/hcm_led.py b/bitbots_hcm/scripts/hcm_led.py index 7838ad2cc..9b3d49fd7 100755 --- a/bitbots_hcm/scripts/hcm_led.py +++ b/bitbots_hcm/scripts/hcm_led.py @@ -4,7 +4,7 @@ from rclpy.node import Node from std_msgs.msg import ColorRGBA -from humanoid_league_msgs.msg import RobotControlState +from bitbots_msgs.msg import RobotControlState BLINK_DURATION = 0.2 diff --git a/bitbots_hcm/scripts/pause.py b/bitbots_hcm/scripts/pause.py index 198db7649..5db912ffd 100755 --- a/bitbots_hcm/scripts/pause.py +++ b/bitbots_hcm/scripts/pause.py @@ -2,10 +2,10 @@ # -*- coding:utf-8 -*- import rclpy from rclpy.node import Node -from humanoid_league_msgs.msg import Audio from std_msgs.msg import Bool from bitbots_msgs.srv import ManualPenalize +from bitbots_msgs.msg import Audio from humanoid_league_speaker.speaker import speak diff --git a/bitbots_hcm/src/hcm.cpp b/bitbots_hcm/src/hcm.cpp index 185893b49..93894bf30 100644 --- a/bitbots_hcm/src/hcm.cpp +++ b/bitbots_hcm/src/hcm.cpp @@ -3,17 +3,17 @@ #include <chrono> #include <thread> #include <rclcpp/rclcpp.hpp> +#include "bitbots_msgs/msg/animation.hpp" #include "bitbots_msgs/msg/foot_pressure.hpp" #include "bitbots_msgs/msg/joint_command.hpp" +#include "bitbots_msgs/msg/robot_control_state.hpp" +#include "builtin_interfaces/msg/time.hpp" #include "geometry_msgs/msg/point_stamped.hpp" -#include "humanoid_league_msgs/msg/animation.hpp" -#include "humanoid_league_msgs/msg/robot_control_state.hpp" -#include "sensor_msgs/msg/joint_state.hpp" #include "sensor_msgs/msg/imu.hpp" -#include "builtin_interfaces/msg/time.hpp" -#include <ros2_python_extension/serialization.hpp> +#include "sensor_msgs/msg/joint_state.hpp" #include "std_msgs/msg/header.hpp" #include <rclcpp/experimental/executors/events_executor/events_executor.hpp> +#include <ros2_python_extension/serialization.hpp> using std::placeholders::_1; @@ -34,7 +34,7 @@ class HCM_CPP : public rclcpp::Node { this->get_parameter("visualization_active", visualization_active); // HCM state - current_state_ = humanoid_league_msgs::msg::RobotControlState::STARTUP; + current_state_ = bitbots_msgs::msg::RobotControlState::STARTUP; // Sensor states current_imu_ = sensor_msgs::msg::Imu(); @@ -65,10 +65,10 @@ class HCM_CPP : public rclcpp::Node { // Create publishers pub_controller_command_ = this->create_publisher<bitbots_msgs::msg::JointCommand>("DynamixelController/command", 1); - pub_robot_state_ = this->create_publisher<humanoid_league_msgs::msg::RobotControlState>("robot_state", 1); + pub_robot_state_ = this->create_publisher<bitbots_msgs::msg::RobotControlState>("robot_state", 1); // Create subscribers for goals - anim_sub_ = this->create_subscription<humanoid_league_msgs::msg::Animation>( + anim_sub_ = this->create_subscription<bitbots_msgs::msg::Animation>( "animation", 1, std::bind(&HCM_CPP::animation_callback, this, _1)); dynup_sub_ = this->create_subscription<bitbots_msgs::msg::JointCommand>( "dynup_motor_goals", 1, std::bind(&HCM_CPP::dynup_callback, this, _1)); @@ -92,7 +92,7 @@ class HCM_CPP : public rclcpp::Node { "imu/data", 1, std::bind(&HCM_CPP::imu_callback, this, _1)); } - void animation_callback(humanoid_league_msgs::msg::Animation msg) { + void animation_callback(bitbots_msgs::msg::Animation msg) { // The animation server is sending us goal positions for the next keyframe last_animation_goal_time_ = msg.header.stamp; @@ -113,7 +113,7 @@ class HCM_CPP : public rclcpp::Node { } else { // Coming from outside // Check if we can run an animation now - if (current_state_ != humanoid_league_msgs::msg::RobotControlState::CONTROLLABLE) { + if (current_state_ != bitbots_msgs::msg::RobotControlState::CONTROLLABLE) { RCLCPP_WARN(this->get_logger(), "HCM is not controllable, animation refused."); } else { // We're already controllable, go to animation running @@ -140,10 +140,10 @@ class HCM_CPP : public rclcpp::Node { // Forward joint positions to motors if there are any and we're in the right state if (msg.position.points.size() > 0 && ( - current_state_ == humanoid_league_msgs::msg::RobotControlState::CONTROLLABLE || - current_state_ == humanoid_league_msgs::msg::RobotControlState::ANIMATION_RUNNING || - current_state_ == humanoid_league_msgs::msg::RobotControlState::FALLING || - current_state_ == humanoid_league_msgs::msg::RobotControlState::FALLEN)) { + current_state_ == bitbots_msgs::msg::RobotControlState::CONTROLLABLE || + current_state_ == bitbots_msgs::msg::RobotControlState::ANIMATION_RUNNING || + current_state_ == bitbots_msgs::msg::RobotControlState::FALLING || + current_state_ == bitbots_msgs::msg::RobotControlState::FALLEN)) { bitbots_msgs::msg::JointCommand out_msg = bitbots_msgs::msg::JointCommand(); out_msg.positions = msg.position.points[0].positions; out_msg.joint_names = msg.position.joint_names; @@ -166,26 +166,26 @@ class HCM_CPP : public rclcpp::Node { } void dynup_callback(const bitbots_msgs::msg::JointCommand msg) { - if (current_state_ == humanoid_league_msgs::msg::RobotControlState::STARTUP || - current_state_ == humanoid_league_msgs::msg::RobotControlState::GETTING_UP || - current_state_ == humanoid_league_msgs::msg::RobotControlState::MOTOR_OFF || - current_state_ == humanoid_league_msgs::msg::RobotControlState::PICKED_UP || - current_state_ == humanoid_league_msgs::msg::RobotControlState::CONTROLLABLE) { + if (current_state_ == bitbots_msgs::msg::RobotControlState::STARTUP || + current_state_ == bitbots_msgs::msg::RobotControlState::GETTING_UP || + current_state_ == bitbots_msgs::msg::RobotControlState::MOTOR_OFF || + current_state_ == bitbots_msgs::msg::RobotControlState::PICKED_UP || + current_state_ == bitbots_msgs::msg::RobotControlState::CONTROLLABLE) { pub_controller_command_->publish(msg); } } void head_goal_callback(const bitbots_msgs::msg::JointCommand msg) { - if (current_state_ == humanoid_league_msgs::msg::RobotControlState::CONTROLLABLE || - current_state_ == humanoid_league_msgs::msg::RobotControlState::WALKING) { + if (current_state_ == bitbots_msgs::msg::RobotControlState::CONTROLLABLE || + current_state_ == bitbots_msgs::msg::RobotControlState::WALKING) { pub_controller_command_->publish(msg); } } void kick_goal_callback(const bitbots_msgs::msg::JointCommand msg) { last_kick_time_ = msg.header.stamp; - if (current_state_ == humanoid_league_msgs::msg::RobotControlState::KICKING || - current_state_ == humanoid_league_msgs::msg::RobotControlState::CONTROLLABLE) { + if (current_state_ == bitbots_msgs::msg::RobotControlState::KICKING || + current_state_ == bitbots_msgs::msg::RobotControlState::CONTROLLABLE) { // we can perform a kick pub_controller_command_->publish(msg); } @@ -203,8 +203,8 @@ class HCM_CPP : public rclcpp::Node { void walking_goal_callback(bitbots_msgs::msg::JointCommand msg) { last_walking_time_ = msg.header.stamp; - if (current_state_ == humanoid_league_msgs::msg::RobotControlState::CONTROLLABLE || - current_state_ == humanoid_league_msgs::msg::RobotControlState::WALKING) { + if (current_state_ == bitbots_msgs::msg::RobotControlState::CONTROLLABLE || + current_state_ == bitbots_msgs::msg::RobotControlState::WALKING) { pub_controller_command_->publish(msg); } } @@ -250,7 +250,7 @@ class HCM_CPP : public rclcpp::Node { current_state_ = result.cast<int>(); // Publish current robot state - humanoid_league_msgs::msg::RobotControlState state_msg = humanoid_league_msgs::msg::RobotControlState(); + bitbots_msgs::msg::RobotControlState state_msg = bitbots_msgs::msg::RobotControlState(); state_msg.state = current_state_; pub_robot_state_->publish(state_msg); } @@ -283,10 +283,10 @@ class HCM_CPP : public rclcpp::Node { // Publishers rclcpp::Publisher<bitbots_msgs::msg::JointCommand>::SharedPtr pub_controller_command_; - rclcpp::Publisher<humanoid_league_msgs::msg::RobotControlState>::SharedPtr pub_robot_state_; + rclcpp::Publisher<bitbots_msgs::msg::RobotControlState>::SharedPtr pub_robot_state_; // Subscribers - rclcpp::Subscription<humanoid_league_msgs::msg::Animation>::SharedPtr anim_sub_; + rclcpp::Subscription<bitbots_msgs::msg::Animation>::SharedPtr anim_sub_; rclcpp::Subscription<bitbots_msgs::msg::JointCommand>::SharedPtr dynup_sub_; rclcpp::Subscription<bitbots_msgs::msg::JointCommand>::SharedPtr head_sub_; rclcpp::Subscription<bitbots_msgs::msg::JointCommand>::SharedPtr kick_sub_; @@ -328,4 +328,4 @@ int main(int argc, char** argv) { } rclcpp::shutdown(); -} \ No newline at end of file +} diff --git a/bitbots_head_mover/CMakeLists.txt b/bitbots_head_mover/CMakeLists.txt index 4cc65fe7f..c8916ef36 100644 --- a/bitbots_head_mover/CMakeLists.txt +++ b/bitbots_head_mover/CMakeLists.txt @@ -12,7 +12,7 @@ find_package(bio_ik REQUIRED) find_package(bio_ik_msgs REQUIRED) find_package(bitbots_msgs REQUIRED) find_package(generate_parameter_library REQUIRED) -find_package(humanoid_league_msgs REQUIRED) +find_package(bitbots_msgs REQUIRED) find_package(moveit_core REQUIRED) find_package(moveit_msgs REQUIRED) find_package(moveit_ros_planning REQUIRED) @@ -47,7 +47,6 @@ bio_ik bio_ik_msgs bitbots_msgs generate_parameter_library -humanoid_league_msgs moveit_core moveit_msgs moveit_ros_planning diff --git a/bitbots_head_mover/package.xml b/bitbots_head_mover/package.xml index c33a83d1a..bef187136 100644 --- a/bitbots_head_mover/package.xml +++ b/bitbots_head_mover/package.xml @@ -22,7 +22,6 @@ <depend>bitbots_robot_description</depend> <depend>bitbots_utils</depend> <depend>generate_parameter_library</depend> - <depend>humanoid_league_msgs</depend> <depend>moveit_core</depend> <depend>moveit_ros_planning_interface</depend> <depend>moveit_ros_planning</depend> diff --git a/bitbots_head_mover/src/move_head.cpp b/bitbots_head_mover/src/move_head.cpp index f282ec579..80a848ab4 100644 --- a/bitbots_head_mover/src/move_head.cpp +++ b/bitbots_head_mover/src/move_head.cpp @@ -10,10 +10,10 @@ #include <rclcpp/rclcpp.hpp> #include <rclcpp/time.hpp> +#include <bitbots_msgs/msg/head_mode.hpp> #include <bitbots_msgs/msg/joint_command.hpp> #include <geometry_msgs/msg/pose_stamped.hpp> #include <geometry_msgs/msg/pose_with_covariance_stamped.hpp> -#include <humanoid_league_msgs/msg/head_mode.hpp> #include <sensor_msgs/msg/joint_state.hpp> #include <std_msgs/msg/string.hpp> @@ -49,7 +49,7 @@ class HeadMover { std::shared_ptr<rclcpp::Node> node_; // Declare subscriber - rclcpp::Subscription<humanoid_league_msgs::msg::HeadMode>::SharedPtr + rclcpp::Subscription<bitbots_msgs::msg::HeadMode>::SharedPtr head_mode_subscriber_; rclcpp::Subscription<sensor_msgs::msg::JointState>::SharedPtr joint_state_subscriber_; @@ -109,9 +109,9 @@ class HeadMover { // Initialize subscriber for head mode head_mode_subscriber_ = - node_->create_subscription<humanoid_league_msgs::msg::HeadMode>( + node_->create_subscription<bitbots_msgs::msg::HeadMode>( "head_mode", 10, - [this](const humanoid_league_msgs::msg::HeadMode::SharedPtr msg) { + [this](const bitbots_msgs::msg::HeadMode::SharedPtr msg) { head_mode_callback(msg); }); @@ -232,7 +232,7 @@ class HeadMover { * @brief Callback used to update the head mode */ void head_mode_callback( - const humanoid_league_msgs::msg::HeadMode::SharedPtr msg) { + const bitbots_msgs::msg::HeadMode::SharedPtr msg) { head_mode_ = msg->head_mode; } @@ -870,7 +870,7 @@ class HeadMover { // Check if the head mode changed and if so, update the search pattern if (prev_head_mode_ != curr_head_mode) { switch (curr_head_mode) { - case humanoid_league_msgs::msg::HeadMode::BALL_MODE: // 0 + case bitbots_msgs::msg::HeadMode::BALL_MODE: // 0 pan_speed_ = params_.search_pattern.pan_speed; tilt_speed_ = params_.search_pattern.tilt_speed; pattern_ = @@ -882,7 +882,7 @@ class HeadMover { params_.search_pattern.tilt_max[1], params_.search_pattern.reduce_last_scanline); break; - case humanoid_league_msgs::msg::HeadMode::BALL_MODE_PENALTY: // 11 + case bitbots_msgs::msg::HeadMode::BALL_MODE_PENALTY: // 11 pan_speed_ = params_.search_pattern_penalty.pan_speed; tilt_speed_ = params_.search_pattern_penalty.tilt_speed; pattern_ = @@ -895,7 +895,7 @@ class HeadMover { params_.search_pattern.reduce_last_scanline); break; - case humanoid_league_msgs::msg::HeadMode::FIELD_FEATURES: // 3 + case bitbots_msgs::msg::HeadMode::FIELD_FEATURES: // 3 pan_speed_ = params_.search_pattern_field_features.pan_speed; tilt_speed_ = params_.search_pattern_field_features.tilt_speed; pattern_ = @@ -908,7 +908,7 @@ class HeadMover { params_.search_pattern.reduce_last_scanline); break; - case humanoid_league_msgs::msg::HeadMode::LOOK_FRONT: // 13 + case bitbots_msgs::msg::HeadMode::LOOK_FRONT: // 13 pan_speed_ = params_.front_search_pattern.pan_speed; tilt_speed_ = params_.front_search_pattern.tilt_speed; pattern_ = @@ -921,7 +921,7 @@ class HeadMover { params_.search_pattern.reduce_last_scanline); break; - case humanoid_league_msgs::msg::HeadMode::LOOK_FORWARD: // 7 + case bitbots_msgs::msg::HeadMode::LOOK_FORWARD: // 7 pan_speed_ = params_.look_forward.pan_speed; tilt_speed_ = params_.look_forward.tilt_speed; pattern_ = generatePattern( @@ -947,8 +947,8 @@ class HeadMover { // if this is not the case, perform the search pattern if (!action_running_ && curr_head_mode != - humanoid_league_msgs::msg::HeadMode::DONT_MOVE) // here DONT_MOVE - // is implemented + bitbots_msgs::msg::HeadMode::DONT_MOVE) // here DONT_MOVE + // is implemented { // Store the current head mode as the previous head mode to detect changes prev_head_mode_ = curr_head_mode; diff --git a/bitbots_odometry/launch/odometry.launch b/bitbots_odometry/launch/odometry.launch index 545c07314..df13a2816 100644 --- a/bitbots_odometry/launch/odometry.launch +++ b/bitbots_odometry/launch/odometry.launch @@ -20,7 +20,6 @@ <param name="l_sole_frame" value="$(var tf_prefix)l_sole"/> <param name="odom_frame" value="$(var tf_prefix)odom"/> <param name="rotation_frame" value="$(var tf_prefix)rotation"/> - <param name="imu_frame" value="$(var tf_prefix)imu_frame"/> <param name="cop_frame" value="$(var tf_prefix)cop"/> <param name="use_sim_time" value="$(var sim)"/> </node> diff --git a/bitbots_odometry/src/odometry_fuser.cpp b/bitbots_odometry/src/odometry_fuser.cpp index 3411af15c..c5612f504 100644 --- a/bitbots_odometry/src/odometry_fuser.cpp +++ b/bitbots_odometry/src/odometry_fuser.cpp @@ -13,7 +13,7 @@ OdometryFuser::OdometryFuser() : Node("OdometryFuser"), tf_buffer_(std::make_unique<tf2_ros::Buffer>(this->get_clock())), tf_listener_(std::make_shared<tf2_ros::TransformListener>(*tf_buffer_, this)), support_state_cache_(100), - imu_sub_(this, "imu/data"), + imu_sub_(this, "imu_head/data"), motion_odom_sub_(this, "motion_odometry"), br_(std::make_unique<tf2_ros::TransformBroadcaster>(this)), sync_(message_filters::Synchronizer<SyncPolicy>(SyncPolicy(50), imu_sub_, motion_odom_sub_)){ @@ -28,8 +28,6 @@ OdometryFuser::OdometryFuser() : Node("OdometryFuser"), this->get_parameter("odom_frame", odom_frame_); this->declare_parameter<std::string>("rotation_frame", "rotation"); this->get_parameter("rotation_frame", rotation_frame_); - this->declare_parameter<std::string>("imu_frame", "imu_frame"); - this->get_parameter("imu_frame", imu_frame_); walk_support_state_sub_ = this->create_subscription<biped_interfaces::msg::Phase>("walk_support_state", @@ -89,7 +87,7 @@ void OdometryFuser::loop() { tf2::Transform imu_mounting_offset; try { geometry_msgs::msg::TransformStamped imu_mounting_transform = tf_buffer_->lookupTransform( - base_link_frame_, imu_frame_, fused_time_); + imu_data_.header.frame_id, base_link_frame_, fused_time_); fromMsg(imu_mounting_transform.transform, imu_mounting_offset); } catch (tf2::TransformException &ex) { RCLCPP_ERROR(this->get_logger(), "Not able to use the IMU%s", ex.what()); diff --git a/bitbots_quintic_walk/CMakeLists.txt b/bitbots_quintic_walk/CMakeLists.txt index f4bddc506..fb0e87230 100644 --- a/bitbots_quintic_walk/CMakeLists.txt +++ b/bitbots_quintic_walk/CMakeLists.txt @@ -18,7 +18,6 @@ find_package(control_msgs REQUIRED) find_package(control_toolbox REQUIRED) find_package(generate_parameter_library REQUIRED) find_package(geometry_msgs REQUIRED) -find_package(humanoid_league_msgs REQUIRED) find_package(moveit_ros_planning_interface REQUIRED) find_package(nav_msgs REQUIRED) find_package(rclcpp REQUIRED) @@ -70,7 +69,6 @@ ament_target_dependencies(WalkNode control_msgs control_toolbox geometry_msgs - humanoid_league_msgs moveit_ros_planning_interface nav_msgs rclcpp @@ -99,7 +97,6 @@ ament_target_dependencies(libpy_quintic_walk PUBLIC control_msgs control_toolbox geometry_msgs - humanoid_league_msgs moveit_ros_planning_interface nav_msgs rclcpp diff --git a/bitbots_quintic_walk/include/bitbots_quintic_walk/walk_node.h b/bitbots_quintic_walk/include/bitbots_quintic_walk/walk_node.h index f9bdca41b..02d6a28ae 100644 --- a/bitbots_quintic_walk/include/bitbots_quintic_walk/walk_node.h +++ b/bitbots_quintic_walk/include/bitbots_quintic_walk/walk_node.h @@ -27,10 +27,10 @@ The original files can be found at: #include <sensor_msgs/msg/imu.hpp> #include <nav_msgs/msg/odometry.hpp> #include <moveit_msgs/msg/robot_state.hpp> -#include "humanoid_league_msgs/msg/robot_control_state.hpp" -#include "bitbots_msgs/msg/joint_command.hpp" -#include "bitbots_msgs/msg/foot_pressure.hpp" #include "biped_interfaces/msg/phase.hpp" +#include "bitbots_msgs/msg/foot_pressure.hpp" +#include "bitbots_msgs/msg/joint_command.hpp" +#include "bitbots_msgs/msg/robot_control_state.hpp" #include <tf2_geometry_msgs/tf2_geometry_msgs.hpp> #include <tf2/LinearMath/Vector3.h> @@ -102,7 +102,7 @@ class WalkNode : public rclcpp::Node { * Sets the current state of the robot * @param msg The current state */ - void robotStateCb(humanoid_league_msgs::msg::RobotControlState::SharedPtr msg); + void robotStateCb(bitbots_msgs::msg::RobotControlState::SharedPtr msg); WalkEngine *getEngine(); WalkIK *getIk(); @@ -175,7 +175,7 @@ class WalkNode : public rclcpp::Node { rclcpp::Subscription<geometry_msgs::msg::Twist>::SharedPtr step_sub_; rclcpp::Subscription<geometry_msgs::msg::Twist>::SharedPtr cmd_vel_sub_; - rclcpp::Subscription<humanoid_league_msgs::msg::RobotControlState>::SharedPtr robot_state_sub_; + rclcpp::Subscription<bitbots_msgs::msg::RobotControlState>::SharedPtr robot_state_sub_; rclcpp::Subscription<sensor_msgs::msg::JointState>::SharedPtr joint_state_sub_; rclcpp::Subscription<std_msgs::msg::Bool>::SharedPtr kick_sub_; rclcpp::Subscription<sensor_msgs::msg::Imu>::SharedPtr imu_sub_; diff --git a/bitbots_quintic_walk/include/bitbots_quintic_walk/walk_pywrapper.h b/bitbots_quintic_walk/include/bitbots_quintic_walk/walk_pywrapper.h index 4f4996622..1eece0a40 100644 --- a/bitbots_quintic_walk/include/bitbots_quintic_walk/walk_pywrapper.h +++ b/bitbots_quintic_walk/include/bitbots_quintic_walk/walk_pywrapper.h @@ -5,16 +5,16 @@ #include <map> #include <iostream> #include "bitbots_quintic_walk/walk_utils.h" -#include <geometry_msgs/msg/pose_array.hpp> -#include <geometry_msgs/msg/twist.hpp> #include <bitbots_msgs/msg/foot_pressure.hpp> #include <bitbots_msgs/msg/joint_command.hpp> -#include <humanoid_league_msgs/msg/robot_control_state.hpp> +#include <bitbots_msgs/msg/robot_control_state.hpp> +#include <cmath> +#include <geometry_msgs/msg/pose_array.hpp> +#include <geometry_msgs/msg/twist.hpp> +#include <pybind11/complex.h> #include <pybind11/pybind11.h> #include <pybind11/stl.h> -#include <pybind11/complex.h> #include <ros2_python_extension/serialization.hpp> -#include <cmath> namespace py = pybind11; using namespace ros2_python_extension; diff --git a/bitbots_quintic_walk/package.xml b/bitbots_quintic_walk/package.xml index a47906110..e91791448 100644 --- a/bitbots_quintic_walk/package.xml +++ b/bitbots_quintic_walk/package.xml @@ -33,7 +33,6 @@ <depend>control_toolbox</depend> <depend>generate_parameter_library</depend> <depend>geometry_msgs</depend> - <depend>humanoid_league_msgs</depend> <depend>moveit_core</depend> <depend>moveit_ros_move_group</depend> <depend>moveit_ros_planning_interface</depend> diff --git a/bitbots_quintic_walk/src/walk_node.cpp b/bitbots_quintic_walk/src/walk_node.cpp index 8b27651ba..2b80c3054 100644 --- a/bitbots_quintic_walk/src/walk_node.cpp +++ b/bitbots_quintic_walk/src/walk_node.cpp @@ -74,7 +74,7 @@ WalkNode::WalkNode(const std::string ns, std::vector<rclcpp::Parameter> paramete this->get_parameter("odom_frame", odom_frame_); // init variables - robot_state_ = humanoid_league_msgs::msg::RobotControlState::CONTROLLABLE; + robot_state_ = bitbots_msgs::msg::RobotControlState::CONTROLLABLE; current_request_.linear_orders = {0, 0, 0}; current_request_.angular_z = 0; current_request_.stop_walk = true; @@ -104,7 +104,7 @@ WalkNode::WalkNode(const std::string ns, std::vector<rclcpp::Parameter> paramete "cmd_vel", 1, std::bind(&WalkNode::cmdVelCb, this, _1)); - robot_state_sub_ = this->create_subscription<humanoid_league_msgs::msg::RobotControlState>( + robot_state_sub_ = this->create_subscription<bitbots_msgs::msg::RobotControlState>( "robot_state", 1, std::bind(&WalkNode::robotStateCb, this, _1)); @@ -164,8 +164,8 @@ void WalkNode::run() { double dt = getTimeDelta(); // necessary as timer in simulation does not work correctly https://github.com/ros2/rclcpp/issues/465 if (dt != 0.0) { - if (robot_state_==humanoid_league_msgs::msg::RobotControlState::FALLING - || robot_state_==humanoid_league_msgs::msg::RobotControlState::GETTING_UP) { + if (robot_state_==bitbots_msgs::msg::RobotControlState::FALLING + || robot_state_==bitbots_msgs::msg::RobotControlState::GETTING_UP) { // the robot fell, we have to reset everything and do nothing else walk_engine_.reset(); stabilizer_.reset(); @@ -174,9 +174,9 @@ void WalkNode::run() { /* Our robots will soon^TM be able to sit down and stand up autonomously, when sitting down the motors are * off but will turn on automatically which is why MOTOR_OFF is a valid walkable state. */ // TODO Figure out a better way than having integration knowledge that HCM will play an animation to stand up - current_request_.walkable_state = robot_state_==humanoid_league_msgs::msg::RobotControlState::CONTROLLABLE || - robot_state_==humanoid_league_msgs::msg::RobotControlState::WALKING || - robot_state_==humanoid_league_msgs::msg::RobotControlState::MOTOR_OFF; + current_request_.walkable_state = robot_state_==bitbots_msgs::msg::RobotControlState::CONTROLLABLE || + robot_state_==bitbots_msgs::msg::RobotControlState::WALKING || + robot_state_==bitbots_msgs::msg::RobotControlState::MOTOR_OFF; // reset when we start walking, otherwise PID controller will use old I value if ((last_request_.linear_orders[0]==0 && last_request_.linear_orders[1]==0 && last_request_.angular_z==0) @@ -534,7 +534,7 @@ void WalkNode::checkPhaseRestAndReset() { } } -void WalkNode::robotStateCb(const humanoid_league_msgs::msg::RobotControlState::SharedPtr msg) { +void WalkNode::robotStateCb(const bitbots_msgs::msg::RobotControlState::SharedPtr msg) { robot_state_ = msg->state; } diff --git a/bitbots_quintic_walk/src/walk_pywrapper.cpp b/bitbots_quintic_walk/src/walk_pywrapper.cpp index ea6e9b2cd..79cbce560 100644 --- a/bitbots_quintic_walk/src/walk_pywrapper.cpp +++ b/bitbots_quintic_walk/src/walk_pywrapper.cpp @@ -147,9 +147,9 @@ bool PyWalkWrapper::is_left_support(){ } void PyWalkWrapper::set_robot_state(int state) { - humanoid_league_msgs::msg::RobotControlState state_msg; + bitbots_msgs::msg::RobotControlState state_msg; state_msg.state = state; - walk_node_->robotStateCb(std::make_shared<humanoid_league_msgs::msg::RobotControlState>(state_msg)); + walk_node_->robotStateCb(std::make_shared<bitbots_msgs::msg::RobotControlState>(state_msg)); } void PyWalkWrapper::set_parameter(py::bytes parameter_msg) { From 8420b72c8750e6413b79eed2d906e7cc487eebf6 Mon Sep 17 00:00:00 2001 From: Jan Gutsche <github@jaagut.de> Date: Thu, 19 Oct 2023 19:06:33 +0200 Subject: [PATCH 34/74] Fix typos --- bitbots_splines/include/bitbots_splines/polynom.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bitbots_splines/include/bitbots_splines/polynom.h b/bitbots_splines/include/bitbots_splines/polynom.h index 640b36416..093ae874a 100644 --- a/bitbots_splines/include/bitbots_splines/polynom.h +++ b/bitbots_splines/include/bitbots_splines/polynom.h @@ -15,7 +15,7 @@ namespace bitbots_splines { /** * Polynom * - * Simple one dimentional + * Simple one dimensional * polynom class for spline * generation */ @@ -23,7 +23,7 @@ class Polynom { public: /** - * Default and inital degree initialization + * Default and initial degree initialization */ Polynom(); explicit Polynom(unsigned int degree); @@ -73,7 +73,7 @@ class Polynom { private: /** - * Polynom coeficients + * Polynom coefficients */ std::vector<double> coefs_; }; From 054fac9686fb29970d53bf7b8902583ba96612a6 Mon Sep 17 00:00:00 2001 From: Florian Vahl <7vahl@informatik.uni-hamburg.de> Date: Fri, 20 Oct 2023 18:13:29 +0200 Subject: [PATCH 35/74] Wait for all tfs (less warnings at startup) --- bitbots_odometry/src/odometry_fuser.cpp | 54 +++++++++++++++++++------ 1 file changed, 42 insertions(+), 12 deletions(-) diff --git a/bitbots_odometry/src/odometry_fuser.cpp b/bitbots_odometry/src/odometry_fuser.cpp index c5612f504..50a28deee 100644 --- a/bitbots_odometry/src/odometry_fuser.cpp +++ b/bitbots_odometry/src/odometry_fuser.cpp @@ -13,7 +13,7 @@ OdometryFuser::OdometryFuser() : Node("OdometryFuser"), tf_buffer_(std::make_unique<tf2_ros::Buffer>(this->get_clock())), tf_listener_(std::make_shared<tf2_ros::TransformListener>(*tf_buffer_, this)), support_state_cache_(100), - imu_sub_(this, "imu_head/data"), + imu_sub_(this, "imu/data"), motion_odom_sub_(this, "motion_odometry"), br_(std::make_unique<tf2_ros::TransformBroadcaster>(this)), sync_(message_filters::Synchronizer<SyncPolicy>(SyncPolicy(50), imu_sub_, motion_odom_sub_)){ @@ -43,19 +43,46 @@ OdometryFuser::OdometryFuser() : Node("OdometryFuser"), fused_time_ = rclcpp::Time(0, 0, RCL_ROS_TIME); } + +/** + * @brief Waits for the transforms to be available + * @return true if the transforms are not available yet and we need to wait + */ bool OdometryFuser::wait_for_tf() { - // wait for transforms from joints - if (!tf_buffer_->canTransform(l_sole_frame_, - base_link_frame_, - rclcpp::Time(0, 0, RCL_ROS_TIME), - rclcpp::Duration::from_nanoseconds(1*1e9)) - && rclcpp::ok()) { - // don't spam directly with warnings, since it is normal that it will take a second to get the transform - if ((this->now() - start_time_).seconds() > 10) { - RCLCPP_WARN_THROTTLE(this->get_logger(), *this->get_clock(), 30000, "Waiting for transforms from robot joints"); + try { + // Frames to check + std::vector<std::string> frames = {base_link_frame_, l_sole_frame_, r_sole_frame_}; + + // Apply tf_buffer->_frameExists to all frames and check if all are available otherwise return false (functional) + if(!std::all_of(frames.begin(), frames.end(), [this](std::string frame) {return tf_buffer_->_frameExists(frame);})) { + // Wait for 1 second + rclcpp::sleep_for(std::chrono::seconds(1)); + // Return true to indicate that we need to wait + return true; + } + + // Check if we can transform from base_link to all other frames + if(!std::all_of( + frames.begin(), + frames.end(), + [this](std::string frame) { + return tf_buffer_->canTransform( + base_link_frame_, + frame, + rclcpp::Time(0), + rclcpp::Duration::from_nanoseconds(1e9)); + })){ + // Return that we need to wait + return true; } return false; } + catch(const std::exception& e) + { + RCLCPP_ERROR(this->get_logger(), "Error while waiting for transforms: %s \n", e.what()); + } + // Wait for 1 second + rclcpp::sleep_for(std::chrono::seconds(1)); return true; } @@ -90,7 +117,7 @@ void OdometryFuser::loop() { imu_data_.header.frame_id, base_link_frame_, fused_time_); fromMsg(imu_mounting_transform.transform, imu_mounting_offset); } catch (tf2::TransformException &ex) { - RCLCPP_ERROR(this->get_logger(), "Not able to use the IMU%s", ex.what()); + RCLCPP_ERROR(this->get_logger(), "Not able to use the IMU: %s", ex.what()); } // get imu transform without yaw @@ -249,8 +276,11 @@ int main(int argc, char **argv) { auto node = std::make_shared<OdometryFuser>(); rclcpp::experimental::executors::EventsExecutor exec; exec.add_node(node); - while(!node->wait_for_tf()){ + for(int i = 0; node->wait_for_tf() && rclcpp::ok(); i++) { exec.spin_some(); + if (i > 0) { + RCLCPP_ERROR(node->get_logger(), "Waiting for transforms\n"); + } } rclcpp::Duration timer_duration = rclcpp::Duration::from_seconds(1.0 / 100.0); rclcpp::TimerBase::SharedPtr timer = rclcpp::create_timer(node, node->get_clock(), timer_duration, [node]() -> void {node->loop();}); From 91d32e18ab09a5a72a1c5da71c7daf5bfafeb065 Mon Sep 17 00:00:00 2001 From: Florian Vahl <7vahl@informatik.uni-hamburg.de> Date: Mon, 23 Oct 2023 09:51:36 +0200 Subject: [PATCH 36/74] Fix naming --- bitbots_head_mover/src/move_head.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/bitbots_head_mover/src/move_head.cpp b/bitbots_head_mover/src/move_head.cpp index 80a848ab4..7343baf14 100644 --- a/bitbots_head_mover/src/move_head.cpp +++ b/bitbots_head_mover/src/move_head.cpp @@ -375,18 +375,18 @@ class HeadMover { /** * @brief Slows down the speed of the joint that needs to travel less distance so both joints reach the goal at the same time * - * @param delta_fast_joint The delta of the joint that needs to travel less distance and therefore reaches the goal faster - * @param delta_my_joint The delta of the joint that needs to travel more distance and therefore reaches the goal slower + * @param delta_faster_joint The delta of the joint that needs to travel less distance and therefore reaches the goal faster + * @param delta_joint The delta of the joint that needs to travel more distance and therefore reaches the goal slower * @param speed The maximum speed of the faster joint (the joint that needs to travel less distance) * @return double The adjusted speed of the faster joint */ double calculate_lower_speed( - double delta_fast_joint, - double delta_my_joint, + double delta_faster_joint, + double delta_joint, double speed) { double estimated_time = delta_fast_joint / speed; if (estimated_time != 0) { - return delta_my_joint / estimated_time; + return delta_joint / estimated_time; } else { return 0; } From 7ca387321cd34da6ea372a9ee38e0abc13bdf939 Mon Sep 17 00:00:00 2001 From: Florian Vahl <7vahl@informatik.uni-hamburg.de> Date: Mon, 23 Oct 2023 10:20:36 +0200 Subject: [PATCH 37/74] Make param exchange more reliable --- bitbots_dynup/src/dynup_engine.cpp | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/bitbots_dynup/src/dynup_engine.cpp b/bitbots_dynup/src/dynup_engine.cpp index bd8eac13a..f0e11d8a8 100644 --- a/bitbots_dynup/src/dynup_engine.cpp +++ b/bitbots_dynup/src/dynup_engine.cpp @@ -678,19 +678,18 @@ void DynupEngine::setGoals(const DynupRequest &goals) { // we re-request the values every time because they can be changed by dynamic reconfigure // and re-requesting them is fast enough double foot_distance, trunk_x_final, trunk_pitch, trunk_height; - bool walking_running = false; std::vector<rclcpp::Parameter> walking_params; - if (walking_param_client_->service_is_ready()) { - walking_params = walking_param_client_->get_parameters({"engine.trunk_pitch", - "engine.trunk_height", - "engine.foot_distance", - "engine.trunk_x_offset"}, - std::chrono::duration<int64_t, std::milli>(10)); - // when the walking was killed, service_is_ready is still true but the parameters come back empty - walking_running = !walking_params.empty(); - } - - if (walking_running) { + // Gat params and wait for walking to be ready + walking_params = walking_param_client_->get_parameters({"engine.trunk_pitch", + "engine.trunk_height", + "engine.foot_distance", + "engine.trunk_x_offset"}, + std::chrono::seconds(10)); + + // when the walking was killed, service_is_ready is still true but the parameters come back empty + if (walking_params.empty()) { + RCLCPP_WARN(node_->get_logger(), "Walking is not running, using default parameters for walkready."); + } else { for (auto ¶m: walking_params) { if (param.get_name() == "engine.trunk_pitch") { trunk_pitch = param.get_value<double>(); @@ -709,8 +708,6 @@ void DynupEngine::setGoals(const DynupRequest &goals) { params_["trunk_height"] = rclcpp::Parameter("trunk_height", trunk_height); params_["foot_distance"] = rclcpp::Parameter("foot_distance", foot_distance); params_["trunk_x_final"] = rclcpp::Parameter("trunk_x_final", trunk_x_final); - } else { - RCLCPP_WARN(node_->get_logger(), "Walking is not running, using default parameters for walkready."); } if (goals.direction == "front") { From c46b5f5c203f7afb07b8b40f17dda8f0803c3bff Mon Sep 17 00:00:00 2001 From: Florian Vahl <7vahl@informatik.uni-hamburg.de> Date: Mon, 23 Oct 2023 10:20:56 +0200 Subject: [PATCH 38/74] Fix stop step --- bitbots_quintic_walk/src/walk_engine.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bitbots_quintic_walk/src/walk_engine.cpp b/bitbots_quintic_walk/src/walk_engine.cpp index c7ee603d3..bbc02edbb 100644 --- a/bitbots_quintic_walk/src/walk_engine.cpp +++ b/bitbots_quintic_walk/src/walk_engine.cpp @@ -365,7 +365,7 @@ void WalkEngine::reset(WalkState state, buildStartStepTrajectories(); } else if (state == WalkState::STOP_MOVEMENT) { buildStopMovementTrajectories(); - } else if (state == WalkState::START_STEP) { + } else if (state == WalkState::STOP_STEP) { buildStopStepTrajectories(); } else if (state == WalkState::KICK) { buildKickTrajectories(); @@ -399,7 +399,7 @@ void WalkEngine::reset(WalkState state, buildStartStepTrajectories(); } else if (state == WalkState::STOP_MOVEMENT) { buildStopMovementTrajectories(); - } else if (state == WalkState::START_STEP) { + } else if (state == WalkState::STOP_STEP) { buildStopStepTrajectories(); } else if (state == WalkState::KICK) { buildKickTrajectories(); @@ -1114,4 +1114,4 @@ tf2::Transform WalkEngine::getLeft() { tf2::Transform WalkEngine::getRight() { return right_in_world_; } -} // namespace bitbots_quintic_walk \ No newline at end of file +} // namespace bitbots_quintic_walk From cc44f8e8fb362c2eca3948d2548fbc15238f35f5 Mon Sep 17 00:00:00 2001 From: Florian Vahl <7vahl@informatik.uni-hamburg.de> Date: Mon, 23 Oct 2023 10:28:38 +0200 Subject: [PATCH 39/74] Fix dynup hcm warning --- bitbots_hcm/bitbots_hcm/hcm_dsd/actions/play_animation.py | 6 +++--- bitbots_hcm/config/hcm_wolfgang.yaml | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/play_animation.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/play_animation.py index 226d1e2e3..ce5a3e2d9 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/play_animation.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/play_animation.py @@ -56,7 +56,7 @@ def start_animation(self, anim): self.blackboard.node.get_logger().warn("Tried to play an animation with an empty name!") return False first_try = self.blackboard.animation_action_client.wait_for_server( - timeout_sec=self.blackboard.node.get_parameter('hcm.anim_server_wait_time').get_parameter_value().double_value) + timeout_sec=self.blackboard.node.get_parameter('hcm.anim_server_wait_time').value) if not first_try: server_running = False while not server_running and rclpy.ok(): @@ -157,12 +157,12 @@ def start_animation(self): """ first_try = self.blackboard.dynup_action_client.wait_for_server( - timeout_sec=self.blackboard.node.get_parameter('hcm.anim_server_wait_time').get_parameter_value().double_value) + timeout_sec=self.blackboard.node.get_parameter('hcm.anim_server_wait_time').value) if not first_try: server_running = False while not server_running and rclpy.ok(): self.blackboard.node.get_logger().warn( - "Dynup Action Server not running! Dynup cannot work without dynup server!" + "Dynup Action Server not running! Dynup cannot work without dynup server! " "Will now wait until server is accessible!", throttle_duration_sec=10.0) server_running = self.blackboard.dynup_action_client.wait_for_server(timeout_sec=1) diff --git a/bitbots_hcm/config/hcm_wolfgang.yaml b/bitbots_hcm/config/hcm_wolfgang.yaml index e1d21fe42..6a63d8f6f 100644 --- a/bitbots_hcm/config/hcm_wolfgang.yaml +++ b/bitbots_hcm/config/hcm_wolfgang.yaml @@ -10,8 +10,8 @@ motor_off_time: 30000000.0 # time of no use or updates when the hcm goes to soft off motor_timeout_duration: 0.5 # time without messages from the servos till error is produced [s] - #Animations - anim_server_wait_time: 1.0 # time the hcm waits for animation server + # Animations + anim_server_wait_time: 10.0 # time the hcm waits for animation server animations: falling_front: "falling_front" falling_back: "falling_back" From fd8ae456e2d7082da9cfff4e66e40402dabd2a15 Mon Sep 17 00:00:00 2001 From: Florian Vahl <7vahl@informatik.uni-hamburg.de> Date: Mon, 23 Oct 2023 10:57:39 +0200 Subject: [PATCH 40/74] Also build config --- bitbots_odometry/CMakeLists.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/bitbots_odometry/CMakeLists.txt b/bitbots_odometry/CMakeLists.txt index 4bd17893b..b7cc162b1 100644 --- a/bitbots_odometry/CMakeLists.txt +++ b/bitbots_odometry/CMakeLists.txt @@ -88,4 +88,7 @@ install(TARGETS odometry_fuser install(DIRECTORY launch DESTINATION share/${PROJECT_NAME}) +install(DIRECTORY config + DESTINATION share/${PROJECT_NAME}) + ament_package() From 83cba4c3c3cdee543068873161f5edbf28c0c73e Mon Sep 17 00:00:00 2001 From: Florian Vahl <7vahl@informatik.uni-hamburg.de> Date: Mon, 23 Oct 2023 10:57:52 +0200 Subject: [PATCH 41/74] Increase timeouts --- bitbots_dynup/src/dynup_node.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/bitbots_dynup/src/dynup_node.cpp b/bitbots_dynup/src/dynup_node.cpp index d8472dec3..637ef92bd 100644 --- a/bitbots_dynup/src/dynup_node.cpp +++ b/bitbots_dynup/src/dynup_node.cpp @@ -341,10 +341,10 @@ bitbots_dynup::msg::DynupPoses DynupNode::getCurrentPoses() { bitbots_dynup::msg::DynupPoses msg; try { //0.2 second timeout for transformations - geometry_msgs::msg::Transform l_foot_transformed = tf_buffer_->lookupTransform(r_sole_frame_, l_sole_frame_, time, tf2::durationFromSec(0.2)).transform; - geometry_msgs::msg::Transform r_foot_transformed = tf_buffer_->lookupTransform(base_link_frame_, r_sole_frame_, time, tf2::durationFromSec(0.2)).transform; - geometry_msgs::msg::Transform l_hand_transformed = tf_buffer_->lookupTransform(base_link_frame_, l_wrist_frame_, time, tf2::durationFromSec(0.2)).transform; - geometry_msgs::msg::Transform r_hand_transformed = tf_buffer_->lookupTransform(base_link_frame_, r_wrist_frame_, time, tf2::durationFromSec(0.2)).transform; + geometry_msgs::msg::Transform l_foot_transformed = tf_buffer_->lookupTransform(r_sole_frame_, l_sole_frame_, time, tf2::durationFromSec(1.0)).transform; + geometry_msgs::msg::Transform r_foot_transformed = tf_buffer_->lookupTransform(base_link_frame_, r_sole_frame_, time, tf2::durationFromSec(1.0)).transform; + geometry_msgs::msg::Transform l_hand_transformed = tf_buffer_->lookupTransform(base_link_frame_, l_wrist_frame_, time, tf2::durationFromSec(1.0)).transform; + geometry_msgs::msg::Transform r_hand_transformed = tf_buffer_->lookupTransform(base_link_frame_, r_wrist_frame_, time, tf2::durationFromSec(1.0)).transform; std::function transform2pose = [](geometry_msgs::msg::Transform transform) { geometry_msgs::msg::Pose pose; From a181af5e3c6ea98fd726bf19ecbef52b006c3acf Mon Sep 17 00:00:00 2001 From: Florian Vahl <7vahl@informatik.uni-hamburg.de> Date: Mon, 23 Oct 2023 11:00:09 +0200 Subject: [PATCH 42/74] Cleanup timeout --- bitbots_dynup/src/dynup_node.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/bitbots_dynup/src/dynup_node.cpp b/bitbots_dynup/src/dynup_node.cpp index 637ef92bd..e14fab146 100644 --- a/bitbots_dynup/src/dynup_node.cpp +++ b/bitbots_dynup/src/dynup_node.cpp @@ -340,11 +340,14 @@ bitbots_dynup::msg::DynupPoses DynupNode::getCurrentPoses() { /* Transform the left foot into the right foot frame and all other splines into the base link frame*/ bitbots_dynup::msg::DynupPoses msg; try { - //0.2 second timeout for transformations - geometry_msgs::msg::Transform l_foot_transformed = tf_buffer_->lookupTransform(r_sole_frame_, l_sole_frame_, time, tf2::durationFromSec(1.0)).transform; - geometry_msgs::msg::Transform r_foot_transformed = tf_buffer_->lookupTransform(base_link_frame_, r_sole_frame_, time, tf2::durationFromSec(1.0)).transform; - geometry_msgs::msg::Transform l_hand_transformed = tf_buffer_->lookupTransform(base_link_frame_, l_wrist_frame_, time, tf2::durationFromSec(1.0)).transform; - geometry_msgs::msg::Transform r_hand_transformed = tf_buffer_->lookupTransform(base_link_frame_, r_wrist_frame_, time, tf2::durationFromSec(1.0)).transform; + // Timeout for transformations + auto timeout = tf2::durationFromSec(1.0); + + // Get the transforms of the end effectors + geometry_msgs::msg::Transform l_foot_transformed = tf_buffer_->lookupTransform(r_sole_frame_, l_sole_frame_, time, timeout).transform; + geometry_msgs::msg::Transform r_foot_transformed = tf_buffer_->lookupTransform(base_link_frame_, r_sole_frame_, time, timeout).transform; + geometry_msgs::msg::Transform l_hand_transformed = tf_buffer_->lookupTransform(base_link_frame_, l_wrist_frame_, time, timeout).transform; + geometry_msgs::msg::Transform r_hand_transformed = tf_buffer_->lookupTransform(base_link_frame_, r_wrist_frame_, time, timeout).transform; std::function transform2pose = [](geometry_msgs::msg::Transform transform) { geometry_msgs::msg::Pose pose; From e73552357a5bb810c90177179ee2f9d8d8dc01ef Mon Sep 17 00:00:00 2001 From: Florian Vahl <7vahl@informatik.uni-hamburg.de> Date: Mon, 23 Oct 2023 11:00:20 +0200 Subject: [PATCH 43/74] Cleaner imu active check --- .../include/bitbots_odometry/odometry_fuser.h | 1 + bitbots_odometry/src/odometry_fuser.cpp | 81 ++++++++++--------- 2 files changed, 45 insertions(+), 37 deletions(-) diff --git a/bitbots_odometry/include/bitbots_odometry/odometry_fuser.h b/bitbots_odometry/include/bitbots_odometry/odometry_fuser.h index 6fd92317b..0d1aa8f41 100644 --- a/bitbots_odometry/include/bitbots_odometry/odometry_fuser.h +++ b/bitbots_odometry/include/bitbots_odometry/odometry_fuser.h @@ -40,6 +40,7 @@ class OdometryFuser : public rclcpp::Node { std::shared_ptr<tf2_ros::TransformListener> tf_listener_; rclcpp::Time fused_time_; std::string base_link_frame_, r_sole_frame_, l_sole_frame_, odom_frame_, rotation_frame_, imu_frame_; + bool imu_data_received_ = false; rclcpp::Subscription<biped_interfaces::msg::Phase>::SharedPtr walk_support_state_sub_; rclcpp::Subscription<biped_interfaces::msg::Phase>::SharedPtr kick_support_state_sub_; diff --git a/bitbots_odometry/src/odometry_fuser.cpp b/bitbots_odometry/src/odometry_fuser.cpp index 50a28deee..779b3d9c9 100644 --- a/bitbots_odometry/src/odometry_fuser.cpp +++ b/bitbots_odometry/src/odometry_fuser.cpp @@ -87,50 +87,56 @@ bool OdometryFuser::wait_for_tf() { } void OdometryFuser::loop() { - // get roll an pitch from imu - tf2::Quaternion imu_orientation; - tf2::fromMsg(imu_data_.orientation, imu_orientation); - // get motion_odom transform tf2::Transform motion_odometry; tf2::fromMsg(odom_data_.pose.pose, motion_odometry); // combine orientations to new quaternion if IMU is active, use purely odom otherwise - tf2::Transform fused_odometry; - - // compute the point of rotation (in base_link frame) - tf2::Transform rotation_point_in_base = getCurrentRotationPoint(); - // get base_link in rotation point frame - tf2::Transform base_link_in_rotation_point = rotation_point_in_base.inverse(); - - // get only translation and yaw from motion odometry - tf2::Quaternion odom_orientation_yaw = getCurrentMotionOdomYaw( - motion_odometry.getRotation()); - tf2::Transform motion_odometry_yaw; - motion_odometry_yaw.setRotation(odom_orientation_yaw); - motion_odometry_yaw.setOrigin(motion_odometry.getOrigin()); - - // Get the rotation offset between the IMU and the baselink - tf2::Transform imu_mounting_offset; - try { - geometry_msgs::msg::TransformStamped imu_mounting_transform = tf_buffer_->lookupTransform( - imu_data_.header.frame_id, base_link_frame_, fused_time_); - fromMsg(imu_mounting_transform.transform, imu_mounting_offset); - } catch (tf2::TransformException &ex) { - RCLCPP_ERROR(this->get_logger(), "Not able to use the IMU: %s", ex.what()); - } + tf2::Transform fused_odometry {motion_odometry}; + + // Check if the imu is active + if (imu_data_received_) { + + // get roll an pitch from imu + tf2::Quaternion imu_orientation; + tf2::fromMsg(imu_data_.orientation, imu_orientation); + + // compute the point of rotation (in base_link frame) + tf2::Transform rotation_point_in_base = getCurrentRotationPoint(); + // get base_link in rotation point frame + tf2::Transform base_link_in_rotation_point = rotation_point_in_base.inverse(); - // get imu transform without yaw - tf2::Quaternion imu_orientation_without_yaw_component = getCurrentImuRotationWithoutYaw( - imu_orientation * imu_mounting_offset.getRotation()); - tf2::Transform imu_without_yaw_component; - imu_without_yaw_component.setRotation(imu_orientation_without_yaw_component); - imu_without_yaw_component.setOrigin({0, 0, 0}); + // get only translation and yaw from motion odometry + tf2::Quaternion odom_orientation_yaw = getCurrentMotionOdomYaw( + motion_odometry.getRotation()); + tf2::Transform motion_odometry_yaw; + motion_odometry_yaw.setRotation(odom_orientation_yaw); + motion_odometry_yaw.setOrigin(motion_odometry.getOrigin()); - // transformation chain to get correctly rotated odom frame - // go to the rotation point in the odom frame. rotate the transform to the base link at this point - fused_odometry = - motion_odometry_yaw * rotation_point_in_base * imu_without_yaw_component * base_link_in_rotation_point; + // Get the rotation offset between the IMU and the baselink + tf2::Transform imu_mounting_offset; + try { + geometry_msgs::msg::TransformStamped imu_mounting_transform = tf_buffer_->lookupTransform( + imu_data_.header.frame_id, base_link_frame_, fused_time_); + fromMsg(imu_mounting_transform.transform, imu_mounting_offset); + } catch (tf2::TransformException &ex) { + RCLCPP_ERROR(this->get_logger(), "Not able to fuse IMU data with odometry due to a tf problem: %s", ex.what()); + } + + // get imu transform without yaw + tf2::Quaternion imu_orientation_without_yaw_component = getCurrentImuRotationWithoutYaw( + imu_orientation * imu_mounting_offset.getRotation()); + tf2::Transform imu_without_yaw_component; + imu_without_yaw_component.setRotation(imu_orientation_without_yaw_component); + imu_without_yaw_component.setOrigin({0, 0, 0}); + + // transformation chain to get correctly rotated odom frame + // go to the rotation point in the odom frame. rotate the transform to the base link at this point + fused_odometry = + motion_odometry_yaw * rotation_point_in_base * imu_without_yaw_component * base_link_in_rotation_point; + } else { + fused_odometry = motion_odometry; + } // combine it all into a tf tf_.header.stamp = fused_time_; @@ -269,6 +275,7 @@ void OdometryFuser::imuCallback( // Use the time of the imu as a baseline to do transforms and stuff because it is more timecritical than the walking odometry. // The walking odom stamp is also close to this timestamp due to the Synchronizer policy. fused_time_ = imu_data_.header.stamp; + imu_data_received_ = true; } int main(int argc, char **argv) { From c130413241feb412fc95ce06120bd9b3e4ffb2cc Mon Sep 17 00:00:00 2001 From: Florian Vahl <7vahl@informatik.uni-hamburg.de> Date: Mon, 23 Oct 2023 15:06:40 +0200 Subject: [PATCH 44/74] Fix sim sleep --- .../include/bitbots_dynamic_kick/kick_node.h | 5 -- bitbots_dynamic_kick/src/kick_node.cpp | 64 +++++++++---------- 2 files changed, 30 insertions(+), 39 deletions(-) diff --git a/bitbots_dynamic_kick/include/bitbots_dynamic_kick/kick_node.h b/bitbots_dynamic_kick/include/bitbots_dynamic_kick/kick_node.h index bd56fc123..580759cdd 100644 --- a/bitbots_dynamic_kick/include/bitbots_dynamic_kick/kick_node.h +++ b/bitbots_dynamic_kick/include/bitbots_dynamic_kick/kick_node.h @@ -133,11 +133,6 @@ class KickNode : public rclcpp::Node{ */ void publishSupportFoot(bool is_left_kick); - /** - * Helper method to achieve correctly sampled rate - */ - double getTimeDelta(); - /** * Get JointCommand message for JointGoals */ diff --git a/bitbots_dynamic_kick/src/kick_node.cpp b/bitbots_dynamic_kick/src/kick_node.cpp index 807b43e28..981a6e590 100644 --- a/bitbots_dynamic_kick/src/kick_node.cpp +++ b/bitbots_dynamic_kick/src/kick_node.cpp @@ -314,54 +314,50 @@ void KickNode::executeCb(const std::shared_ptr<KickGoalHandle> goal_handle) { } } -double KickNode::getTimeDelta() { - // compute actual time delta that happened - double dt; - double current_ros_time = this->get_clock()->now().seconds(); - - // first call needs to be handled specially - if (last_ros_update_time_ == 0) { - last_ros_update_time_ = current_ros_time; - return 0.001; - } +void KickNode::loopEngine(const std::shared_ptr<rclcpp_action::ServerGoalHandle<bitbots_msgs::action::Kick>> goal_handle) { + // Store the time of the last execution + auto last_time = this->get_clock()->now(); + auto next_execution_time {last_time}; - dt = current_ros_time - last_ros_update_time_; - // this can happen due to floating point precision or in simulation - if (dt == 0) { - RCLCPP_WARN(this->get_logger(), "dynamic kick: dt was 0"); - dt = 0.001; - } - last_ros_update_time_ = current_ros_time; + // Loop to perform the kick trajectory + while (rclcpp::ok()) { + // Store time of this step + auto step_time = this->get_clock()->now(); - return dt; -} + // Check if enough time has passed to execute the next step + if (step_time >= next_execution_time) { + + // Determine the next execution time + next_execution_time = step_time + rclcpp::Duration::from_seconds(1.0 / engine_rate_); -void KickNode::loopEngine(const std::shared_ptr<rclcpp_action::ServerGoalHandle<bitbots_msgs::action::Kick>> goal_handle) { - /* Do the loop as long as nothing cancels it */ - double dt; - rclcpp::Time next_loop_time; - rclcpp::Time last_time = this->get_clock()->now(); - while (rclcpp::ok()) { - next_loop_time = last_time + rclcpp::Duration::from_seconds(1.0 / engine_rate_); - last_time = this->get_clock()->now(); - if (this->get_clock()->sleep_until(next_loop_time)) { - dt = getTimeDelta(); - std::optional<bitbots_splines::JointGoals> motor_goals = kickStep(dt); + // Get the time since the last execution + auto dt = step_time - last_time; - /* Publish feedback to the client */ + // Calculate the kick joint goals + std::optional<bitbots_splines::JointGoals> motor_goals = kickStep(dt.seconds()); + + // Publish feedback to the client auto feedback = std::make_shared<bitbots_msgs::action::Kick::Feedback>(); feedback->percent_done = engine_.getPercentDone(); feedback->chosen_foot = engine_.isLeftKick() ? bitbots_msgs::action::Kick::Feedback::FOOT_LEFT - : bitbots_msgs::action::Kick::Feedback::FOOT_RIGHT; + : bitbots_msgs::action::Kick::Feedback::FOOT_RIGHT; goal_handle->publish_feedback(feedback); + // Send the joint goals to the robot + joint_goal_publisher_->publish(getJointCommand(motor_goals.value())); + + // Break if the kick is finished if (feedback->percent_done >= 100) { break; } - joint_goal_publisher_->publish(getJointCommand(motor_goals.value())); + + // Store the time of this execution + last_time = step_time; + } else { - usleep(1); + // Sleep one millisecond to avoid busy waiting + std::this_thread::sleep_for(std::chrono::milliseconds(1)); } } } From 6d2bb6461c2a72dc07cc6af94060fb074459920f Mon Sep 17 00:00:00 2001 From: Florian Vahl <7vahl@informatik.uni-hamburg.de> Date: Mon, 23 Oct 2023 19:01:37 +0200 Subject: [PATCH 45/74] Fix crashing kick after duplicate call --- .../include/bitbots_dynamic_kick/kick_node.h | 1 + bitbots_dynamic_kick/src/kick_node.cpp | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/bitbots_dynamic_kick/include/bitbots_dynamic_kick/kick_node.h b/bitbots_dynamic_kick/include/bitbots_dynamic_kick/kick_node.h index 580759cdd..99243e596 100644 --- a/bitbots_dynamic_kick/include/bitbots_dynamic_kick/kick_node.h +++ b/bitbots_dynamic_kick/include/bitbots_dynamic_kick/kick_node.h @@ -101,6 +101,7 @@ class KickNode : public rclcpp::Node{ moveit::core::RobotStatePtr goal_state_; moveit::core::RobotStatePtr current_state_; OnSetParametersCallbackHandle::SharedPtr callback_handle_; + bool currently_kicking_ = false; std::string base_link_frame_, base_footprint_frame_, l_sole_frame_, r_sole_frame_; diff --git a/bitbots_dynamic_kick/src/kick_node.cpp b/bitbots_dynamic_kick/src/kick_node.cpp index 981a6e590..7694f7cca 100644 --- a/bitbots_dynamic_kick/src/kick_node.cpp +++ b/bitbots_dynamic_kick/src/kick_node.cpp @@ -260,6 +260,8 @@ rclcpp_action::CancelResponse KickNode::cancelCb(std::shared_ptr<rclcpp_action:: } void KickNode::acceptedCb(const std::shared_ptr<KickGoalHandle> goal) { + // Set flag so no other goal can be accepted + currently_kicking_ = true; // this needs to return quickly to avoid blocking the executor, so spin up a new thread std::thread{std::bind(&KickNode::executeCb, this, std::placeholders::_1), goal}.detach(); } @@ -269,6 +271,10 @@ rclcpp_action::GoalResponse KickNode::goalCb( std::shared_ptr<const bitbots_msgs::action::Kick::Goal> goal) { RCLCPP_INFO(this->get_logger(), "Received goal request"); (void) uuid; + if (currently_kicking_) { + RCLCPP_INFO(this->get_logger(), "Already kicking, rejecting new goal"); + return rclcpp_action::GoalResponse::REJECT; + } return rclcpp_action::GoalResponse::ACCEPT_AND_EXECUTE; } @@ -312,6 +318,8 @@ void KickNode::executeCb(const std::shared_ptr<KickGoalHandle> goal_handle) { result->result = bitbots_msgs::action::Kick::Result::SUCCESS; goal_handle->succeed(result); } + // Reset flag so new goals can be accepted + currently_kicking_ = false; } void KickNode::loopEngine(const std::shared_ptr<rclcpp_action::ServerGoalHandle<bitbots_msgs::action::Kick>> goal_handle) { From b9396a324a978035e1534d2c80cfd600368e26f2 Mon Sep 17 00:00:00 2001 From: Florian Vahl <7vahl@informatik.uni-hamburg.de> Date: Mon, 23 Oct 2023 19:02:46 +0200 Subject: [PATCH 46/74] Use wait for tf instead of waiting for joint states --- bitbots_odometry/CMakeLists.txt | 41 ++-- .../bitbots_odometry/motion_odometry.h | 19 +- .../include/bitbots_odometry/odometry_fuser.h | 36 +-- bitbots_odometry/package.xml | 13 +- bitbots_odometry/src/motion_odometry.cpp | 219 +++++++++--------- bitbots_odometry/src/odometry_fuser.cpp | 59 +---- 6 files changed, 172 insertions(+), 215 deletions(-) diff --git a/bitbots_odometry/CMakeLists.txt b/bitbots_odometry/CMakeLists.txt index b7cc162b1..52e3a64f6 100644 --- a/bitbots_odometry/CMakeLists.txt +++ b/bitbots_odometry/CMakeLists.txt @@ -6,10 +6,11 @@ if (NOT CMAKE_CXX_STANDARD) set(CMAKE_CXX_STANDARD 17) endif () -find_package(Eigen3 REQUIRED) find_package(ament_cmake REQUIRED) find_package(biped_interfaces REQUIRED) find_package(bitbots_docs REQUIRED) +find_package(bitbots_utils REQUIRED) +find_package(Eigen3 REQUIRED) find_package(generate_parameter_library REQUIRED) find_package(geometry_msgs REQUIRED) find_package(message_filters REQUIRED) @@ -43,38 +44,40 @@ target_link_libraries( ## Specify libraries to link a library or executable target against ament_target_dependencies( motion_odometry - tf2_eigen - tf2 - nav_msgs - message_filters - tf2_geometry_msgs + ament_cmake biped_interfaces - geometry_msgs bitbots_docs + bitbots_utils + generate_parameter_library + geometry_msgs + message_filters + nav_msgs + rclcpp rot_conv sensor_msgs + tf2 + tf2_eigen + tf2_geometry_msgs tf2_ros - ament_cmake - generate_parameter_library - rclcpp ) ament_target_dependencies( odometry_fuser - tf2_eigen - tf2 - nav_msgs - message_filters - tf2_geometry_msgs + ament_cmake biped_interfaces - geometry_msgs bitbots_docs + bitbots_utils + Eigen3 + geometry_msgs + message_filters + nav_msgs + rclcpp rot_conv sensor_msgs + tf2 + tf2_eigen + tf2_geometry_msgs tf2_ros - ament_cmake - rclcpp - Eigen3 ) enable_bitbots_docs() diff --git a/bitbots_odometry/include/bitbots_odometry/motion_odometry.h b/bitbots_odometry/include/bitbots_odometry/motion_odometry.h index 2456dfd30..9de619119 100644 --- a/bitbots_odometry/include/bitbots_odometry/motion_odometry.h +++ b/bitbots_odometry/include/bitbots_odometry/motion_odometry.h @@ -1,16 +1,18 @@ #include <rclcpp/rclcpp.hpp> +#include "odometry_parameters.hpp" + +#include <biped_interfaces/msg/phase.hpp> +#include <bitbots_utils/utils.hpp> +#include <nav_msgs/msg/odometry.hpp> +#include <rclcpp/experimental/executors/events_executor/events_executor.hpp> #include <sensor_msgs/msg/joint_state.hpp> #include <std_msgs/msg/char.hpp> -#include <tf2_ros/transform_broadcaster.h> #include <tf2_geometry_msgs/tf2_geometry_msgs.hpp> +#include <tf2_ros/buffer.h> +#include <tf2_ros/transform_broadcaster.h> #include <tf2_ros/transform_listener.h> #include <tf2/utils.h> -#include <nav_msgs/msg/odometry.hpp> -#include <biped_interfaces/msg/phase.hpp> #include <unistd.h> -#include <tf2_ros/buffer.h> -#include <rclcpp/experimental/executors/events_executor/events_executor.hpp> -#include "odometry_parameters.hpp" using std::placeholders::_1; @@ -25,15 +27,12 @@ class MotionOdometry : public rclcpp::Node { char current_support_state_; char previous_support_state_; rclcpp::Time current_support_state_time_{rclcpp::Time(0, 0, RCL_ROS_TIME)}; - sensor_msgs::msg::JointState current_joint_states_; nav_msgs::msg::Odometry current_odom_msg_; tf2::Transform odometry_to_support_foot_; - std::unique_ptr<tf2_ros::Buffer> tf_buffer_; std::string base_link_frame_, r_sole_frame_, l_sole_frame_, odom_frame_; rclcpp::Publisher<nav_msgs::msg::Odometry>::SharedPtr pub_odometry_; rclcpp::Subscription<biped_interfaces::msg::Phase>::SharedPtr walk_support_state_sub_; rclcpp::Subscription<biped_interfaces::msg::Phase>::SharedPtr kick_support_state_sub_; - rclcpp::Subscription<sensor_msgs::msg::JointState>::SharedPtr joint_state_sub_; rclcpp::Subscription<nav_msgs::msg::Odometry>::SharedPtr odom_subscriber_; // Declare parameter listener and struct from the generate_parameter_library @@ -42,9 +41,9 @@ class MotionOdometry : public rclcpp::Node { motion_odometry::Params config_; void supportCallback(const biped_interfaces::msg::Phase::SharedPtr msg); - void jointStateCb(const sensor_msgs::msg::JointState::SharedPtr msg); void odomCallback(const nav_msgs::msg::Odometry::SharedPtr msg); + std::shared_ptr<tf2_ros::Buffer> tf_buffer_; std::unique_ptr<tf2_ros::TransformBroadcaster> br_; std::shared_ptr<tf2_ros::TransformListener> tf_listener_; rclcpp::Time foot_change_time_; diff --git a/bitbots_odometry/include/bitbots_odometry/odometry_fuser.h b/bitbots_odometry/include/bitbots_odometry/odometry_fuser.h index 0d1aa8f41..1c9a7a9b4 100644 --- a/bitbots_odometry/include/bitbots_odometry/odometry_fuser.h +++ b/bitbots_odometry/include/bitbots_odometry/odometry_fuser.h @@ -1,30 +1,33 @@ #include <rclcpp/rclcpp.hpp> -#include <sensor_msgs/msg/imu.hpp> -#include <tf2_ros/transform_broadcaster.h> -#include <tf2_eigen/tf2_eigen.hpp> +#include <biped_interfaces/msg/phase.hpp> +#include <bitbots_utils/utils.hpp> +#include <builtin_interfaces/msg/time.hpp> +#include <Eigen/Geometry> #include <geometry_msgs/msg/transform_stamped.hpp> +#include <message_filters/cache.h> +#include <message_filters/subscriber.h> +#include <message_filters/sync_policies/approximate_time.h> +#include <message_filters/synchronizer.h> #include <nav_msgs/msg/odometry.hpp> +#include <rclcpp/experimental/executors/events_executor/events_executor.hpp> +#include <rot_conv/rot_conv.h> +#include <sensor_msgs/msg/imu.hpp> #include <std_msgs/msg/char.hpp> -#include <builtin_interfaces/msg/time.hpp> -#include <tf2/utils.h> +#include <tf2_eigen/tf2_eigen.hpp> #include <tf2_geometry_msgs/tf2_geometry_msgs.hpp> +#include <tf2_ros/buffer.h> +#include <tf2_ros/transform_broadcaster.h> #include <tf2_ros/transform_listener.h> -#include <tf2/LinearMath/Vector3.h> -#include <tf2/LinearMath/Scalar.h> #include <tf2/LinearMath/Quaternion.h> +#include <tf2/LinearMath/Scalar.h> #include <tf2/LinearMath/Transform.h> -#include <Eigen/Geometry> -#include <rot_conv/rot_conv.h> -#include <message_filters/cache.h> -#include <message_filters/subscriber.h> -#include <message_filters/synchronizer.h> -#include <message_filters/sync_policies/approximate_time.h> -#include <biped_interfaces/msg/phase.hpp> +#include <tf2/LinearMath/Vector3.h> +#include <tf2/utils.h> #include <unistd.h> -#include <rclcpp/experimental/executors/events_executor/events_executor.hpp> using std::placeholders::_1; +using bitbots_utils::wait_for_tf; typedef message_filters::sync_policies::ApproximateTime<sensor_msgs::msg::Imu, nav_msgs::msg::Odometry> SyncPolicy; @@ -32,11 +35,10 @@ class OdometryFuser : public rclcpp::Node { public: OdometryFuser(); void loop(); - bool wait_for_tf(); private: sensor_msgs::msg::Imu imu_data_; nav_msgs::msg::Odometry odom_data_; - std::unique_ptr<tf2_ros::Buffer> tf_buffer_; + std::shared_ptr<tf2_ros::Buffer> tf_buffer_; std::shared_ptr<tf2_ros::TransformListener> tf_listener_; rclcpp::Time fused_time_; std::string base_link_frame_, r_sole_frame_, l_sole_frame_, odom_frame_, rotation_frame_, imu_frame_; diff --git a/bitbots_odometry/package.xml b/bitbots_odometry/package.xml index 3a93cbe77..c3db876be 100644 --- a/bitbots_odometry/package.xml +++ b/bitbots_odometry/package.xml @@ -14,16 +14,17 @@ <author email="jasper@bit-bots.de">Jasper Güldenstein</author> <buildtool_depend>ament_cmake</buildtool_depend> - <depend>nav_msgs</depend> + <depend>biped_interfaces</depend> + <depend>bitbots_docs</depend> + <depend>bitbots_utils</depend> + <depend>generate_parameter_library</depend> <depend>message_filters</depend> + <depend>nav_msgs</depend> + <depend>rot_conv</depend> <depend>sensor_msgs</depend> + <depend>tf2_eigen</depend> <depend>tf2_geometry_msgs</depend> <depend>tf2</depend> - <depend>tf2_eigen</depend> - <depend>rot_conv</depend> - <depend>bitbots_docs</depend> - <depend>biped_interfaces</depend> - <depend>generate_parameter_library</depend> <export> <bitbots_documentation> diff --git a/bitbots_odometry/src/motion_odometry.cpp b/bitbots_odometry/src/motion_odometry.cpp index 9c469bab3..26231793c 100644 --- a/bitbots_odometry/src/motion_odometry.cpp +++ b/bitbots_odometry/src/motion_odometry.cpp @@ -5,7 +5,7 @@ namespace bitbots_odometry { MotionOdometry::MotionOdometry() : Node("MotionOdometry"), param_listener_(get_node_parameters_interface()) { - tf_buffer_ = std::make_unique<tf2_ros::Buffer>(this->get_clock()); + tf_buffer_ = std::make_shared<tf2_ros::Buffer>(this->get_clock()); tf_listener_ = std::make_shared<tf2_ros::TransformListener>(*tf_buffer_, this); br_ = std::make_unique<tf2_ros::TransformBroadcaster>(this); config_ = param_listener_.get_params(); @@ -19,9 +19,10 @@ MotionOdometry::MotionOdometry() : Node("MotionOdometry"), this->declare_parameter<std::string>("odom_frame", "odom"); this->get_parameter("odom_frame", odom_frame_); - joint_update_time_ = rclcpp::Time(0, 0, RCL_ROS_TIME); + joint_update_time_ = rclcpp::Time(0); current_support_state_ = -1; previous_support_state_ = -1; + walk_support_state_sub_ = this->create_subscription<biped_interfaces::msg::Phase>("walk_support_state", 1, @@ -32,10 +33,6 @@ MotionOdometry::MotionOdometry() : Node("MotionOdometry"), 1, std::bind(&MotionOdometry::supportCallback, this, _1)); - joint_state_sub_ = - this->create_subscription<sensor_msgs::msg::JointState>("joint_states", - 1, - std::bind(&MotionOdometry::jointStateCb, this, _1)); odom_subscriber_ = this->create_subscription<nav_msgs::msg::Odometry>("walk_engine_odometry", 1, @@ -52,125 +49,125 @@ MotionOdometry::MotionOdometry() : Node("MotionOdometry"), } void MotionOdometry::loop() { - rclcpp::Time cycle_start_time = this->now(); - config_ = param_listener_.get_params(); - - //check if joint states were received, otherwise we can't provide odometry - rclcpp::Duration joints_delta_t = this->now() - joint_update_time_; - if (joints_delta_t.seconds() > 0.1) { - // only warn if we did not just start as this results in unecessary warnings - if ((this->now() - start_time_).seconds() > 10) { - RCLCPP_WARN_THROTTLE(this->get_logger(), *this->get_clock(), 30000, - "No joint states received. Will not provide odometry."); - } - } else { - // check if step finished, meaning left->right or right->left support. double support is skipped - // the support foot change is published when the joint goals for the last movements are published. - // it takes some time till the joints actually reach this position, this can create some offset - // but since we skip the double support phase, we basically take the timepoint when the double support phase is - // finished. This means both feet did not move and this should create no offset. - if ((current_support_state_ == biped_interfaces::msg::Phase::LEFT_STANCE - && previous_support_state_ == biped_interfaces::msg::Phase::RIGHT_STANCE) || - (current_support_state_ == biped_interfaces::msg::Phase::RIGHT_STANCE - && previous_support_state_ == biped_interfaces::msg::Phase::LEFT_STANCE)) { - foot_change_time_ = current_support_state_time_; - if (previous_support_state_ == biped_interfaces::msg::Phase::LEFT_STANCE) { - previous_support_link_ = l_sole_frame_; - current_support_link_ = r_sole_frame_; - } else { - previous_support_link_ = r_sole_frame_; - current_support_link_ = l_sole_frame_; - } + // Wait for tf to be available + bitbots_utils::wait_for_tf( + this->get_logger(), + this->get_clock(), + tf_buffer_, + {base_link_frame_, r_sole_frame_, l_sole_frame_}, + base_link_frame_); - try { - // add the transform between previous and current support link to the odometry transform. - // we wait a bit for the transform as the joint messages are maybe a bit behind - geometry_msgs::msg::TransformStamped previous_to_current_support_msg = - tf_buffer_->lookupTransform(previous_support_link_, - current_support_link_, - foot_change_time_, - rclcpp::Duration::from_nanoseconds(0.1 * 1e9)); - tf2::Transform previous_to_current_support = tf2::Transform(); - tf2::fromMsg(previous_to_current_support_msg.transform, previous_to_current_support); - // setting translation in z axis, pitch and roll to zero to stop the robot from lifting up - // scale odometry based on parameters - double x = previous_to_current_support.getOrigin().x(); - if (x > 0) { - x = x * config_.x_forward_scaling; - } else { - x = x * config_.x_backward_scaling; - } - double y = previous_to_current_support.getOrigin().y() * config_.y_scaling; - double yaw = tf2::getYaw(previous_to_current_support.getRotation()) * config_.yaw_scaling; - previous_to_current_support.setOrigin({x, y, 0}); - tf2::Quaternion q; - q.setRPY(0, 0, yaw); - previous_to_current_support.setRotation(q); - odometry_to_support_foot_ = odometry_to_support_foot_ * previous_to_current_support; - } catch (tf2::TransformException &ex) { - RCLCPP_WARN(this->get_logger(), "%s", ex.what()); - rclcpp::sleep_for(std::chrono::milliseconds(1000)); - return; - } - // update current support link for transform from foot to base link - previous_support_link_ = current_support_link_; + rclcpp::Time cycle_start_time = this->now(); + config_ = param_listener_.get_params(); - // remember the support state change but skip the double support phase - if (current_support_state_ != biped_interfaces::msg::Phase::DOUBLE_STANCE) { - previous_support_state_ = current_support_state_; - } + // check if step finished, meaning left->right or right->left support. double support is skipped + // the support foot change is published when the joint goals for the last movements are published. + // it takes some time till the joints actually reach this position, this can create some offset + // but since we skip the double support phase, we basically take the timepoint when the double support phase is + // finished. This means both feet did not move and this should create no offset. + if ((current_support_state_ == biped_interfaces::msg::Phase::LEFT_STANCE + && previous_support_state_ == biped_interfaces::msg::Phase::RIGHT_STANCE) || + (current_support_state_ == biped_interfaces::msg::Phase::RIGHT_STANCE + && previous_support_state_ == biped_interfaces::msg::Phase::LEFT_STANCE)) { + foot_change_time_ = current_support_state_time_; + if (previous_support_state_ == biped_interfaces::msg::Phase::LEFT_STANCE) { + previous_support_link_ = l_sole_frame_; + current_support_link_ = r_sole_frame_; + } else { + previous_support_link_ = r_sole_frame_; + current_support_link_ = l_sole_frame_; } - //publish odometry and if wanted transform to base_link try { - geometry_msgs::msg::TransformStamped - current_support_to_base_msg = - tf_buffer_->lookupTransform(previous_support_link_, base_link_frame_, rclcpp::Time(0, 0, RCL_ROS_TIME)); - tf2::Transform current_support_to_base; - tf2::fromMsg(current_support_to_base_msg.transform, current_support_to_base); - double x = current_support_to_base.getOrigin().x(); - if (current_odom_msg_.twist.twist.linear.x > 0) { + // add the transform between previous and current support link to the odometry transform. + // we wait a bit for the transform as the joint messages are maybe a bit behind + geometry_msgs::msg::TransformStamped previous_to_current_support_msg = + tf_buffer_->lookupTransform(previous_support_link_, + current_support_link_, + foot_change_time_, + rclcpp::Duration::from_nanoseconds(0.1 * 1e9)); + tf2::Transform previous_to_current_support = tf2::Transform(); + tf2::fromMsg(previous_to_current_support_msg.transform, previous_to_current_support); + // setting translation in z axis, pitch and roll to zero to stop the robot from lifting up + // scale odometry based on parameters + double x = previous_to_current_support.getOrigin().x(); + if (x > 0) { x = x * config_.x_forward_scaling; } else { x = x * config_.x_backward_scaling; } - double y = current_support_to_base.getOrigin().y() * config_.y_scaling; - double yaw = tf2::getYaw(current_support_to_base.getRotation()) * config_.yaw_scaling; - current_support_to_base.setOrigin({x, y, current_support_to_base.getOrigin().z()}); + double y = previous_to_current_support.getOrigin().y() * config_.y_scaling; + double yaw = tf2::getYaw(previous_to_current_support.getRotation()) * config_.yaw_scaling; + previous_to_current_support.setOrigin({x, y, 0}); tf2::Quaternion q; q.setRPY(0, 0, yaw); - current_support_to_base.setRotation(q); - - tf2::Transform odom_to_base_link = odometry_to_support_foot_ * current_support_to_base; - geometry_msgs::msg::TransformStamped odom_to_base_link_msg = geometry_msgs::msg::TransformStamped(); - odom_to_base_link_msg.transform = tf2::toMsg(odom_to_base_link); - odom_to_base_link_msg.header.stamp = current_support_to_base_msg.header.stamp; - odom_to_base_link_msg.header.frame_id = odom_frame_; - odom_to_base_link_msg.child_frame_id = base_link_frame_; - if (config_.publish_walk_odom_tf) { - RCLCPP_WARN_ONCE(this->get_logger(), "Sending Tf from walk odometry directly"); - br_->sendTransform(odom_to_base_link_msg); - } - - // odometry as message - nav_msgs::msg::Odometry odom_msg; - odom_msg.header.stamp = current_support_to_base_msg.header.stamp; - odom_msg.header.frame_id = odom_frame_; - odom_msg.child_frame_id = base_link_frame_; - odom_msg.pose.pose.position.x = odom_to_base_link_msg.transform.translation.x; - odom_msg.pose.pose.position.y = odom_to_base_link_msg.transform.translation.y; - odom_msg.pose.pose.position.z = odom_to_base_link_msg.transform.translation.z; - odom_msg.pose.pose.orientation = odom_to_base_link_msg.transform.rotation; - odom_msg.twist = current_odom_msg_.twist; - pub_odometry_->publish(odom_msg); - + previous_to_current_support.setRotation(q); + odometry_to_support_foot_ = odometry_to_support_foot_ * previous_to_current_support; } catch (tf2::TransformException &ex) { RCLCPP_WARN(this->get_logger(), "%s", ex.what()); rclcpp::sleep_for(std::chrono::milliseconds(1000)); return; } + + // update current support link for transform from foot to base link + previous_support_link_ = current_support_link_; + + // remember the support state change but skip the double support phase + if (current_support_state_ != biped_interfaces::msg::Phase::DOUBLE_STANCE) { + previous_support_state_ = current_support_state_; + } } + + //publish odometry and if wanted transform to base_link + try { + geometry_msgs::msg::TransformStamped + current_support_to_base_msg = + tf_buffer_->lookupTransform(previous_support_link_, base_link_frame_, rclcpp::Time(0, 0, RCL_ROS_TIME)); + tf2::Transform current_support_to_base; + tf2::fromMsg(current_support_to_base_msg.transform, current_support_to_base); + double x = current_support_to_base.getOrigin().x(); + if (current_odom_msg_.twist.twist.linear.x > 0) { + x = x * config_.x_forward_scaling; + } else { + x = x * config_.x_backward_scaling; + } + double y = current_support_to_base.getOrigin().y() * config_.y_scaling; + double yaw = tf2::getYaw(current_support_to_base.getRotation()) * config_.yaw_scaling; + current_support_to_base.setOrigin({x, y, current_support_to_base.getOrigin().z()}); + tf2::Quaternion q; + q.setRPY(0, 0, yaw); + current_support_to_base.setRotation(q); + + tf2::Transform odom_to_base_link = odometry_to_support_foot_ * current_support_to_base; + geometry_msgs::msg::TransformStamped odom_to_base_link_msg = geometry_msgs::msg::TransformStamped(); + odom_to_base_link_msg.transform = tf2::toMsg(odom_to_base_link); + odom_to_base_link_msg.header.stamp = current_support_to_base_msg.header.stamp; + odom_to_base_link_msg.header.frame_id = odom_frame_; + odom_to_base_link_msg.child_frame_id = base_link_frame_; + if (config_.publish_walk_odom_tf) { + RCLCPP_WARN_ONCE(this->get_logger(), "Sending Tf from walk odometry directly"); + br_->sendTransform(odom_to_base_link_msg); + } + + // odometry as message + nav_msgs::msg::Odometry odom_msg; + odom_msg.header.stamp = current_support_to_base_msg.header.stamp; + odom_msg.header.frame_id = odom_frame_; + odom_msg.child_frame_id = base_link_frame_; + odom_msg.pose.pose.position.x = odom_to_base_link_msg.transform.translation.x; + odom_msg.pose.pose.position.y = odom_to_base_link_msg.transform.translation.y; + odom_msg.pose.pose.position.z = odom_to_base_link_msg.transform.translation.z; + odom_msg.pose.pose.orientation = odom_to_base_link_msg.transform.rotation; + odom_msg.twist = current_odom_msg_.twist; + pub_odometry_->publish(odom_msg); + + } catch (tf2::TransformException &ex) { + RCLCPP_WARN(this->get_logger(), "%s", ex.what()); + rclcpp::sleep_for(std::chrono::milliseconds(1000)); + return; + } + } void MotionOdometry::supportCallback(const biped_interfaces::msg::Phase::SharedPtr msg) { @@ -205,11 +202,6 @@ void MotionOdometry::supportCallback(const biped_interfaces::msg::Phase::SharedP } } -void MotionOdometry::jointStateCb(const sensor_msgs::msg::JointState::SharedPtr msg) { - current_joint_states_ = *msg; - joint_update_time_ = msg->header.stamp; -} - void MotionOdometry::odomCallback(const nav_msgs::msg::Odometry::SharedPtr msg) { current_odom_msg_ = *msg; } @@ -221,10 +213,11 @@ int main(int argc, char **argv) { auto node = std::make_shared<bitbots_odometry::MotionOdometry>(); rclcpp::Duration timer_duration = rclcpp::Duration::from_seconds(1.0 / 200.0); - rclcpp::TimerBase::SharedPtr timer = rclcpp::create_timer(node, node->get_clock(), timer_duration, [node]() -> void {node->loop();}); rclcpp::experimental::executors::EventsExecutor exec; exec.add_node(node); + rclcpp::TimerBase::SharedPtr timer = rclcpp::create_timer(node, node->get_clock(), timer_duration, [node]() -> void {node->loop();}); + exec.spin(); rclcpp::shutdown(); } diff --git a/bitbots_odometry/src/odometry_fuser.cpp b/bitbots_odometry/src/odometry_fuser.cpp index 779b3d9c9..23a8180ce 100644 --- a/bitbots_odometry/src/odometry_fuser.cpp +++ b/bitbots_odometry/src/odometry_fuser.cpp @@ -10,7 +10,7 @@ imu (rX, rY) // TODO Doku OdometryFuser::OdometryFuser() : Node("OdometryFuser"), - tf_buffer_(std::make_unique<tf2_ros::Buffer>(this->get_clock())), + tf_buffer_(std::make_shared<tf2_ros::Buffer>(this->get_clock())), tf_listener_(std::make_shared<tf2_ros::TransformListener>(*tf_buffer_, this)), support_state_cache_(100), imu_sub_(this, "imu/data"), @@ -43,50 +43,14 @@ OdometryFuser::OdometryFuser() : Node("OdometryFuser"), fused_time_ = rclcpp::Time(0, 0, RCL_ROS_TIME); } - -/** - * @brief Waits for the transforms to be available - * @return true if the transforms are not available yet and we need to wait - */ -bool OdometryFuser::wait_for_tf() { - try { - // Frames to check - std::vector<std::string> frames = {base_link_frame_, l_sole_frame_, r_sole_frame_}; - - // Apply tf_buffer->_frameExists to all frames and check if all are available otherwise return false (functional) - if(!std::all_of(frames.begin(), frames.end(), [this](std::string frame) {return tf_buffer_->_frameExists(frame);})) { - // Wait for 1 second - rclcpp::sleep_for(std::chrono::seconds(1)); - // Return true to indicate that we need to wait - return true; - } - - // Check if we can transform from base_link to all other frames - if(!std::all_of( - frames.begin(), - frames.end(), - [this](std::string frame) { - return tf_buffer_->canTransform( - base_link_frame_, - frame, - rclcpp::Time(0), - rclcpp::Duration::from_nanoseconds(1e9)); - })){ - // Return that we need to wait - return true; - } - return false; - } - catch(const std::exception& e) - { - RCLCPP_ERROR(this->get_logger(), "Error while waiting for transforms: %s \n", e.what()); - } - // Wait for 1 second - rclcpp::sleep_for(std::chrono::seconds(1)); - return true; -} - void OdometryFuser::loop() { + bitbots_utils::wait_for_tf( + this->get_logger(), + this->get_clock(), + this->tf_buffer_, + {base_link_frame_, r_sole_frame_, l_sole_frame_}, + base_link_frame_); + // get motion_odom transform tf2::Transform motion_odometry; tf2::fromMsg(odom_data_.pose.pose, motion_odometry); @@ -283,12 +247,7 @@ int main(int argc, char **argv) { auto node = std::make_shared<OdometryFuser>(); rclcpp::experimental::executors::EventsExecutor exec; exec.add_node(node); - for(int i = 0; node->wait_for_tf() && rclcpp::ok(); i++) { - exec.spin_some(); - if (i > 0) { - RCLCPP_ERROR(node->get_logger(), "Waiting for transforms\n"); - } - } + rclcpp::Duration timer_duration = rclcpp::Duration::from_seconds(1.0 / 100.0); rclcpp::TimerBase::SharedPtr timer = rclcpp::create_timer(node, node->get_clock(), timer_duration, [node]() -> void {node->loop();}); From 7c60fb76852e786382968dd5b61d0844b8a4fb5e Mon Sep 17 00:00:00 2001 From: Florian Vahl <7vahl@informatik.uni-hamburg.de> Date: Mon, 23 Oct 2023 19:42:44 +0200 Subject: [PATCH 47/74] Fix head mover --- bitbots_head_mover/src/move_head.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bitbots_head_mover/src/move_head.cpp b/bitbots_head_mover/src/move_head.cpp index 7343baf14..374dd335e 100644 --- a/bitbots_head_mover/src/move_head.cpp +++ b/bitbots_head_mover/src/move_head.cpp @@ -384,7 +384,7 @@ class HeadMover { double delta_faster_joint, double delta_joint, double speed) { - double estimated_time = delta_fast_joint / speed; + double estimated_time = delta_faster_joint / speed; if (estimated_time != 0) { return delta_joint / estimated_time; } else { From 6ca5d6a8bac48200f7877a94b06fee13f7fa68b6 Mon Sep 17 00:00:00 2001 From: Florian Vahl <7vahl@informatik.uni-hamburg.de> Date: Mon, 23 Oct 2023 19:43:23 +0200 Subject: [PATCH 48/74] Fix possible uninit mem error --- bitbots_dynup/src/dynup_engine.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/bitbots_dynup/src/dynup_engine.cpp b/bitbots_dynup/src/dynup_engine.cpp index f0e11d8a8..920de50fa 100644 --- a/bitbots_dynup/src/dynup_engine.cpp +++ b/bitbots_dynup/src/dynup_engine.cpp @@ -677,7 +677,6 @@ void DynupEngine::setGoals(const DynupRequest &goals) { // get parameters from walking. If walking is not running, use default values // we re-request the values every time because they can be changed by dynamic reconfigure // and re-requesting them is fast enough - double foot_distance, trunk_x_final, trunk_pitch, trunk_height; std::vector<rclcpp::Parameter> walking_params; // Gat params and wait for walking to be ready walking_params = walking_param_client_->get_parameters({"engine.trunk_pitch", @@ -687,9 +686,11 @@ void DynupEngine::setGoals(const DynupRequest &goals) { std::chrono::seconds(10)); // when the walking was killed, service_is_ready is still true but the parameters come back empty - if (walking_params.empty()) { + if (walking_params.size() != 4) { RCLCPP_WARN(node_->get_logger(), "Walking is not running, using default parameters for walkready."); } else { + // Placeholders for the parameters, we assure that we have all parameters before, so we can use -1 as a placeholder + double foot_distance = -1, trunk_x_final = -1, trunk_pitch = -1, trunk_height = -1; for (auto ¶m: walking_params) { if (param.get_name() == "engine.trunk_pitch") { trunk_pitch = param.get_value<double>(); @@ -701,6 +702,7 @@ void DynupEngine::setGoals(const DynupRequest &goals) { trunk_x_final = param.get_value<double>(); } } + // walking uses a different coordinate system for the trunk trunk_height = trunk_height * std::cos(trunk_pitch); trunk_x_final = trunk_x_final - std::sin(trunk_pitch) * trunk_height; From 34133c83087eb22d2a5e4447166bc53dc08ca40d Mon Sep 17 00:00:00 2001 From: Jan Gutsche <github@jaagut.de> Date: Thu, 26 Oct 2023 21:23:51 +0200 Subject: [PATCH 49/74] hcm config: remove unused param and fix typos --- bitbots_hcm/config/hcm_wolfgang.yaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/bitbots_hcm/config/hcm_wolfgang.yaml b/bitbots_hcm/config/hcm_wolfgang.yaml index 6a63d8f6f..422a9f8f9 100644 --- a/bitbots_hcm/config/hcm_wolfgang.yaml +++ b/bitbots_hcm/config/hcm_wolfgang.yaml @@ -19,11 +19,10 @@ falling_right: "falling_right" turning_back_left: "turning_back_left" turning_back_right: "turning_back_right" - anim_package: "wolfgang_animations" # Falling stand_up_active: true # Enables the robot to stand up automatically - falling_active: true # Enables the check for falling and coresponding counter meassurements + falling_active: true # Enables the check for falling and corresponding counter measurements # Threshold tighter --> earlier reaction but more false positives, e.g. while walking # Threshold softer --> too late reaction falling_thresh_gyro_pitch: 7.0 # > gyroY From b5b1bf4e9e699358577130d1fd453ed377d8b3dc Mon Sep 17 00:00:00 2001 From: Florian Vahl <git@flova.de> Date: Fri, 27 Oct 2023 13:13:20 +0200 Subject: [PATCH 50/74] Update bitbots_hcm/bitbots_hcm/hcm_dsd/actions/wait.py Co-authored-by: Jan Gutsche <34797331+jaagut@users.noreply.github.com> --- bitbots_hcm/bitbots_hcm/hcm_dsd/actions/wait.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/wait.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/wait.py index a2defafbe..75859cba3 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/wait.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/wait.py @@ -12,7 +12,7 @@ class Wait(AbstractHCMActionElement): """ - This action does nothing. If a time is given, it will wait for that time.before it pops itself. + This action does nothing. If a time is given, it will wait for that time before it pops itself. """ def __init__(self, blackboard, dsd, parameters=None): From 4de97d3ec8a4b560b25d86a0151e63a082243c79 Mon Sep 17 00:00:00 2001 From: Florian Vahl <git@flova.de> Date: Fri, 27 Oct 2023 13:16:47 +0200 Subject: [PATCH 51/74] Update bitbots_hcm/docs/index.rst Co-authored-by: Jan Gutsche <34797331+jaagut@users.noreply.github.com> --- bitbots_hcm/docs/index.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bitbots_hcm/docs/index.rst b/bitbots_hcm/docs/index.rst index 0b9117344..ccea79bcf 100644 --- a/bitbots_hcm/docs/index.rst +++ b/bitbots_hcm/docs/index.rst @@ -73,7 +73,7 @@ What to do when it does not work -------------------------------- 1. Is `ros_control` running? Do you recieve joint states (`/joint_states`) or IMU data (`/imu/data_raw`)? -2. What is the state of the HCM (`rostopic echo /robot_state`)? The number has to be matched with the message +2. What is the state of the HCM (`ros2 topic echo /robot_state`)? The number has to be matched with the message description (`ros2 interface show bitbots_msgs/msg/RobotControlState`). 3. The visualization of the DSD is possible with the standard DSD visualization using the rqt plugin. There you can see exactly which decision is responsible for the current behavior and then you can look into the code. From 3eff13df52b882423fca8f567f3f847f24d38a3a Mon Sep 17 00:00:00 2001 From: Florian Vahl <git@flova.de> Date: Fri, 27 Oct 2023 13:17:08 +0200 Subject: [PATCH 52/74] Update bitbots_hcm/package.xml Co-authored-by: Jan Gutsche <34797331+jaagut@users.noreply.github.com> --- bitbots_hcm/package.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/bitbots_hcm/package.xml b/bitbots_hcm/package.xml index eb06dcddd..0a52aa034 100644 --- a/bitbots_hcm/package.xml +++ b/bitbots_hcm/package.xml @@ -25,7 +25,6 @@ <depend>geometry_msgs</depend> <depend>pybind11-dev</depend> <depend>python3-numpy</depend> - <depend>python3-sklearn</depend> <depend>python3-transforms3d</depend> <depend>rclpy</depend> <depend>ros2_numpy</depend> From 25665a698c9b90c9606ab9cea6d1dccf0818ce8b Mon Sep 17 00:00:00 2001 From: Florian Vahl <git@flova.de> Date: Fri, 27 Oct 2023 13:18:10 +0200 Subject: [PATCH 53/74] Update bitbots_head_mover/CMakeLists.txt Co-authored-by: Jan Gutsche <34797331+jaagut@users.noreply.github.com> --- bitbots_head_mover/CMakeLists.txt | 2 -- 1 file changed, 2 deletions(-) diff --git a/bitbots_head_mover/CMakeLists.txt b/bitbots_head_mover/CMakeLists.txt index c8916ef36..a6b08d30c 100644 --- a/bitbots_head_mover/CMakeLists.txt +++ b/bitbots_head_mover/CMakeLists.txt @@ -57,8 +57,6 @@ std_msgs tf2_geometry_msgs tf2_kdl tf2_ros - - ) install(TARGETS From 30569bedf4aba9026c537a44a57e431300045bc6 Mon Sep 17 00:00:00 2001 From: Florian Vahl <git@flova.de> Date: Fri, 27 Oct 2023 16:51:01 +0200 Subject: [PATCH 54/74] Fix typo --- bitbots_dynup/src/dynup_engine.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bitbots_dynup/src/dynup_engine.cpp b/bitbots_dynup/src/dynup_engine.cpp index 920de50fa..3f20406ca 100644 --- a/bitbots_dynup/src/dynup_engine.cpp +++ b/bitbots_dynup/src/dynup_engine.cpp @@ -678,7 +678,7 @@ void DynupEngine::setGoals(const DynupRequest &goals) { // we re-request the values every time because they can be changed by dynamic reconfigure // and re-requesting them is fast enough std::vector<rclcpp::Parameter> walking_params; - // Gat params and wait for walking to be ready + // Get params and wait for walking to be ready walking_params = walking_param_client_->get_parameters({"engine.trunk_pitch", "engine.trunk_height", "engine.foot_distance", From d4ed38be9cfcfd0e2b2a0a8d59694cf2915e8585 Mon Sep 17 00:00:00 2001 From: Florian Vahl <7vahl@informatik.uni-hamburg.de> Date: Thu, 2 Nov 2023 15:06:58 +0100 Subject: [PATCH 55/74] Fix robot type parameter --- bitbots_dynup/launch/test.launch | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/bitbots_dynup/launch/test.launch b/bitbots_dynup/launch/test.launch index d3ef04b31..3ac4513f9 100644 --- a/bitbots_dynup/launch/test.launch +++ b/bitbots_dynup/launch/test.launch @@ -3,17 +3,18 @@ <let name="tf_prefix" value="$(eval '\'$(env ROS_NAMESPACE not_defined)\' if \'$(env ROS_NAMESPACE not_defined)\' != \'not_defined\' else \'\'')"/> <arg name="sim" default="false"/> <arg name="viz" default="false"/> + <arg name="robot_type" default="wolfgang"/> <let if="$(env IS_ROBOT false)" name="taskset" value="taskset -c 3,4"/> <let unless="$(env IS_ROBOT false)" name="taskset" value=""/> <include file="$(find-pkg-share bitbots_utils)/launch/parameter_blackboard.launch" > <arg name="sim" value="$(var sim)"/> - <arg name="robot_type" value="$(var robot_type)"/> </include> <include file="$(find-pkg-share bitbots_robot_description)/launch/load_robot_description.launch" > - <arg name="sim" value="$(var sim)"/> + <arg name="sim" value="$(var sim)"/> + <arg name="robot_type" value="$(var robot_type)"/> </include> <group unless="$(var sim)"> From 1940fe6f72ab973baf2cdb867e882fd603047665 Mon Sep 17 00:00:00 2001 From: Florian Vahl <7vahl@informatik.uni-hamburg.de> Date: Thu, 2 Nov 2023 15:11:25 +0100 Subject: [PATCH 56/74] Use abc --- bitbots_hcm/bitbots_hcm/hcm_dsd/actions/state.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/state.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/state.py index e1a92b95c..ca1971897 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/state.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/state.py @@ -1,18 +1,22 @@ -from bitbots_hcm.hcm_dsd.actions import AbstractHCMActionElement +from abc import abstractmethod, ABC from bitbots_msgs.msg import RobotControlState +from bitbots_hcm.hcm_dsd.actions import AbstractHCMActionElement + -class AbstractRobotState(AbstractHCMActionElement): +class AbstractRobotState(AbstractHCMActionElement, ABC): """ Abstract class to create actions which just stay on top of the stack and set the robot state accordingly. """ + + @abstractmethod def get_state(self) -> RobotControlState: """ Returns the state which should be set. This will be implemented by the subclasses. """ - raise NotImplementedError + pass def perform(self, reevaluate=False): # Just to be sure, we do not reevaluate From 6c66df32c049239e0042535a58ad735bb7e6ea08 Mon Sep 17 00:00:00 2001 From: Florian Vahl <7vahl@informatik.uni-hamburg.de> Date: Thu, 2 Nov 2023 15:12:20 +0100 Subject: [PATCH 57/74] Still raise error --- bitbots_hcm/bitbots_hcm/hcm_dsd/actions/state.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/state.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/state.py index ca1971897..63f6eb5dd 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/state.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/state.py @@ -16,7 +16,7 @@ def get_state(self) -> RobotControlState: """ Returns the state which should be set. This will be implemented by the subclasses. """ - pass + raise NotImplementedError() def perform(self, reevaluate=False): # Just to be sure, we do not reevaluate From a7298a29b575ed15611c71c31017081e0e5475ba Mon Sep 17 00:00:00 2001 From: Florian Vahl <7vahl@informatik.uni-hamburg.de> Date: Thu, 2 Nov 2023 15:14:01 +0100 Subject: [PATCH 58/74] Remove old ref to head_capsule --- bitbots_head_mover/CMakeLists.txt | 32 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/bitbots_head_mover/CMakeLists.txt b/bitbots_head_mover/CMakeLists.txt index a6b08d30c..e4bf11c54 100644 --- a/bitbots_head_mover/CMakeLists.txt +++ b/bitbots_head_mover/CMakeLists.txt @@ -41,23 +41,21 @@ target_link_libraries(move_head ament_target_dependencies( move_head -#head_capsule -backward_ros -bio_ik -bio_ik_msgs -bitbots_msgs -generate_parameter_library -moveit_core -moveit_msgs -moveit_ros_planning -moveit_ros_planning_interface -rclcpp -sensor_msgs -std_msgs -tf2_geometry_msgs -tf2_kdl -tf2_ros -) + backward_ros + bio_ik + bio_ik_msgs + bitbots_msgs + generate_parameter_library + moveit_core + moveit_msgs + moveit_ros_planning + moveit_ros_planning_interface + rclcpp + sensor_msgs + std_msgs + tf2_geometry_msgs + tf2_kdl + tf2_ros) install(TARGETS move_head From 54ecb046d6f4caf75fcbbd1396402a6e80111bc2 Mon Sep 17 00:00:00 2001 From: Florian Vahl <7vahl@informatik.uni-hamburg.de> Date: Thu, 2 Nov 2023 15:18:44 +0100 Subject: [PATCH 59/74] Remove unused param --- bitbots_head_mover/launch/head_mover_standalone.launch | 2 -- bitbots_head_mover/launch/test.launch | 9 +++------ 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/bitbots_head_mover/launch/head_mover_standalone.launch b/bitbots_head_mover/launch/head_mover_standalone.launch index 10e847597..dfa7fc650 100644 --- a/bitbots_head_mover/launch/head_mover_standalone.launch +++ b/bitbots_head_mover/launch/head_mover_standalone.launch @@ -1,6 +1,5 @@ <?xml version="1.0"?> <launch> - <arg name="depends_only" default="false" /> <arg name="sim" default="false" /> <include file="$(find-pkg-share bitbots_utils)/launch/parameter_blackboard.launch"> @@ -12,7 +11,6 @@ </include> <include file="$(find-pkg-share bitbots_head_mover)/launch/head_mover.launch"> - <arg name="depends_only" value="$(var depends_only)"/> <param name="use_sim_time" value="$(var sim)" /> </include> diff --git a/bitbots_head_mover/launch/test.launch b/bitbots_head_mover/launch/test.launch index f6b81bad9..debef203f 100644 --- a/bitbots_head_mover/launch/test.launch +++ b/bitbots_head_mover/launch/test.launch @@ -1,7 +1,6 @@ <launch> <arg name="sim" default="false"/> <arg name="viz" default="false"/> - <arg name="depends_only" default="false" /> <arg name="tf_prefix" default=""/> <group unless="$(var sim)"> @@ -53,9 +52,7 @@ </include> </group> - <group unless="$(var depends_only)"> - <include file="$(find-pkg-share bitbots_head_mover)/launch/head_mover.launch" > - <arg name="sim" value="$(var sim)"/> - </include> - </group> + <include file="$(find-pkg-share bitbots_head_mover)/launch/head_mover.launch" > + <arg name="sim" value="$(var sim)"/> + </include> </launch> From 4455e2ce6136f3f6812597f300c4f835df548a35 Mon Sep 17 00:00:00 2001 From: Florian Vahl <7vahl@informatik.uni-hamburg.de> Date: Thu, 2 Nov 2023 15:20:39 +0100 Subject: [PATCH 60/74] Fix sim param --- bitbots_head_mover/launch/head_mover_standalone.launch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bitbots_head_mover/launch/head_mover_standalone.launch b/bitbots_head_mover/launch/head_mover_standalone.launch index dfa7fc650..912732901 100644 --- a/bitbots_head_mover/launch/head_mover_standalone.launch +++ b/bitbots_head_mover/launch/head_mover_standalone.launch @@ -11,7 +11,7 @@ </include> <include file="$(find-pkg-share bitbots_head_mover)/launch/head_mover.launch"> - <param name="use_sim_time" value="$(var sim)" /> + <arg name="sim" value="$(var sim)"/> </include> </launch> From 3ad616d7b1b75fdb0528bb622140971dc075b966 Mon Sep 17 00:00:00 2001 From: Florian Vahl <7vahl@informatik.uni-hamburg.de> Date: Thu, 2 Nov 2023 15:22:22 +0100 Subject: [PATCH 61/74] Remove old interactive markers --- bitbots_head_mover/launch/test.launch | 2 -- 1 file changed, 2 deletions(-) diff --git a/bitbots_head_mover/launch/test.launch b/bitbots_head_mover/launch/test.launch index debef203f..fcdd3a8ea 100644 --- a/bitbots_head_mover/launch/test.launch +++ b/bitbots_head_mover/launch/test.launch @@ -37,8 +37,6 @@ <node pkg="bitbots_utils" exec="motor_goals_viz_helper.py" args="--head"/> <!-- fake IMU needed for odometry--> <node pkg="bitbots_utils" exec="dummy_imu.py"/> - <!-- add some visualization tools --> - <include file="$(find-pkg-share humanoid_league_interactive_marker)/launch/interactive_marker.launch" /> <!-- create fake tf from map to robot --> <node pkg="tf2_ros" exec="static_transform_publisher" name="static_map2odom_tf" args="--x -0.0 --y -0.0 --z 0.0 --qx 0.0 --qy 0.0 --qz 0.0 --qw 1.0 --frame-id map --child-frame-id odom" /> </group> From daf4d38086d1495ad0eb02038504dba2122884ab Mon Sep 17 00:00:00 2001 From: Florian Vahl <7vahl@informatik.uni-hamburg.de> Date: Thu, 2 Nov 2023 15:33:00 +0100 Subject: [PATCH 62/74] Fix old transformer call --- bitbots_head_mover/launch/test.launch | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/bitbots_head_mover/launch/test.launch b/bitbots_head_mover/launch/test.launch index fcdd3a8ea..ab05df59a 100644 --- a/bitbots_head_mover/launch/test.launch +++ b/bitbots_head_mover/launch/test.launch @@ -42,10 +42,13 @@ </group> <group unless="$(var viz)"> - <include file="$(find-pkg-share bitbots_vision)/launch/vision_startup.launch" > - <arg name="sim" value="$(var sim)"/> + <!-- launch vision --> + <include file="$(find-pkg-share bitbots_bringup)/launch/vision.launch"> + <arg name="sim" value="$(var sim)" /> </include> - <include file="$(find-pkg-share soccer_ipm)/launch/transformer.launch" > + + <!-- launch inverse perspective mapping (ipm) --> + <include file="$(find-pkg-share bitbots_ipm)/launch/ipm.launch"> <arg name="sim" value="$(var sim)"/> </include> </group> From 6976f0804efbdd16ed30e99b62afb3b3984d7aa7 Mon Sep 17 00:00:00 2001 From: Florian Vahl <7vahl@informatik.uni-hamburg.de> Date: Thu, 2 Nov 2023 19:46:39 +0100 Subject: [PATCH 63/74] Remove jenkinsfile --- Jenkinsfile | 9 --------- 1 file changed, 9 deletions(-) delete mode 100644 Jenkinsfile diff --git a/Jenkinsfile b/Jenkinsfile deleted file mode 100644 index e9431714e..000000000 --- a/Jenkinsfile +++ /dev/null @@ -1,9 +0,0 @@ -@Library('bitbots_jenkins_library') import de.bitbots.jenkins.*; - -defineProperties() - -def pipeline = new BitbotsPipeline(this, env, currentBuild, scm) -pipeline.configurePipelineForPackage(new PackagePipelineSettings(new PackageDefinition("bitbots_moveit_bindings"))) -pipeline.configurePipelineForPackage(new PackagePipelineSettings(new PackageDefinition("bitbots_odometry"))) -pipeline.configurePipelineForPackage(new PackagePipelineSettings(new PackageDefinition("bitbots_splines"))) -pipeline.execute() From 34cda8fbc4c14603d78f92ea2c72369062667a32 Mon Sep 17 00:00:00 2001 From: Florian Vahl <git@flova.de> Date: Sun, 5 Nov 2023 14:29:49 +0100 Subject: [PATCH 64/74] Update bitbots_animation_server/bitbots_animation_server/animation_node.py Co-authored-by: Jan Gutsche <34797331+jaagut@users.noreply.github.com> --- .../bitbots_animation_server/animation_node.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bitbots_animation_server/bitbots_animation_server/animation_node.py b/bitbots_animation_server/bitbots_animation_server/animation_node.py index ccd0f8a3f..69caa5d9f 100755 --- a/bitbots_animation_server/bitbots_animation_server/animation_node.py +++ b/bitbots_animation_server/bitbots_animation_server/animation_node.py @@ -83,7 +83,7 @@ def execute_cb(self, goal: ServerGoalHandle): num_tries = 0 while rclpy.ok() and self.hcm_state != 0 and num_tries < 10: num_tries += 1 - self.get_logger().info("HCM not controllable. Waiting... (try " + str(num_tries) + ")") + self.get_logger().info(f"HCM not controllable. Waiting... (try {num_tries})") self.get_clock().sleep_until(self.get_clock().now() + Duration(seconds=0.1)) if self.hcm_state != 0: From 35e3f1f21ccfb0faa1d027467fae91f290cefd20 Mon Sep 17 00:00:00 2001 From: Florian Vahl <git@flova.de> Date: Sun, 5 Nov 2023 14:31:05 +0100 Subject: [PATCH 65/74] Update bitbots_animation_server/bitbots_animation_server/spline_animator.py Co-authored-by: Jan Gutsche <34797331+jaagut@users.noreply.github.com> --- .../bitbots_animation_server/spline_animator.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bitbots_animation_server/bitbots_animation_server/spline_animator.py b/bitbots_animation_server/bitbots_animation_server/spline_animator.py index 63de5edb8..fada74daa 100644 --- a/bitbots_animation_server/bitbots_animation_server/spline_animator.py +++ b/bitbots_animation_server/bitbots_animation_server/spline_animator.py @@ -1,6 +1,6 @@ import math -from rclpy.impl.rcutils_logger import RcutilsLogger as Logger# +from rclpy.impl.rcutils_logger import RcutilsLogger as Logger from rclpy.clock import Clock from sensor_msgs.msg import JointState From 31fd89ac04811ca08234c3924c785a97f6993b82 Mon Sep 17 00:00:00 2001 From: Florian Vahl <git@flova.de> Date: Sun, 5 Nov 2023 14:34:12 +0100 Subject: [PATCH 66/74] Update bitbots_hcm/bitbots_hcm/hcm_dsd/actions/play_animation.py Co-authored-by: Jan Gutsche <34797331+jaagut@users.noreply.github.com> --- bitbots_hcm/bitbots_hcm/hcm_dsd/actions/play_animation.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/play_animation.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/play_animation.py index ce5a3e2d9..b6022f5a1 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/play_animation.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/play_animation.py @@ -112,7 +112,7 @@ def chose_animation(self): class PlayAnimationTurningBackLeft(AbstractPlayAnimation): def chose_animation(self): - self.blackboard.node.get_logger().info("TURNING LYING ON THE LEFT SIDE AND TURNING BACK TO GET UP") + self.blackboard.node.get_logger().info("LYING ON THE LEFT SIDE AND TURNING TO THE BACK TO GET UP") return self.blackboard.animation_name_turning_back_left class PlayAnimationTurningBackRight(AbstractPlayAnimation): From 9591c10cdfeeda8b8d6176ac800df67f85aa2b09 Mon Sep 17 00:00:00 2001 From: Florian Vahl <git@flova.de> Date: Sun, 5 Nov 2023 14:34:49 +0100 Subject: [PATCH 67/74] Update bitbots_hcm/bitbots_hcm/hcm_dsd/actions/play_animation.py Co-authored-by: Jan Gutsche <34797331+jaagut@users.noreply.github.com> --- bitbots_hcm/bitbots_hcm/hcm_dsd/actions/play_animation.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/play_animation.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/play_animation.py index b6022f5a1..fb7246999 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/play_animation.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/play_animation.py @@ -117,7 +117,7 @@ def chose_animation(self): class PlayAnimationTurningBackRight(AbstractPlayAnimation): def chose_animation(self): - self.blackboard.node.get_logger().info("TURNING LYING ON THE RIGHT SIDE AND TURNING BACK TO GET UP") + self.blackboard.node.get_logger().info("LYING ON THE RIGHT SIDE AND TURNING TO THE BACK TO GET UP") return self.blackboard.animation_name_turning_back_right From ace9136d67a73f325a3444748c222ffab100ff80 Mon Sep 17 00:00:00 2001 From: Florian Vahl <git@flova.de> Date: Sun, 5 Nov 2023 14:42:59 +0100 Subject: [PATCH 68/74] Update bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/falling.py Co-authored-by: Jan Gutsche <34797331+jaagut@users.noreply.github.com> --- bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/falling.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/falling.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/falling.py index 80c4d3b96..c6e1e64f1 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/falling.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/falling.py @@ -38,7 +38,7 @@ def __init__(self, blackboard, dsd, parameters=None): def perform(self, reevaluate=False): - """Checks if the robot is currently falling and in which direction. """ + """Checks if the robot is currently falling and in which direction.""" # Check if detection is active if not self.blackboard.falling_detection_active: return "NOT_FALLING" From f34864c71e07e405c827a52dacb69a71215f63be Mon Sep 17 00:00:00 2001 From: Florian Vahl <7vahl@informatik.uni-hamburg.de> Date: Sun, 12 Nov 2023 17:25:38 +0100 Subject: [PATCH 69/74] Apply feedback --- .../hcm_dsd/actions/cancel_goals.py | 1 - .../hcm_dsd/actions/play_animation.py | 5 +- .../hcm_dsd/decisions/animation.py | 2 +- .../hcm_dsd/decisions/check_hardware.py | 95 +++++++++---------- .../bitbots_hcm/hcm_dsd/decisions/falling.py | 2 - .../bitbots_hcm/hcm_dsd/decisions/kicking.py | 4 +- .../bitbots_hcm/hcm_dsd/decisions/pickup.py | 2 - .../bitbots_hcm/hcm_dsd/decisions/startup.py | 4 - .../bitbots_hcm/hcm_dsd/decisions/walking.py | 2 - bitbots_hcm/bitbots_hcm/hcm_dsd/hcm.dsd | 11 +-- .../bitbots_hcm/hcm_dsd/hcm_blackboard.py | 18 ++-- .../bitbots_hcm/humanoid_control_module.py | 9 +- bitbots_hcm/src/hcm.cpp | 1 - 13 files changed, 69 insertions(+), 87 deletions(-) diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/cancel_goals.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/cancel_goals.py index f8eb177e5..d01ce52ad 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/cancel_goals.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/cancel_goals.py @@ -23,4 +23,3 @@ def perform(self): self.blackboard.cancel_path_planning() self.pop() - diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/play_animation.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/play_animation.py index ce5a3e2d9..d74950c55 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/play_animation.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/actions/play_animation.py @@ -1,3 +1,5 @@ +from abc import abstractmethod, ABC + import rclpy from action_msgs.msg import GoalStatus from bitbots_hcm.hcm_dsd.actions import AbstractHCMActionElement @@ -5,7 +7,7 @@ from bitbots_msgs.action import Dynup, PlayAnimation -class AbstractPlayAnimation(AbstractHCMActionElement): +class AbstractPlayAnimation(AbstractHCMActionElement, ABC): """ Abstract class to create actions for playing animations """ @@ -38,6 +40,7 @@ def perform(self, reevaluate=False): # we are finished playing this animation return self.pop() + @abstractmethod def chose_animation(self): # this is what has to be implemented returning the animation to play raise NotImplementedError diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/animation.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/animation.py index 6915e0d09..05690041c 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/animation.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/animation.py @@ -1,7 +1,7 @@ from bitbots_hcm.hcm_dsd.decisions import AbstractHCMDecisionElement -class Record(AbstractHCMDecisionElement): +class RecordAnimation(AbstractHCMDecisionElement): """ Decides if the robot is currently recording animations """ diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/check_hardware.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/check_hardware.py index fcbf40687..3a6d934ce 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/check_hardware.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/check_hardware.py @@ -1,5 +1,3 @@ -from rclpy.time import Time - from bitbots_hcm.hcm_dsd.decisions import AbstractHCMDecisionElement from bitbots_msgs.msg import RobotControlState @@ -13,50 +11,44 @@ class CheckMotors(AbstractHCMDecisionElement): def __init__(self, blackboard, dsd, parameters=None): super().__init__(blackboard, dsd, parameters) - self.last_different_msg_time = Time(seconds=int(0), nanoseconds=0 % 1 * 1e9) self.had_problem = False def perform(self, reevaluate=False): self.clear_debug_data() - if self.blackboard.visualization_active: - # we will have no problems with hardware in visualization - return "OKAY" - # we check if the values are actually changing, since the joint_state controller will publish the same message + # we check if the joint state values are actually changing, since the joint_state controller will publish the same message # even if there is no connection anymore. But we don't want to go directly to hardware error if we just # have a small break, since this can happen often due to loose cabling if self.blackboard.previous_joint_state is not None and self.blackboard.current_joint_state is not None \ and (self.blackboard.previous_joint_state.effort != self.blackboard.current_joint_state.effort or self.blackboard.previous_joint_state.position != self.blackboard.current_joint_state.position) \ and not self.blackboard.servo_diag_error: - self.last_different_msg_time = self.blackboard.node.get_clock().now() + self.blackboard.last_different_joint_state_time = self.blackboard.node.get_clock().now() + + if self.blackboard.visualization_active: + # we will have no problems with hardware in visualization + return "OKAY" if self.blackboard.simulation_active: - # Some simulators will give exact same joint messages which look like errors, so ignore this case - if self.blackboard.last_motor_update_time != Time(seconds=int(0), nanoseconds=0 % 1 * 1e9): - return "OKAY" - else: + # Some simulators will give exact same joint messages could look like errors, + # as the real world ros controller will always publish the same message if there is no connection + # so we will just the check if the message is changing in simulation + if self.blackboard.current_joint_state is None: return "MOTORS_NOT_STARTED" - else: - if self.blackboard.servo_overload: - return "OVERLOAD" - - # check if we want to turn the motors off after not using them for a longer time - if self.blackboard.last_motor_goal_time is not None \ - and self.blackboard.node.get_clock().now().nanoseconds / 1e9 - self.blackboard.last_motor_goal_time.nanoseconds / 1e9 \ - > self.blackboard.motor_off_time: - self.blackboard.node.get_logger().warn("Didn't recieve goals for " + str( - self.blackboard.motor_off_time) + " seconds. Will shut down the motors and wait for commands.", throttle_duration_sec=5) - self.publish_debug_data("Time since last motor goals", - self.blackboard.node.get_clock().now().nanoseconds / 1e9 - self.blackboard.last_motor_goal_time.nanoseconds / 1e9) - # we do an action sequence to turn off the motors and stay in motor off - return "TURN_OFF" - - # see if we get no messages or always the exact same - if self.blackboard.node.get_clock().now().nanoseconds / 1e9 - self.last_different_msg_time.nanoseconds / 1e9 > self.blackboard.motor_timeout_duration: + else: + return "OKAY" + + if self.blackboard.servo_overload: + return "OVERLOAD" + + # Check if we get no messages or always the exact same + if self.blackboard.last_different_joint_state_time is None or self.blackboard.node.get_clock().now().nanoseconds - \ + self.blackboard.last_different_joint_state_time.nanoseconds > self.blackboard.motor_timeout_duration * 1e9: + # Check if the motors have power if self.blackboard.is_power_on: + # If we are currently in startup phase, we will wait a bit before we complain if (self.blackboard.current_state == RobotControlState.STARTUP and - self.blackboard.node.get_clock().now().nanoseconds / 1e9 - self.blackboard.start_time.nanoseconds / 1e9 < 10): + self.blackboard.node.get_clock().now().nanoseconds - self.blackboard.start_time.nanoseconds < 10 * 1e9): # we are still in startup phase, just wait and dont complain return "MOTORS_NOT_STARTED" else: @@ -88,8 +80,6 @@ class CheckIMU(AbstractHCMDecisionElement): def __init__(self, blackboard, dsd, parameters=None): super().__init__(blackboard, dsd, parameters) - self.last_msg = None - self.last_different_msg_time = Time(seconds=int(0), nanoseconds=0 % 1 * 1e9) self.had_problem = False def perform(self, reevaluate=False): @@ -98,22 +88,22 @@ def perform(self, reevaluate=False): return "OKAY" # we will get always the same message if there is no connection, so check if it differs - if self.last_msg is not None and self.blackboard.imu_msg is not None \ - and not self.last_msg.orientation == self.blackboard.imu_msg.orientation \ - and not self.blackboard.imu_diag_error: - self.last_different_msg_time = self.blackboard.node.get_clock().now() - self.last_msg = self.blackboard.imu_msg + if self.blackboard.previous_imu_msg is not None and self.blackboard.imu_msg is not None \ + and not self.blackboard.previous_imu_msg.orientation == self.blackboard.imu_msg.orientation \ + and not self.blackboard.imu_diag_error: + self.blackboard.last_different_imu_state_time = self.blackboard.node.get_clock().now() if self.blackboard.simulation_active: # Some simulators will give exact same IMU messages which look like errors, so ignore this case - if self.last_msg: - return "OKAY" - else: + if self.blackboard.imu_msg is None: return "IMU_NOT_STARTED" + else: + return "OKAY" - if self.blackboard.node.get_clock().now().nanoseconds / 1e9 - self.last_different_msg_time.nanoseconds / 1e9 > self.blackboard.imu_timeout_duration: - if self.blackboard.current_state == RobotControlState.STARTUP and self.blackboard.node.get_clock().now().nanoseconds / 1e9 - \ - self.blackboard.start_time.nanoseconds / 1e9 < 10: + if self.blackboard.previous_imu_msg is None or (self.blackboard.node.get_clock().now().nanoseconds - \ + self.blackboard.last_different_imu_state_time.nanoseconds > self.blackboard.imu_timeout_duration * 1e9): + if self.blackboard.current_state == RobotControlState.STARTUP and self.blackboard.node.get_clock().now().nanoseconds - \ + self.blackboard.start_time.nanoseconds < 10 * 1e9: # wait for the IMU to start return "IMU_NOT_STARTED" else: @@ -138,8 +128,6 @@ class CheckPressureSensor(AbstractHCMDecisionElement): def __init__(self, blackboard, dsd, parameters=None): super().__init__(blackboard, dsd, parameters) - self.last_pressure_values = None - self.last_different_msg_time = Time(seconds=int(0), nanoseconds=0 % 1 * 1e9) self.had_problem = False def perform(self, reevaluate=False): @@ -150,12 +138,17 @@ def perform(self, reevaluate=False): if not self.blackboard.pressure_sensors_installed: # no pressure sensors installed, no check necessary return "OKAY" - if not self.blackboard.pressure_diag_error: - self.last_different_msg_time = self.blackboard.node.get_clock().now() - - if self.blackboard.node.get_clock().now().nanoseconds / 1e9 - self.last_different_msg_time.nanoseconds / 1e9 > 0.1: - if self.blackboard.current_state == RobotControlState.STARTUP and self.blackboard.node.get_clock().now().nanoseconds / 1e9 - \ - self.blackboard.start_time.nanoseconds / 1e9 < 10: + + # Check if we get no messages due to an error or always the exact same one (no connection) + if not self.blackboard.pressure_diag_error and not self.blackboard.previous_pressures == self.blackboard.pressures: + self.blackboard.last_different_pressure_state_time = self.blackboard.node.get_clock().now() + + # Check if we get no messages for a while + if self.blackboard.last_different_pressure_state_time is None or self.blackboard.node.get_clock().now().nanoseconds - \ + self.blackboard.last_different_pressure_state_time.nanoseconds > 0.1 * 1e9: + # Check if we are in the startup phase (not too long tho) + if self.blackboard.current_state == RobotControlState.STARTUP and self.blackboard.node.get_clock().now().nanoseconds - \ + self.blackboard.start_time.nanoseconds < 10 * 1e9: # wait for the pressure sensors to start return "PRESSURE_NOT_STARTED" else: diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/falling.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/falling.py index 80c4d3b96..86aae663e 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/falling.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/falling.py @@ -6,8 +6,6 @@ from bitbots_utils.transforms import quat2fused from rclpy.duration import Duration -from bitbots_msgs.msg import RobotControlState - class FallDirection(Enum): STABLE = 0 diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/kicking.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/kicking.py index f9e5e935a..b1000255a 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/kicking.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/kicking.py @@ -1,7 +1,5 @@ from bitbots_hcm.hcm_dsd.decisions import AbstractHCMDecisionElement -from bitbots_msgs.msg import RobotControlState - class RecentKickGoals(AbstractHCMDecisionElement): """ @@ -21,7 +19,7 @@ def perform(self, reevaluate=False): # If the time delta is smaller enough, we are still kicking if time_delta < 0.1: - # we are walking and can stay like this + # we are kicking and can stay like this return "KICKING" else: return "NOT_KICKING" diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/pickup.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/pickup.py index 1ac374a4a..8d3d690a1 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/pickup.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/pickup.py @@ -1,8 +1,6 @@ from bitbots_hcm.hcm_dsd.decisions import AbstractHCMDecisionElement from humanoid_league_speaker.speaker import speak -from bitbots_msgs.msg import RobotControlState - class PickedUp(AbstractHCMDecisionElement): """ diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/startup.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/startup.py index 913ce9dc2..51f3de903 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/startup.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/startup.py @@ -1,9 +1,5 @@ -import math - from bitbots_hcm.hcm_dsd.decisions import AbstractHCMDecisionElement -from bitbots_msgs.msg import RobotControlState - class StartHCM(AbstractHCMDecisionElement): """ diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/walking.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/walking.py index de016e561..d406e3a04 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/walking.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/walking.py @@ -1,7 +1,5 @@ from bitbots_hcm.hcm_dsd.decisions import AbstractHCMDecisionElement -from bitbots_msgs.msg import RobotControlState - class RecentWalkingGoals(AbstractHCMDecisionElement): """ diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/hcm.dsd b/bitbots_hcm/bitbots_hcm/hcm_dsd/hcm.dsd index b511babe3..f6ea5b920 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/hcm.dsd +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/hcm.dsd @@ -1,16 +1,15 @@ -->HCM $StartHCM - START_UP --> @RobotStateStartup, @Wait + time:0.1 + r:false, @PlayAnimationDynup + direction:walkready + r:false + START_UP --> @RobotStateStartup, @Wait + time:0.1 + r:false, @PlayAnimationDynup + direction:walkready, @Wait RUNNING --> $Stop - STOPPED --> @CancelGoals, @StopWalking, @PlayAnimationDynup + direction:walkready + r:false, @Wait - FREE -->$Record + STOPPED --> @CancelGoals, @StopWalking, @PlayAnimationDynup + direction:walkready, @Wait + FREE -->$RecordAnimation RECORD_ACTIVE --> @RobotStateRecord, @Wait FREE --> $CheckMotors MOTORS_NOT_STARTED --> @RobotStateStartup, @WaitForMotorStartup - OVERLOAD --> @RobotStateMotorOff, @CancelGoals, @StopWalking, @PlayAnimationDynup + direction:descend, @TurnMotorsOff, @Wait + OVERLOAD --> @RobotStateMotorOff, @CancelGoals, @StopWalking, @PlayAnimationFallingFront, @TurnMotorsOff, @Wait PROBLEM --> @RobotStateHardwareProblem, @WaitForMotors - TURN_OFF --> @RobotStateMotorOff, @CancelGoals, @StopWalking, @PlayAnimationDynup + direction:descend, @TurnMotorsOff, @Wait - TURN_ON --> @TurnMotorsOn, @PlayAnimationDynup + direction:rise + TURN_ON --> @TurnMotorsOn, @PlayAnimationDynup + direction:walkready, @Wait OKAY --> $CheckIMU IMU_NOT_STARTED --> @RobotStateStartup, @WaitForIMUStartup PROBLEM --> @RobotStateHardwareProblem, @WaitForIMU diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/hcm_blackboard.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/hcm_blackboard.py index b2382a837..19631f95a 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/hcm_blackboard.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/hcm_blackboard.py @@ -32,7 +32,7 @@ def __init__(self, node: Node): # Get parameters self.simulation_active: bool = self.node.get_parameter('simulation_active').value self.visualization_active: bool = self.node.get_parameter('visualization_active').value - self.pickup_accel_threshold: float = 1000.0 # TODO: make this a parameter + self.pickup_accel_threshold: float = self.node.get_parameter('pick_up_accel_threshold').value self.pressure_sensors_installed: bool = self.node.get_parameter('pressure_sensors_installed').value # Create services @@ -58,10 +58,6 @@ def __init__(self, node: Node): self.not_much_smoothed_gyro = numpy.array([0, 0, 0]) self.quaternion = numpy.array([0, 0, 0, 1.0]) - # Pressure sensors - # Initialize values high to prevent wrongly thinking the robot is picked up during start or in simulation - self.pressures: List[float] = [100.0] * 8 - # Animation # Animation states self.animation_requested: bool = False @@ -78,11 +74,9 @@ def __init__(self, node: Node): self.animation_name_turning_back_right: str = self.node.get_parameter("animations.turning_back_right").value # Motor State - # Initialize with current time, or motors will be turned off on start - self.last_motor_goal_time: Time = self.node.get_clock().now() - self.last_motor_update_time = Time() self.current_joint_state: Optional[JointState] = None self.previous_joint_state: Optional[JointState] = None + self.last_different_joint_state_time: Optional[Time] = None self.is_power_on: bool = False # Motor Parameters @@ -104,6 +98,14 @@ def __init__(self, node: Node): # IMU state self.imu_msg: Optional[Imu] = None + self.previous_imu_msg: Optional[Imu] = None + self.last_different_imu_state_time: Optional[Time] = None + + # Pressure sensors + # Initialize values high to prevent wrongly thinking the robot is picked up during start or in simulation + self.pressures: List[float] = [100.0] * 8 + self.previous_pressures: List[float] = self.pressures.copy() + self.last_different_pressure_state_time: Optional[Time] = None # Diagnostics state self.servo_diag_error: bool = False diff --git a/bitbots_hcm/bitbots_hcm/humanoid_control_module.py b/bitbots_hcm/bitbots_hcm/humanoid_control_module.py index e80477341..c13d17462 100755 --- a/bitbots_hcm/bitbots_hcm/humanoid_control_module.py +++ b/bitbots_hcm/bitbots_hcm/humanoid_control_module.py @@ -31,8 +31,6 @@ def __init__(self, use_sim_time, simulation_active, visualization_active): rclpy.init(args=None) node_name = "hcm_py" - self.simulation_active = simulation_active - # Load parameters from yaml file because this is a hacky cpp python hybrid node for performance reasons parameter_msgs: list(ParameterMsg) = get_parameters_from_ros_yaml( node_name, f"{get_package_share_directory('bitbots_hcm')}/config/hcm_wolfgang.yaml", use_wildcard=True) @@ -160,15 +158,13 @@ def set_last_walking_goal_time(self, time_msg_serialized: bytes): def set_last_kick_goal_time(self, time_msg_serialized: bytes): self.blackboard.last_kick_goal_time = Time.from_msg(deserialize_message(time_msg_serialized, TimeMsg)) - def set_last_motor_update_time(self, time_msg_serialized: bytes): - self.blackboard.last_motor_update_time = deserialize_message(time_msg_serialized, TimeMsg) - def set_current_joint_state(self, joint_state_msg_serialized: bytes): self.blackboard.previous_joint_state = self.blackboard.current_joint_state self.blackboard.current_joint_state = deserialize_message(joint_state_msg_serialized, JointState) def set_pressure_left(self, pressure_msg_serialized: bytes): msg: FootPressure = deserialize_message(pressure_msg_serialized, FootPressure) + self.blackboard.previous_pressures = self.blackboard.pressures self.blackboard.pressures[0] = msg.left_front self.blackboard.pressures[1] = msg.left_back self.blackboard.pressures[2] = msg.right_front @@ -176,12 +172,15 @@ def set_pressure_left(self, pressure_msg_serialized: bytes): def set_pressure_right(self, pressure_msg_serialized: bytes): msg: FootPressure = deserialize_message(pressure_msg_serialized, FootPressure) + self.blackboard.previous_pressures = self.blackboard.pressures self.blackboard.pressures[4] = msg.left_front self.blackboard.pressures[5] = msg.left_back self.blackboard.pressures[6] = msg.right_front self.blackboard.pressures[7] = msg.right_back def set_imu(self, imu_msg_serialized: bytes): + self.blackboard.previous_imu_msg = self.blackboard.imu_msg + msg: Imu = deserialize_message(imu_msg_serialized, Imu) self.blackboard.accel = numpify(msg.linear_acceleration) diff --git a/bitbots_hcm/src/hcm.cpp b/bitbots_hcm/src/hcm.cpp index 93894bf30..63ebe3548 100644 --- a/bitbots_hcm/src/hcm.cpp +++ b/bitbots_hcm/src/hcm.cpp @@ -232,7 +232,6 @@ class HCM_CPP : public rclcpp::Node { hcm_py_.attr("set_imu")(ros2_python_extension::toPython(current_imu_)); hcm_py_.attr("set_pressure_left")(ros2_python_extension::toPython<bitbots_msgs::msg::FootPressure>(current_pressure_left_)); hcm_py_.attr("set_pressure_right")(ros2_python_extension::toPython<bitbots_msgs::msg::FootPressure>(current_pressure_right_)); - hcm_py_.attr("set_last_motor_update_time")(ros2_python_extension::toPython<builtin_interfaces::msg::Time>(current_joint_state_.header.stamp)); hcm_py_.attr("set_current_joint_state")(ros2_python_extension::toPython<sensor_msgs::msg::JointState>(current_joint_state_)); hcm_py_.attr("set_last_walking_goal_time")(ros2_python_extension::toPython<builtin_interfaces::msg::Time>(last_walking_time_)); hcm_py_.attr("set_last_kick_goal_time")(ros2_python_extension::toPython<builtin_interfaces::msg::Time>(last_kick_time_)); From a6c218da8f79e089f7182b97f3fdb64049196144 Mon Sep 17 00:00:00 2001 From: Florian Vahl <7vahl@informatik.uni-hamburg.de> Date: Sun, 12 Nov 2023 20:05:13 +0100 Subject: [PATCH 70/74] Fix hcm dsd location --- bitbots_hcm/CMakeLists.txt | 6 ++++-- bitbots_hcm/bitbots_hcm/humanoid_control_module.py | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/bitbots_hcm/CMakeLists.txt b/bitbots_hcm/CMakeLists.txt index 401ad901b..6d732886d 100644 --- a/bitbots_hcm/CMakeLists.txt +++ b/bitbots_hcm/CMakeLists.txt @@ -53,9 +53,11 @@ install(DIRECTORY config install(DIRECTORY scripts/ USE_SOURCE_PERMISSIONS DESTINATION lib/${PROJECT_NAME}) -install(DIRECTORY bitbots_hcm/hcm_dsd/actions DESTINATION share/${PROJECT_NAME} FILES_MATCHING PATTERN "*.py") +install(DIRECTORY bitbots_hcm/hcm_dsd/actions DESTINATION share/${PROJECT_NAME}/hcm_dsd FILES_MATCHING PATTERN "*.py") -install(DIRECTORY bitbots_hcm/hcm_dsd/decisions DESTINATION share/${PROJECT_NAME} FILES_MATCHING PATTERN "*.py") +install(DIRECTORY bitbots_hcm/hcm_dsd/decisions DESTINATION share/${PROJECT_NAME}/hcm_dsd FILES_MATCHING PATTERN "*.py") + +install(FILES bitbots_hcm/hcm_dsd/hcm.dsd DESTINATION share/${PROJECT_NAME}/hcm_dsd) install(FILES bitbots_hcm/hcm_dsd/hcm.dsd DESTINATION share/${PROJECT_NAME}) diff --git a/bitbots_hcm/bitbots_hcm/humanoid_control_module.py b/bitbots_hcm/bitbots_hcm/humanoid_control_module.py index c13d17462..9e821f311 100755 --- a/bitbots_hcm/bitbots_hcm/humanoid_control_module.py +++ b/bitbots_hcm/bitbots_hcm/humanoid_control_module.py @@ -65,7 +65,7 @@ def __init__(self, use_sim_time, simulation_active, visualization_active): # Create Dynamic Stack Decider self.dsd = DSD(self.blackboard, "debug/dsd/hcm", node=self.node) # Get the path to the python actions and decisions - dirname = os.path.dirname(os.path.realpath(__file__)) + "/hcm_dsd" + dirname = os.path.join(get_package_share_directory('bitbots_hcm'), "hcm_dsd") # Register actions and decisions self.dsd.register_actions(os.path.join(dirname, 'actions')) self.dsd.register_decisions(os.path.join(dirname, 'decisions')) From b21364e30a93a53e439ae70e54827dd136669d33 Mon Sep 17 00:00:00 2001 From: Florian Vahl <7vahl@informatik.uni-hamburg.de> Date: Sun, 12 Nov 2023 20:05:23 +0100 Subject: [PATCH 71/74] Fix missing deps --- bitbots_hcm/package.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bitbots_hcm/package.xml b/bitbots_hcm/package.xml index 0a52aa034..40e25f4d0 100644 --- a/bitbots_hcm/package.xml +++ b/bitbots_hcm/package.xml @@ -22,7 +22,9 @@ <depend>bitbots_msgs</depend> <depend>bitbots_robot_description</depend> <depend>bitbots_utils</depend> + <depend>dynamic_stack_decider</depend> <depend>geometry_msgs</depend> + <depend>humanoid_league_speaker</depend> <depend>pybind11-dev</depend> <depend>python3-numpy</depend> <depend>python3-transforms3d</depend> From 4fbf755c68b37b4000aba3e7c4f99041b9c85de6 Mon Sep 17 00:00:00 2001 From: Florian Vahl <7vahl@informatik.uni-hamburg.de> Date: Sun, 12 Nov 2023 20:05:45 +0100 Subject: [PATCH 72/74] Remove unused imports --- bitbots_hcm/bitbots_hcm/hcm_dsd/hcm_blackboard.py | 5 +---- bitbots_hcm/bitbots_hcm/humanoid_control_module.py | 1 - 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/hcm_blackboard.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/hcm_blackboard.py index 19631f95a..f79154a04 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/hcm_blackboard.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/hcm_blackboard.py @@ -1,10 +1,7 @@ -import json -import os from typing import List, Optional import numpy -from ament_index_python import get_package_share_directory -from geometry_msgs.msg import PointStamped, Twist +from geometry_msgs.msg import Twist from rclpy.action import ActionClient from rclpy.node import Node from rclpy.task import Future diff --git a/bitbots_hcm/bitbots_hcm/humanoid_control_module.py b/bitbots_hcm/bitbots_hcm/humanoid_control_module.py index 9e821f311..d2184a359 100755 --- a/bitbots_hcm/bitbots_hcm/humanoid_control_module.py +++ b/bitbots_hcm/bitbots_hcm/humanoid_control_module.py @@ -21,7 +21,6 @@ from sensor_msgs.msg import Imu, JointState from std_msgs.msg import Bool -from bitbots_msgs.action import PlayAnimation from bitbots_msgs.msg import FootPressure, RobotControlState from dynamic_stack_decider.dsd import DSD From 25d29f6f710445595f9c1712f542e51e374c78c4 Mon Sep 17 00:00:00 2001 From: Florian Vahl <7vahl@informatik.uni-hamburg.de> Date: Sun, 12 Nov 2023 20:06:23 +0100 Subject: [PATCH 73/74] Add hcm dsd test --- bitbots_hcm/CMakeLists.txt | 8 +++++++- bitbots_hcm/test/pytest/test_dsd_valid.py | 24 +++++++++++++++++++++++ bitbots_head_mover/CMakeLists.txt | 11 ----------- 3 files changed, 31 insertions(+), 12 deletions(-) create mode 100644 bitbots_hcm/test/pytest/test_dsd_valid.py diff --git a/bitbots_hcm/CMakeLists.txt b/bitbots_hcm/CMakeLists.txt index 6d732886d..0bb80a6ea 100644 --- a/bitbots_hcm/CMakeLists.txt +++ b/bitbots_hcm/CMakeLists.txt @@ -59,8 +59,14 @@ install(DIRECTORY bitbots_hcm/hcm_dsd/decisions DESTINATION share/${PROJECT_NAME install(FILES bitbots_hcm/hcm_dsd/hcm.dsd DESTINATION share/${PROJECT_NAME}/hcm_dsd) -install(FILES bitbots_hcm/hcm_dsd/hcm.dsd DESTINATION share/${PROJECT_NAME}) +if(BUILD_TESTING) + find_package(ament_cmake_pytest REQUIRED) + ament_add_pytest_test(hcm_py_test test/pytest + PYTHON_EXECUTABLE "${PYTHON_EXECUTABLE}" + APPEND_ENV PYTHONPATH=${CMAKE_CURRENT_BINARY_DIR} + ) +endif() ament_python_install_package(${PROJECT_NAME}) ament_package() diff --git a/bitbots_hcm/test/pytest/test_dsd_valid.py b/bitbots_hcm/test/pytest/test_dsd_valid.py new file mode 100644 index 000000000..7b445c1cd --- /dev/null +++ b/bitbots_hcm/test/pytest/test_dsd_valid.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python3 +import glob +import os + +from ament_index_python import get_package_share_directory +from dynamic_stack_decider import DSD + + +def test_dsd_valid(): + # Create empty blackboard + DummyBlackboard = object + # Create DSD + dsd = DSD(DummyBlackboard()) + + # Find install path of package where the dsd and python files are located + dirname = os.path.join(get_package_share_directory("bitbots_hcm"), "hcm_dsd") + + # Register actions and decisions + dsd.register_actions(os.path.join(dirname, "actions")) + dsd.register_decisions(os.path.join(dirname, "decisions")) + + # Load all dsd files to check if they are valid\ + for dsd_file in glob.glob(os.path.join(dirname, "*.dsd")): + dsd.load_behavior(dsd_file) diff --git a/bitbots_head_mover/CMakeLists.txt b/bitbots_head_mover/CMakeLists.txt index e4bf11c54..909e0c8ef 100644 --- a/bitbots_head_mover/CMakeLists.txt +++ b/bitbots_head_mover/CMakeLists.txt @@ -60,17 +60,6 @@ ament_target_dependencies( install(TARGETS move_head DESTINATION lib/${PROJECT_NAME}) -if(BUILD_TESTING) - find_package(ament_lint_auto REQUIRED) - # the following line skips the linter which checks for copyrights - # comment the line when a copyright and license is added to all source files - set(ament_cmake_copyright_FOUND TRUE) - # the following line skips cpplint (only works in a git repo) - # comment the line when this package is in a git repo and when - # a copyright and license is added to all source files - set(ament_cmake_cpplint_FOUND TRUE) - ament_lint_auto_find_test_dependencies() -endif() install(DIRECTORY config DESTINATION share/${PROJECT_NAME}) From a3f27bee555d1b5c5c79b91d35dac17f465ef00b Mon Sep 17 00:00:00 2001 From: Florian Vahl <git@flova.de> Date: Tue, 14 Nov 2023 00:59:51 +0100 Subject: [PATCH 74/74] Update bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/check_hardware.py Co-authored-by: Jan Gutsche <34797331+jaagut@users.noreply.github.com> --- bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/check_hardware.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/check_hardware.py b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/check_hardware.py index 3a6d934ce..6f4e1a492 100644 --- a/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/check_hardware.py +++ b/bitbots_hcm/bitbots_hcm/hcm_dsd/decisions/check_hardware.py @@ -30,7 +30,7 @@ def perform(self, reevaluate=False): return "OKAY" if self.blackboard.simulation_active: - # Some simulators will give exact same joint messages could look like errors, + # Some simulators will give the exact same joint messages, which could look like errors, # as the real world ros controller will always publish the same message if there is no connection # so we will just the check if the message is changing in simulation if self.blackboard.current_joint_state is None: