ros-话题节点消息Publish Joint_State with Python to RVIZ-ros回炉再强学习(6)
笔者工作环境:
ubuntu16.04
ros-kinect
代码下载地址:https://gitee.com/qiuzhixiaoniao/arm_3.0.git
在 不使用moveit 的情况下,单纯时控制gazebo中机械臂运动,并且在rviz中订阅机械臂模型,跟随gazebo中机械臂完成同步运动已经实现了,然而并没有关注重点是机器人如何运行的,对通信机制没有仔细研究。
1.首先urdf模型在rviz中显示出来的节点消息通信。
joint_state_publisher_gui节点通过话题/joint_states向节点/robot_state_publihser发布消息,然后rviz通过订阅了tf这个话题,可以显示出来机械臂的模型。
这也就是我们看到的rviz中滑动每个关节的滑条可以控制机械臂每个关节运动。
通过代码控制rviz中的机械臂。
Publish Joint_State with Python to RVIZ
编写代码
rviz_move.py
#!/usr/bin/env python
import rospy
from sensor_msgs.msg import JointState
from std_msgs.msg import Header
def talker():
pub = rospy.Publisher('joint_states', JointState, queue_size=10)
rospy.init_node('joint_state_publisher')
rate = rospy.Rate(10) # 10hz
hello_str = JointState()
hello_str.header = Header()
hello_str.header.stamp = rospy.Time.now()
hello_str.name = ['joint1', 'joint2', 'joint3', 'joint4','left_joint','right_joint']
hello_str.position = [3, 0.5418, -1.7297, -3.1017,0.1,0.1]
hello_str.velocity = []
hello_str.effort = []
pub.publish(hello_str)
rate.sleep()
if __name__ == '__main__':
try:
talker()
except rospy.ROSInterruptException:
pass
首先将机械臂显示在rviz中,并且要杀死/joint_state_publisher_gui
节点,如果不杀死这个节点,他将持续为机械臂发布节点话题消息。我们无法通过代码使得rviz中机器人运动。