@@ -68,7 +68,8 @@ bool TrajectoryPointInterface::writeMotionPrimitive(const std::shared_ptr<contro
6868 }
6969 std::array<int32_t , MESSAGE_LENGTH> buffer;
7070
71- vector6d_t positions;
71+ // We write three blocks of 6 doubles and some additional data
72+ vector6d_t first_block;
7273 vector6d_t second_block;
7374 vector6d_t third_block;
7475
@@ -77,34 +78,40 @@ bool TrajectoryPointInterface::writeMotionPrimitive(const std::shared_ptr<contro
7778 case MotionType::MOVEJ:
7879 {
7980 auto movej_primitive = std::static_pointer_cast<control::MoveJPrimitive>(primitive);
80- positions = movej_primitive->target_joint_configuration ;
81+ first_block = movej_primitive->target_joint_configuration ;
8182 second_block.fill (primitive->velocity );
8283 third_block.fill (primitive->acceleration );
8384 break ;
8485 }
8586 case MotionType::MOVEL:
8687 {
8788 auto movel_primitive = std::static_pointer_cast<control::MoveLPrimitive>(primitive);
88- positions = { movel_primitive->target_pose .x , movel_primitive->target_pose .y , movel_primitive->target_pose .z ,
89- movel_primitive->target_pose .rx , movel_primitive->target_pose .ry , movel_primitive->target_pose .rz };
89+ first_block = {
90+ movel_primitive->target_pose .x , movel_primitive->target_pose .y , movel_primitive->target_pose .z ,
91+ movel_primitive->target_pose .rx , movel_primitive->target_pose .ry , movel_primitive->target_pose .rz
92+ };
9093 second_block.fill (primitive->velocity );
9194 third_block.fill (primitive->acceleration );
9295 break ;
9396 }
9497 case MotionType::MOVEP:
9598 {
9699 auto movep_primitive = std::static_pointer_cast<control::MovePPrimitive>(primitive);
97- positions = { movep_primitive->target_pose .x , movep_primitive->target_pose .y , movep_primitive->target_pose .z ,
98- movep_primitive->target_pose .rx , movep_primitive->target_pose .ry , movep_primitive->target_pose .rz };
100+ first_block = {
101+ movep_primitive->target_pose .x , movep_primitive->target_pose .y , movep_primitive->target_pose .z ,
102+ movep_primitive->target_pose .rx , movep_primitive->target_pose .ry , movep_primitive->target_pose .rz
103+ };
99104 second_block.fill (primitive->velocity );
100105 third_block.fill (primitive->acceleration );
101106 break ;
102107 }
103108 case MotionType::MOVEC:
104109 {
105110 auto movec_primitive = std::static_pointer_cast<control::MoveCPrimitive>(primitive);
106- positions = { movec_primitive->target_pose .x , movec_primitive->target_pose .y , movec_primitive->target_pose .z ,
107- movec_primitive->target_pose .rx , movec_primitive->target_pose .ry , movec_primitive->target_pose .rz };
111+ first_block = {
112+ movec_primitive->target_pose .x , movec_primitive->target_pose .y , movec_primitive->target_pose .z ,
113+ movec_primitive->target_pose .rx , movec_primitive->target_pose .ry , movec_primitive->target_pose .rz
114+ };
108115 second_block = { movec_primitive->via_point_pose .x , movec_primitive->via_point_pose .y ,
109116 movec_primitive->via_point_pose .z , movec_primitive->via_point_pose .rx ,
110117 movec_primitive->via_point_pose .ry , movec_primitive->via_point_pose .rz };
@@ -116,7 +123,7 @@ bool TrajectoryPointInterface::writeMotionPrimitive(const std::shared_ptr<contro
116123 case control::MotionType::SPLINE:
117124 {
118125 auto spline_primitive = std::static_pointer_cast<control::SplinePrimitive>(primitive);
119- positions = spline_primitive->target_positions ;
126+ first_block = spline_primitive->target_positions ;
120127 second_block = spline_primitive->target_velocities ;
121128 if (spline_primitive->target_accelerations .has_value ())
122129 {
@@ -129,7 +136,7 @@ bool TrajectoryPointInterface::writeMotionPrimitive(const std::shared_ptr<contro
129136 }
130137
131138 size_t index = 0 ;
132- for (auto const & pos : positions )
139+ for (auto const & pos : first_block )
133140 {
134141 int32_t val = static_cast <int32_t >(round (pos * MULT_JOINTSTATE));
135142 buffer[index] = htobe32 (val);
0 commit comments