网站代理 正规备案,全景效果图网站,wamp配置多个网站,网站开发适合什么工作最近在琢磨别的事情#xff0c;Gazebo探索上面进展不大#xff0c;但也有一些收获#xff0c;秉承慢慢写的佛系态度记录一下#xff1a;pigot四足项目的步态改进#xff0c;前行换成了摆线步态#xff0c;加入了斜向步态Gazebo-IMU(惯性测量单元)插件的用法利用rqt_plot绘…最近在琢磨别的事情Gazebo探索上面进展不大但也有一些收获秉承慢慢写的佛系态度记录一下pigot四足项目的步态改进前行换成了摆线步态加入了斜向步态Gazebo-IMU(惯性测量单元)插件的用法利用rqt_plot绘制数据验证步态改进的效果步态改进简单来说就是将每一步的足端轨迹规划为一条摆线。摆线轨迹的两端方向垂直于地面足端与地面在其它方向的冲击力更小机器人行进更加稳定。摆线由于我们已经有了四足机器人足端逆解方法因此规划摆线轨迹没有什么困难。轨迹代码见pig_control功能包的traj_data文件中的forward_gait()函数。详细的参考资料推荐一个基于力传感器的四足机器人多步态规划及初步维稳控制_百度学术xueshu.baidu.com在该文的3.3节中讲到摆线步态以及优化方法。惯性测量单元(IMU)插件惯性测量单元是测量物体三轴姿态角(或角速率)以及加速度的装置在机器人导航中有着很重要的应用[1]。Gazebo中提供了IMU插件libgazebo_ros_imu_sensor.so官方教程十分简单。这里介绍基本的使用步骤1. 在模型文件中建立一个link用以放置IMU插件既可以添加一个单独的link代表IMU传感器图方便也可以直接固连在已有的link中。在pigot中便直接使用机体连杆body_link放置IMU。2. 在xacro文件中配置IMU添加如下代码以配置IMU一般只需修改的值为想要连接IMU的连杆名称即可。truetrue100true__default_topic__imubody_link100.00.00 0 00 0 0imu_link0 0 0 0 0 0对于大型工程建议单独建立一个xacro文件以配置所有的插件(传感器、控制插件等)再在主文件中引用。pigot项目中的插件配置文件为pigot.gazebo。3.建立一个订阅者用以接收IMU数据上述两步完成以后运行仿真模型时topic列表中就会出现一个imu话题不停地有imu消息发送到这个话题上。pigot项目中的话题为/pigot/imu前缀/pigot来源于机器人运行在单独的命名空间中在pigot_world.launch中进行设置设置方式见我的这篇文章。订阅者代码如下网络上很容易找到c的代码这里用python来写#!/usr/bin/env python# license removed for brevityimport rospyfrom sensor_msgs.msg import Imuimport mathdef imu_cb(imu_data):# Read the quaternion of the robot IMUx imu_data.orientation.xy imu_data.orientation.yz imu_data.orientation.zw imu_data.orientation.w# Read the angular velocity of the robot IMUw_x imu_data.angular_velocity.xw_y imu_data.angular_velocity.yw_z imu_data.angular_velocity.z# Read the linear acceleration of the robot IMUa_x imu_data.linear_acceleration.xa_y imu_data.linear_acceleration.ya_z imu_data.linear_acceleration.z# Convert Quaternions to Euler-Anglesrpy_angle [0, 0, 0]rpy_angle[0] math.atan2(2 * (w * x y * z), 1 - 2 * (x**2 y**2))rpy_angle[1] math.asin(2 * (w * y - z * x))rpy_angle[2] math.atan2(2 * (w * z x * y), 1 - 2 * (y**2 z**2))returnif __name__ __main__:rospy.init_node(imu_node, anonymousTrue)rospy.Subscriber(/pigot/imu, Imu, imu_cb)rospy.spin()需要注意的地方有消息类型Imufrom sensor_msgs.msg import Imu导入一种消息类型Imu这是一种标准的传感器消息类型官方文档sensor_msgs/Imu 消息类型中重要部分摘录如下geometry_msgs/Quaternion orientationfloat64[9] orientation_covariance # Row major about x, y, z axesgeometry_msgs/Vector3 angular_velocityfloat64[9] angular_velocity_covariance # Row major about x, y, z axesgeometry_msgs/Vector3 linear_accelerationfloat64[9] linear_acceleration_covariance # Row major x, y z文档描述了Imu的消息结构其中姿态(orientation)类型为四元数(geometry_msgs/Quaternion)角速度(angular_velocity)和线加速度(linear_acceleration)的类型为三维向量(geometry_msgs/Vector3)。四元数(Quaternion)转欧拉角(Euler-Angles)四元数是一种姿态的表达方式与欧拉角相比它规避了“万向节锁”的问题。这篇文章讲解了四元数与欧拉角的相互转换这个视频形象地介绍了万向节锁的问题4. 利用rqt_plot绘制数据曲线rqt_plot是ROS内置的一款用于绘图的可视化插件。它可以读取话题中发布的数据将类型允许的数据绘制成为图像。在终端中运行以下节点可打开rqt_plot:rosrun rqt_plot rqt_plot如果Imu插件启动成功那么此时的话题列表中就应该有相应的话题了。在Topic栏中输入相应的话题即可进行绘图。注意根据官方文档说明绘图需要指定出数值所在的完整的地址例如想要绘制加速度linear_acceleration它是imu话题中消息的一个成员那么应当指明的地址为/pigot/imu/linear_accelerationrqt_plot 官方文档wiki.ros.org利用rqt_plot验证步态改进的效果在pigot项目中改进前的前行步态只是简单指明了轨迹点后进行了线性插值改进后采用了摆线步态。那么步态的改进对于改善机器人前行的平稳性究竟有没有好处呢可以通过rqt_plot采集机器人前行过程中的线性加速度予以验证。在线性插值的步态下采集线性加速度图像如下线性插值步态的加速度改用摆线步态后采集线性加速度图像如下摆线步态的加速度以上两次实验的步幅、步频、抬腿高度和落脚点均相同可以看出采用摆线步态时落步时的冲击一定程度上减小了。这也说明了摆线步态更具有平稳性。以上现象也可以直接从动作中观察到ROS四足机器人步态仿真对比https://www.zhihu.com/video/1101602829063634944项目地址pigotgithub.com参考文献