一、在工作空间下输入catkin_make 进行编译
二、在工作空间中输入source ./devel/setup.bash 后回车
三、机器人的运动控制在wpr_simulation中有一个例子程序,在工作空间中输入:
roslaunch wpr_simulation wpb_simple.launch 后回车
四、就会启动一个仿真环境,里面有一台ROS机器人,前面放置了一个衣柜
五、再开一个终端,输入rosrun wpr_simulation demo_vel_ctrl 后回车,运行运动控制示例程序
六、查看机器人仿真环境,发现机器人在缓慢前进 ,这就是本文想要达到的控制效果 。
七、我们的目标是构建一个速度控制节点 ,将速度消息包 发送到速度控制话题/cmd_vel 中去,这就是个典型的发布者节点
八、实现思路
九、打开一个终端,输入
cd ~/catkin_ws1/src 进入工作空间下的src目录
十、输入catkin_create_pkg vel_pkg roscpp rospy geometry_msgs ,创建软件包,名字是vel_pkg,依赖项是roscpp rospy和geometry_msgs,这个geometry_msgs就是包含了速度消息类型的软件包
十一、输入code . 打开VScode
十二、在刚才创建的vel_pkg软件包的src文件夹里新建一个文件
十三、名字叫做vel_node.cpp ,这是一个节点代码文件
十四、在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文件
十六、在文件末尾写上这三条编译规则
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进行编译,编译成功
十八、打开一个终端,在工作空间中输入source ./devel/setup.bash
十九、输入roslaunch wpr_simulation wpb_simple.launch 将仿真环境运行起来
二十、再开另一个终端,输入source ./devel/setup.bash
二十一、输入rosrun vel_pkg vel_node 后回车
二十二、查看仿真环境,发现机器人向前运动了起来
二十三、回到程序,对程序进行修改,使机器人绕Z轴进行旋转
二十四、按Ctrl+Shift+B进行编译,若出现许多项让你选择,选择如下
二十五、编译成功
二十六、重新运行节点
二十七、机器人成功绕Z轴运动