0

阿木币

0

精华

182 小时

在线时间

技术大V

Rank: 4

发表于 2020-7-7 11:16:22 4896 浏览 4 回复

[入门教程] Rospy使用例程(机器学习入门套餐)

写在前面的话:机器学习最近正直火热阶段,基于python的pytorch库在教学和科研中可以很好的胜任深度学习和强化学习的框架部署工作(其实这部分工作,ETH大佬们已经快把路给堵死了,感兴趣的可以去YouTube上搜索相关视频和论文),鄙人不才,啃了好久,才刚刚入门。
而ROS系统则提供了一个较好的快速验证平台(gazebo)以及松耦合的结构部署,方便程序的集成。
结合起来,有必要了解一下rospy和ROS的基本通信模式,为后续的机器学习入门奠定基础。官方的rospy给的历程并不详细,下面的博客内容给出一个参考的模板,各位看官轻拍,大神可以无视!
由于接触到pytorch,所以用python完成与ROS的通信,下面例子为从程序中摘出来的一部分,用到了ROS消息的订阅与发布,服务的通信,可以作为参考使用:
  1. import rospy
  2. from mavros_msgs.msg import AttitudeTarget
  3. from geometry_msgs.msg import PoseStamped
  4. from mavros_msgs.srv import CommandBool
  5. from mavros_msgs.srv import SetMode
  6. setpoint_pos = PoseStamped()
  7. setpoint_pos.pose.position.x = 0
  8. setpoint_pos.pose.position.y = 0
  9. setpoint_pos.pose.position.z = 2
  10. local_position = PoseStamped()
  11. locat_attitude_target = AttitudeTarget()
  12. locat_attitude_target.thrust = 0.7
  13. locat_attitude_target.type_mask = 0b10000111
  14. arm_state = CommandBool()
  15. def ros_test():
  16.     rospy.init_node('rospy_node',anonymous=True)
  17.     thrust_pub = rospy.Publisher('/mavros/setpoint_raw/attitude',AttitudeTarget,queue_size=1)
  18.     state_arm_srv = rospy.ServiceProxy('/mavros/cmd/arming',CommandBool)
  19.     state_mode_srv = rospy.ServiceProxy('/mavros/set_mode',SetMode)
  20.     rospy.Subscriber('/mavros/state',State,VehicleState_callback)
  21.     setpoint_pos_pub = rospy.Publisher('/mavros/setpoint_position/local',PoseStamped,queue_size=1)
  22.     rospy.Subscriber('/mavros/local_position/pose',PoseStamped,local_pos_cb)
  23.     rate = rospy.Rate(100)
  24.    
  25.     while not rospy.is_shutdown():
  26.         # print(vehicle_state)
  27.         # rospy.loginfo(vehicle_state.mode.)
  28.         if vehicle_state.mode != 'OFFBOARD':
  29.             state_mode_srv.call(custom_mode='OFFBOARD')
  30.         else:
  31.             # print(vehicle_state.armed)
  32.             if vehicle_state.armed == False:
  33.                 state_arm_srv.call(True)
  34.             else:
  35.                 # thrust_pub.publish(locat_attitude_target)
  36.                 # data = rospy.wait_for_message("/mavros/local_position/pose",PoseStamped,timeout=None)
  37.                 print(local_position.pose.position.z)
  38.         setpoint_pos_pub.publish(setpoint_pos)
  39.         rate.sleep()
复制代码

使用方法:启用gazebo,与mavros,然后运行脚本(本脚本需要修改后使用),可以完成无人机的定点悬停,以及定油门飞行功能




扫一扫浏览分享
回复

使用道具 举报

144

阿木币

0

精华

31 小时

在线时间

老司机

Rank: 2

发表于 2020-7-7 18:19:47
版主大哥,文章太短了不够看啊~~~
回复 点赞

使用道具 举报

0

阿木币

0

精华

182 小时

在线时间

技术大V

Rank: 4

 楼主| 发表于 2020-7-9 09:24:11
shanghuo 发表于 2020-7-7 18:19
版主大哥,文章太短了不够看啊~~~

机器学习是个大坑.....我的水平只能够引一下路,里面高手如云~
回复 点赞

使用道具 举报

131

阿木币

0

精华

272 小时

在线时间

管理员

Rank: 9Rank: 9Rank: 9

发表于 2020-7-9 11:53:25
python控制的好接口啊
我不为己,谁人为我,但我只为己,那我又是谁?
回复 点赞

使用道具 举报

0

阿木币

0

精华

182 小时

在线时间

技术大V

Rank: 4

 楼主| 发表于 2020-7-11 17:02:17
amov_msq 发表于 2020-7-9 11:53
python控制的好接口啊

还是习惯于C++,Python还是要慢慢摸索来...
回复 点赞

使用道具 举报

返回列表
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表