Hi, i'm using humble, when i send joint trajectories to the /joint_trajectory_controller/joint_trajectory topic it doesn't work proprerly. No matter the joint config i send it will always go max velocity in the floor, penetrating it and crashing gazebo.
This is the code:
motion.py
import rclpy
from rclpy.node import Node
from trajectory_msgs.msg import JointTrajectory, JointTrajectoryPoint
import trajectory as traj
from std_msgs.msg import Header
from rclpy.duration import Duration
import numpy as np
import kinematics as kin
class PointPublisher(Node):
def __init__(self):
super().__init__('point_publisher')
self.publisher_ = self.create_publisher(JointTrajectory, '/joint_trajectory_controller/joint_trajectory', 10)
self.q0 = [-1.57, -1.57, -1.57, -1.57, 0, 0]
def publish_point(self, qi, qdi):
msg = JointTrajectory()
msg.header = Header()
msg.joint_names = ['shoulder_pan_joint', 'shoulder_lift_joint', 'elbow_joint', 'wrist_1_joint', 'wrist_2_joint', 'wrist_3_joint']
j = 0
dj = 0.1
for i in range(len(qi[0,:])):
point = JointTrajectoryPoint()
msg.header.stamp = self.get_clock().now().to_msg()
joints = qi[:,i].flatten()
vel = qdi[:,i].flatten()
point.positions = joints.tolist()
point.velocities = vel.tolist()
point.time_from_start = Duration(seconds=j).to_msg()
j += dj
msg.points.append(point)
self.publisher_.publish(msg)
def move(self, pos, orientation):
rotm = kin.eul2Rot(orientation)
T = np.identity(4)
T[:3, :3] = rotm
T[:3, 3] = pos
possibleQ = kin.inverse_kinematics(T)
# find closest q to q0
qf = self.findClosestQ(possibleQ)
qi, qdi, qddi = traj.cubic_trajectory_planning(self.q0, qf, np.zeros(6), np.zeros(6))
self.publish_point(qi, qdi)
# for i in range(len(qi[0,:])):
# self.publish_point(qi[:,i].flatten())
self.q0 = qf
def eucledeanDistance(self, q1, q2):
return np.linalg.norm(q1 - q2)
def findClosestQ(self, q):
minDistance = float('inf')
closestQ = None
for q_ in q:
distance = self.eucledeanDistance(self.q0, q_)
if distance < minDistance:
minDistance = distance
closestQ = q_
return closestQ
def main(args=None):
rclpy.init(args=args)
pointPub = PointPublisher()
pointPub.move(np.array([-0.1, -0.1, 0.8]), np.array([0, -1.57, 0]))
rclpy.spin(pointPub)
rclpy.shutdown()
if __name__ == '__main__':
main()
kinematics.py has kin function such as forward kin and inverse one. I'm pretty sure that trajectory and kin are correct. Now i'm not sure that i'm using the trajectory controller in the right way (it's first time).
Hi, i'm using humble, when i send joint trajectories to the /joint_trajectory_controller/joint_trajectory topic it doesn't work proprerly. No matter the joint config i send it will always go max velocity in the floor, penetrating it and crashing gazebo. This is the code:
motion.py
trajectory.py
kinematics.py
has kin function such as forward kin and inverse one. I'm pretty sure that trajectory and kin are correct. Now i'm not sure that i'm using the trajectory controller in the right way (it's first time).Gazebo view:![immagine](https://github.com/UniversalRobots/Universal_Robots_ROS2_Gazebo_Simulation/assets/95870739/7434bcb3-0c88-43f2-bde0-a3b78f3e3578)
Rviz view:![immagine](https://github.com/UniversalRobots/Universal_Robots_ROS2_Gazebo_Simulation/assets/95870739/79206bce-c28f-4e53-b9c9-cd11f9a3cde5)