c++ - 使用 UDP 通过 UDP 将数据传输到非 ROS 计算机

标签 c++ matlab sockets udp ros

我想通过 UDP 将数据从 ROS 计算机传输到非 ROS 计算机。

现在指定我的作品:

我有一个 LiDAR(Sick TiM561),我可以通过 ROS 计算机成功启动它,我现在可以使用“订阅者”使用 roscpp 获取 LiDAR 的数据,roscpp 是 ROS 中的 c++ 代码。现在,我需要将 LiDAR 的数据传输到 microbox这是一台基于 MATLAB 的计算机(您可以在这台 PC 中通过 MATLAB 构建您的程序)。但是我不熟悉 c++ 代码,有人可以建议我或指导我如何修改下面的代码并将其添加到我的 roscpp 代码中吗?提前致谢!

结构上,Micro box是客户端,ROS PC是服务器。 这是我的 roscpp 的代码:

#include "ros/ros.h"
#include "std_msgs/String.h"
#include "sensor_msgs/LaserScan.h"
void laser_msg_Callback(const sensor_msgs::LaserScan::ConstPtr& scan)
{
for (int x=0;x< scan->ranges.size();x++)
{
  ROS_INFO("I heard: [%f]", scan->ranges[x]);
}
}
int main(int argc, char **argv)
{
ros::init(argc, argv, "sick_listener");
ros::NodeHandle n;
ros::Subscriber sub = n.subscribe("scan", 811, laser_msg_Callback);
ros::spin();
return 0;
}

这段代码可能就是我需要的:

UdpClient client;
public IPAddress serverIP = IPAddress.Parse("140.124.35.1");
public Form1()
{
    InitializeComponent();
    client = new UdpClient();
}

public void SendData()
{
    client.Connect(serverIP, 3000);
    byte[] data = Encoding.ASCII.GetBytes("Hi, I'm new client.");
    client.Send(data, data.Length);
    DoListening();
}
public void DoListening()
{
    IPEndPoint adress = new IPEndPoint(serverIP, 3000);
    byte[] receivedbytes = client.Receive(ref adress);
    string recieved = Encoding.ASCII.GetString(receivedbytes);

    MessageBox.Show("Recieved: " + recieved);
}
private void button1_Click(object sender, EventArgs e)
{
    SendData();
}

最佳答案

我认为适合您的可能方法是检查 rossereal实现。我不熟悉 microbox 的开发,可能所有支持 rosserial 的平台都不能开箱即用,但我认为这就是 rosserial 的用途:提供符合 ros 的 protocol用于与非 ros 设备通信 ros 服务器。为此,您的 ros-nodes 代码甚至不需要知道客户端的发布者和/或订阅者是在运行 ros 的计算机上运行的常规 ros 节点,还是被 rosserial client 模仿。在非 ros 设备上。

我用的时候,效率rosserial_windows对我有好处。我能够控制一个相当高分辨率的摄像头,该摄像头连接到一个连接到网络的 Windows 计算机上,该网络具有多个运行 ros 的计算机,以令人满意的速率从摄像头传输图像消息。

如果没有可用的 rosserial 实现与 microbox 兼容,那么您可能需要检查 rosserial 的“Adding Support for New Hardware”和 rosserial_embeddedlinux 的现有代码通过 udp 实现类似 rosserial 的连接。

关于c++ - 使用 UDP 通过 UDP 将数据传输到非 ROS 计算机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34564842/

相关文章:

c++错误编译器原型(prototype)和期望构造函数

c - 无法从 C 中的 HTTP 请求获取路径和方法

c++ - 如何在QT中接收正确的UDP数据包?

api - 如何测试Berkeley套接字(BSD)API?

java - 在使用 JNI 将 c++ unordered_map 返回到 java 之前将其转换为 java hashMap

c++ - SDL2窗口不会立即关闭吗?

c++ - 在 C++ 预处理器中为参数添加引号

matlab - 在Matlab中移除图像偏移(二维基线)

matlab - 在matlab中对单元格数组进行排序并获取新索引

matlab - MATLAB 中的事件位置问题