[学习笔记]CyberDog小米机器狗 开发学习

本文介绍了使用Ubuntu+ROS2系统的机器狗控制,重点讲解了lcm和Rostopic通讯在传感器数据广播和机器人状态输出中的作用,以及如何通过Topic进行初步控制。此外,还讨论了运动指令、运动ID、运控算法和简化模型在实际应用中的重要性,以及在Gazebo中添加传感器的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、机器狗本身是Ubuntu+ROS2系统
2、控制机器人只需要了解lcm和Ros topic通讯
3、传感器数据(包括一些imu(/imu)、激光雷达(/scan))会进行topic的一个广播。
仿真环境通信接口:
-命令输入(见后续运控说明)
    运控lcm数据接口
    Motion manager的Ros topic接囗
-机器人数据输出:
    仿真器数据:通过lcm发送
    机器人状态数据:通过lcm或topic发送
    机器人传感器数据:通过topic发送
4、仿真环境比真狗多一个第三视角数据(simulator_state_lcmt)用于解到一个机器人的真实状态和我们抓取到的数据之间的一些区别
5、Topic的返回中,joint_states返回的是各个关节的信号,/scan是激光雷达信号,/tf是一个重要的数据,这个数据体现了 机器人的各个关节 或 传感器之间的一个坐标系的转换的位置转换 的一个规律。
6、初步的控制的话,可以尝试只用 topic。
(更加详细的修改一些或了解一些运控更加深层的数据的话,就可以对 LCM数据进行一个了解(有助于我们去获得一些运控层面的数据))。
7、仿真要加传感器需要使用Grazebo第三方传感器插件(如图)。

(学习到0:30:38)

00:55 Ros 运动指令

00:58 运动对应的Motion ID简表

01:08 LCM运控通讯的介绍

01:22 运控算法-步态

马克瑞博的经验公式:根据当前的速度,乘以一个着地项,或者支撑项的时间除以2,得到我们可以称之为中性点,就保持当前速度的一个位置。然后再加上我们期望,当前的速度和期望的速度之间的一个反馈量。反馈系数是我们可以调节的。

机器人的全动力学模型非线性太复杂,如果用它来做预算控制,就像前面说的太耗时了。在机载的平台上很难做到实时控制。因此在实际机载平台上实现简化模型。即把机器狗简化成一个一个带质量的长方体来控制。

### CyberDog 技术资料与项目介绍 #### 项目概述 CyberDog 是一个开源项目,其目标是帮助用户控制和定制自己的智能机械狗。该项目受到现代机器人技术和 AI 驱动的四足机器人的启发,提供了交互平台,使爱好者和开发者可以轻松地与这些未来宠物互动[^1]。 #### 软件架构 CyberDog 使用 ROS2 作为主要的技术框架。ROS2 是一种改进版的机器人操作系统(Robot Operating System),相比传统的 ROS 提供了更高的实时性和更强的多机通信能力。尽管传统 ROS 广泛应用于许多机器人开发场景中,但 CyberDog 明确选择了 ROS2 来构建其核心功能[^2]。 #### 开发环境配置 对于希望深入研究 CyberDog开发者来说,理解 Docker 和相关容器化工具是非常重要的。Docker 可以为开发者提供一致的运行环境,减少因不同操作系统的差异而导致的问题。在具体实现上,`cyberdog_ws` 源码仓库中的 `cyberdog_bringup` 文件夹包含了启动和初始化的关键脚本,这有助于快速搭建开发测试环境[^3]。 以下是基于上述描述的一个简单代码示例,展示如何通过 Python 接口调用 ROS2 中的服务: ```python import rclpy from std_srvs.srv import Empty def main(args=None): rclpy.init(args=args) node = rclpy.create_node('example_service_caller') client = node.create_client(Empty, 'reset_simulation') while not client.wait_for_service(timeout_sec=1.0): node.get_logger().info('等待服务上线...') request = Empty.Request() future = client.call_async(request) rclpy.spin_until_future_complete(node, future) if future.result() is not None: node.get_logger().info('重置模拟器成功!') else: node.get_logger().error('调用失败!') node.destroy_node() rclpy.shutdown() if __name__ == '__main__': main() ``` 该代码片段展示了如何创建一个简单的 ROS2 客户端来请求远程服务,这对于调试或扩展 CyberDog 功能非常有用。 --- ####
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值