Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

KDL based Movement in Cartesian Space #167

Merged
Merged
Show file tree
Hide file tree
Changes from 18 commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
be1d057
KDL tutorial
BoWangFromMars Apr 11, 2024
e73fe11
Cartesian space movement
BoWangFromMars Apr 11, 2024
af39f13
Update CMakeLists.txt
BoWangFromMars Apr 11, 2024
3bb01fc
Update package.xml
BoWangFromMars Apr 11, 2024
3cd05b5
Update CMakeLists.txt
BoWangFromMars Apr 16, 2024
e033e3d
Create cartesian_pose_node.cpp
BoWangFromMars Apr 16, 2024
6deedad
Create iiwa7.urdf
BoWangFromMars Apr 16, 2024
104198c
Create iiwa14.urdf
BoWangFromMars Apr 16, 2024
b0a10a6
Create med7.urdf
BoWangFromMars Apr 16, 2024
3db86da
Create med14.urdf
BoWangFromMars Apr 16, 2024
23d0d6f
Delete lbr_demos/lbr_demos_fri_ros2_cpp/doc/KDL installation and demo…
BoWangFromMars Apr 16, 2024
5f6ace3
Add files via upload
BoWangFromMars Apr 16, 2024
4aa7b26
Update cartesian_pose_node.cpp
BoWangFromMars Apr 16, 2024
ffdada4
Update cartesian_pose_node.cpp
BoWangFromMars Apr 16, 2024
f2cad31
Update cartesian_path_planning_node.cpp
BoWangFromMars Apr 16, 2024
772699d
Update cartesian_path_planning_node.cpp
BoWangFromMars Apr 16, 2024
201bd89
Update cartesian_pose_node.cpp
BoWangFromMars Apr 16, 2024
6e7095e
Update package.xml
BoWangFromMars Apr 16, 2024
aa5cb15
Delete lbr_description/urdf/iiwa14/iiwa14.urdf
BoWangFromMars Apr 19, 2024
630bd5d
Delete lbr_description/urdf/iiwa7/iiwa7.urdf
BoWangFromMars Apr 19, 2024
506ec03
Delete lbr_description/urdf/med14/med14.urdf
BoWangFromMars Apr 19, 2024
4213fcc
Delete lbr_description/urdf/med7/med7.urdf
BoWangFromMars Apr 19, 2024
7f4a662
Delete lbr_demos/lbr_demos_fri_ros2_cpp/doc/KDL installation.pdf
BoWangFromMars Apr 19, 2024
ae04d88
Update package.xml
BoWangFromMars Apr 19, 2024
29338f8
Update CMakeLists.txt
BoWangFromMars Apr 19, 2024
367004a
Update CMakeLists.txt
BoWangFromMars Apr 19, 2024
40f6067
Update cartesian_pose_node.cpp
BoWangFromMars Apr 19, 2024
7258070
Add files via upload
BoWangFromMars Apr 19, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 47 additions & 0 deletions lbr_demos/lbr_demos_fri_ros2_cpp/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,51 @@ find_package(fri_vendor REQUIRED)
find_package(FRIClient REQUIRED)
find_package(lbr_fri_msgs REQUIRED)
find_package(rclcpp REQUIRED)
find_package(tf2_ros REQUIRED)
find_package(sensor_msgs REQUIRED)
find_package(urdf REQUIRED)
find_package(geometry_msgs REQUIRED)
find_package(orocos_kdl REQUIRED)
find_package(kdl_parser REQUIRED)

# cartesian_pose_node
add_executable(cartesian_pose_node
src/cartesian_pose_node.cpp
)

ament_target_dependencies(cartesian_pose_node
fri_vendor
lbr_fri_msgs
rclcpp
tf2_ros
urdf
sensor_msgs
orocos_kdl
kdl_parser
geometry_msgs
)

target_link_libraries(cartesian_pose_node
FRIClient::FRIClient
)

