A toolset for .

get_key[source]

get_key(dict, value)

myip[source]

myip()

whoami[source]

whoami(data)

get_xbee_address[source]

get_xbee_address(dict, value)

get_xbee_address_boat[source]

get_xbee_address_boat(dict, value)

find_duckiepond_devices_yaml[source]

find_duckiepond_devices_yaml(yaml_filename='duckiepond-devices.yaml')

dp_load_config[source]

dp_load_config(dp_yaml_path)

dp_get_devices[source]

dp_get_devices(dp_yaml_path, pattern=`'boat'`*)

device_get_sensors[source]

device_get_sensors(dict, device='sensor1')

sensor_get_topic[source]

sensor_get_topic(dp_dict, device='sensor1', find='zed')

ssh_ping_nano[source]

ssh_ping_nano(hostname)

ssh_ping_rpi[source]

ssh_ping_rpi(hostname)

test_ssh_intranet[source]

test_ssh_intranet()

ssh_connection[source]

ssh_connection(hostname)

test_ssh[source]

test_ssh()

ip_connection[source]

ip_connection(hostname)

test_ping[source]

test_ping()

ssh_rostopic[source]

ssh_rostopic(hostname, rosversion='melodic')

test_rostopic[source]

test_rostopic()

Testing example

cd data
[Errno 2] No such file or directory: 'data'
/home/arg/arg_robotics_tools/data
ip = myip()
print(ip)
140.113.148.77

To use this library, dp_yaml_path and dp_load_config is most important functions, do it first

