久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3427|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

ROS的一個(gè)網(wǎng)絡(luò)通信接口源程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ROS的一個(gè)網(wǎng)絡(luò)通信接口程序

源程序如下:
  1. #include "header/map_exchange.h"
  2. net_ui::net_ui()
  3. {
  4.         conn_id=0;
  5.                         sock_srv = socket(AF_INET,SOCK_STREAM, 0);
  6.                         memset(&server_addr, 0, sizeof(server_addr));
  7.                         server_addr.sin_family = AF_INET;
  8.                         server_addr.sin_port = htons(12307);
  9.                         server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
  10.                         if(bind(sock_srv,(struct sockaddr *)&server_addr,sizeof(server_addr))==-1)
  11.                         {
  12.                                 perror("Binding:");
  13.                                 exit(1);
  14.                         }
  15.                         if(listen(sock_srv,QUEUE) == -1)
  16.                         {
  17.                         perror("Listen");
  18.                                 exit(1);
  19.                         }
  20.                         //申明所有Publisher
  21.                         map_pub = n.advertise<nav_msgs::OccupancyGrid>("env_map", 1,true);
  22.                         //申明所有Subscriber
  23.                         map_sub = n.subscribe<nav_msgs::OccupancyGrid>("map",1,&net_ui::map_Callback,this);
  24.                         std_clk = n.subscribe<std_msgs::String>("CORE_clk",1,&net_ui::clk_Callback,this);
  25.                         server_waitforclient=n.subscribe<std_msgs::Float64>("ui_deadcycle",1,& net_ui::deadcycle_Callback,this);
  26.                         std_msgs::Float64 id;
  27.                         ros::Publisher ui_server_pub = n.advertise<std_msgs::Float64>("ui_deadcycle", 1);
  28.                         ui_server_pub.publish(id);
  29. }
  30. net_ui::~net_ui()
  31. {
  32.         close(sock_srv);
  33. }
  34. void net_ui::Connect()
  35. {
  36.         if(conn_id>=QUEUE) return;
  37.         conn_id++;
  38.         printf("正在等待用戶連接\n");
  39.         conn[conn_id]= accept(sock_srv, (struct sockaddr*)&client_addr, &length);
  40.         printf("第%d名用戶連接!!!\n",conn_id);
  41. }
  42. void  net_ui::deadcycle_Callback(const std_msgs::Float64::ConstPtr& msg)
  43. {
  44.         ros::Rate r(10);
  45.         while(n.ok())
  46.         {
  47.                 Connect();
  48.                 r.sleep();
  49.         }
  50. }
  51. int  net_ui::Download()
  52. {
  53.         char recvBuf[16];
  54.         int re=recv(conn[conn_id-1],recvBuf ,16,0);
  55.         if(recvBuf[0]==0x0a&&recvBuf[15]==0x0d)
  56.         {
  57.                 switch(recvBuf[1])
  58.                 {
  59.                 case 0x01:
  60.                 {
  61.                         char buf[6];
  62.                         buf[1]=m_map.info.height/256;buf[2]=m_map.info.height%256;
  63.                         buf[3]=m_map.info.width/256;buf[4]=m_map.info.width%256;
  64.                         buf[0]=0xff;buf[5]=0xff;
  65.                         Upload(buf,6);
  66.                         break;
  67.                 }
  68.                 case 0x02:
  69.                 {

  70.                 }
  71.                 }
  72.         }
  73. }
  74. void net_ui::Upload(char *a,int len)
  75. {
  76.         send(conn[conn_id-1],a,len,0);
  77. }
  78. void net_ui::map_Callback(const nav_msgs::OccupancyGrid::ConstPtr& msg)
  79. {
  80.         m_map.info.height=msg->info.height;
  81.         m_map.info.width=msg->info.width;
  82.         m_map.info.resolution=msg->info.resolution;
  83.         m_map.info.origin.position.x=m_map.info.width*m_map.info.resolution;
  84.         m_map.info.origin.position.y=m_map.info.height*m_map.info.resolution;
  85.         double map_time=(msg->info.map_load_time.toSec());
  86.         for(int i=0;i<m_map.info.height ;i++)
  87.         {
  88.                 for(int j=0;j<m_map.info.width;j++)
  89.                 {
  90.                         if (map_occupy[i][j]<0) map_occupy[i][j]='X';
  91.                         else map_occupy[i][j]=(msg->data[i*m_map.info.width +j])/10+'0';
  92.                 }
  93.         }
  94.         Map_saver();
  95. }
  96. void net_ui::clk_Callback(const std_msgs::String::ConstPtr& msg)
  97. {

  98. }
  99. int net_ui::Map_saver()
  100. {
  101.         printf("收到地圖長:%d,寬:%d  \n",m_map.info.height,m_map.info.width);
  102.         printf("等待寫入地圖...\n");
  103.         FILE *fp;
  104.         fp = fopen("/home/exbot/AGV/src/cfg/maps/map.map","wb");
  105.         if(fp==NULL) {printf("連接磁盤時(shí)出現(xiàn)錯(cuò)誤!\n");return 1;}
  106.         fprintf(fp,"%d %d %f\n",m_map.info.width,m_map.info.height,m_map.info.resolution);
  107.         for(int i=0;i<m_map.info.height;i++) fprintf(fp,"%s\n",map_occupy[i]);
  108.         fclose(fp);
  109.         printf("寫入地圖完成!\n");
  110.         return 0;
  111. }
  112. int net_ui::Map_loader()
  113. {
  114.         FILE *fp;
  115.         printf("等待讀取地圖...\n");
  116.         fp = fopen("/home/exbot/AGV/src/cfg/maps/map.map","rb");
  117.         if(fp==NULL) {printf("連接磁盤時(shí)出現(xiàn)錯(cuò)誤!\n");return 1;}
  118.         fscanf(fp,"%d %d %f\n",&m_map.info.width,&m_map.info.height,&m_map.info.resolution);
  119.         printf("磁盤內(nèi)地圖長:%d,寬:%d 分辨率:%f \n",m_map.info.height,m_map.info.width,m_map.info.resolution);
  120.           m_map.info.origin.position.x = 0.0;
  121.           m_map.info.origin.position.y = 0.0;
  122.           m_map.header.frame_id = "map";
  123.           m_map.info.map_load_time = ros::Time::now();
  124.           m_map.header.stamp = ros::Time::now();
  125.         for(int i=0;i<m_map.info.height;i++)
  126.         {
  127.                 fscanf(fp,"%s",map_occupy[i]);
  128.         }

  129.         for(int i=0;i<m_map.info.height ;i++)
  130.         {
  131.                 for(int j=0;j<m_map.info.width;j++)
  132.                 {
  133.                         if(map_occupy[i][j]=='X') map_occupy[i][j]=-1;
  134.                         else map_occupy[i][j]=(map_occupy[i][j]-'0')*10;
  135.                 }
  136.         }
  137.         //發(fā)布地圖消息
  138.         m_map.data.resize((long)m_map.info.width*m_map.info.height);
  139.         for(long i=0;i<((long)m_map.info.width*m_map.info.height);i++) m_map.data[i]=(int)(map_occupy[i/m_map.info.width][i%m_map.info.width]);
  140.         fclose(fp);
  141.         map_pub.publish(m_map);
  142.         printf("地圖已經(jīng)發(fā)布!\n");
  143.         return 0;
  144. }
  145. /**************************************                       MAIN                        ************************************/
  146. int main(int argc, char** argv)
  147. {
  148.         ros::init(argc, argv, "map_exchanger");
  149.         ros::AsyncSpinner spinner(2);
  150.         spinner.start();
  151.         net_ui map_exchanger;
  152.         ros::Rate r(0.3);
  153.         map_exchanger.Map_loader();
  154.         while(map_exchanger.n.ok())
  155.         {
  156.                 //map_exchanger.Map_loader();
  157.                         r.sleep();
  158.         }
  159.         return 0;
  160. }
