ROS学习——通过C++&Python实现机器人运动控制

ROS学习——实现对机器人运动的控制

代码实现思路

  1. 构建一个新的软件包,包名为"vel_pkg"
  2. 新建发布者节点vel_node
  3. 通过NodeHandle/rospy发布话题"/cmd_vel",发布对象vel_pub
  4. 构建一个"geometry_msgs/Twist"类型消息包vel_msg
  5. 创建while循环,不停的通过vel_pub对象发送速度消息包vel_msg
  6. 机器人运动分为矢量速度linear以及旋转速度angular,即分别对应**线速度(线性速度)**和 角速度(角速度),其中默认规定的速度单位分别为m/s以及rad/s(正值表示逆时针旋转,负值表示顺时针旋转)

1. 创建package软件包

在工作空间中的src目录下,打开终端输入catkin_create_pkg vel_pkg roscpp rospy geometry_msgs,创建一个名为vel_pkg的软件包

在这里插入图片描述

2. 编写代码

编写机器人运动节点的 C++ 代码

  • 在vscode中找到新创建的软件包的src目录,在该目录下新建节点vel_node
  • 编写vel_node代码
    #include <ros/ros.h>
    #include <geometry_msgs/Twist.h> // 引入Twist消息类型的头文件
    
    int main(int argc, char *argv[])
    {
        ros::init(argc, argv, "vel_node");
    
        ros::NodeHandle nh;
        ros::Publisher vel_pub = nh.advertise<geometry_msgs::Twist>("/cmd_vel", 10); // 话题名称"/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 (ros::ok())
        {
            vel_pub.publish(vel_msg);
            r.sleep();
        }
        return 0;
    }
    
  • 在vel_pkg的CMakeLists.txt文件中添加以下声明
    add_executable(vel_node src/vel_node.cpp)
    target_link_libraries(vel_node
      ${catkin_LIBRARIES}
    )
     add_dependencies(vel_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
    
  • 编译工作空间
      1. 方法一:在vscode中直接ctrl + shift + B编译
      1. 方法二:在工作空间目录下打开终端,并通过catkin_make进行编译

编写机器人运动节点的 Python 代码

  • 在vscode中找到新创建的软件包的src目录,创建同级目录scripts,并在该目录下新建节点vel_node.py
  • 编写vel_node代码
    #!/usr/bin/env python3
    # coding = utf-8
    import rospy
    from geometry_msgs.msg import Twist # 引入消息包Twist类型
    
    if __name__ == "__main__":
        rospy.init_node("vel_node") # 初始化节点
    
        vel_pub = rospy.Publisher("/cmd_vel",Twist,queue_size=10) # 初始化发布者
    
        vel_msg = Twist() # 定义vel_msg 为Twist消息类型
        vel_msg.linear.x = 0.1 # 规定线速度x轴上速度为0.1
    
        rate = rospy.Rate(30) # 规定消息发布频率
        while not rospy.is_shutdown():
            vel_pub.publish(vel_msg)
            rate.sleep()
    
  • 在scripts目录下打开终端,运行chmod +x vei_node.py给予新创建的节点可执行权限

3. 通过仿真环境测试节点代码

下载wpr_simulation软件包

  • 如果已经下载过wpr_simulation软件包,进入工作空间中的该软件包目录下的终端,通过git pull更新软件包,并重新编译工作空间
  • 如果没有下载过wpr_simulation软件包,需要完成以下操作
      1. 在github中找到该软件包的链接,在工作空间下的src目录进行git clone 克隆链接,具体可见"ROS包的下载&创建工作空间"
      1. 进入该软件包的scripts目录下的终端,运行./install_for_ROS版本.sh,用于自动下载和安装该软件包编译所需的依赖项
      1. 通过catkin_make重新编译工作空间

打开仿真环境

  • 打开终端运行roslaunch wpr_simulation wpb_simple.launch
    在这里插入图片描述
  • 如果出现[gazebo-2] process has died报错,可能是之前下载软件包时没有下载完整,可以在通过sudo apt install ros-$ROS_DISTRO-gazebo-ros-pkgs解决
  • 也有可能是因为之前的gazabo仿真环境关闭的不够彻底,可以通过killall gazserver杀死之前未关闭彻底的仿真环境

终端中通过rosrun vel_pkg vel_node运行机器人运动节点,观察仿真现象

如果出现以下现象,代表节点编写成功

ROS机器人运动仿真

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值