ROS-wifi及以太網(wǎng)通信

硬件環(huán)境:M4傳感采集板,F(xiàn)irefly控制板叉趣、筆記本電腦泞边、Wifi
編程語言:Python

通信過程:

M4采集傳感器信號,傳感器信號通過M4的以太網(wǎng)接口通過網(wǎng)線傳輸至Firefly控制板疗杉,控制板接受M4的傳感器信號后阵谚,對信號進行解碼,發(fā)送返回信號回M4烟具,并將數(shù)據(jù)發(fā)布在ROS指定話題上梢什,同wifi局域網(wǎng)下的筆記本電腦LT-0079通過訂閱話題信息獲得傳感器數(shù)據(jù)。

操作步驟:

1.通信環(huán)境配置:

1.1 Firefly端(主控板):

1.1.1設(shè)置Firefly的wifi網(wǎng)絡(luò)IP地址

    IPV4 Settings:Manual
    Address:192.168.20.133  
    Netmask:255.255.255.0
    Gateway:192.168.20.1

1.1.2 設(shè)置Firefly的host

sudo vim /etc/hosts

    192.168.20.133  firefly     # (本機ip)朝聋,中間tab隔開
    192.168.20.135  LT-0079         #(服務(wù)器IP)

1.1.3 設(shè)置firefly的ros環(huán)境(以LT-0079為主機)

vim ~/bashrc -->添加

    export ROS_HOSTNAME=firefly
    export ROS_MASTER_URI=http://LT-0079:11311

1.2 PC端:

1.2.1設(shè)置LT-0079的wifi網(wǎng)絡(luò)IP地址

    IPV4 Settings:Manual
    Address:192.168.20.135 
    Netmask:255.255.255.0
    Gateway:192.168.20.1

1.2.2 設(shè)置LT-0079的host

sudo vim /etc/hosts

    192.168.20.133  firefly 
    192.168.20.135  LT-0079 

1.2.3 設(shè)置LT-0079的ros環(huán)境(以LT-0079為主機)

vim ~/bashrc -->添加

    export ROS_HOSTNAME=LT-0079
    export ROS_MASTER_URI=http://LT-0079:11311

2.firefly上編寫與M4網(wǎng)口通信程序

2.1.新建workspace

mkdir -p ~/ros_newlife/src
catkin_init_worksapce

2.2.創(chuàng)建package

catkin_creat_pkg M4_Ros rospy roscpp message_generation

2.3更改package.xml文件與CMakeList.txt

vim ~/workspace/src/package_name/package.xml

<build_depend>message_generation</build_depend>
<run_depend>message_runtime</run_depend>

vim ~/workspace/src/package_name/CMakelist

find_package(catkin REQUIRED COMPONENTS roscpp rospy  std_msgs message_generation)
generate_messages(  DEPENDENCIES  std_msgs)
add_message_files(  FILES  M4_Sensor.msg)

2.4 新建msg文件

mkdir msg
vim msg/M4_Sensor.msg

int32 Start
int32 Start
int12 Count
int12 Red_Dis1
int12 Red_Dis2
int12 Red_Dis3
int12 Red_Dis4
int12 Ult_Dis1
int12 Ult_Dis2
int12 Ult_Dis3
int12 Ult_Dis4
int12 Red_Hum1
int12 Red_Hum2
int12 Red_Hum3
int12 Red_Hum4
int12 Voice1
int12 Voice2
int12 Voice3
int12 Voice4
int12 Voice5
int12 Voice6
int12 Fsr_Head
int12 Fsr_Lwing
int12 Fsr_Rwing
int12 Fsr_Front
int12 Fsr_Back
int12 Check

2.5 編寫主程序

vim src/M4Sensor_Publisher.py

#!/usr/bin/python
# -*- coding: utf-8 -*-

#Author: zhouwei
#Date: 20160307

import time
import socket
import rospy
from M4_Ros.msg import M4_Sensor
import json


######################tcp socket addr setting
HOST='192.168.2.4'
PORT=8008
BUFFER=4096
#####################tcp socket start
        sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.bind((HOST,PORT))
sock.listen(5)
print 'i am listening'
con,addr=sock.accept()

################ros begining
rospy.init_node('M4Sensor_Pub',anonymous=0)
pub=rospy.Publisher('M4Sensor',M4_Sensor,queue_size=10)

