ros话题通信 《发布信息》控制乌龟圆周运动, c++代码及详细操作步骤

ros自带一个乌龟案例,通过它可以让我们更好的理解ros的话题通信。下面的内容主要是讲如何去写一个话题通信去控制其动作。

ROS话题通信 发布消息 控制小乌龟

记录一下学习ROS的过程,加油!

测试当前环境是否可以运行小乌龟

roscore
#运行roscore
rosrun turtlesim turtlesim_node
#启动turtlesim_node节点
rosrun turtlesim turtle_teleop_key
#启动turtlesim_teleop_key节点

如果成功的话,会弹出一个带有小乌龟的窗口,你可以通过键盘去控制它行走。

获取当前ros运行的话题与其相关的信息

rostopic list 
#获取当前活跃的话题

/rosout
/rosout_agg
/turtle1/cmd_vel
/turtle1/color_sensor
/turtle1/pose

rqt_graph
#获取当节点图

我们可以得到话题名为

/turtle1/cmd_vel

rostopic info /turtle1/cmd_vel

我们得到话题的信息

Type: geometry_msgs/Twist
Publishers:

  • /teleop_turtle
    Subscribers:
  • /turtlesim
rosmsg show gemetry_msgs/Twist
#获取其信息的格式

geometry_msgs/Vector3 linear
float64 x
float64 y
float64 z
geometry_msgs/Vector3 angular
float64 x
float64 y
float64 z

线速度: x前进后退,y左右平移,z上下移动;
角速度: x roll y pitch z yaw;
乌龟这个案例只有线速度x,角速度z两个值。

rostopic echo /turtle1/cmd_vel
#当控制小乌通信时,此话题信息会打印出来

总节:此时我们已经获取到话题名称: /turtle1/cmd_vel 类型:geometry_msgs/Twist
做个简单的测试,用下面的命令控可以看到乌龟做圆周运动。

rostopic pub -r 10 /turtle1/cmd_vel  geometry_msgs/Twist  '{linear:  {x: 1.0, y: 0.0, z: 0.0}, angular: {x: 0.0,y: 0.0,z: 1.0}}' 

写一个发布程序控制乌龟运动

mkdir -p demo01_ws/src
#新建一个目录文件夹src
cd demo01_ws/src
#进入到src文件夹
catkin_create_pkg  package_01 roscpp rospy std_msgs geometry_msgs
#创建包名为 package_01 后面4个为依赖项
#在demo01_ws/src下生成package_01,CmakeLists.txt
cd  ~/demo01_ws
#进入到 demo01_ws工程文件夹下
catkin_make
#在demo01_ws中生成build,devel 文件夹
source setup.bash
#在devel目录下运行,将此ros工程加入到ros环境

ROS文件工程结构如下图所示:

catkin_create_pkg
catkin_create_pkg
catkin_create_pkg
catkin_create_pkg
catkin_make
catkin_make
workspace folder
src
CMakeLists.txt
package_1.
package_2.
package_....
build
devel

catkin_create_pkg package_01 roscpp rospy std_msgs geometry_msgs

catkin_create_pkg
catkin_create_pkg
catkin_create_pkg
catkin_create_pkg
package_1.
CMakeLists.txt
package.xml
src
include
package_1.
catkin_create_pkg
catkin_create_pkg
catkin_create_pkg
catkin_create_pkg
package_2.
CMakeLists.txt
package.xml
src
include
package_2.
catkin_create_pkg  package_01 roscpp rospy std_msgs geometry_msgs
#在workspace folder/src. 中运行此命令,在src中创建一个包名为package_0文件夹

demo01_ws/src/package_01/src路径下新建名为pub_control_msg.cpp的c++文件,代码如下。

#include "ros/ros.h"
#include "geometry_msgs/Twist.h"
int main(int argc,char *argv[])
{
    //pub msgs to control the turtle
    //topic:/turtle1/cmd_vel
    //type:geometry_msgs/Twist
    //step:include the head file
    //initialize  ros node
    //create handle of ros
    //create pub
    ros::init(argc,argv,"mycotrol"); //initialize node
    ros::NodeHandle nh;
    ros::Publisher pub = nh.advertise<geometry_msgs::Twist>("/turtle1/cmd_vel",10);
    ros::Rate rate(10);
    geometry_msgs::Twist twist;
    twist.linear.x = 1.0;
    twist.linear.y = 0.0;
    twist.linear.z = 0.0;
    twist.angular.x = 0.0;
    twist.angular.y = 0.0;
    twist.angular.z = 0.5;
    while(ros::ok())
    {
        pub.publish(twist);
        rate.sleep();
        ros::spinOnce();
    }
    return 0;
}

demo01_ws/src/package_01/修改CmakeList.txt文件。

add_executable(pub_control_msg src/pub_control_msg.cpp)
target_link_libraries(pub_control_msg      ${catkin_LIBRARIES} )

demo01_ws目录下运行

catkin_make

编译成功后运行此程行

rosrun pakage_01 pub_control_msg  

如果不出意外的话,ros的小乌龟案例就已经开始圆周动作了。
加油,各位!

  • 4
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZUSTAND

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值