赞
踩
#机器人工匠阿杰# #哔哩哔哩#
一、实验背景
消息通讯是ROS操作系统的工作方式,具体内容去看阿杰 他说的比我好。
二、实验目的
通过发送正确格式的消息指令,控制仿真机器人实现制定速度运动。
三、实验原理
发布者不停地往一个话题里发布信息,一个订阅者不停地等待着接受信息。
机器人会接收到一个/cmd_vel话题的速度信息,然后控制底盘运动。
我们只要实现创建一个速度发布者向/cmd_vel发送消息即可。
创建的流程: 初始化ros节点-创建一ros节(相当于从ros大管家那要一个发送消息的权限)-创建一个发布者 自定义一个发布者的名字 用手机发布消息的类型 发送到哪个话题 消息排队的长度-然后自定义消息包的内容(注意格式)-设置一个循环函数ROS::Rate r(数字)-设置一个while()可以一直发送消息-添加可执行文件Cmake。别忘记编译,如果有问题检查一下环境变量是否正确。
打开机器人仿真实例:wpr_simulation wpb_simple 用roslaunch打开
在终端运行:roslaunch wpr_simulation wpb_simple.launch
打开自定义的消息发送节点
四、实验过程
创建功能包:
- cd catkin_ws //进入工作空间目录
- cd src //进入功能包源文件节夹
- 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里。
这是我写的
- #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();
- /* code */
- }
-
-
- return 0;
- }
这里边出现了许多问题:
(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在运行时还是会报错,但不影响正常运行,可能是电脑的问题吧。
六、实验思考
早晨起来干活就是比晚上效率高,出现问题了原路径尝试一次就好了,仿佛尝试就不聪明了。思考可能出现问题的地方能加深对系统的理解。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。