ros-pybullet / ros_pybullet_interface

ROS-PyBullet Interface.
https://ros-pybullet.github.io/ros_pybullet_interface/
BSD 3-Clause "New" or "Revised" License
74 stars 13 forks source link

Naming and message type of the topic joint_states/target #2

Open JuanDelAguila opened 1 year ago

JuanDelAguila commented 1 year ago

@joaomoura24 and I have been discussing that the topic joint_states/target maybe should be renamed to joint_states/command to remain consistent with conventions in robot control. Additionally, the topic joint_states/target uses a sensor_msgs/JointState message type which is usually reserved for reading joint_states, not for commanding. Perhaps a more standard message type should be used for commanding joints such as std_msgs/Float64MultiArray.

cmower commented 1 year ago

Thanks @JuanDelAguila

I think the best thing is to create a flag that the user can set in the robot yaml configuration file, e.g. target_message_type: 'JointState' # or 'Float64MultiArray'. First you will need to implement extractor methods, e.g.


@staticmethod
def get_target_from_joint_state_msg(msg: JointState):
    # TODO: convert JointState to list
    return q

@staticmethod
def get_target_from_float64multiarray(msg: Float64MultiArray):
    # TODO: convert Float64MultiArray to list
    return

then after the following if-statement

https://github.com/ros-pybullet/ros_pybullet_interface/blob/5b05fa2f477823d231f956abe08a8c59fd30f8a2/ros_pybullet_interface/src/rpbi/pybullet_robot_joints.py#L135-L136

you can set the extractor function as a class variable, e.g.

if self.target_message_type == 'JointState':
    self.get_target_from_msg = self.get_target_from_jointstate
elif # TODO...

then call this function inside the set_target method.