Beispiel #1
0
    def start(self):
        # Find the hal_hw_interface comp's directory in
        # LD_LIBRARY_PATH and put it into $COMP_DIR
        for path in os.environ.get("LD_LIBRARY_PATH", "").split(":"):
            rospy.loginfo(f"Checking for hal_hw_interface.so in {path}")
            if os.path.exists(os.path.join(path, "hal_hw_interface.so")):
                comp_dir = path
                break
        else:
            comp_dir = ""
        os.environ["COMP_DIR"] = comp_dir
        rospy.loginfo("hal_mgr:  COMP_DIR set to '%s'" % comp_dir)

        # Get parameters
        if not rospy.has_param(self.NAME):
            self.shutdown("No parameters set for '%s'" % self.NAME, 1)
        try:
            hal_mgr_config = rospy.get_param(self.NAME)
        except KeyError:
            self.shutdown("No keys defined at %s" % self.NAME, 1)
            return

        if "hal_files" not in hal_mgr_config:
            self.shutdown("%s has no 'hal_files' key" % self.NAME, 1)
        if "hal_file_dir" not in hal_mgr_config:
            self.shutdown("%s has no 'hal_file_dir' key" % self.NAME, 1)

        # Set up HAL
        launcher.cleanup_session()  # kill any running Machinekit instances
        launcher.start_realtime()
        rospy.loginfo("hal_mgr:  Started realtime")

        # Load rtapi module and set up signal handlers
        if not getattr(rtapi, "__rtapicmd"):
            rtapi.init_RTAPI()

        def shutdown_graceful(signum, frame):
            self.shutdown("Gracefully shutting down after interrupt signal")

        signal.signal(signal.SIGINT, shutdown_graceful)
        signal.signal(signal.SIGTERM, shutdown_graceful)

        # Load HAL configuration
        for fname in hal_mgr_config["hal_files"]:
            fpath = os.path.join(hal_mgr_config["hal_file_dir"], fname)
            if not os.path.exists(fpath):
                self.shutdown(
                    "No file '%s' in directory '%s'" %
                    (fname, hal_mgr_config["hal_file_dir"]),
                    res=1,
                )
            rospy.loginfo("hal_mgr:  Loading hal file '%s'" % fname)
            launcher.load_hal_file(fpath)
            rospy.loginfo("hal_mgr:  Loading hal file '%s' complete" % fpath)

        # Spin until ROS shutdown event
        rospy.loginfo("ROS node and HAL started successfully")
        self._pub.publish(True)
Beispiel #2
0
def hal_config():
    from machinekit import launcher

    launcher.cleanup_session()
    comp_path = os.path.join(
        os.path.dirname(os.path.realpath(__file__)),
        '../components/absolute_joint.icomp',
    )
    launcher.install_comp(comp_path)
    launcher.start_realtime()
    rt.init_RTAPI()

    config = HalConfig(thread=THREAD)
    rt.newthread(config.thread.name, config.thread.period_ns, fp=True)
    hal.start_threads()

    yield config

    hal.stop_threads()
    launcher.end_session()
Beispiel #3
0
#parser = argparse.ArgumentParser(description='Chip Hello World')


def check_mklaucher():
    try:
        subprocess.check_output(['pgrep', 'mklauncher'])
        return True
    except subprocess.CalledProcessError:
        return False


try:
    launcher.check_installation()
    launcher.cleanup_session()
    launcher.start_realtime()
    launcher.load_hal_file('chip.py')
    launcher.register_exit_handler()  # needs to executed after HAL files

    #    if not check_mklaucher():  # start mklauncher if not running to make things easier
    #        launcher.start_process('mklauncher .')

    while True:
        launcher.check_processes()
        time.sleep(1)

except subprocess.CalledProcessError:
    launcher.end_session()
    sys.exit(1)

sys.exit(0)
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# very small helper script for short-cutting
# input and output pins when passing data
# thru HAL shared memory setup
import sys
import time
import subprocess

from machinekit import launcher
from machinekit import hal

try:
    launcher.check_installation()
    launcher.cleanup_session()  # kill any running Machinekit instances
    launcher.start_realtime()  # start Machinekit realtime environment

    while 'ul_iface_component.joint_6.pos-cmd' not in hal.pins:
        time.sleep(0.5)

    print('found HAL pin, connecting')
    # create 6 signals between pos-cmd and pos-fb pins
    # when machinekit_ros_control has started with
    # parameter machinekit_interface: 0
    for i in range(1, 7):
        hal.Pin('ul_iface_component.joint_%s.pos-cmd' % i).link(
            'ul_iface_component.joint_%s.pos-fb' % i)

    launcher.register_exit_handler(
    )  # enable on ctrl-C, needs to executed after HAL files
Beispiel #5
0
    # override default $MACHINEKIT_INI with a version which was REMOTE=1
    launcher.set_machinekit_ini('/etc/linuxcnc/machinekit.ini')

try:
    launcher.check_installation()
    launcher.cleanup_session()
    launcher.load_bbio_file('led-demo.bbio')
    if args.config:
        # the point-of-contact for QtQUickVCP
        launcher.start_process('configserver -n Motorctrl-Demo .')
    if args.webtalk:
        # the Websockets/JSON bridge into Machinetalk
        launcher.start_process('webtalk --ini led-demo.ini')
    if args.video:
        launcher.start_process('videoserver --ini video.ini Webcam1')
    launcher.start_realtime()

#    launcher.load_hal_file('hardware.hal',  'hardware.ini')
    command = 'halcmd -i hardware.ini -f hardware.hal'
    subprocess.check_call(command, shell=True)

#    launcher.load_hal_file('hardware.hal',  'led-demo.ini')

    #launcher.load_hal_file('led-demo.hal', 'led-demo.ini')
    command = 'halcmd -i led-demo.ini -f led-demo.hal'
    subprocess.check_call(command, shell=True)

    #launcher.load_hal_file('threading.hal', 'led-demo.ini')
    command = 'halcmd -i led-demo.ini -f threading.hal'
    subprocess.check_call(command, shell=True)
Beispiel #6
0
parser.add_argument('-m', '--halmeter', help='Starts the halmeter', action='store_true')
parser.add_argument('-d', '--debug', help='Enable debug mode', action='store_true')

args = parser.parse_args()

if args.debug:
    launcher.set_debug_level(5)

if 'MACHINEKIT_INI' not in os.environ:  # export for package installs
    mkconfig = config.Config()
    os.environ['MACHINEKIT_INI'] = mkconfig.MACHINEKIT_INI

try:
    launcher.check_installation()
    launcher.cleanup_session()  # kill any running Machinekit instances
    launcher.start_realtime()  # start Machinekit realtime environment
    launcher.load_hal_file('anddemo.py')  # load the main HAL file
    launcher.register_exit_handler()  # enable on ctrl-C, needs to executed after HAL files

    launcher.ensure_mklauncher()  # ensure mklauncher is started

    if not args.no_config:
        # the point-of-contact for QtQUickVCP
        launcher.start_process('configserver -n AND-Demo .')
    if args.gladevcp:
        # start the gladevcp version
        if args.local:
            # no -N flag - local case, use IPC sockets, no zeroconf resolution
            launcher.start_process('gladevcp -E -u motorctrl.py motorctrl.ui')
        else:
            # -N - remote case, use zeroconf resolution