ROS-wifi及以太网通信

硬件环境:M4传感采集板,Firefly控制板、笔记本电脑、Wifi
编程语言:Python

通信过程:

M4采集传感器信号,传感器信号通过M4的以太网接口通过网线传输至Firefly控制板,控制板接受M4的传感器信号后,对信号进行解码,发送返回信号回M4,并将数据发布在ROS指定话题上,同wifi局域网下的笔记本电脑LT-0079通过订阅话题信息获得传感器数据。

操作步骤:

1.通信环境配置:

1.1 Firefly端(主控板):

1.1.1设置Firefly的wifi网络IP地址

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

1.1.2 设置Firefly的host

sudo vim /etc/hosts

    192.168.20.133  firefly     # (本机ip),中间tab隔开
    192.168.20.135  LT-0079         #(服务器IP)

1.1.3 设置firefly的ros环境(以LT-0079为主机)

vim ~/bashrc -->添加

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

1.2 PC端:

1.2.1设置LT-0079的wifi网络IP地址

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

1.2.2 设置LT-0079的host

sudo vim /etc/hosts

    192.168.20.133  firefly 
    192.168.20.135  LT-0079 

1.2.3 设置LT-0079的ros环境(以LT-0079为主机)

vim ~/bashrc -->添加

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

2.firefly上编写与M4网口通信程序

2.1.新建workspace

mkdir -p ~/ros_newlife/src
catkin_init_worksapce

2.2.创建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上编写服务器接受程序

3.1.新建workspace

mkdir -p ~/ros_newlife/src

catkin_init_worksapce

3.2.创建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:(传感采集板)

运行程序....

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260

推荐阅读更多精彩内容