1.通過rqt_graph指令,可以看到ROS節點之間的關系
從上圖中可以看到,有兩個節點/teleop_turtle 和 /turtlesim
/teleop_turtle節點發布話題,話題名為/turtle1/cmd_vel
/turtlesim訂閱了該話題
我們已知/teleop_turtle節點是控制台通過上下左右來控制小烏龜的
那我們的鍵盤,發了什么什么消息給/turtlesim節點呢
2.通過rostopic指令,進行發布話題 我們這兒查看一下/turtle1/cmd_vel
輸入rostopic pub /turtle1/cmd_vel 再按一下Tab鍵 進行補全,我們可以知道發布了什么消息結構
此時我們就能知道消息結構為geometry_msgs/Twist
3.通過rosmsg指令可以知道具體的消息結構
總之,我們通過修改線速度中的下x,y,z 和角速度中的x,y,z 就可以控制小烏龜運動了
按完回車鍵后小烏龜就能繞圈了
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
開啟后端口為9090,這個要記住了,后面需要通過C#進行WebSocket通信
5.給ubuntu安裝dotnet5環境
sudo snap install dotnet-sdk --channel=5.0/stable --classic
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 發布項目
7.2 保存完點擊發布按鈕
7.3 授權並運行
chmod 777 Test ./Test