- Linux
- Mac OS
You should keep the default settings while installing this software.
You need to download an image of the virtual machine to a separate directory . For example, a user's folder..
cd ~/DroneEmployeeVM/
sudo cat DroneEmployee.tar.xz.part* | unxz | tar xv
After installation and unarchiving you should have the following list of files:
TroubleShots: If the unarchiving process resulted in an error you can check the MD5 Hash of the sum of the parts of an archive.
md5 ~/DroneEmployeeVM/*
MD5 (DroneEmployee.tar.xz.partaa) = 3927979c3e7dee11cbda2d4220207320
MD5 (DroneEmployee.tar.xz.partab) = a807cea7cf5170f1db80a1d1f87c6a7b
MD5 (DroneEmployee.tar.xz.partac) = 83907daad08af0ddbeea89ca90cca7eb
MD5 (DroneEmployee.tar.xz.partad) = 56fd6b19b1d9fc22dc90e30bd4393d87
Next, You need to import an image of the virtual machine DroneEmployee.vbox
directly to VirtualBox program. Launch the imported image of the virtual machine.
As a result you should see the loading screen Linux Mint
. Wait until the operating system will fully load. A a result you should see the following:
Next, let's launch a Terminal in the operating system. Ctrl+Alt+T
Next, you need to do the following commands in the terminal:
source ws/devel/setup.bash
roslaunch small_atc dual.launch
The result should be:
... logging to /home/akru/.ros/log/3655313e-bb15-11e7-9e6a-0800272c3dfd/roslaunch-akru-VirtualBox-5570.log
Checking log directory for disk usage. This may take awhile.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.
started roslaunch server http://akru-VirtualBox:39965/
SUMMARY
========
PARAMETERS
* /rosdistro: kinetic
* /rosversion: 1.12.7
* /small_atc_1/air_traffic_controller/map_file: /home/akru/ws/src...
* /small_atc_1/geo_helper/dimentions: [4000, 4000, 10000]
* /small_atc_1/geo_helper/origin_altitude: -1139
* /small_atc_1/geo_helper/origin_latitude: 37.874815
* /small_atc_1/geo_helper/origin_longitude: -122.616569
* /small_atc_1/geo_helper/resolution: 3
* /small_atc_2/air_traffic_controller/map_file: /home/akru/ws/src...
* /small_atc_2/geo_helper/dimentions: [4000, 4000, 10000]
* /small_atc_2/geo_helper/origin_altitude: -1139
* /small_atc_2/geo_helper/origin_latitude: 37.874815
* /small_atc_2/geo_helper/origin_longitude: -122.616569
* /small_atc_2/geo_helper/resolution: 3
NODES
/small_atc_2/
air_traffic_controller (small_atc/small_atc_node)
geo_helper (small_atc/geo_helper.py)
/small_atc_1/
air_traffic_controller (small_atc/small_atc_node)
geo_helper (small_atc/geo_helper.py)
auto-starting new master
process[master]: started with pid [5582]
ROS_MASTER_URI=http://localhost:11311
setting /run_id to 3655313e-bb15-11e7-9e6a-0800272c3dfd
process[rosout-1]: started with pid [5595]
started core service [/rosout]
process[small_atc_1/air_traffic_controller-2]: started with pid [5598]
process[small_atc_1/geo_helper-3]: started with pid [5599]
process[small_atc_2/air_traffic_controller-4]: started with pid [5600]
process[small_atc_2/geo_helper-5]: started with pid [5601]
[ INFO] [1509108549.956670867]: Loaded topographic map: /home/akru/ws/src/drone_employee_ros/small_atc/data/tamalpais_park
[ INFO] [1509108550.056734523]: Loaded topographic map: /home/akru/ws/src/drone_employee_ros/small_atc/data/tamalpais_park
Next, we need to launch RViz. Let's open a new Terminal window and do the following command:
rosrun rviz rviz
As a result we will see a graphical interface of RViz:
At this point we launched roslaunch server http://akru-VirtualBox:39965/
, RViz
and prepared our virtual machine for its operation.
Let’s do an experiment with multiple autonomous airspace service providers (ASPs). To start, we need to send a transaction to an address of ASP 1.
aira-proto promisee -1 0x58fb6ael0DceEda47AED48E8c3A7046f5310d82C -p '0.1 ether' & (sleep 2 && rosbag play atcl. bag)
As a result we receive the following response:
[1] 42466
2017 Oct-23 09:27:13175878 [DEBUG] Aquired liability factory with address 58fb6ael0dceeda47aed48e8c3a7046f5310d82c [ WARN] [1508750834.045526908]: --max-splits is ignored without --split [ INFO] [1508750834.053054514]: Recording to blob_2017-10-23-09-27-14.bag.
[ INFO] [1508750834.054181287]: Subscribing to /rosout T
[ INFO] [1508750834.061224811]: Subscribing to /rosout_agg
[ INFO] [1508750835.266504178]: Opening atcl.bag
Waiting 0.2 seconds after advertising topics... done.
Hit space to toggle paused, or 's' to step.
[ INFO] [1508750836.073156260]: Subscribing to /clock.300670 / 4.457892 .03
[ INFO] [1508750836.080159927]: Subscribing to /objective793 / 4.457892
[ INFO] [1508750836.090707438]: Subscribing to /small_atc_l/route/request [[RUNNING] Bag Time: 1508708765.669516 Duration: 4.228422 / 4.457892
Next, let’s verify a transaction on the ASP 1 node:
aira-proto promisor -I 0x58fb6ael0DceEda47AED48E8c3A7046f531Od82C
As a result we can see that transaction has been made and ASP 1 starts to process the request according to a liability contract:
2017 Oct-23 09:26:50662232 [DEBUG] Aquired liability with address 58fb6ael0dceeda47aed48e8c3a7046f5310d82c
2017 Oct-23 09:27:52831627 [DEBUG] Objective hash aquired
2017 Oct-23 09:27:52832118 [DEBUG] Getting objective from IPFS...
Saving file(s) to blob
11.97 KB / 11.97 KB [===========================================================================================================================================] 100.00% Os
2017 Oct-23 09:27:53540733 [DEBUG] Objective bag received 2017 Oct-23 09:27:53541254 [DEBUG] Results bag record started 2017 Oct-23 09:27:53547386 [DEBUG] Objective bag playing...
[ WARN] [1508750874.534046227]: --max-splits is ignored without --split [ INFO] [1508750874.564128999]: Recording to blob 2017-10-23-11-27-54.bag.
[ INFO] [1508750874.570613676]: Subscribing to /smallatc 2/obstacle/0 [ INFO] [1508750874.571703816]: Opening /tmp/tmpThreadId221957747793424238335/blob
Waiting 0.2 seconds after advertising topics...! INFO] [1508750874.589725237]: Subscribing to /small atc_l/route/response [ INFO] [1508750874.605587043]: Subscribing to /rosout agg [ INFO] [1508750874.618946480]: Subscribing to /clicked point
[ INFO] [1508750874.632538262]: Subscribing to /smallatcl/route/response local *
[ INFO] [1508750874.654395107]: Subscribing to /small atcl/route/request local [ INFO] [1508750874.663688967]: Subscribing to /small_atc_l/obstacle/0 [ INFO] [1508750874.688134948]: Subscribing to /rosout
[ INFO] [1508750874.701331585]: Subscribing to /small ate 2/route/response [ INFO] [1508750874.714380435]: Subscribing to /initialpose [ INFO] [1508750874.726995123]: Subscribing to /move base simple/goal [ INFO] [1508750874.744045734]: Subscribing to /small ate 2/route/request local [ INFO] [1508750874.758226045]: Subscribing to /clock
[ INFO] [1508750874.770893930]: Subscribing to /small ate 2/route/response local done.
Hit space to toggle paused, or 's' to step.
[ INFO] [1508750875.793308174]: Subscribing to /small ate 1/route/request
[ INFO] [1508750875.797009184]: Subscribing to /objective
■[RUNNING] Bag Time: 1508750838.090572 Duration: 4.019058 / 5.960627
Next, let’s move to RViz
application and update the 3D model of the map:
We can see that the route calculated by ASP 1 is now shown on the map:
[RUNNING] Bag Time: 1508750839.906654 Duration: 5.835140 / 5.960627 Done.
2017 Oct-23 09:28:01454012 [DEBUG] Objective bag finish [ INFO] [1508750895.794525669]: Subscribing to /small atc_l/path/l [ INFO] [1508750895.798171755]: Subscribing to /small_atc_l/obstacle/l
[WARN] [1508750927.242365284]: rosbag record buffer exceeded. Dropping oldest queued message.
[WARN] [1508750932.686850244]: rosbag record buffer exceeded. Dropping oldest queued message.
[WARN] [1508750939.151966544]: rosbag record buffer exceeded. Dropping oldest queued message.
[WARN] [1508750944.163951416]: rosbag record buffer exceeded. Dropping oldest queued message.
[WARN] [1508750951.223847614]: rosbag record buffer exceeded. Dropping oldest queued message.
QmaZjebmToNNMwYoqhQLJs22nDfYVwjid3JgdihNhlSE3K
Next, let’s move to a new terminal tab and launch validation of transaction.
aira-proto promisor -I 0xdc082705186971b2618Df0d5FE111949bl7f7242
Now, let’s send a transaction to ASP 2 0.1 ether
.
aira-proto promisee -1 0xdc082705186971b2618Df0d5FE111949bl7f7242|-p '0.1 ether' & (sleep 2 && rosbag play atc2. bag)
We can see that ASP 2 has processed this transaction, prepared a route and registered it:
process[small_atc_2/geo_helper-4]: started with pid [2951]
[ INFO] [1508746648.996512901]: Loaded topographic map: /home/akru/ws/src/drone employee ros/small atc/data/tamalpais_park [ INFO] [1508746649.094089898]: Loaded topographic map: /home/akru/ws/src/drone employeeros/small atc/data/tamalpais_park [ INFO] [1508750877.476415726]: Start planning...
Start:
RealVectorState [-381.51 -1647.35 1174]
Goal:
RealVectorState [-270.315 -868.988 1269]
Debug: RRTstar: Planner range detected to be 3019.933774
Info: RRTstar: No optimization objective specified. Defaulting to optimizing path length for the allowed planning time.
Info: RRTstar: Starting planning with 1 states already in datastructure
Info: RRTstar: Initial к-nearest value of 3
Info: RRTstar: Found an initial solution with a cost of 1307.33 in 617 iterations (578 vertices in the graph)
Info: Solution found in 1.013695 seconds
Info: SimpleSetup: Path simplification took 0.004492 seconds and changed from 3 to 17 states
-------
Found solution:
Geometric path with 17 states RealVectorState [-381.51 -1647.35 1174]
RealVectorState [-432.912 -1626.15 1201.33] RealVectorState [-484.315 -1604.95 1228.66] RealVectorState [-528.424 -1580.32 1253.32] RealVectorState [-572.532 -1555.69 1277.98] RealVectorState [-602.053 -1524.2 1297.29]
RealVectorState [-631.574 -1492.71 1316.6]
RealVectorState [-639.212 -1450.92 1327.89] RealVectorState [-646.85 -1409.14 1339.17]
RealVectorState [-625.313 -1353.63 1339.76] RealVectorState [-603.775 -1298.12 1340.35] RealVectorState [-560.355 -1232.31 1332.91] RealVectorState [-516.935 -1166.51 1325.48] RealVectorState [-458.927 -1093.85 1312.7]
RealVectorState [-400.919 -1021.18 1299.91] RealVectorState [-335.617 -945.084 1284.46] RealVectorState [-270.315 -868.988 1269]
[ INFO] [1508750878.507250933]: Plan is valid.
[ INFO] [1508750895.241787847]: Plan registered with id=l
Let’s switch to RViz
application again and we can see that the route was updated with the part provided by ASP 2:
In a smart contract created with ASP 1 we can see a transaction from the client in the amount of 0.1 Ether
and a transaction from the ASP 1 with the result of its work:
In a smart contract created with ASP 2 we can see a transaction from the client in the amount of 0.1 Ether
and a transaction from the ASP 1 with the result of its work:
On the miner of ropsten network we can see that two transactions are waiting to be validated:
[akru@airalab-pool:~]$ aira-proto validator
2017 Oct-23 09:29:42929470 [DEBUG] Liability with address 58fb6ael0DceEda47AED48E8c3A7046f531Od82C catched
2017 Oct-23 09:33:17552003 [DEBUG] Liability with address dc082705186971b2618df0d5felll949bl7f7242 catched
Next, we wait until transactions are validated by the miners of the ropsten network (block mining):
Validator has found a block and included both transactions with the confirmations that ASP 1 and ASP 2 are liable.