ROS 通过C# 代码控制小乌龟行走

 

1.通过rqt_graph指令,可以看到ROS节点之间的关系

image

从上图中可以看到,有两个节点/teleop_turtle 和 /turtlesim

/teleop_turtle节点发布话题,话题名为/turtle1/cmd_vel

/turtlesim订阅了该话题

我们已知/teleop_turtle节点是控制台通过上下左右来控制小乌龟的

那我们的键盘,发了什么什么消息给/turtlesim节点呢

2.通过rostopic指令,进行发布话题  我们这儿查看一下/turtle1/cmd_vel

输入rostopic pub /turtle1/cmd_vel  再按一下Tab键 进行补全,我们可以知道发布了什么消息结构

image

此时我们就能知道消息结构为geometry_msgs/Twist

 

3.通过rosmsg指令可以知道具体的消息结构

image

总之,我们通过修改线速度中的下x,y,z 和角速度中的x,y,z 就可以控制小乌龟运动了

image

按完回车键后小乌龟就能绕圈了

 

4.用C#代码控制小乌龟,我们用到的方法是RosBridge,所以要在Ubuntu中安装RosBridgeServer

sudo apt-get install ros-melodic-rosbridge-server
sudo apt-get install ros-melodic-rosbridge-suite 

开启rosbridge服务

roslaunch rosbridge_server rosbridge_websocket.launch

image

开启后端口为9090,这个要记住了,后面需要通过C#进行WebSocket通信

 

5.给ubuntu安装dotnet5环境

sudo snap install dotnet-sdk --channel=5.0/stable --classic

image

 

6. 编写C# 代码,我使用的是VS2019 ,请更新到最新版,最新版支持dotnet5

   使用到WebSocketSharp 以及 西门子的RosBridgeClient

  具体源码我已经上传到gitee上,各位博友可以下载下来测试使用 https://gitee.com/zjwno1/ros-net5

static void Main(string[] args)
{
    try
    {
        string uri = "ws://192.168.20.132:9090";
        RosSocket RosSocket = new RosSocket(new RosSharp.RosBridgeClient.Protocols.WebSocketSharpProtocol(uri));
        string id = RosSocket.Advertise<Twist>("/turtle1/cmd_vel");
         while (true)
        {
            Twist message = new Twist();
            message.linear.x = -1;
            message.linear.y = 0;
            message.linear.z = 0;
            message.angular.x = 0;
            message.angular.y = 0;
            message.angular.z = 1;
            RosSocket.Publish(id, message);
        }
    }
    catch (Exception ex)
    {

    }
}        

  

    代码中将不停的发布话题消息,小乌龟不停的转圈,当然也可以根据自己的逻辑编写其他功能

 

7.将C#项目打包成可执行文件

7.1 发布项目

image

 

image

 

image

 

image

 

image

 

image

 

7.2 保存完点击发布按钮

image

 

image

 

image

 

7.3 授权并运行

chmod 777 Test
./Test

image

111111

posted @ 2020-11-19 16:28  大师兄法号随缘  阅读(2127)  评论(1编辑  收藏  举报