Exemple #1
0
    def run_rosrun(self, data):
        rosrun_commands = utils.list_rosorun_commands()
        if data.get('command') in rosrun_commands:
            cmd = 'PYTHONUNBUFFERED=false rosrun ' + data.get('command') + ' ' + data.get('args')
            process = Popen(cmd, shell=True, stdout=PIPE)

            # Note: The launched rosnode-name does not appear the soon after roslaunch is executed.
            # Therefore, sleep is neccessary to wait it finishes to launch.
            time.sleep(2)
            msg = {
                    'uuid': self.id,
                    'rosnodes': rosnode.get_node_names(),
                    'rostopics': utils.list_rostopics()
                    }
            self.sio.emit('update_rosnodes', json.dumps(msg), namespace=self.nms)

            while True:
                output = process.stdout.readline()
                if output == '' and process.poll() is not None:
                    break
                if output:
                    msg = {
                            "cmd": data.get('command').replace(" ", "-"),
                            "robotUuid": self.id,
                            "log": output.strip(),
                            }
                    self.sio.emit('rosrun_log', json.dumps(msg), namespace=self.nms)
                    print(output.strip())
            process.poll()
Exemple #2
0
    def connect(self):
        ros_root = rospkg.get_ros_root()
        r = rospkg.RosPack()
        manifest = r.get_manifest('rowma_ros')
        rowma_ros_version = manifest.version

        launch_commands = utils.list_launch_commands()
        rosrun_commands = utils.list_rosorun_commands()
        rostopics = utils.list_rostopics()
        uuid = os.environ.get('UUID', self.id)
        msg = {
                'uuid': uuid,
                'launch_commands': launch_commands,
                'rosnodes': rosnode.get_node_names(),
                'rosrun_commands': rosrun_commands,
                'rowma_ros_version': rowma_ros_version,
                'rostopics': rostopics,
                'reconnection': self.reconnecting
                }

        api_key = os.environ.get('API_KEY')
        if api_key:
            msg['api_key'] = api_key

        self.sio.emit('register_robot', json.dumps(msg), namespace=self.nms)
        utils.print_success('connection established')
Exemple #3
0
 def unsubscribe_rostopic(self, data):
     utils.print_debug(data)
     self.subscribers = list(filter(lambda s: s['topic'] != data.get('topic'), self.subscribers))
     msg = {
             'uuid': self.id,
             'rosnodes': rosnode.get_node_names(),
             'rostopics': utils.list_rostopics()
             }
     self.sio.emit('update_rosnodes', json.dumps(msg), namespace=self.nms)
Exemple #4
0
 def kill_rosnodes(self, data):
     rosnode.kill_nodes(data.get('rosnodes'))
     # Note: The launched rosnode-name does not appear the soon after roslaunch is executed.
     # Therefore, sleep is neccessary to wait it finishes to launch.
     time.sleep(2)
     msg = {
             'uuid': self.id,
             'rosnodes': rosnode.get_node_names(),
             'rostopics': utils.list_rostopics()
             }
     self.sio.emit('update_rosnodes', json.dumps(msg), namespace=self.nms)
     print('killed')