3DR 單人無人機 WiFi 通信

3DR 單人無人機 WiFi 通信

我有兩架 3DR Solo 無人機。他們在無人機和控制器中都配備了 ARM 計算機,運行 busybox Linux。

據我了解:預設情況下,控制器充當無線接入點。它具有 SSID:SoloLink。此圖顯示了預設設定: 獨奏預設設定

控制器是帶有兩個天線的東西,螢幕上顯示“SOLO”,而實際的無人機/無人機是 X 形的東西。

這工作正常,我可以直接 ssh 進入控制器 ( ) 並使用 ( )進入實際的獨奏ssh [email protected]ssh [email protected]

我可以從 3DR 的 github 頁面上的 python 實用程式執行命令:(github.com/3drobotics/solo-cli/blob/master/soloutils/wifi.py抱歉,由於我的聲譽,我只能有 2 個連結)告訴控制器連接到另一個 WiFi 網路。我設定了一個 Ubiquity PicoStation 作為路由器並具有 SSID:ubnt。要將控制器連接到ubnt網絡,我連接到SoloLink網絡並運行solo wifi --name=ubnt.這基本上是創建一個 bash 腳本並運行它:

if [ "$#" -lt "2" ]; then
    echo "Usage:   `basename $0` timeout_in_seconds command" >&2
    echo "Example: `basename $0` 2 sleep 3 || echo timeout" >&2
    exit 1
fi
cleanup()
{{
    trap - ALRM               #reset handler to default
    kill -ALRM $a 2>/dev/null #stop timer subshell if running
    kill $! 2>/dev/null &&    #kill last job
      exit 124                #exit with 124 if it was running
}}
watchit()
{{
    trap "cleanup" ALRM
    sleep $1& wait
    kill -ALRM $$
}}
watchit $1& a=$!         #start the timeout
shift                    #first param was timeout for sleep
trap "cleanup" ALRM INT  #cleanup after timeout
"$@"& wait $!; RET=$?    #start the job wait for it and save its return value
kill -ALRM $a            #send ALRM signal to watchit
wait $a                  #wait for watchit to finish cleanup
exit $RET                #return the value
SCRIPT
cat > /tmp/setupwifi.sh << 'SCRIPT'
# Delete old files
rm /mnt/rootfs.rw/lib/modules/3.10.17-rt12-*/kernel/net/ipv4/netfilter/iptable_filter.ko || true
/etc/init.d/hostapd stop
killall wpa_supplicant || true
killall udhcpc || true
cat <<EOF > /etc/wpa_client.conf
network={{
{credentials}
}}
EOF
echo 1 > /proc/sys/net/ipv4/ip_forward
sed -i.bak 's/dhcp-option=3.*/dhcp-option=3,10.1.1.1/g' /etc/dnsmasq.conf
sed -i.bak 's/dhcp-option=6.*/dhcp-option=6,8.8.8.8/g' /etc/dnsmasq.conf
/etc/init.d/dnsmasq restart
sleep 2
echo 'connecting to the internet...'
wpa_supplicant -i wlan0 -c /etc/wpa_client.conf -B
/tmp/timeout.sh 15 udhcpc -i wlan0 || {{
    echo -e "\\nerror: wrong credentials or couldn't connect to wifi network!\\n"
    ifconfig wlan0 down
}}
/etc/init.d/hostapd start
sleep 3
wget -O- http://example.com/ --timeout=5 >/dev/null 2>&1
if [[ $? -ne '0' ]]; then
    echo ''
    echo 'error: could not connect to the Internet!'
    echo 'please check your wifi credentials and try again.'
else
    echo 'setting up IP forwarding...'
    insmod /lib/modules/3.10.17-rt12-*/kernel/net/ipv4/netfilter/iptable_filter.ko 2>/dev/null
    iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
    iptables -A FORWARD -i wlan0 -o wlan0-ap -j ACCEPT
    iptables -A FORWARD -i wlan0-ap -o wlan0 -j ACCEPT
    echo ''
    echo 'success: Solo is now connected to the Internet.'
    echo 'if your computer does not yet have Internet access, try'
    echo "disconnecting and reconnecting to Solo's wifi network."
fi
SCRIPT
chmod +x /tmp/timeout.sh
chmod +x /tmp/setupwifi.sh
bash /tmp/setupwifi.sh > /log/setupwifi.log 2>&1

({credentials} 部分是因為該腳本位於 python 腳本中的一個大字串中,並且它用我傳遞給它的憑證替換了該部分)

它似乎啟用轉發,重新配置 dnsmasq,配置 wpa_supplicant 連接到我的新 WiFi 網絡,啟動 wpa_supplicant,然後重新配置 iptables 以將流量轉發到wlan0接口wlan0-ap,反之亦然。我修改了最後一條if/else語句,使其不執行 wget 而只運行該else區塊。

這運作良好,我可以從網路存取控制器ubnt。我的設定現在看起來像: 使用路由器進行單獨設定 我可以很好地 ssh 到控制器,但我在網路上看不到 Solo。我在筆記型電腦上嘗試過,但只看到路由器 ( )、控制器 ( ) 和我自己 ( )。ssh [email protected]nmap -sP 192.168.1.1/24192.168.1.1192.168.1.6192.168.1.76

這就是我被困的地方

我希望能夠從電腦存取 Solo 無人機。我知道控制器上有兩個接口,但我不明白如何橋接它們。

這樣做的目的是讓我可以將另一對無人機連接到同一ubnt網絡,然後我可以從一個中央源監視/控制兩架無人機,並且飛行員可以在需要時在環路中進行控制。

任何幫助或谷歌條款將不勝感激。我在網路方面沒有太多經驗,我一直在尋找與網路相關的命令和術語。

答案1

實際上,一位想要我的意見的朋友連結到了我這篇文章 - 我也會在這裡分享。

這裡的問題是缺少路線。為了讓您的192.168.1.76IP(或任何192.168.1.xIP)到達10.1.1.x,它需要知道路線。同一子網路內的IP(例如[10.1.1.110.1.1.10]或[192.168.1.76192.168.1.1])不需要路由即可通訊;他們使用廣播來尋找具有給定 IP 的設備並直接發送流量。

為了從一個子網到另一個子網,您必須定義一條路由。此外,您必須定義一條 BACK 路線。所以,你可以嘗試這個(如果你的路由器和獨奏控制器支援它):

您的192.168.1.1AP 中需要一條路由。來源可以是任意,目標可以是10.1.1.0/24,下一跳可以是192.168.1.6- Solo 控制器。控制器知道這兩個網絡,因此如果您發送發送到 的流量10.1.1.10,Solo應該已經知道如何到達那裡,並且應該一起發送。此外,因為控制器本身實際上是無人機的網路閘道 ( 10.1.1.1),而且它是知道192.168.1.0/24子網,那裡不需要路由 - 隱含返迴路由。

將該路由新增至您的路由器 ( any>10.1.1.0/24>192.168.1.6) 並查看是否可以解決問題。

相關內容