尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

《坎巴拉太空计划》krpc模组|0.5.4|文档(中译版)——教程与示例:对接引导与用户界面

《坎巴拉太空计划》krpc模组|0.5.4|文档(中译版)——教程与示例:对接引导与用户界面
📅 发布时间:2026/7/22 17:31:05
本翻译基于 [kRPC 官方文档](https://krpc.github.io/krpc),遵循 LGPL v3 许可。 部分内容可能受 GPLv3 或 MIT 许可约束,详见原始仓库。 Copyright 2015-2023 kRPC Org.

本教程和示例脚本合集详细说明了如何使用 kRPC 的功能特性。

注意:由于篇幅简短,为提高文章质量,译者将两章合并翻译

对接引导

以下脚本输出对接引导信息。它会等待航天器从一个对接口进行控制,并且设置了当前目标对接口。然后它会打印出沿对接轴线方向的速度和距离信息。

它使用 numpy 对 kRPC 返回的向量进行线性代数运算——例如计算向量的点积或长度——并使用 curses 进行终端输出。

import curses import time import numpy as np import numpy.linalg as la import krpc # Set up curses stdscr = curses.initscr() curses.nocbreak() stdscr.keypad(1) curses.noecho() try: # Connect to kRPC conn = krpc.connect(name='Docking Guidance') vessel = conn.space_center.active_vessel current = None target = None while True: stdscr.clear() stdscr.addstr(0, 0, '-- Docking Guidance --') current = conn.space_center.active_vessel.parts.controlling.docking_port target = conn.space_center.target_docking_port if current is None: stdscr.addstr(2, 0, 'Awaiting control from docking port...') elif target is None: stdscr.addstr(2, 0, 'Awaiting target docking port...') else: # Get positions, distances, velocities and # speeds relative to the target docking port current_position = current.position(target.reference_frame) velocity = current.part.velocity(target.reference_frame) displacement = np.array(current_position) distance = la.norm(displacement) speed = la.norm(np.array(velocity)) # Get speeds and distances relative to the docking axis # (the direction the target docking port is facing in) # Axial = along the docking axis axial_displacement = np.copy(displacement) axial_displacement[0] = 0 axial_displacement[2] = 0 axial_distance = axial_displacement[1] axial_velocity = np.copy(velocity) axial_velocity[0] = 0 axial_velocity[2] = 0 axial_speed = axial_velocity[1] if axial_distance > 0: axial_speed *= -1 # Radial = perpendicular to the docking axis radial_displacement = np.copy(displacement) radial_displacement[1] = 0 radial_distance = la.norm(radial_displacement) radial_velocity = np.copy(velocity) radial_velocity[1] = 0 radial_speed = la.norm(radial_velocity) if np.dot(radial_velocity, radial_displacement) > 0: radial_speed *= -1 # Get the docking port state if current.state == conn.space_center.DockingPortState.ready: state = 'Ready to dock' elif current.state == conn.space_center.DockingPortState.docked: state = 'Docked' elif current.state == conn.space_center.DockingPortState.docking: state = 'Docking...' else: state = 'Unknown' # Output information stdscr.addstr(2, 0, 'Current ship: {:30}'.format(current.part.vessel.name[:30])) stdscr.addstr(3, 0, 'Current port: {:30}'.format(current.part.title[:30])) stdscr.addstr(5, 0, 'Target ship: {:30}'.format(target.part.vessel.name[:30])) stdscr.addstr(6, 0, 'Target port: {:30}'.format(target.part.title[:30])) stdscr.addstr(8, 0, 'Status: {:10}'.format(state)) stdscr.addstr(10, 0, ' +---------------------------+') stdscr.addstr(11, 0, ' | Distance | Speed |') stdscr.addstr(12, 0, '+---------+------------+--------------+') stdscr.addstr(13, 0, '| | {:>+6.2f} m | {:>+6.2f} m/s |' .format(distance, speed)) stdscr.addstr(14, 0, '| Axial | {:>+6.2f} m | {:>+6.2f} m/s |' .format(axial_distance, axial_speed)) stdscr.addstr(15, 0, '| Radial | {:>+6.2f} m | {:>+6.2f} m/s |' .format(radial_distance, radial_speed)) stdscr.addstr(16, 0, '+---------+------------+--------------+') stdscr.refresh() time.sleep(0.25) finally: # Shutdown curses curses.nocbreak() stdscr.keypad(0) curses.echo() curses.endwin()

用户界面

以下脚本演示了如何使用 UI 服务显示文本和处理基本用户输入。它在屏幕左侧添加一个面板,显示航天器当前产生的推力,以及一个将油门 (throttle) 设置到最大的按钮。

import time import krpc conn = krpc.connect(name='User Interface Example') canvas = conn.ui.stock_canvas # Get the size of the game window in pixels screen_size = canvas.rect_transform.size # Add a panel to contain the UI elements panel = canvas.add_panel() # Position the panel on the left of the screen rect = panel.rect_transform rect.size = (200, 100) rect.position = (110-(screen_size[0]/2), 0) # Add a button to set the throttle to maximum button = panel.add_button("Full Throttle") button.rect_transform.position = (0, 20) # Add some text displaying the total engine thrust text = panel.add_text("Thrust: 0 kN") text.rect_transform.position = (0, -20) text.color = (1, 1, 1) text.size = 18 # Set up a stream to monitor the throttle button button_clicked = conn.add_stream(getattr, button, 'clicked') vessel = conn.space_center.active_vessel while True: # Handle the throttle button being clicked if button_clicked(): vessel.control.throttle = 1 button.clicked = False # Update the thrust text text.content = 'Thrust: %d kN' % (vessel.thrust/1000) time.sleep(0.1)

相关新闻

  • 10款高效免费的Windows工具推荐
  • UE4 MediaTexture黑屏问题:从原理到实战的完整排错指南
  • 红黑树在Linux内核中的高效实现与应用

最新新闻

  • Local Web API详解:通过HTTP请求控制Roblox Account Manager
  • 深入解析TI C2000 DSP的CLB_XBAR_REGS寄存器:信号路由配置实战
  • TMS320F2837xS ePWM/eCAP Driverlib函数与寄存器映射深度解析
  • Base64工具库:编码与解码工具类(239)
  • Vue3数据绑定与列表渲染实战指南
  • 电商账务别等年底才补,拉萨市柳梧新区电商企业财税服务公司推荐 - 子柔传媒

日新闻

  • AI云原生实战05-金融AI上云最难的不是技术,是“不出事“——TCE银行风控架构拆解
  • 2026年GEOSEO优化公司选型深度测评:五大硬核标准严选,这六家重塑搜索增长新格局 - 品牌前沿专家
  • **核验!2026年7月卡地亚香港**售后网点地址及服务电话公告 - 卡地亚服务中心

周新闻

  • SaaS软件行业GEO实践:AI搜索时代的品牌可见性与获客新路径
  • 什么是PCTFE?医药高端包装的“防潮王牌“材料
  • 【JVM调优实战】16-可视化利器-JConsole-VisualVM-JMC

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号