Здравствуйте. Я создал файл запуска, в котором я сгруппировал два ur5 с ns "robot1" и "robot2". Я публикую sh углы соединения в topi c "/ robot1 / arm_controller / command /" и "/ robot2 / arm_controller / command /", и оба робота двигаются нормально. Скажем, я выполнил две функции, которые отвечают за перемещение публикации углов соединения в соответствующих темах. т. е.
script.py
class MoveRobot(object):
def __init__(self):
rospy.init_node('move_robot')
pass
def publish_angles(self):
reset_robot = JointTrajectoryPoint()
reset_joint_values = self.joints
reset_robot.positions = reset_joint_values
reset_robot.time_from_start = rospy.Duration(0.5)
self.traj.points = [reset_robot]
self.action_pub.publish(self.traj)
rospy.sleep(2)
class Robot1(MoveRobot):
def __init__(self):
super(Robot1, self).__init__()
self.action_pub = rospy.Publisher("robot1/arm_controller/command", JointTrajectory, queue_size=1)
self.joints = [1.5708,-1.5708,0, 3.14159, -1.5708,0]
class Robot2(MoveRobot):
def __init__(self):
super(Robot2, self).__init__()
self.action_pub = rospy.Publisher("robot2/arm_controller/command", JointTrajectory, queue_size=1)
self.joints = [1.5708,-1.5708,0, 3.14159, -1.5708,0]
multiPro c .py
Итак, здесь я порождаю два процессора, чтобы одновременно публиковать sh объединенные значения в роботах и переместите их
import multiprocessing as mp
from script import MoveRobot, Robot1, Robot2
class Workers(mp.Process):
def __init__(self, agent):
super(Workers, self).__init__()
self.agent = agent
def run(self):
self.agent.publish_angles()
class make_vectorized_agents():
def __init__(self, robots):
workers = []
for r in (robots):
w = Workers(r)
workers.append(r)
w.daemon = True
w.start()
for w in workers:
w.join()
r1 = Robot1()
r2 = Robot2()
m = make_vectorized_agents([r1, r2])
Unfortunately, when I do it I get error as,
Process Worker-2:
Traceback (most recent call last):
rospy.sleep(0.01)
File "/opt/ros/melodic/lib/python2.7/dist-packages/rospy/timer.py", line 165, in sleep
raise rospy.exceptions.ROSInterruptException("ROS shutdown request")
ROSInterruptException: ROS shutdown request
Process Worker-1:
Traceback (most recent call last):
File "/usr/lib/python2.7/multiprocessing/process.py", line 267, in _bootstrap
self.run()
raise rospy.exceptions.ROSInterruptException("ROS shutdown request")
ROSInterruptException: ROS shutdown request
Кажется, что rosnode не может работать с несколькими процессорами, потому что он отключается, когда два процесса работают одновременно. Или мне нужно что-то еще настроить?