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

標題: ROS的一個網絡通信接口源程序 [打印本頁]

作者: zhangson502    時間: 2018-7-4 17:52
標題: ROS的一個網絡通信接口源程序
ROS的一個網絡通信接口程序

源程序如下:
  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("連接磁盤時出現錯誤!\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("連接磁盤時出現錯誤!\n");return 1;}
  118.         fscanf(fp,"%d %d %f\n",&m_map.info.width,&m_map.info.height,&m_map.info.resolution);
  119.         printf("磁盤內地圖長:%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.         //發布地圖消息
  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("地圖已經發布!\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. }
復制代碼

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



作者: 大豬蹄子    時間: 2020-9-16 20:29
謝謝樓主,可是怎么用呢?




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 天天干.com | 亚洲一区欧美一区 | 久久av网 | 中文字幕专区 | 美女视频. | 精品毛片| 国产高清精品一区二区三区 | 日韩电影一区二区三区 | 亚洲情视频 | 日韩二区三区 | 国产在线观看一区二区 | 久久精品亚洲欧美日韩久久 | 亚洲一区二区三区高清 | 精品久久久久久久人人人人传媒 | 美女黄18岁以下禁止观看 | 亚洲av毛片成人精品 | 亚洲精品久久久久久久久久久久久 | 亚洲精品电影在线观看 | 欧美激情综合色综合啪啪五月 | 午夜视频在线免费观看 | 亚洲情视频 | 少妇性l交大片免费一 | 天天影视网天天综合色在线播放 | 欧美一级片在线播放 | 国产精品一二三区在线观看 | 6080亚洲精品一区二区 | 色免费看| 成人影院av| 午夜黄色影院 | 中文字幕一区二区三区精彩视频 | 天天影视亚洲综合网 | 久久69精品久久久久久国产越南 | 一区二区三区四区免费在线观看 | 成人性视频免费网站 | 亚洲激情网站 | 日本特黄a级高清免费大片 成年人黄色小视频 | 日韩1区2区 | a级片在线观看 | 日韩伦理电影免费在线观看 | 成人免费大片黄在线播放 | 亚洲国产成人精品久久 |