ROS 通过C# 代码控制小乌龟行走
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