Windows-Ros利用rosserial_windows实现通信
系统环境:
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一直有对钩出现,否则没有连接,无法通信。
标签:
相关文章
-
无相关信息