目前一直在做视觉引导的机械臂目标抓取相关内容的研究。由于图像数据处理是在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系统下,可以看到接收到的数据
在这里插入图片描述

Logo

更多推荐