dp_yaml_path = find_duckiepond_devices_yaml("duckiepond-devices-machine.yaml")
print(dp_yaml_path)
/home/arg/arg_robotics_tools/data/duckiepond-devices-machine.yaml
dp_dict = dp_load_config(dp_yaml_path)
print(dp_dict)
{'basestation': {'ip': '192.168.1.77'}, 'boat1': {'xbee': {'xbee_pair': 'anchor1'}, 'rpi': {'ip': '192.168.1.10', 'ip_in': '192.168.0.100', 'xbee_rx': '41AF1BAD', 'hostname': 'dtrpiboat01'}, 'nano': {'ip': '192.168.1.13', 'ip_in': '192.168.0.106', 'xbee_tx': '41AF1B1A', 'hostname': 'dtnanoboat01'}}, 'boat2': {'xbee': {'xbee_pair': 'anchor2'}, 'rpi': {'ip': '192.168.1.20', 'ip_in': '192.168.0.100', 'xbee_rx': '41AF1B4B', 'hostname': 'dtrpiboat02'}, 'nano': {'ip': '192.168.1.23', 'ip_in': '192.168.0.106', 'xbee_tx': '41AF1AD4', 'hostname': 'dtnanoboat02'}}, 'boat3': {'xbee': {'xbee_pair': 'anchor3'}, 'rpi': {'ip': '192.168.1.30', 'ip_in': '192.168.0.100', 'xbee_rx': '417E5F98', 'hostname': 'dtrpiboat03'}, 'nano': {'ip': '192.168.1.33', 'ip_in': '192.168.0.106', 'xbee_tx': '417E629D', 'hostname': 'dtnanoboat03'}}, 'boat4': {'xbee': {'xbee_pair': 'anchor4'}, 'rpi': {'ip': '192.168.1.40', 'ip_in': '192.168.0.100', 'xbee_rx': '41AF1C55', 'hostname': 'dtrpiboat04'}, 'nano': {'ip': '192.168.1.43', 'ip_in': '192.168.0.106', 'xbee_tx': '41AF1B91', 'hostname': 'dtnanoboat04'}}, 'boat5': {'xbee': {'xbee_pair': 'anchor5'}, 'rpi': {'ip': '192.168.1.50', 'ip_in': '192.168.0.100', 'xbee_rx': '417E6274', 'hostname': 'dtrpiboat05'}, 'nano': {'ip': '192.168.1.53', 'ip_in': '192.168.0.106', 'xbee_tx': '41AF1B77', 'hostname': 'dtnanoboat05'}}, 'boat6': {'xbee': {'xbee_pair': 'anchor6'}, 'rpi': {'ip': '192.168.1.60', 'ip_in': '192.168.0.100', 'xbee_rx': '41AF1B02', 'hostname': 'dtrpiboat06'}, 'nano': {'ip': '192.168.1.63', 'ip_in': '192.168.0.106', 'xbee_tx': '41AF1C04', 'hostname': 'dtnanoboat06'}}, 'boat7': {'xbee': {'xbee_pair': 'anchor7'}, 'rpi': {'ip': '192.168.1.70', 'ip_in': '192.168.0.100', 'xbee_rx': '41AF1B87', 'hostname': 'dtrpiboat07'}, 'nano': {'ip': '192.168.1.73', 'ip_in': '192.168.0.106', 'xbee_tx': '41AF1B23', 'hostname': 'dtnanoboat07'}}, 'boat8': {'xbee': {'xbee_pair': 'anchor8'}, 'rpi': {'ip': '192.168.1.80', 'ip_in': '192.168.0.100', 'xbee_rx': '41AF156D', 'hostname': 'dtrpiboat08'}, 'nano': {'ip': '192.168.1.83', 'ip_in': '192.168.0.106', 'xbee_tx': '41AF1B34', 'hostname': 'dtnanoboat08'}}, 'anchor1': {'rpi_1': {'ip': '192.168.1.12', 'xbee_tx': '417E62BD', 'hostname': 'dtrpianchor01', 'uwb': '0x 6a66'}, 'rpi_2': {'ip': '192.168.1.11', 'xbee_rx': '41AF1BEE', 'hostname': 'dtrpianchor01rx'}}, 'anchor2': {'rpi_1': {'ip': '192.168.1.22', 'xbee_tx': '41AF1B2C', 'hostname': 'dtrpianchor02', 'uwb': '0x 6a0c'}, 'rpi_2': {'ip': '192.168.1.21', 'xbee_rx': '417E6294', 'hostname': 'dtrpianchor02rx'}}, 'anchor3': {'rpi_1': {'ip': '192.168.1.32', 'xbee_tx': '417E7214', 'hostname': 'dtrpianchor03', 'uwb': '0x 6a57'}, 'rpi_2': {'ip': '192.168.1.31', 'xbee_rx': '417E6281', 'hostname': 'dtrpianchor03rx'}}, 'anchor4': {'rpi_1': {'ip': '192.168.1.42', 'xbee_tx': '41AF24A5', 'hostname': 'dtrpianchor04', 'uwb': '0x 6744'}, 'rpi_2': {'ip': '192.168.1.41', 'xbee_rx': '41AF1B7E', 'hostname': 'dtrpianchor04rx'}}, 'anchor5': {'rpi_1': {'ip': '192.168.1.52', 'xbee_tx': '41AF1BB7', 'hostname': 'dtrpianchor05', 'uwb': '0x 6a48'}, 'rpi_2': {'ip': '192.168.1.51', 'xbee_rx': '417E628A', 'hostname': 'dtrpianchor05rx'}}, 'anchor6': {'rpi_1': {'ip': '192.168.1.62', 'xbee_tx': '41AF1C2C', 'hostname': 'dtrpianchor06', 'uwb': '0x 6a41'}, 'rpi_2': {'ip': '192.168.1.61', 'xbee_rx': '4109910A', 'hostname': 'dtrpianchor06rx'}}, 'anchor7': {'rpi_1': {'ip': '192.168.1.72', 'xbee_tx': '417E6E0E', 'hostname': 'dtrpianchor07', 'uwb': '0x 670c'}, 'tvl': {'ip': '10.10.10.22'}}, 'anchor8': {'rpi_1': {'ip': '192.168.1.82', 'xbee_tx': '417E7240', 'hostname': 'dtrpianchor08', 'uwb': '0x 6a78'}, 'tvl': {'ip': '10.10.10.10'}}, 'sensor1': {'kv': {'ip': '192.168.1.14', 'ip_in': '192.168.0.100', 'hostname': 'dtkvtower01'}, 'nano': {'ip': '192.168.1.15', 'ip_in': '192.168.0.106', 'hostname': 'dtnanotower01'}, 'topics': {'zed': 'left_raw/img', 'mmwave0': 'radar_0/ti_mmwave/ti_mmwave/radar_scan_pcl', 'mmwave1': 'radar_1/ti_mmwave/ti_mmwave/radar_scan_pcl', 'mmwave2': 'radar_2/ti_mmwave/ti_mmwave/radar_scan_pcl', 'mmwave3': 'radar_3/ti_mmwave/ti_mmwave/radar_scan_pcl'}}, 'sensor2': {'kv': {'ip': '192.168.1.24', 'ip_in': '192.168.0.100', 'hostname': 'dtkvtower02'}, 'nano': {'ip': '192.168.1.25', 'ip_in': '192.168.0.106', 'hostname': 'dtnanotower02'}, 'topics': {'zed': 'left_raw/img', 'mmwave0': 'radar_0/ti_mmwave/ti_mmwave/radar_scan_pcl', 'mmwave1': 'radar_1/ti_mmwave/ti_mmwave/radar_scan_pcl', 'mmwave2': 'radar_2/ti_mmwave/ti_mmwave/radar_scan_pcl', 'mmwave3': 'radar_3/ti_mmwave/ti_mmwave/radar_scan_pcl'}}, 'sensor3': {'kv': {'ip': '192.168.1.34', 'ip_in': '192.168.0.100', 'hostname': 'dtkvtower03'}, 'nano': {'ip': '192.168.1.35', 'ip_in': '192.168.0.106', 'hostname': 'dtnanotower03'}, 'topics': {'zed': 'left_raw/img', 'mmwave0': 'radar_0/ti_mmwave/ti_mmwave/radar_scan_pcl', 'mmwave1': 'radar_1/ti_mmwave/ti_mmwave/radar_scan_pcl', 'mmwave2': 'radar_2/ti_mmwave/ti_mmwave/radar_scan_pcl', 'mmwave3': 'radar_3/ti_mmwave/ti_mmwave/radar_scan_pcl'}}, 'sensor4': {'nx': {'ip': '192.168.1.44', 'ip_in': '192.168.0.100', 'hostname': 'dtnxtower04'}, 'topics': {'dreamvu': 'dreamvu/pal/get/left', 'mmwave0': 'radar_0/ti_mmwave/ti_mmwave/radar_scan_pcl', 'mmwave1': 'radar_1/ti_mmwave/ti_mmwave/radar_scan_pcl', 'mmwave2': 'radar_2/ti_mmwave/ti_mmwave/radar_scan_pcl', 'mmwave3': 'radar_3/ti_mmwave/ti_mmwave/radar_scan_pcl'}}, 'sensor5': {'nx': {'ip': '192.168.1.54', 'ip_in': '192.168.0.100', 'hostname': 'dtnxtower05'}, 'topics': {'theta_z1': 'color_raw/img'}}, 'sensor6': {'agx': {'ip': '192.168.1.64', 'ip_in': '192.168.0.100', 'hostname': 'dtagxtower06'}, 'topics': {'lidar': 'laser_scan', 'mmwave0': 'radar_0/ti_mmwave/ti_mmwave/radar_scan_pcl', 'mmwave1': 'radar_1/ti_mmwave/ti_mmwave/radar_scan_pcl', 'mmwave2': 'radar_2/ti_mmwave/ti_mmwave/radar_scan_pcl', 'mmwave3': 'radar_3/ti_mmwave/ti_mmwave/radar_scan_pcl'}}, 'husky1': {'ipc_1': {'ip': '192.168.1.90', 'ip_in': '192.168.0.100', 'hostname': 'dtipc1husky01'}, 'ipc_2': {'ip': '192.168.1.93', 'ip_in': '192.168.0.106', 'hostname': 'dtipc2husky01'}}, 'husky2': {'ipc': {'ip': '192.168.1.100', 'hostname': 'dtipchusky02'}}, 'jackal1': {'nuc': {'ip': '192.168.1.110', 'hostname': 'dtnucjackal01'}}, 'jackal2': {'nuc': {'ip': '192.168.1.120', 'hostname': 'dtnucjackal02'}}, 'uav1': {'nano': {'ip': '192.168.1.130', 'hostname': 'dtnanouav01'}}, 'dt-kv-01': {'kv260': {'ip': '192.168.1.16', 'hostname': 'dtkv260bot01', 'uwb': '0x 6a15'}}, 'dt-kv-02': {'kv260': {'ip': '192.168.1.26', 'hostname': 'dtkv260bot02', 'uwb': '0x 6a41'}}, 'dt-kv-03': {'kv260': {'ip': '192.168.1.36', 'hostname': 'dtkv260bot03', 'uwb': '0x 6a18'}}, 'dt-kv-04': {'kv260': {'ip': '192.168.1.46', 'hostname': 'dtkv260bot04', 'uwb': '0x 674f'}}, 'dt-kv-05': {'kv260': {'ip': '192.168.1.56', 'hostname': 'dtkv260bot05', 'uwb': '0x 6a2c'}}, 'dt-kv-06': {'kv260': {'ip': '192.168.1.66', 'hostname': 'dtkv260bot06', 'uwb': '0x 6a17'}}, 'dt-kv-07': {'kv260': {'ip': '192.168.1.76', 'hostname': 'dtkv260bot07', 'uwb': '0x 6a05'}}, 'network-box1': {'nuc': {'ip': '192.168.1.5', 'ip_in': '192.168.0.100', 'hostname': 'dtnucnbox01'}, '4g_router': {'ip': '111.70.9.53', 'port': 22, 'SSID': '4g-network-box01'}, 'unify_router': {'ip': '192.168.1.1', 'SSID': 'wamv-network'}}, 'network-box2': {'nuc': {'ip': '192.168.1.5', 'ip_in': '192.168.0.100', 'hostname': 'dtnucnbox02'}, '4g_router': {'ip': '111.70.9.27', 'port': 22, 'SSID': '4g-network-box02'}, 'unify_router': {'ip': '192.168.1.1', 'SSID': 'wamv-network'}}, 'network-box3': {'nuc': {'ip': '192.168.1.5', 'ip_in': '192.168.0.100', 'hostname': 'dtnucnbox03'}, '4g_router': {'ip': 'DHCP', 'SSID': '4g-network-box03'}, 'unify_router': {'ip': '192.168.1.1', 'SSID': 'wamv-network'}}}

