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)
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()
#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
# 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)
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