while not rospy.is_shutdown():
    try:
        con.settimeout(5)
        buf=con.recv(BUFFER)
        if len(buf) != 0:
        Sensor=M4_Sensor()
            buf_array=json.loads(buf)
            Sensor.Start=buf_array[0]
            Sensor.Count=buf_array[1]
            Sensor.Red_Dis1=buf_array[2]
            Sensor.Red_Dis2=buf_array[3]
            Sensor.Red_Dis3=buf_array[4]
            Sensor.Red_Dis4=buf_array[5]
            Sensor.Ult_Dis1=buf_array[6]
            Sensor.Ult_Dis2=buf_array[7]
            Sensor.Ult_Dis3=buf_array[8]
            Sensor.Ult_Dis4=buf_array[9]
            Sensor.Red_Hum1=buf_array[10]
            Sensor.Red_Hum2=buf_array[11]
            Sensor.Red_Hum3=buf_array[12]
            Sensor.Red_Hum4=buf_array[13]
            Sensor.Voice1=buf_array[14]
            Sensor.Voice2=buf_array[15]
            Sensor.Voice3=buf_array[16]
            Sensor.Voice4=buf_array[17]
            Sensor.Voice5=buf_array[18]
            Sensor.Voice6=buf_array[19]
            Sensor.Fsr_Head=buf_array[20]
            Sensor.Fsr_Lwing=buf_array[21]
            Sensor.Fsr_Rwing=buf_array[22]
            Sensor.Fsr_Front=buf_array[23]
            Sensor.Fsr_Back=buf_array[24]
            Sensor.Check=buf_array[25]
            rospy.loginfo('Data is %s'% Sensor)
            pub.publish(Sensor)
            con.send('yes')
        else:
            print('no data')
            con.send('out of client')
            con.close()
            con,addr=sock.accept()
    except socket.timeout:
        print 'time out'

2.6 make文件

chmod +x ~/ros_newlife/src/M4_Ros/src/M4Sensor_Publisher.py

cd ~/ros_newlife | catkin_make

3. LT-0079上編寫服務(wù)器接受程序

3.1.新建workspace

mkdir -p ~/ros_newlife/src

catkin_init_worksapce

3.2.創(chuàng)建package

catkin_creat_pkg V6demo rospy roscpp message_generation

3.3更改package.xml文件與CMakeList.txt

vim ~/ros_newlife/src/V6demo/package.xml

<build_depend>message_generation</build_depend>
<run_depend>message_runtime</run_depend>

vim ~/ ros_newlife/src/V6demo/CMakelist

find_package(catkin REQUIRED COMPONENTS roscpp rospy  std_msgs message_generation)
generate_messages(  DEPENDENCIES  std_msgs)
add_message_files(  FILES  M4_Sensor.msg)

3.4 新建msg文件

mkdir msg
vim msg/M4_Sensor.msg

"與firefly端一致"

3.5 編寫主程序

vim src/M4Sensor_Subscriber.py

#!/usr/bin/python
# -*- coding: utf-8 -*-

import rospy
from V6demo.msg import M4_Sensor

def callback(data):
    rospy.loginfo('i recv \n')
    rospy.loginfo(data)
    #rospy.loginfo(data.Ult_Dis1)


rospy.init_node('M4Sensor_Sub',anonymous=0)
rospy.Subscriber('M4Sensor',M4_Sensor,callback)
rospy.spin()

3.6 make文件

chmod +x ~/ros_newlife/src/V6demo/src/M4Sensor_Subscriber.py

cd ~/ros_newlife | catkin_make

4. 程序運行

LT-0079:(遠程筆記本)

Terminal 1:

rosocre

Terminal 2:

cd ~/joey_newlife
source devel/setup.bash
rosrun V6demo M4Sensor_Subscriber.py

Firefly:(本地主控板)

Terminal 1:

cd ~/joey_newlife
source devel/setup.bash
rosrun V6demo M4Sensor_Publisher.py

M4:(傳感采集板)

運行程序....

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末嗡午,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子冀痕,更是在濱河造成了極大的恐慌荔睹,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件言蛇,死亡現(xiàn)場離奇詭異僻他,居然都是意外死亡,警方通過查閱死者的電腦和手機猜极,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門中姜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人跟伏,你說我怎么就攤上這事丢胚。” “怎么了受扳?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵携龟,是天一觀的道長。 經(jīng)常有香客問我勘高,道長峡蟋,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任华望,我火速辦了婚禮蕊蝗,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘赖舟。我一直安慰自己蓬戚,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布宾抓。 她就那樣靜靜地躺著子漩,像睡著了一般豫喧。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上幢泼,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天紧显,我揣著相機與錄音,去河邊找鬼缕棵。 笑死孵班,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的挥吵。 我是一名探鬼主播重父,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼忽匈!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起矿辽,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤丹允,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后袋倔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體雕蔽,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年宾娜,在試婚紗的時候發(fā)現(xiàn)自己被綠了批狐。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡前塔,死狀恐怖嚣艇,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情华弓,我是刑警寧澤食零,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站寂屏,受9級特大地震影響贰谣,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜迁霎,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一吱抚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧考廉,春花似錦秘豹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽因痛。三九已至,卻和暖如春岸更,著一層夾襖步出監(jiān)牢的瞬間鸵膏,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工怎炊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留谭企,地道東北人。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓评肆,卻偏偏與公主長得像债查,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子瓜挽,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內(nèi)容