当前位置:   article > 正文

ROS实验---自己编写发布者节点,发布速度信息控制机器人_ros 程序发布机移动机器人速度话题 python

ros 程序发布机移动机器人速度话题 python

#机器人工匠阿杰# #哔哩哔哩#

一、实验背景

         消息通讯是ROS操作系统的工作方式,具体内容去看阿杰 他说的比我好。
         

二、实验目的

        通过发送正确格式的消息指令,控制仿真机器人实现制定速度运动。

三、实验原理

        发布者不停地往一个话题里发布信息,一个订阅者不停地等待着接受信息。

        机器人会接收到一个/cmd_vel话题的速度信息,然后控制底盘运动。

        我们只要实现创建一个速度发布者向/cmd_vel发送消息即可。

        创建的流程:   初始化ros节点-创建一ros节(相当于从ros大管家那要一个发送消息的权限)-创建一个发布者 自定义一个发布者的名字 用手机发布消息的类型 发送到哪个话题 消息排队的长度-然后自定义消息包的内容(注意格式)-设置一个循环函数ROS::Rate r(数字)-设置一个while()可以一直发送消息-添加可执行文件Cmake。别忘记编译,如果有问题检查一下环境变量是否正确。

        打开机器人仿真实例:wpr_simulation wpb_simple 用roslaunch打开

                                              在终端运行:roslaunch wpr_simulation wpb_simple.launch

       打开自定义的消息发送节点

四、实验过程

创建功能包:

  1. cd catkin_ws //进入工作空间目录
  2. cd src //进入功能包源文件节夹
  3. catkin_make_create vel_pkg roscpp rospy geomtry_msgs //用catkin_make_create命令创建一个名为vel_pkg的功能包 这个功能包的实现依赖于roscpp rospy和geomtry_msgs消息包

编写源代码:

进入vscode 在src/vel_pkg/src下新建一个文本vel_node.cpp文件 编写源代码//

也可以在vel_pkg下的src里边直接建一个文本编写c代码//

还不想写可以直接复制wpr_simulation/src/dome_vel_ctrl 文件代码到vel_node.cpp里。

这是我写的

  1. #include<ros/ros.h>
  2. #include<geometry_msgs/Twist.h>
  3. int main(int argc, char *argv[])
  4. {
  5. ros::init(argc,argv,"vel_node");
  6. ros::NodeHandle n;
  7. ros::Publisher vel_pub = n.advertise<geometry_msgs::Twist>("/cmd_vel",10);
  8. geometry_msgs::Twist vel_msg;
  9. vel_msg.linear.x = 0.1;
  10. vel_msg.linear.y = 0;
  11. vel_msg.linear.z = 0;
  12. vel_msg.angular.x = 0;
  13. vel_msg.angular.y = 0;
  14. vel_msg.angular.z = 0;
  15. ros::Rate r(30);
  16. while (ros::ok())
  17. {
  18. vel_pub.publish(vel_msg);
  19. r.sleep();
  20. /* code */
  21. }
  22. return 0;
  23. }

这里边出现了许多问题:

(1)拼写错误:ros::Publisher vel_pub = n.advertise<geometry_msgs::Twist>("/cmd_vel",10);

                        Publisher P要大写

(2)格式错误:ros::Publisher vel_pub = n.advertise<geometry_msgs::Twist>("/cmd_vel",10);

                           ros::Publisher vel_pub   //创建消息发送者vel_pub

                           n.advertise<geometry_msgs::Twist>("/cmd_vel",10);//发布geometry_msgs消息包里twist类型的消息包到"/cmd_vel"话题 ,我当时只填了一个消息包名,没指定哪一种类型。

五、实验结果

        成功运行,不过Gazebo在运行时还是会报错,但不影响正常运行,可能是电脑的问题吧。

六、实验思考

         早晨起来干活就是比晚上效率高,出现问题了原路径尝试一次就好了,仿佛尝试就不聪明了。思考可能出现问题的地方能加深对系统的理解。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/674757
推荐阅读
相关标签
  

闽ICP备14008679号