移植fake_joint到ROS2总结

为了测试moveit2,需要fake_joint。然而找不到fake_joint的ros2版本,决定porting。另外还有几个目的:

1. 可以深入了解ros2_control。

2. 实现真正的硬件驱动。

 

学习总结

ros2_control的作用:看国内的许多文章对于硬件驱动的实现都是自己实现一个action server,以实现和moveit的对接。这样就得自己处理trajectory等许多msg。ros_control包则是实现了对硬件层的抽象,驱动只需要实现两个函数(read, write, )就好了。

ros1的ros_control有action server,但是ros2_control目前还没有实现。这样目前与moveit2之间的通信只能够告诉moveit2动作成功/失败,但是不能反馈中间过程数据。

ros2_control的joint_trajectory_controller关于Joints的名字是从controller的yaml配置文件里来的,其顺序也是controller的顺序。所以其接收JointTrajectory的消息也是需要按照这个顺序发布,因为joint_trajectory_controller在接收的时候并没有检查所接收消息里面Joints的名字,只检查其数目是否和controller本身的joints数目一致。

 

参数传递:现在实现的方法是fake_joint_driver_node_ros2.cpp里面create一个node,然后用node.declare_paramenter以及node.get_parameter实现。ROS2的参数传递可以通过yaml的配置文件实现。要注意的是如果直接把yaml文件名作为launch文件的node参数,那么yaml文件第一行是node的名字,说明这个配置文件的参数是为这个node服务的。

 

fake_joint_driver_ros2.cpp要测试的话,是需要pos的初始值的。否则register_joint_state_handle的时候就会出错。

最后的实现请参阅github上面我的代码。

https://github.com/ningling/ros2_fake_joint_driver

你可能感兴趣的:(ROS2)