From 4ce5842c3b696790d6183fd68282f42c10c57a26 Mon Sep 17 00:00:00 2001 From: Wessel Tip Date: Sat, 13 Dec 2025 20:44:51 +0100 Subject: [PATCH] feat: Assignment 5 --- .fish/activate.fish | 75 +++++ .fish/readme.norg | 60 ++++ src/pose_calculator/CMakeLists.txt | 36 +++ .../launch/inverse_kinematic.launch.xml | 20 ++ src/pose_calculator/package.xml | 22 ++ .../src/InverseKinematicNode.cpp | 193 +++++++++++++ src/robot_description/CMakeLists.txt | 17 ++ .../launch/display.launch.xml | 26 ++ src/robot_description/meshes/base_z_ob.stl | Bin 0 -> 1257184 bytes src/robot_description/meshes/leftjaw.stl | Bin 0 -> 205184 bytes src/robot_description/meshes/link_1.stl | Bin 0 -> 1303984 bytes src/robot_description/meshes/link_2.stl | Bin 0 -> 822684 bytes src/robot_description/meshes/link_3.stl | Bin 0 -> 686784 bytes src/robot_description/meshes/link_4.stl | Bin 0 -> 552684 bytes src/robot_description/meshes/link_5.stl | Bin 0 -> 398484 bytes .../meshes/link_5_gripper.stl | Bin 0 -> 2247884 bytes src/robot_description/meshes/readme.md | 1 + src/robot_description/meshes/rightjaw.stl | Bin 0 -> 136884 bytes src/robot_description/package.xml | 15 + src/robot_description/rviz/display.rviz | 239 ++++++++++++++++ src/robot_description/rviz/readme.md | 1 + .../urdf/skyentific_robot.urdf.xacro | 263 ++++++++++++++++++ .../urdf/skyentific_robot_ros2_control.xacro | 50 ++++ 23 files changed, 1018 insertions(+) create mode 100755 .fish/activate.fish create mode 100644 .fish/readme.norg create mode 100644 src/pose_calculator/CMakeLists.txt create mode 100644 src/pose_calculator/launch/inverse_kinematic.launch.xml create mode 100644 src/pose_calculator/package.xml create mode 100644 src/pose_calculator/src/InverseKinematicNode.cpp create mode 100644 src/robot_description/CMakeLists.txt create mode 100644 src/robot_description/launch/display.launch.xml create mode 100644 src/robot_description/meshes/base_z_ob.stl create mode 100644 src/robot_description/meshes/leftjaw.stl create mode 100644 src/robot_description/meshes/link_1.stl create mode 100644 src/robot_description/meshes/link_2.stl create mode 100644 src/robot_description/meshes/link_3.stl create mode 100644 src/robot_description/meshes/link_4.stl create mode 100644 src/robot_description/meshes/link_5.stl create mode 100644 src/robot_description/meshes/link_5_gripper.stl create mode 100644 src/robot_description/meshes/readme.md create mode 100644 src/robot_description/meshes/rightjaw.stl create mode 100644 src/robot_description/package.xml create mode 100644 src/robot_description/rviz/display.rviz create mode 100644 src/robot_description/rviz/readme.md create mode 100644 src/robot_description/urdf/skyentific_robot.urdf.xacro create mode 100644 src/robot_description/urdf/skyentific_robot_ros2_control.xacro diff --git a/.fish/activate.fish b/.fish/activate.fish new file mode 100755 index 0000000..deb03a8 --- /dev/null +++ b/.fish/activate.fish @@ -0,0 +1,75 @@ +# Self-contained environment: ros2-lectures +# Exported on: Sat Dec 13 05:03:27 PM CET 2025 +# Original environment from: /home/wessel/.config/fish/environments/configs/ros2-lectures + +# ROS2 development environment (requires distrobox) +# Environment: ros2-lectures + +# First check if running inside distrobox +if not test -f /run/.containerenv; and test -z "$CONTAINER_ID" + echo (set_color red)"This ROS2 environment should only be run inside a distrobox container"(set_color normal) + return 1 +end + +# Check if a previous initialization has occurred +if test -n "$__ENV_INITIALIZED" + echo (set_color yellow)"Environment already initialized"(set_color normal) + return 0 +end + +# Mark as initialized (only after distrobox check passes) +set -gx __ENV_INITIALIZED "1" +set -gx CURRENT_ENV "ros2-lectures" +# Source ROS2 setup files using bass +if type -q bass + bass source /opt/ros/jazzy/setup.bash + if test -f ./install/setup.bash + bass source ./install/setup.bash + end +else + echo (set_color red)"Error: bass is required for ROS2 environment. Install with: fisher install edc/bass"(set_color normal) + return 1 +end + +# Set environment variable for the prompt prefix +set -gx ROS2_ACTIVE 1 + +# Save the original prompt function if it exists +# Only save if we don't already have a backup or if current prompt is not from an environment +if not functions -q __env_orig_prompt + if functions -q fish_prompt + functions -c fish_prompt __env_orig_prompt + else + function __env_orig_prompt + echo -n (whoami)'@'(prompt_hostname)' '(set_color $fish_color_cwd)(prompt_pwd)(set_color normal)'> ' + end + end +else + # If we already have a backup, we're switching environments + # No need to create a new backup +end + +# Define new prompt with ROS2 prefix +function fish_prompt + echo -n (set_color magenta)'(ros2-lectures)'(set_color normal)' ' + __env_orig_prompt +end + +# ROS2 aliases and functions +alias cb="colcon build" +alias cbe="colcon build && env deactivate && cd ." +alias cbs="colcon build --symlink-install" +alias cbt="colcon build --packages-select" +alias ct="colcon test" +alias ctr="colcon test-result" + +echo (set_color green)"Activated ROS2 environment: ros2-lectures"(set_color normal) + +# Custom deactivation function +function __env_custom_deactivate + # Remove ROS2-specific variables and aliases + set -e ROS2_ACTIVE + functions -e cb cbs cbt ct ctr 2>/dev/null + + echo (set_color blue)"ROS2 environment cleanup completed"(set_color normal) +end diff --git a/.fish/readme.norg b/.fish/readme.norg new file mode 100644 index 0000000..cc3d876 --- /dev/null +++ b/.fish/readme.norg @@ -0,0 +1,60 @@ +* Exported Fish Environment: ros2-lectures +This directory contains a self-contained fish environment. + +** Files Structure + @code + .fish/ + |-- activate.fish + |-- readme.norg + |-- bin/ + @end + +** Usage + +*** Automatic Activation (Recommended) + The environment will automatically activate when you `cd` into this directory + if your Fish shell is configured with the auto-activation script. + + @code fish + function check_and_source_activate + if test -f (pwd)/.fish/activate.fish + source (pwd)/.fish/activate.fish + elif test -f (pwd)/activate.fish + source (pwd)/activate.fish + end + end + + function cd + builtin cd $argv && check_and_source_activate + end + @end + +*** Manual Activation + To manually activate the environment, run from the project root: + @code bash + source ./.fish/activate.fish + @end + +*** Deactivation + To deactivate the environment, run: + @code bash + env deactivate + @end + + Or simply `cd` to a different directory if using auto-activation. + +** What This Environment Provides + - Prompt showing the environment name + - Environment-specific aliases and functions + - Custom environment variables + - Automatic cleanup when deactivated + +** Requirements + - Fish shell + - `bass` plugin (`fisher install edc/bass`) for compatibility with bash scripts + +** Sharing + This environment is completely self-contained. You can: + - Copy this directory to another machine + - Share it with others + - Version control it with your project (add .fish/ to your repo) \ No newline at end of file diff --git a/src/pose_calculator/CMakeLists.txt b/src/pose_calculator/CMakeLists.txt new file mode 100644 index 0000000..eb28a88 --- /dev/null +++ b/src/pose_calculator/CMakeLists.txt @@ -0,0 +1,36 @@ +cmake_minimum_required(VERSION 3.8) +project(pose_calculator) + +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(rclcpp REQUIRED) +find_package(tf2_ros REQUIRED) +find_package(geometry_msgs REQUIRED) +find_package(sensor_msgs REQUIRED) + +# set dependencies +set(dependencies +rclcpp +tf2_ros +geometry_msgs +sensor_msgs +) + +# add executables for scripts +add_executable(ik_node src/InverseKinematicNode.cpp) +ament_target_dependencies(ik_node ${dependencies}) + +# install the scripts +install(TARGETS +ik_node +DESTINATION lib/${PROJECT_NAME}) +install( +DIRECTORY launch +DESTINATION share/${PROJECT_NAME} +) + +ament_package() diff --git a/src/pose_calculator/launch/inverse_kinematic.launch.xml b/src/pose_calculator/launch/inverse_kinematic.launch.xml new file mode 100644 index 0000000..40d504f --- /dev/null +++ b/src/pose_calculator/launch/inverse_kinematic.launch.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/pose_calculator/package.xml b/src/pose_calculator/package.xml new file mode 100644 index 0000000..243634b --- /dev/null +++ b/src/pose_calculator/package.xml @@ -0,0 +1,22 @@ + + + + pose_calculator + 0.0.0 + TODO: Package description + wessel + TODO: License declaration + + ament_cmake + rclcpp + tf2_ros + geometry_msgs + sensor_msgs + + ament_lint_auto + ament_lint_common + + + ament_cmake + + diff --git a/src/pose_calculator/src/InverseKinematicNode.cpp b/src/pose_calculator/src/InverseKinematicNode.cpp new file mode 100644 index 0000000..6e6ea66 --- /dev/null +++ b/src/pose_calculator/src/InverseKinematicNode.cpp @@ -0,0 +1,193 @@ +#include + +#include +#include + +class InverseKinematicNode : public rclcpp::Node { +public: + InverseKinematicNode() : Node("skyentific_pose_calculator_node") { + auto target_x_desc = rcl_interfaces::msg::ParameterDescriptor(); + target_x_desc.description = "Target X position"; + target_x_desc.read_only = false; + target_x_desc.floating_point_range.resize(1); + target_x_desc.floating_point_range[0].from_value = -0.5; + target_x_desc.floating_point_range[0].to_value = 0.5; + target_x_desc.floating_point_range[0].step = 0.01; + + auto target_y_desc = rcl_interfaces::msg::ParameterDescriptor(); + target_y_desc.description = "Target Y position"; + target_y_desc.read_only = false; + target_y_desc.floating_point_range.resize(1); + target_y_desc.floating_point_range[0].from_value = -0.5; + target_y_desc.floating_point_range[0].to_value = 0.5; + target_y_desc.floating_point_range[0].step = 0.01; + + target_x_ = this->declare_parameter("target_x", 0.29, target_x_desc); + target_y_ = this->declare_parameter("target_y", 0.29, target_y_desc); + + link1_ = this->declare_parameter("L1", 0.225); + link2_ = this->declare_parameter("L2", 0.383); + + // Set up parameter callback for dynamic reconfigure + param_callback_handle_ = this->add_on_set_parameters_callback( + std::bind(&InverseKinematicNode::callback_parameters, this, std::placeholders::_1) + ); + + if (!calculate_2dpose(target_x_, target_y_)) { + RCLCPP_ERROR(this->get_logger(), "failed calculating pose (x=%f, y=%f)", target_x_, target_y_); + } else { + RCLCPP_INFO(this->get_logger(), + "target position (x=%f, y=%f) [j1=%f, j2=%f, j3=%f, j4=%f, j5=%f, j6=%f]", + target_x_, target_y_, joint_1_, joint_2_, joint_3_, joint_4_, joint_5_, joint_6_ + ); + } + + joint_state_publisher_ = this->create_publisher("joint_states", 10); + + timer_ = this->create_wall_timer( + std::chrono::milliseconds(100), + std::bind(&InverseKinematicNode::publish_joint_state, this)); + } + +private: + rcl_interfaces::msg::SetParametersResult callback_parameters( + const std::vector ¶meters + ) { + + rcl_interfaces::msg::SetParametersResult result; + result.successful = true; + + bool recalculate = false; + double new_x = target_x_; + double new_y = target_y_; + + for (const auto ¶m : parameters) { + if (param.get_name() == "target_x") { + new_x = param.as_double(); + recalculate = true; + RCLCPP_INFO(this->get_logger(), "changed 'target_x' -> %.4f", new_x); + } else if (param.get_name() == "target_y") { + new_y = param.as_double(); + recalculate = true; + RCLCPP_INFO(this->get_logger(), "changed 'target_y' -> %.4f", new_y); + } + } + + if (recalculate) { + if (calculate_2dpose(new_x, new_y)) { + target_x_ = new_x; + target_y_ = new_y; + result.successful = true; + result.reason = "pose calculation successful"; + } else { + result.successful = false; + result.reason = "target position unreachable"; + RCLCPP_WARN(this->get_logger(), "failed to calculate pose, keeping previous values"); + } + } + + return result; + } + +private: + OnSetParametersCallbackHandle::SharedPtr param_callback_handle_; + rclcpp::Publisher::SharedPtr joint_state_publisher_; + rclcpp::TimerBase::SharedPtr timer_; + + double target_x_, target_y_; + double link1_, link2_; + double joint_1_, joint_2_, joint_3_, joint_4_, joint_5_, joint_6_; + + bool calculate_2dpose(double x, double y) { + RCLCPP_INFO(this->get_logger(), "0. x=%.4f, y=%.4f, l1=%.4f, l2=%.4f", x, y, link1_, link2_); + + double r = std::sqrt(x * x + y * y); + RCLCPP_INFO(this->get_logger(), "1. r=%.6f", r); + + // joint 1 = base rotation + joint_1_ = 0.0; + // joint_1_ = std::atan2(y, x); + + // Check if target is reachable + double max_reach = link1_ + link2_; + double min_reach = std::abs(link1_ - link2_); + RCLCPP_INFO(this->get_logger(), "3. reach_min=%.4f, reach_max=%.4f", min_reach, max_reach); + + if (r > max_reach || r < min_reach) { + RCLCPP_ERROR(this->get_logger(), "e. target out of reach, aborting"); + return false; + } + + // Joint 2: cos(Joint2) = (r^2 - Link1^2 - Link2^2) / (2 * Link1 * Link2) + double r_squared = r * r; + double link1_squared = link1_ * link1_; + double link2_squared = link2_ * link2_; + + double cos_joint2 = (r_squared - link1_squared - link2_squared) / (2.0 * link1_ * link2_); + + RCLCPP_INFO(this->get_logger(), + "4. cos_joint2=(%.6f - %.6f - %.6f) / (2*%.3f*%.3f) = %.6f", + r_squared, link1_squared, link2_squared, link1_, link2_, cos_joint2 + ); + + joint_2_ = std::acos(cos_joint2); + RCLCPP_INFO(this->get_logger(), "4. joint_2=%.6f rad", joint_2_); + + // Joint 3: Joint3 = atan2(y, x) - atan2(Link2*sin(Joint2), Link1 + Link2*cos(Joint2)) + double atan2_yx = std::atan2(y, x); + double link2_sin_j2 = link2_ * std::sin(joint_2_); + double link1_plus_link2_cos_joint2 = link1_ + link2_ * std::cos(joint_2_); + double atan2_term = std::atan2(link2_sin_j2, link1_plus_link2_cos_joint2); + + RCLCPP_INFO(this->get_logger(), "5. atan2(%.2f, %.2f) = %.6f", y, x, atan2_yx); + RCLCPP_INFO(this->get_logger(), "5. atan2(%.3f*sin(%.6f), %.3f + %.3f*cos(%.6f))", + link2_, joint_2_, link1_, link2_, joint_2_ + ); + RCLCPP_INFO(this->get_logger(), "5. atan2(%.6f, %.6f) = %.6f", + link2_sin_j2, link1_plus_link2_cos_joint2, atan2_term + ); + + joint_3_ = atan2_yx - atan2_term; + RCLCPP_INFO(this->get_logger(), "5. joint_3=%.6f - %.6f=%.6f rad", atan2_yx, atan2_term, joint_3_); + + // joints 4-6 related to gripper + joint_4_ = 0.0; + joint_5_ = 0.0; + joint_6_ = 0.0; + + return true; + } + + void publish_joint_state() { + auto joint_state = sensor_msgs::msg::JointState(); + joint_state.header.stamp = this->get_clock()->now(); + + joint_state.name = { + "joint_1", + "joint_2", + "joint_3", + "joint_4", + "joint_5", + "joint_6" + }; + + joint_state.position = { + joint_1_, + joint_2_, + joint_3_, + joint_4_, + joint_5_, + joint_6_ + }; + + joint_state_publisher_->publish(joint_state); + } +}; + +int main(int argc, char** argv) { + rclcpp::init(argc, argv); + auto node = std::make_shared(); + rclcpp::spin(node); + rclcpp::shutdown(); + return 0; +} diff --git a/src/robot_description/CMakeLists.txt b/src/robot_description/CMakeLists.txt new file mode 100644 index 0000000..5dda467 --- /dev/null +++ b/src/robot_description/CMakeLists.txt @@ -0,0 +1,17 @@ +cmake_minimum_required(VERSION 3.8) +project(robot_description) + +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) + +# Install directories +install( + DIRECTORY launch meshes urdf rviz + DESTINATION share/${PROJECT_NAME} +) + +ament_package() diff --git a/src/robot_description/launch/display.launch.xml b/src/robot_description/launch/display.launch.xml new file mode 100644 index 0000000..bc24810 --- /dev/null +++ b/src/robot_description/launch/display.launch.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + diff --git a/src/robot_description/meshes/base_z_ob.stl b/src/robot_description/meshes/base_z_ob.stl new file mode 100644 index 0000000000000000000000000000000000000000..dfa501b5881ce36138456d849052c2212fff7cda GIT binary patch literal 1257184 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