应用网站如何做,网上推广方法有哪些,大朗做网站在,温州网站建设企业文章目录 自定义action1. 定义action文件2. 修改 package.xml3. 修改 CMakeLists.txt4. 运行 catkin build5. simple_action_server.py6. simple_action_client.py 测试 自定义action
ros 版本#xff1a;kinetic 自定义test包的文件结构如下
|-- test
| |-- CMakeLists.t… 文章目录 自定义action1. 定义action文件2. 修改 package.xml3. 修改 CMakeLists.txt4. 运行 catkin build5. simple_action_server.py6. simple_action_client.py 测试 自定义action
ros 版本kinetic 自定义test包的文件结构如下
|-- test
| |-- CMakeLists.txt
| |-- action
| | --Timer.action
| |-- package.xml
| |-- scripts
| | |-- simple_action_server.py
| | -- simple_action_server.py动作定义文件后缀 .action。其组成和srv非常相似。有关自定义srv见链接。
1. 定义action文件
# the goal: to be sent by the client
duration time_to_wait
---# the result: to be sent by the server upon completion
duration time_elapsed
uint32 updates_sent
---# the feedback: to be sent periodically by the server during execution
duration time_elapsed
duration time_remaining2. 修改 package.xml
向其中添加如下信息 build_dependactionlib_msgs/build_dependbuild_export_dependactionlib_msgs/build_export_depend3. 修改 CMakeLists.txt
find_package(catkin REQUIRED COMPONENTSrospyroscppstd_msgsmessage_generationactionlib_msgs
)## Generate actions in the action folder
add_action_files(FILESTimer.action
)## Generate added messages and services with any dependencies listed here
generate_messages(DEPENDENCIESactionlib_msgsstd_msgs # Or other packages containing msgs
)catkin_package(
# INCLUDE_DIRS include
# LIBRARIES testCATKIN_DEPENDS rospy message_runtime std_msgs roscpp actionlib_msgs
# DEPENDS system_lib
)## Mark executable scripts (Python etc.) for installation
## in contrast to setup.py, you can choose the destination
catkin_install_python(PROGRAMSscripts/simple_action_server.pyscripts/simple_action_client.pyDESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)4. 运行 catkin build
动作被正确编译后会生成6个msgTimerGoal.msg, TimerResult.msg, TimerFeedback.msg, TimerActionFeedback.msg, TimerActionGoal.msg, TimerActionResult.msg。
5. simple_action_server.py
#!/usr/bin/env pythonimport rospy
import time
import actionlib
from test.msg import TimerAction, TimerGoal, TimerResultdef do_timer(goal):start_time time.time()time.sleep(goal.time_to_wait.to_sec())result TimerResult()result.time_elapsed rospy.Duration.from_sec(time.time() -start_time)result.updates_sent 0server.set_succeeded(result)rospy.init_node(timer_action_server)
server actionlib.SimpleActionServer(timer, TimerAction, do_timer, False) #记得写False
server.start()
rospy.spin()chmod x simple_action_server.py6. simple_action_client.py
#!/usr/bin/env python
import rospyimport actionlib
from test.msg import TimerAction, TimerGoal, TimerResultrospy.init_node(timer_action_client)
client actionlib.SimpleActionClient(timer, TimerAction)
client.wait_for_server()
goal TimerGoal()
goal.time_to_wait rospy.Duration.from_sec(5.0)
client.send_goal(goal)
client.wait_for_result()
print(Time elapsed: %f % (client.get_result().time_elapsed.to_sec()))chmod x simple_action_client.py测试
roscorerosrun test simple_action_client.pyrosrun test simple_action_client.py如下结果