• 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

  • 相关阅读:
    Docker PHP 扩展配置
    PHP 打水印功能
    MYSQL的主从复制
    CentOS7开启防火墙及特定端口
    非常全面的讲解Hosts文件
    STL的erase()陷阱-迭代器失效总结
    scons使用
    SecureCRT 使用技巧
    atomic, spinlock and mutex性能比较
    内存池的实现(二)
  • 原文地址:https://www.cnblogs.com/zjwno1/p/14006345.html
Copyright © 2020-2023  润新知