素材巴巴 > 程序开发 >

Windows-Ros利用rosserial_windows实现通信

程序开发 2023-09-13 15:02:59

系统环境:
Linux:18.0
Ros:melodic
Windows: Windows10 + VS2017

目的:使用Windows上生成的命令控制Linux系统上ROS控制的小海龟移动。

工作流程

1.从基于ROS的系统中,生成ros_lib代码
2.将ros_lib代码放入Visual Studios解决方案中
3.编写代码以使用ros_lib连接到ROS主服务器并发送/接收消息
4.在ROS master上运行rosserial_server套接字
5.编译并运行Windows应用程序。

第一步 生成ros_lib(Linux系统)

1.安装rosserial_windows(Linux系统)

在ROS上安装rosserial_windows和rosserial服务器:

sudo apt-get install ros-melodic-rosserial-windows
 sudo apt-get install ros-melodic-rosserial-server
 

2.生成ros_lib(Linux系统)

此步骤将生成Visual Studio项目中与ROS主服务器通信所需的代码。提供一个文件名,例如my_library,将完成的文件就会存储到的提供的文件夹的名称所在地。

rosrun rosserial_windows make_libraries.py my_library
 

在my_library这个文件夹下会生成ros_lib文件夹。

第二步 将ros_lib添加到Visual Studio Project(Windows系统)

步骤:

1.将上一步生成的ros_lib文件拷贝到windows系统上面,创建一个新的控制台应用程序。

打开Visual Studio2017
文件 - >新建->项目
在Visual C ++ - > Windows桌面下找到Windows桌面向导
为项目命名。我们将使用Windows-Ros_Test。

在这里插入图片描述
选择 控制台应用程序、空项目,点击确定
在这里插入图片描述
右键源文件,点击添加新建项,为项目添加main.cpp.

在这里插入图片描述

2.将ros_lib复制到项目中。

首先 将ros_lib复制到工程所在的目录中
在这里插入图片描述
接着 将ros_lib文件夹下没有子文件夹的所有文件复制一份至源文件所在的目录下。

在这里插入图片描述

3.在VS2017属性中配置附加包含ros_lib路径

首先 右键项目->属性->C/C+±>常规->附加包含目录,添加"…/ros_lib" 的路径。
在这里插入图片描述

然后 在头文件和源文件中分别添加 ros.h WindowsSocket.h duration.cpp time.cpp WindowsSocket.cpp这几个文件。

在这里插入图片描述

编写代码(Windows系统)

1.将以下代码复制到main.cpp文件中:

#include 
 #include 
 #include "ros.h"
 #include 
 #include 
 #include  using std::string;int _tmain(int argc, _TCHAR * argv[])
 {//创建节点句柄ros::NodeHandle nh;//ROS所在主机IP char *ros_master = "192.168.1.3";printf("Connecting to server at %sn", ros_master);nh.initNode(ros_master);printf("Advertising cmd_vel messagen");//发布cmd_vel信息//初始化消息类型geometry_msgs::Twist twist_msg;//创建一个发布者发布话题ros::Publisher cmd_vel_pub("cmd_vel", &twist_msg);nh.advertise(cmd_vel_pub);printf("Go robot go!n");//发布的内容while (1){twist_msg.linear.x = 5.1;twist_msg.linear.y = 0;twist_msg.linear.z = 0;twist_msg.angular.x = 0;twist_msg.angular.y = 0;twist_msg.angular.z = -1.8;cmd_vel_pub.publish(&twist_msg);//循环等待回调函数nh.spinOnce();//休眠100msSleep(100);}printf("All done!n");return 0;
 }
 

2.编译

编译时遇到错误:

vs2017 “初始化”: 无法从“const char [8]”转换为“char *”

解决方法:将项目属性中将语言符合模式改成否即可;

在这里插入图片描述
3.运行

运行程序需要用网线将windows主机和Ubuntu主机连接起来,不连接网线的时候运行程序出现以下现象:

在这里插入图片描述

进行网络设置

在Windows和Linux通信之前,需要在windows和Ubuntu系统上进行网络设置,将两台计算机组建成局域网,才能使用Tcp/IP进行通信。

windows设置
1.打开“打开网络和Internet”设置。点击网络和共享中心。

在这里插入图片描述

2.点击以太网。
在这里插入图片描述

3.点击属性。

在这里插入图片描述

4.双击Internet 协议版本4(TCP/IPv4)

在这里插入图片描述

5.设置IP地址。

在这里插入图片描述
Ubuntu设置

1.点击左侧系统设置,选择网络。
在这里插入图片描述
2.点击USB以太网选项的加号,增加一项
在这里插入图片描述
注意:IP地址和网关要与Windows系统的不同,否则无法通信。

4.保存之后就设置好了,断开其他网络,打开有线连接,可以在Ubuntu的终端中查看ip是否设置好了。

测试

1.用一根网线连接两个电脑。

2.在Ubuntu终端输入命令查看是否设置正确。

 ifconfig -a
 

3.在windows系统下打开命令行工具(cmd),测试Ubuntu设置的IP地址。

命令如下:测试Ubuntu系统的IP地址,检查两台电脑是否通信。

ping 192.168.1.3
 

在这里插入图片描述
出现上图所示的结果就说明可以通信,网络设置结束。接下来可以运行程序,进行通信。

ROS端启动服务(Linux系统)

在终端中分别执行:

 roscore
 

//启动服务

 rosrun rosserial_server socket_node
 

//查看Windows下发送的话题

 rostopic echo /cmd_vel
 

可以在终端上看到Windows系统发送的消息:

在这里插入图片描述

控制小乌龟(Linux系统)

可以使用以下命令控制小乌龟进行移动

在Ubuntu中不同终端分别运行:

roscorerosrun rosserial_server socket_node /cmd_vel:=turtle1/cmd_vel
 

//运行小海龟节点

rosrun turtlesim turtlesim_node
 

在windows上运行程序,可以看到小乌龟开始打圈圈

在这里插入图片描述

在连接两台电脑时,有时可以通信,有的时候连接不上,出现以下情况:

在这里插入图片描述
在检查之后,发现Ubuntu系统设置了两个以太网,其中一个是我一直使用的校园网,另一个是以上设置的与Windows通信的以太网。Ubuntu系统与Windows系统通信时,Ubuntu系统的以太网一直连接设置的校园网,导致windows系统所需的IP不正确,所以在通信时尽量只设置一个以太网。

注意:保证windows-ros一直有对钩出现,否则没有连接,无法通信。

在这里插入图片描述


标签:

上一篇: Swagger2介绍与集成(使用) 下一篇:
素材巴巴 Copyright © 2013-2021 http://www.sucaibaba.com/. Some Rights Reserved. 备案号:备案中。