当前位置: 首页 > news >正文

创意设计公司网站重庆网站建设mlfart

创意设计公司网站,重庆网站建设mlfart,男女做爰高清免费网站,杨浦区建设小学网站这篇文章主要为大家详细介绍了C如何利用TCP技术,实现本地ROS1和ROS2的通讯,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下 概要服务端代码 头文件源代码客户端代码 概要 利用TCP技术#xff0c;实现本地ROS1和ROS2的通讯。 服务端代码 头文件 #include 如何利用TCP技术,实现本地ROS1和ROS2的通讯,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下 概要服务端代码 头文件源代码客户端代码 概要 利用TCP技术实现本地ROS1和ROS2的通讯。 服务端代码 头文件 #include ros/ros.h #include std_msgs/String.h #include std_msgs/Bool.h #include iostream #include cstring #include unistd.h #include arpa/inet.h #include sys/socket.h #include geometry_msgs/Twist.husing namespace std;class TCPPublisher {public:TCPPublisher();~TCPPublisher();void cmdVelCallback(const geometry_msgs::Twist::ConstPtr msg);private:ros::NodeHandle n, nPrivate;ros::Publisher tcpPub;ros::Subscriber cmdVelSub;// 创建服务器套接字int serverSocket;// 设置服务器地址结构sockaddr_in serverAddr;int clientSocket;std::string topicStatus; };源代码 #include ./tcp_pub/tcp_pub.hTCPPublisher::TCPPublisher():nPrivate(~) {nPrivate.param(topicStatus, topicStatus, std::string(/cmd_vel));/*订阅话题*/cmdVelSub n.subscribe(topicStatus.c_str(), 10, TCPPublisher::cmdVelCallback, this);serverSocket socket(AF_INET, SOCK_STREAM, 0);// 设置服务器地址结构sockaddr_in serverAddr;serverAddr.sin_family AF_INET;serverAddr.sin_addr.s_addr INADDR_ANY;serverAddr.sin_port htons(8080); // 服务器监听的端口号// 绑定套接字if (bind(serverSocket, (struct sockaddr*)serverAddr, sizeof(serverAddr)) -1) {std::cerr Bind failed. std::endl;close(serverSocket);return;}// 监听连接if (listen(serverSocket, SOMAXCONN) -1) {std::cerr Listen failed. std::endl;close(serverSocket);return;}std::cout Server is listening for incoming connections... std::endl;ROS_INFO(TCPPublisher init successfully!!!); }TCPPublisher::~TCPPublisher() {close(serverSocket); }void TCPPublisher::cmdVelCallback(const geometry_msgs::Twist::ConstPtr msg) {float velX msg-linear.x;float angularZ msg-angular.z;// ROS_INFO(velX : %f, angularZ : %f, velX, angularZ);// 定义字符数组用于存储转换后的结果char buffer[50]; // 适当调整数组大小以适应你的需求snprintf(buffer, sizeof(buffer), %f,%f, velX, angularZ);// ROS_INFO(buffer %s, buffer);// 接受连接int clientSocket accept(serverSocket, NULL, NULL);if (clientSocket -1) {std::cerr Accept failed. std::endl;close(serverSocket);return;}std::cout Connection established with a client. std::endl;// 发送消息给客户端const char* message buffer;ROS_INFO(message %s, message);if (send(clientSocket, message, strlen(message), 0) -1) {std::cerr Error sending message. std::endl;}// 关闭客户端套接字close(clientSocket); }int main(int argc, char **argv) {//创建节点ros::init(argc, argv, pure_pursuit);TCPPublisher tp; ros::spin();return 0; }客户端代码 #include rclcpp/rclcpp.hpp #include geometry_msgs/msg/twist.hpp #include iostream #include cstring #include unistd.h #include arpa/inet.h #include sys/socket.hint main(int argc, char * argv[]) {rclcpp::init(argc, argv);auto node std::make_sharedrclcpp::Node(tcp_client);/*define publisher*/rclcpp::Publishergeometry_msgs::msg::Twist::SharedPtr cmd_pub_;// Advertise velocity commandsauto default_qos rclcpp::QoS(rclcpp::SystemDefaultsQoS());cmd_pub_ node-create_publishergeometry_msgs::msg::Twist(cmd_vel, default_qos);//连接到服务器// if (connect(clientSocket, (struct sockaddr*)serverAddr, sizeof(serverAddr)) -1) {// std::cerr Connection failed. std::endl;// close(clientSocket);// return 1;// }// std::cout Connected to the server. std::endl;while (true) {// 创建客户端套接字int clientSocket socket(AF_INET, SOCK_STREAM, 0);if (clientSocket -1) {std::cerr Failed to create client socket. std::endl;return 1;}// 设置服务器地址结构sockaddr_in serverAddr;serverAddr.sin_family AF_INET;serverAddr.sin_addr.s_addr htonl(INADDR_LOOPBACK); // 本地回环地址 // 服务器的 IP 地址serverAddr.sin_port htons(8080); // 服务器监听的端口号// 连接到服务器if (connect(clientSocket, (struct sockaddr*)serverAddr, sizeof(serverAddr)) -1) {std::cerr Connection failed. std::endl;close(clientSocket);// return 1;}// std::cout Connected to the server. std::endl;// 接收消息char buffer[50];memset(buffer, 0, sizeof(buffer));if (recv(clientSocket, buffer, sizeof(buffer), 0) -1) {std::cerr Error receiving message. std::endl;} else {std::cout Received message from server: buffer std::endl;// 定义两个变量来存储解析后的浮点数float floatValue1, floatValue2;// 使用 sscanf 解析字符数组if (std::sscanf(buffer, %f,%f, floatValue1, floatValue2) 2) {// 打印解析结果std::cout 解析后的浮点数1: floatValue1 std::endl;std::cout 解析后的浮点数2: floatValue2 std::endl;} else {// 解析失败std::cerr 解析失败 std::endl;}geometry_msgs::msg::Twist cmd_msg;cmd_msg.linear.x floatValue1;cmd_msg.angular.z floatValue2;cmd_pub_-publish(cmd_msg);std::cout Publishing zero speed to /cmd_vel. std::endl;}// 关闭客户端套接字close(clientSocket);// 在这里可以添加一些延时以避免过于频繁地连接服务器sleep(0.1);}rclcpp::spin(node);rclcpp::shutdown();return 0; } 到此这篇关于C实现本地TCP通讯的示例代码的文章就介绍到这了
http://www.dnsts.com.cn/news/79752.html

