|
NAMElegoctl - Lego robot communication and control utilitySYNOPSISlegoctl [flags] command [arguments] Enter "legoctl" with no arguments for a brief list of flags. PURPOSEThe legoctl command is a utility for communicating with and controlling Lego robotics bricks, such as the RCX, and NXT.DESCRIPTIONLegoctl is used to perform basic operations such as uploading files, displaying status information about the brick, starting and stopping programs, etc.Legoctl is based on the Robot Control library (-lroboctl), and is intended to run on all Unix-like compatible platforms. It was developed under FreeBSD, and is also known to work under Cygwin, Linux, and Mac OS X. Since the default security settings of typical Unix systems are fairly restrictive, it may be necessary to adjust device permissions to allow non root users to use legoctl. USB on FreeBSDOn FreeBSD 5.x and later, this requires altering the devfs configuration.For Lego NXT USB devices, the simplest solution (for those who aren't concerned about the security of their USB devices) is adding the following lines to /etc/devfs.rules: [system=10] add path 'ugen*' mode 666 group operator add path 'usb*' mode 666 group operator Also make sure /etc/rc.conf contains the following: devd_enable="YES" devfs_system_ruleset="system" Then run: /etc/rc.d/devfs restart USB device nodes are created according to these rules when the device is plugged in. Note that these rules make all generic USB devices writable to all users. A slightly more secure method for systems with multiple users would be to use permissions of 664, and add the those users whom you wish to have write access to the devices to the operator group. USB on Linux (Xubuntu 6)Note that these are the configuration steps necessary for Xubuntu 6. Other Linux distributions may require additional configuration.Like FreeBSD, Linux USB device nodes are created on-the-fly when a device is connected, and are by default only writable by root. To make the NXT writable by all users, create the file /etc/udev/rules.d/70-legonxt.rules containing the following lines: # Lego NXT BUS="usb", SYSFS{idVendor}="0694", MODE="0666" Serial ports on FreeBSDLego RCX users will need to configure a serial port for brick communication. Serial device nodes are static (created at boot time) on FreeBSD. To make them writable use chmod to change the permissions on /dev/cuaa*, and edit /etc/devfs.conf to make the changes survive the next reboot. For RCX serial devices, the following rules would do the trick:perm /dev/cuaa0 0666 perm /dev/cuaa1 0666 Note again that these rules make all serial devices plugged into com1 and com2 writable to all users. Consider the consequences before setting up such rules. BLUETOOTHThe Bluetooth interface is currently supported on FreeBSD and Linux. Before you can use bluetooth, you must configure the bluetooth daemon for your OS, and then pair the NXT with your computer. ("Pairing" a bluetooth device is like plugging in a wired device such as USB, Firewire, etc.)To configure and pair your bluetooth connection in a fairly automated fashion, run the lego_bluetooth_config script. ( Included with the roboctl package. ) If you prefer to do the configuration manually, or if lego_bluetooth_config does not yet support your platform, see the instructions below. BLUETOOTH ON FREEBSDTo learn more about bluetooth options on FreeBSD, please see the Bluetooth section in the FreeBSD handbook.Note: These are the configuration steps followed by the lego_bluetooth_config script. You can perform these steps manually, or simply run the script. First, the appropriate bluetooth kernel modules must be loaded. For most USB bluetooth dongles, this is done using kldload ng_ubt To load the module at boot time, add the following to /boot/loader.conf: ng_ubt_load="YES" You can scan for bluetooth devices using hccontrol inquiry If you have more than one bluetooth channel, you can specify one for any hccontrol command with the -n flag, e.g. hccontrol -n ubt0hci inquiry The names of reporting devices can be retrieved using the remote_name_request command with the bluetooth address, e.g.: hccontrol remote_name_request 00:11:22:33:44:55 0 0 0 (Substitute your device address for 00:11:22:33:44:55). Next, you will need to enable the hcsecd daemon. This requires two steps. First, add an entry like the following to /etc/bluetooth/hcsecd.conf: device { bdaddr 00:11:22:33:44:55; name "NXT"; key nokey; pin "1234"; } Note that "NXT" is the default bluetooth name of the NXT brick, and 1234 is the default passcode. Naturally, if you have changed these settings on the Lego controller, you must configure hcsecd.conf to match. Next, add the following to /etc/rc.conf: hcsecd_enable="YES" To activate hcsecd, you will need to reboot or run /etc/rc.d/hcsecd start With hcsecd running, you can now perform pairing of your NXT with your FreeBSD box using the interface on the NXT brick. Note that the brick may report "Line busy" when you connect. This is a normal glitch, but will not prevent the link for working properly. If your Lego controller finds your computer and asks you for a passcode when you connect, you have probably succeeded. Finally, add an entry like the following to /etc/bluetooth/hosts: 00:11:22:33:44:55 NXT By default, Legoctl (and all other programs based on the roboctl library) will try to look up the address of the bluetooth device named "NXT" in the system bluetooth hosts database using bt_gethostbyname(3). Note that the name in the bluetooth hosts database does not have to be the same name programmed into the NXT brick. This is simply a name the operating system associates with the bluetooth address. If you have more than one NXT, they will of course need different names in the hosts database. You can select a non-default name on the command line with --btname name or by setting the environment variable ROBOCTL_BTNAME. In any case, the name and corresponding address must be in the bluetooth hosts database on your system. See lego_bluetooth_config above. BLUETOOTH ON LINUXThe methods outlined here have been tested on Xubuntu 6.06. Xubuntu has the bluetooth interface preconfigured and running in the default installation. Note that this may not be the case with all Linux distributions.These instructions currently work only for root. Additional instructions for making bluetooth devices available to non-privileged users will be added when time permits. You can scan for bluetooth devices using hcitool scan You can perform pairing of your NXT with your Linux box using the interface on the NXT brick (recommended), or manipulate the pairing from Linux using the following commands: hcitool scan # List devices in range hcitool cc 00:11:22:33:44:55 # Create connection FILES/dev/usb*, /dev/ugen*, /etc/devfs.conf, /etc/devfs.rules, /etc/usbd.conf /etc/bluetooth/hcsecd.conf, ~/.legoctl/bluetooth_address, /boot.loader.conf, /etc/rc.conf ENVIRONMENTThere are currently no environment settings that directly affect legoctl.SEE ALSOnbc(1), nxc(1), nqc(1), roboctl(3), vexctl(1), ape(1), devfs(8), hcsecd(8)BUGSMany commands are not yet implemented.EXAMPLESlegoctl status legoctl --btname NXT2 status legoctl upload prog.rxe AUTHORJason W. Bacon http://acadix.biz Visit the GSP FreeBSD Man Page Interface. |