实现Linux(ROS)与Windows(Visual studio)信息传输通讯
目前一直在做视觉引导的机械臂目标抓取相关内容的研究。由于图像数据处理是在Window系统下进行的,而机械臂开发却是在ROS环境中开发,因此需要进行跨系统的信息通讯传输,将位姿信息传输给机械臂。在进行该部分通讯内容的学习过程中,主要参考了以下博主的工作,非常感谢~~链接: link.链接: link.链接: link.这里,介绍一下传输环境搭建的过程,便于分享学习和日后查阅。运行环境ROS: kin
目前一直在做视觉引导的机械臂目标抓取相关内容的研究。由于图像数据处理是在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 <iostream>
//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 <string>
#include <stdio.h>
#include "ros.h"
#include <geometry_msgs/Twist.h>
#include <windows.h>
#include <tchar.h>
using std::string;
int _tmain(int argc, _TCHAR * argv[])
{
//创建节点句柄
ros::NodeHandle nh;
//ROS所在主机IP
char text[] = "192.168.77.3";
char *ros_master = text;
printf("Connecting to server at %s\n", ros_master);
nh.initNode(ros_master);
printf("Advertising cmd_vel message\n");//发布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();
//休眠100ms
Sleep(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系统下,可以看到接收到的数据
更多推荐
所有评论(0)