素材巴巴 > 程序开发 >

实现Linux(ROS)与Windows(Visual studio)信息传输通讯

程序开发 2023-09-09 10:31:39

目前一直在做视觉引导的机械臂目标抓取相关内容的研究。由于图像数据处理是在Window系统下进行的,而机械臂开发却是在ROS环境中开发,因此需要进行跨系统的信息通讯传输,将位姿信息传输给机械臂。
在进行该部分通讯内容的学习过程中,主要参考了以下博主的工作,非常感谢~~
链接: link.
链接: link.
链接: link.

这里,介绍一下传输环境搭建的过程,便于分享学习和日后查阅。

运行环境

ROS: kinetic Window10: Visual Studio2017 通讯方式:以太网传输

基本工作流程

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

ROS环境配置

1.安装rosserial_windows

在终端上,执行以下语句完成在ROS上安装rosserial_windows和rosserial服务器

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

2.生成ros_lib

给定一个文件名,例如my_library,将完成的文件就会存储到的提供的文件夹的名称所在地(如下语句,产生的的my_library位于主目录文件下)。

rosrun rosserial_windows make_libraries.py my_library

3.my_library文件拷贝

通过U盘可以将生成的my_library文件夹拷贝至另一台Window系统下的电脑中。在Linux系统下插入U盘时,会出现“ubuntu不能访问xx卷”的问题。
解决方法:

打开terminal,安装ntfs-3g:
sudo apt-get install ntfs-3g
修复挂载错误的提示的相应的分区,如提示中的/dev/sda1,则输入:
sudo ntfsfix /dev/sdaX

这里的X要根据访问U盘时,弹出的窗口查看。

Window环境配置

1.在Visual Studio平台上创建项目,这里的项目应该没有要求:【空项目】、【控制台应用】、【window桌面向导】都可以

在这里插入图片描述

2.进行文件配置

①U盘拷贝过来的my_library文件夹下的ros_lib文件夹复制到你创建的rosserial_hello_world文件夹下
在这里插入图片描述

②将ros_lib文件夹下没有子文件夹的所有文件复制一份至工程目录下。
在这里插入图片描述

3.添加头文件和源文件

①新建一个源文件下的c++文件
在这里插入图片描述
将如下代码添加到创建的rosserial_hello_world.cpp文件中

// rosserial_hello_world.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
 //#include //int main()
 //{
 //    std::cout << "Hello World!n";
 //}// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
 // 调试程序: F5 或调试 >“开始调试”菜单// 入门使用技巧: 
 //   1. 使用解决方案资源管理器窗口添加/管理文件
 //   2. 使用团队资源管理器窗口连接到源代码管理
 //   3. 使用输出窗口查看生成输出和其他消息
 //   4. 使用错误列表窗口查看错误
 //   5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目
 //   6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件/* rosserial_hello_world.cpp : Example of sending command velocities from Windows using rosserial*/
 //#include "stdafx.h"
 #include 
 #include 
 #include "ros.h"
 #include 
 #include 
 #include  using std::string;int _tmain(int argc, _TCHAR * argv[])
 {//创建节点句柄ros::NodeHandle nh;//ROS所在主机IPchar text[] = "192.168.77.3";char *ros_master = text;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;
 }

②添加其他配置的头文件和源文件
在这里插入图片描述
然后,一定要运行一下,让整个环境生成,便于接下来配置文件。
🌂属性附加目录配置
项目->属性->C/C+±>常规->附加包含目录,添加"…/ros_lib" 的路径。
在这里插入图片描述
④未避免出现程序错误,修改一下预编译头
在这里插入图片描述

以太网通讯

通过网线将两台不同系统的电脑设备连接起来。

1.Window环境设备

①打开“打开网络和Internet”设置。点击网络和共享中心。
在这里插入图片描述
②点击以太网
在这里插入图片描述
🌂点击属性
在这里插入图片描述
④双击Internet 协议版本4(TCP/IPv4)
在这里插入图片描述
⑤配置IP地址
在这里插入图片描述

2.ubuntu设置

①进入网络设置:设置IP地址等信息,注意ip地址的前3个字段与windows系统设置的ip一致,最后一个字段不一样
在这里插入图片描述
②保存之后就设置好了,断开其他网络,打开有线连接,可以在Ubuntu的终端中查看ip是否设置好了
在终端输入命令: ifconfig -a
在这里插入图片描述

3测试两台计算机之间的通讯

在windows系统下打开命令行窗口(win+r启动窗口,输入cmd,弹出命令行窗口),ping一下Ubuntu设置的IP地址。

在这里插入图片描述
至此,完成两台设备的通讯连接测试。

运行程序

这里说明一点,程序中有条语句要注意根据实际IP设置进行修改:
在这里插入图片描述

未连接网线时:
在这里插入图片描述
连接网线时:
在这里插入图片描述

ROS端启动服务

在不同终端上分别执行以下三条指令:

roscore

rosrun rosserial_server socket_node

rostopic echo /cmd_vel

在另一台计算机的ubuntu系统下,可以看到接收到的数据
在这里插入图片描述


标签:

上一篇: Mac安装和卸载node和npm 下一篇:
素材巴巴 Copyright © 2013-2021 http://www.sucaibaba.com/. Some Rights Reserved. 备案号:备案中。