ROS成长-搭建属于自己的hrobot机器人 二、创建最小运动单元

二、创建最小运动单元

(1)创建遥控器节点(键盘)、发布运动信息(topic—>/cmd_vel 其消息类型Twist)
键盘控制节点分析,设计到两个知识点。
1、键盘节点的功能,如何发布速度信息的步骤。(c++ 和python)
2、发布的topic 类型怎么确定的(messages 是如何定义的)。
Messages: ROS data type used when subscribing or publishing to a topic.
Topics: Nodes can publish messages to a topic as well as subscribe to a topic to receive messages.
这里发布的topci 是/cmd_vel 话题,这个topic的消息类型是/geometry/Twist ,消息类型是/geometry/Twist在哪里定义的还不确定(暂时确定是ros内部定义的)

python中创建并发布twist消息 参考<<ROS机器人开发实践>>例程

      from geometry_msgs.msg import Twist
        
       rospy.init_node('mrobot_teleop')
       pub = rospy.Publisher('/cmd_vel', Twist, queue_size=5)

        twist = Twist()
        twist.linear.x = control_speed; 
        twist.linear.y = 0; 
        twist.linear.z = 0
        twist.angular.x = 0; 
        twist.angular.y = 0; 
        twist.angular.z = control_turn
        pub.publish(twist)
 #c++ 中创建并发布twist消息      参考网络大神例程
        geometry_msgs::Twist twist;
        twist.angular.z = a_scale_*angular_;
        twist.linear.x = l_scale_*linear_;
        if(dirty ==true)
        {
                 twist_pub_.publish(twist);    
                dirty=false;
        }
备注: 
(1) /cmd_vel 是topic     
(2)Twist 是消息类型 rostopic echo /cmd_vel  命令可以查询 /cmd_vel话题的值
(3)rostopic pub -1 /cmd_vel geometry_msgs/Twist -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]' 
命令发布消息,每个选项的描述如下。
-1只发布一次消息(实际上只运行一次,但会像以前的结果一样运行3秒)。
/cmd_vel 指定的话题名称
geometry_msgs/Twist 要发布的消息类型名称
-- ‘[2.0, 0.0, 0.0]’ ‘[0.0, 0.0, 1.8]’ 在x轴坐标上以每秒2.0 m的速度移动,以z轴为中心,每秒    旋转1.8rad
(4)geometry_msgs/Twist
	geometry_msgs/Vector3 linear
	    float64 x
	    float64 y
	    float64 z
	geometry_msgs/Vector3 angular
	    float64 x
	    float64 y
	    float64 z

(2)创建运动单元数据处理节点、订阅运动信息(topic—>/cmd_vel 其消息类型Twist、将运动信息转换成实际运动执行机构能识别的命令传输下去(一般要实现通信协议))
参考<<ROS机器人开发实践>>例程
//初始化ROS节点
ros::init(argc, argv, “mrobot_bringup”);
ros::NodeHandle nh;
ros::Subscriber sub = nh.subscribe(“cmd_vel”, 50, cmdCallback);
//循环运行
ros::Rate loop_rate(50);
while (ros::ok())
{
ros::spinOnce();// 当接收到消息后这个函数的作用是从缓存区李取出,没接收到的话下面内容不运行
// 机器人控制
robot.spinOnce(RobotV_, YawRate_);
loop_rate.sleep();
}

这里还有一分部内容是反馈内容------>里程计反馈和tf反馈
读取回速度值然后积分算出里程计信息(或者直接读取imu值在有安装imu的情况下)。

	   cmakelists.txt的修改。
	   1、依赖的修改
	   2、编译文件修改
	   3、文件修改

(3)实际运动单元搭建(能通过协议接收下发下来的运动指令、并且按指令执行运动)
接收到订阅后的x,z 值后发送给 运动执行单元,然后控制电机运动,这部分自由发挥,每个人设计的不一样。我这里是直接调用api函数控制伺服驱动器来控制伺服电机。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值