Below code will catch your local ip so the device you run this code should be in the yaml file, if you use your laptop to run it, eventually get the error, no mind!

machine,device = whoami(dp_dict)
xbee_address = get_xbee_address_boat(dp_dict,machine)

print(machine)
print(device)
print(xbee_address)

dp_get_devices is the function to list out what device we have in yaml, look carefull below of how to use

boats = dp_get_devices(dp_yaml_path, 'boat*')
print("load boats: {}".format(boats))
load boats: ['boat1', 'boat2', 'boat3', 'boat4', 'boat5', 'boat6', 'boat7', 'boat8']
dtkvbots = dp_get_devices(dp_yaml_path, 'dt-kv*')
print("load bots: {}".format(dtkvbots))
load bots: ['dt-kv-01', 'dt-kv-02', 'dt-kv-03', 'dt-kv-04', 'dt-kv-05', 'dt-kv-06', 'dt-kv-07']
anchors = dp_get_devices(dp_yaml_path, 'anchor*')
print("load anchors: {}".format(anchors))
load anchors: ['anchor1', 'anchor2', 'anchor3', 'anchor4', 'anchor5', 'anchor6', 'anchor7', 'anchor8']
sensors = dp_get_devices(dp_yaml_path, 'sensor*')
print("load sensors: {}".format(sensors))
load sensors: ['sensor1', 'sensor2', 'sensor3', 'sensor4', 'sensor5', 'sensor6']

device_get_sensors and sensor_get_topic could use together as below, it will be very convenienc even work with dp_get_devices

sensors = device_get_sensors(dp_dict, 'sensor4')
print(sensors)
['dreamvu', 'mmwave0', 'mmwave1', 'mmwave2', 'mmwave3']
for sensor in sensors:
    topic = sensor_get_topic(dp_dict, 'sensor4', sensor)
    print(topic)
dreamvu/pal/get/left
radar_0/ti_mmwave/ti_mmwave/radar_scan_pcl
radar_1/ti_mmwave/ti_mmwave/radar_scan_pcl
radar_2/ti_mmwave/ti_mmwave/radar_scan_pcl
radar_3/ti_mmwave/ti_mmwave/radar_scan_pcl