一、在工作空间下输入catkin_make进行编译
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/e5aef913bacc43e5aed051d4174056ef.png)
二、在工作空间中输入source ./devel/setup.bash后回车
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/afa77c4aa4c14ffe89299e9175c19bde.png)
三、机器人的运动控制在wpr_simulation中有一个例子程序,在工作空间中输入:
roslaunch wpr_simulation wpb_simple.launch后回车
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/871e98e3f09c4fd1a5e3f541f5d1724b.png)
四、就会启动一个仿真环境,里面有一台ROS机器人,前面放置了一个衣柜
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/fe7f61bf1ba34cd3a34cf2f33c8682f2.png)
五、再开一个终端,输入rosrun wpr_simulation demo_vel_ctrl后回车,运行运动控制示例程序
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/2c809a5d9a3f474896a354a3ad0fffc4.png)
六、查看机器人仿真环境,发现机器人在缓慢前进,这就是本文想要达到的控制效果。
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/177595d9736b4d3ca272fb69b16840db.png)
七、我们的目标是构建一个速度控制节点,将速度消息包发送到速度控制话题/cmd_vel中去,这就是个典型的发布者节点
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/3bf10f56d042461ea9ec47588d43607e.png)
八、实现思路
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/9286aa77b8394b5fa926d686afcd7be7.png)
九、打开一个终端,输入
cd ~/catkin_ws1/src进入工作空间下的src目录
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/b772b986e21a4ee899838b311fa9fdf2.png)
十、输入catkin_create_pkg vel_pkg roscpp rospy geometry_msgs,创建软件包,名字是vel_pkg,依赖项是roscpp rospy和geometry_msgs,这个geometry_msgs就是包含了速度消息类型的软件包
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/74d19b79240f48f3bd9f530cfb1bc4eb.png)
十一、输入code . 打开VScode
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/29f6e57771fa4144a402aac1fa5c46cb.png)
十二、在刚才创建的vel_pkg软件包的src文件夹里新建一个文件
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/0913331601fd44d6805eee459611f6e6.png)
十三、名字叫做vel_node.cpp,这是一个节点代码文件
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/ae589508e61640a4b8f7cb11e863e2e6.png)
十四、在vel_node.cpp节点代码文件中写入如下代码
#include <ros/ros.h>
#include <geometry_msgs/Twist.h>
int main(int argc, char *argv[])
{
ros::init(argc ,argv ,"vel_node");
ros::NodeHandle n;
ros::Publisher vel_pub = n.advertise<geometry_msgs::Twist>("/cmd_vel",10);
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(ros::ok())
{
vel_pub.publish(vel_msg);
r.sleep();
}
return 0;
}
十五、打开软件包的CMakeLists.txt文件
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/07ac0464a18e46799e5d6e49963c4155.png)
十六、在文件末尾写上这三条编译规则
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/7186dd40e2654ad7b95e778b4f2be3b6.png)
add_executable(vel_node src/vel_node.cpp)
add_dependencies(vel_node ${
${
PROJECT_NAME}_EXPORTED_TARGETS} ${
catkin_EXPORTED_TARGETS})
target_link_libraries(vel_node
${
catkin_LIBRARIES}
)
十七、Ctrl+s保存后,Ctrl+Shift+B进行编译,编译成功
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/ce60a490e7f34e349df296bdc439c65d.png)
十八、打开一个终端,在工作空间中输入source ./devel/setup.bash
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/0cd1e5265c3648cab956dd5a392c606e.png)
十九、输入roslaunch wpr_simulation wpb_simple.launch将仿真环境运行起来
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/dcc7f7404af74571b18d779fe116d2f8.png)
二十、再开另一个终端,输入source ./devel/setup.bash
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/782ca2189d914dff89dcbdd4ce5345fc.png)
二十一、输入rosrun vel_pkg vel_node后回车
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/b8e821395fc947aeb7c1d7525e4693b9.png)
二十二、查看仿真环境,发现机器人向前运动了起来
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/11ba4723834c49af8bd5b3d6bea0ed78.png)
二十三、回到程序,对程序进行修改,使机器人绕Z轴进行旋转
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/91d496f9ac934372ab30373552b382ee.png)
二十四、按Ctrl+Shift+B进行编译,若出现许多项让你选择,选择如下
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/9dc5a300bdd245f0a186f0112dbf6cae.png)
二十五、编译成功
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/b52f5744bc4c4d7981db077b9ae84142.png)
二十六、重新运行节点
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/7c52fba143b84a068d2f373800436c66.png)
二十七、机器人成功绕Z轴运动
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/3d076686f659484ea0aff2c4ff0ae787.png)