復(fù)制代碼

所有資料51hei提供下載:
ui.zip (11.3 KB, 下載次數(shù): 14)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:468431 發(fā)表于 2020-9-16 20:29 | 只看該作者
謝謝樓主,可是怎么用呢?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 香蕉国产在线视频 | 亚洲一二三视频 | 国产电影精品久久 | 欧美精品99 | 成人av在线播放 | 成人午夜视频在线观看 | 狠狠干影院 | 日韩成人在线视频 | 精品一区精品二区 | 亚洲一区二区免费视频 | 久久国产精品无码网站 | 毛片免费在线 | 日本精品视频一区二区 | 国产欧美精品一区二区三区 | 成人免费一区二区三区视频网站 | 日本成人在线观看网站 | 亚洲一区二区精品视频 | 日韩一区二区在线视频 | 国产在线永久免费 | 一本一道久久a久久精品综合 | 亚洲视频三区 | 国产1区2区3区| 中文字幕欧美日韩 | 激情 婷婷| 最新日韩精品 | 99久久精品一区二区成人 | av中文天堂| 亚洲 欧美 在线 一区 | 日韩中文字幕一区 | 亚洲精品18 | 亚洲一区二区久久 | 日韩在线一区二区三区 | 国产第一页在线观看 | 午夜免费网站 | 黄色片av| 久久精品免费观看 | av在线一区二区三区 | 一区二区精品 | 国产日韩免费观看 | 欧美激情国产日韩精品一区18 | 久久久久久成人 |