[笔记]小米CyberDog机器狗仿真调试记录

  • 从官方github的所有源码库来看,所有的source命令只有两条,执行它以配置环境变量:

    source /opt/ros/galactic/setup.bash
    source /home/cyberdog_ws/install/setup.bash

如果运行脚本之后gazebo正常启动及机器狗模型在悬空状态,问题可能是: 运行脚本gazebo启动比较慢,导致控制模块无法通信,可以按照本文档概述下的 “分别运行个程序” 章节依次运行程序。 如果gazebo正常启动及机器狗模型在爬下状态,问题可能是: 没有给发送控制指令,可以按照本文档通信接口下的 “仿真例程” 章节运行键盘控制模块进行测试。

  • 仿真软件文档中的命令“ros2 launch cyberdog_gazebo gazebo.launch.py” 是单独运行仿真软件。
  • 正常运行中直接使用这个命令即可,无需运行gazebo.launch.py
    cd /home/cyberdog_sim
    source /opt/ros/galactic/setup.bash
    source ./install/setup.bash
    
    cd /home/cyberdog_sim
       #↑如果不在这个目录下运行会出错
    python3 ./src/cyberdog_simulator/cyberdog_gazebo/script/launchsim.py

  • 移动robot到指定位置:
     

    # 先soure ROS2的source文件,再使用gz命令设置robot坐标
    # 命令设置坐标后会导致robot无法使用鼠标移动位置
    gz model -m robot -x 8.6 -y 8.6 -z 1 -R 0 -P 0 -Y -3.14
    

    gz命令移动坐标写成一个python文件便是:
     

    import threading
    import subprocess
    import time  # 导入时间模块
    
    
    # 可调节的全局变量
    set_robot_pos_model_name = "robot"  # 替换为你的机器人模型名称
    set_robot_pos_x = 8.6
    set_robot_pos_y = 8.6
    set_robot_pos_z = 0.56
    set_robot_pos_roll = 0
    set_robot_pos_pitch = 0
    set_robot_pos_yaw = -3.14
    
    def main():
        threading.Timer(1, set_robot_position,
                        [set_robot_pos_model_name, set_robot_pos_x, set_robot_pos_y, set_robot_pos_z, set_robot_pos_roll,set_robot_pos_pitch, set_robot_pos_yaw]).start()
    
    def set_robot_position(model_name, x, y, z, roll, pitch, yaw):
    
            try:
                # 构建 gz 命令
                command = [
                    'gz', 'model', '-m', model_name,
                    '-x', str(x), '-y', str(y), '-z', str(z),
                    '-R', str(roll), '-P', str(pitch), '-Y', str(yaw)
                ]
    
                # 执行 gz 命令
                subprocess.run(command, check=True)
                print(f'Successfully set {model_name} position to x={x}, y={y}, z={z}, R={roll}, P={pitch}, Y={yaw}')
            except subprocess.CalledProcessError as e:
                print(f'Failed to set position: {e}')
            except FileNotFoundError:
                print('The gz command is not found. Make sure Gazebo is installed and gz is in your PATH.')
    
    # 主函数
    if __name__ == '__main__':
        main()  # 运行主函数
    

### 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 功能非常有用。 --- ####
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值