我的ROS学习之路——通过小乌龟实例,理解节点,话题,消息。

概览:ROS中有两大组件。

1.节点 ——节点是基本的处理单元(节点实际上只不过是ROS软件包中的一个可执行文件)。

2.话题——话题是基本的通信单元,实现节点之间的通信。

正文(注意,介绍一个-h 参数(如:roscode -h、rostopic -h、rosparam -h等)可以查看这个命令有什么功能,有什么命令。详细的功能可以通过这个形式来查看,蛮有用的):

1.节点部分(rosnode):

运行节点之前,必须先运行roscore,运行roscore之后,其实是运行了三个进程(可以通过ps -ef|grep ros命令查看)。这三个进程分别是:roscore,rosmaster,rosout。

rosmaster——此即启动了一个节点管理器,顾名思义,其作用就是用于节点管理,在一个ros系统中,有且只有一个,它是ros中所有节点运行的前提,所以在执行启动ros节点前,第一步都需要执行roscore。

rosout——是log输出管理。

  • roscore = ros+core:主节点(为ROS提供命名服务) + rosout (stdout/stderr) + 参数服务器(会在以后介绍)
  • rosnode = ros+node:获取节点信息的ROS工具
  • rosrun = ros+run:运行给定的软件包中的节点

详情看官网的教程节点部分

常用命令(虽然可以通过-h查看所有命令,但常用的希望还是能记住。当然,记不住这个命令,但是起码得知道有这个东西,然后可以去哪里找这个命令):

可以通过rosnode list查看当前运行的节点。

2.话题部分(rostopic):

此时就需要创建一个小乌龟实例了。需要三个步骤:1.roscore 2.rosrun turtlesim turtlesim_node(运行turtlesim包内的turtlesim_node节点) 3.rosrun turtlesim turtle_teleop_key(运行turtlesim包内的turtlesim_teleop_key节点,实现可以键盘操作turtle(turtle即乌龟,turtlesim即乌龟模拟器)),注意:这三个命令都需要打开新的终端分别输入。

话题一般需要结合消息来使用。

2.1ROS话题:turtlesim_node节点和turtle_teleop_key节点之间是通过一个ROS话题来相互通信的。turtle_teleop_key在话题上发布键盘按下的消息,turtlesim则订阅该话题以接收消息。

常用命令(虽然可以通过-h查看所有命令,但常用的希望还是能记住。当然,记不住这个命令,但是起码得知道有这个东西,然后可以去哪里找这个命令):

rosrun rqt_graph rqt_graph:用动态的图显示了系统中正在发生的事情。

rostopic list:能够列出当前已被订阅和发布的所有话题。

rstopic echo:可以显示在某个话题上发布的数据。

用法:

rostopic echo [topic]

例子:

rostopic echo /turtle1/cmd_vel

2.2ROS消息:话题的通信是通过节点间发送ROS消息实现的。为了使发布者(turtle_teleop_key)和订阅者(turtulesim_node)进行通信,发布者和订阅者必须发送和接收相同类型的消息。这意味着话题的类型是由发布在它上面消息的类型决定的。使用rostopic type命令可以查看发布在话题上的消息的类型

详情操作关注官网教程话题部分

常用命令(虽然可以通过-h查看所有命令,但常用的希望还是能记住。当然,记不住这个命令,但是起码得知道有这个东西,然后可以去哪里找这个命令):

rostopic type:命令用来查看所发布话题的消息类型。

如:

rostopic type [topic]

rostopic pub:可以把数据发布到当前某个正在广播的话题上。

如:

用法:

rostopic pub [topic] [msg_type] [args]

例子:

rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'

rostopic hz:报告数据发布的速率。

用法:

rostopic hz [topic]

例子:

rostopic hz /turtle1/pose

rqt_plot:命令可以在滚动时间图上显示发布到某个话题上的数据。

如:

rosrun rqt_plot rqt_plot

由上自己总结了一个操作小乌龟的四部曲:

1.rostopic list——先查看有什么话题

2.rosrun rqt_graph rqt_graph——可以查看节点与节点以及话题之间的关系。

3.rostopic type  [topic]——查看消息类型,等会还可以方便直接拷贝相应消息类型到rostopic                                                         pub作为参数,省得手打了。

4.rostopic pub [topic] [msg_type] [args]——操作小乌龟的命令

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面我来为你编写一段ROS下C++控制小乌龟运动的节点。 我们假设你已经安装好ROS,并且已经安装了turtlebot3_simulations包。这个包提供了一个虚拟的小乌龟机器人模拟器,我们可以在其中进行运动控制。 首先,我们需要创建一个ROS包并在其中创建一个节点。在终端中输入以下命令: ``` $ mkdir -p ~/catkin_ws/src/turtlebot_control/src $ cd ~/catkin_ws/src/turtlebot_control $ catkin_init_workspace $ cd .. $ catkin_make $ source devel/setup.bash $ catkin_create_pkg turtlebot_control roscpp geometry_msgs $ cd ~/catkin_ws/src/turtlebot_control/src $ touch turtlebot_control.cpp ``` 上述命令创建了一个名为turtlebot_control的ROS包,并在其中创建了一个名为turtlebot_control.cpp的节点源文件。 接下来,在turtlebot_control.cpp中编写节点代码。以下是一个简单的示例: ``` #include <ros/ros.h> #include <geometry_msgs/Twist.h> int main(int argc, char** argv) { ros::init(argc, argv, "turtlebot_control"); ros::NodeHandle nh; ros::Publisher pub = nh.advertise<geometry_msgs::Twist>("/cmd_vel", 10); ros::Rate rate(10); while (ros::ok()) { geometry_msgs::Twist msg; msg.linear.x = 0.2; msg.angular.z = 0.5; pub.publish(msg); rate.sleep(); } return 0; } ``` 在这个示例中,我们创建了一个名为turtlebot_control的节点,并定义了一个名为/cmd_vel的话题,用于发布小乌龟的控制指令。在主循环中,我们创建了一个geometry_msgs::Twist类型的消息,并设置了线速度和角速度。然后,我们使用ros::Publisher对象将消息发布到/cmd_vel话题中。 最后,我们使用ros::Rate对象控制节点的执行频率。在这个示例中,我们设置频率为10Hz。 接下来,我们需要编译并运行这个节点。在终端中输入以下命令: ``` $ cd ~/catkin_ws $ catkin_make $ source devel/setup.bash $ rosrun turtlebot_control turtlebot_control ``` 如果一切正常,你应该能够在虚拟小乌龟机器人模拟器中看到小乌龟按照设定的控制指令运动。 当然,这只是一个非常简单的示例。在实际开发中,你需要根据具体需求编写更复杂的控制逻辑。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值