相关文章:

  • 网站模板 单页免费咨询妇科医生在线
  • 电商网站购买的流程图网创是什么
  • 长春教做网站带维护的培训机构没内涵网站源码
  • 建站之星和凡科网站建设方案范文8篇
  • 益阳网站建设企业在服务器网站上做跳转页面跳转页面
  • 餐饮网站界面一键优化在哪里打开
  • 昆明建网站的公司专业建站源码
  • 湖南智能网站建设公司ip代理提取网站源码
  • 高校教学网站建设桂林网络推广外包
  • 家居企业网站建设咨询wordpress 流程插件
  • 怎么样可以做网站充值代理查看网站建设时间
  • 庆阳门户网站网站设计合同
  • 南沙微网站建设百度图片识别
  • 电子商务网站设计原则网站建设意向表
  • 主题网站策划设计书哪个网站可以做思维导图
  • 亚马逊做超链接的网站电梯配件做外贸在哪个网站
  • 长春seo网站排名自己做的网站能被百度收录吗
  • 网站伪静态作用如何用自己的电脑建网站
  • 软件前端开发百度seo公司有哪些
  • 免费授权企业网站源码网站的功能规范
  • 销售管理系统网站模板做手机网站一般要多少钱
  • 陕西省建设八大员官方网站wordpress破解版下载
  • 赣州网站制作培训重庆建设门户网站
  • 培训机构做网站宣传制作游戏网站
  • 邢台网站建设哪里有wordpress手机站模板
  • 做企业网站类型网站备案时 首页
  • 网站开发公司 网站空间wordpress更改图片上传路径
  • 上海网站设计开发公网站后台代码添加图片
  • vc 做网站源码注册一个免费的网站吗
  • 整形网站模板自己做网站需要多少费用