ROS机器人运动控制
一.思路梳理
1.机器人运动控制速度消息包定义为
![](https://i-blog.csdnimg.cn/blog_migrate/ba8385675361890b343592d3c418489c.png)
2.思路整理,我们需要构建速度控制节点,把速度控制包发布到速度控制话题/cmd_vel中,即完成消息发布任务
![](https://i-blog.csdnimg.cn/blog_migrate/fdea8e0f202f8443ad0439b954e9d33a.png)
3.代码构建思路
(1).构建一个新的软件包,包名叫做vel_pkg
(2).在软件包中新建一个节点,节点名叫做vel_node
(3).在节点中,向ROS大管家NodeHandle申请发布话题/cmd_vel,并拿到发布对象vel_pub
(4).构建一个geometry_msgs/Twist类型的消息包vel_msg,用来承载要发送的速度值
(5).开启一个while循环,不停地使用vel_pub对象发送速度消息包vel_msg
二.具体实现
在catkin_ws/src下执行代码
catkin_create_pkg vel_pkg roscpp rospy std_msgs
来创建软件包vel_pkg
2.打开vscode,在vel_pkg的src文件夹下新建vel_node.cpp代码文件
#include <ros/ros.h>
#include <geometry_msgs/Twist.h> //速度消息类型头文件
int main(int argc, char *argv[])
{
/* code */
ros::init(argc, argv, "vel_node");
ros::NodeHandle n; //定义节点管理对象
ros::Publisher vel_pub = n.advertise<geometry_msgs::Twist>("/cmd_vel", 10); //定义发布消息对象vel_pub,发布消息类型为geometry_msgs::Twist,话题名称topic为/cmd_vel
geometry_msgs::Twist vel_msg;
vel_msg.linear.x = 0.1;
vel_msg.linear.y = 0;
vel_msg.linear.z = 0;
vel_msg.angular.x = 0;
vel_msg.angular.y = 0;
vel_msg.angular.z = 0;
ros::Rate r(30); //控制while的循环次数,一秒30次
while (ros::ok())
{
/* code */
vel_pub.publish(vel_msg);
r.sleep(); //控制while循环的频率
}
return 0;
}
3.修改CMakelists文件,在文件末尾添加代码如下
![](https://i-blog.csdnimg.cn/blog_migrate/2d0d5ae2518b70d88e0b29460bf8cb0d.png)
4.catkin_make编译
三.实际测试
执行代码roslaunch wpr_simulation wpb_simple.launch,打开gazebo仿真环境
![](https://i-blog.csdnimg.cn/blog_migrate/ec898ad1917c8ac6dbc2e209bba30b03.png)
2.终端输入rosrun vel_pkg vel_node,运行代码,可以看到小车在向前匀速运动