# cartesian_path_planning_node
add_executable(cartesian_path_planning_node
src/cartesian_path_planning_node.cpp
)

ament_target_dependencies(cartesian_path_planning_node
fri_vendor
lbr_fri_msgs
rclcpp
tf2_ros
sensor_msgs
geometry_msgs
)

target_link_libraries(cartesian_path_planning_node
FRIClient::FRIClient
)

# joint sine overlay
add_executable(joint_sine_overlay_node
Expand Down Expand Up @@ -62,6 +107,8 @@ target_link_libraries(wrench_sine_overlay_node
)

install(TARGETS
cartesian_pose_node
cartesian_path_planning_node
joint_sine_overlay_node
torque_sine_overlay_node
wrench_sine_overlay_node
Expand Down
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

one more question regarding this doc. KDL is usually installed through rosdep as listed in package.xml files, refer e.g.

Binary file not shown.
8 changes: 7 additions & 1 deletion lbr_demos/lbr_demos_fri_ros2_cpp/package.xml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,12 @@
<depend>fri_vendor</depend>
<depend>lbr_fri_msgs</depend>
<depend>rclcpp</depend>
<depend>tf2_ros</depend>
<depend>urdf</depend>
<depend>geometry_msgs</depend>
<depend>sensor_msgs</depend>
<depend>orocos_kdl</depend>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this dependency should be replaced by orocos_kdl_vendor

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

okay, I get it, thank you.

<depend>kdl_parser</depend>

<exec_depend>lbr_fri_ros2</exec_depend>

Expand All @@ -21,4 +27,4 @@
<export>
<build_type>ament_cmake</build_type>
</export>
</package>
</package>
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
#include "rclcpp/rclcpp.hpp"
#include "cmath"
#include <iostream>
#include <string>
#include "geometry_msgs/msg/pose.hpp"

using std::placeholders::_1;

class CartesianPosePublisherNode:public rclcpp::Node
{
private:
rclcpp::Publisher<geometry_msgs::msg::Pose>::SharedPtr cartesian_pose_publisher_;
rclcpp::Subscription<geometry_msgs::msg::Pose>::SharedPtr cartesian_pose_subscriber_;

geometry_msgs::msg::Pose initial_cartesian_pose_; // robot starts from this pose
bool is_init_;

double amplitude_; // rad
double frequency_; // Hz
double sampling_time_; // sampling time for sending position command
double phase_; // initial phase


private:
/**
* @function: callback function for Cartesian Pose Subscriber
* @param msg Cartesian Pose of the robot
*/
void topic_callback(const geometry_msgs::msg::Pose& msg)
{
if(!is_init_)
{
initial_cartesian_pose_ = msg;
is_init_ = true;
}
else
{
geometry_msgs::msg::Pose cartesian_pose_command = initial_cartesian_pose_;

phase_ = phase_ + 2 * M_PI * frequency_ * sampling_time_;
cartesian_pose_command.position.z += amplitude_ * sin(phase_);

cartesian_pose_publisher_->publish(cartesian_pose_command);
}

return;
}

public:
CartesianPosePublisherNode():Node("cartesian_pose_publisher_node")
{
is_init_ = false;
amplitude_ = 0.05;
frequency_ = 0.5;
sampling_time_ = 0.01;
phase_ = 0.0;

cartesian_pose_publisher_ = this->create_publisher<geometry_msgs::msg::Pose>(
"/lbr/command/cartesian_pose", 10);
cartesian_pose_subscriber_ = this->create_subscription<geometry_msgs::msg::Pose>(
"/lbr/state/cartesian_pose", 10,
std::bind(&CartesianPosePublisherNode::topic_callback, this, _1));
}
};

int main(int argc, char** argv)
{
rclcpp::init(argc, argv);

rclcpp::spin(std::make_shared<CartesianPosePublisherNode>());

rclcpp::shutdown();
return 0;
}
Loading