sogw
sogw
这家伙很懒,什么也没写!

注册于 6年前

回答
33
文章
0
关注者
2

发布于4年前

感谢您的回答您一下点醒了我,请问一下我的这个地址是对的吧!如果是对的我就排查其他的。非常感谢 …


你贴图中的地址注释是对的, 还可以试试该软件包提供的FinSH命令, 其中的report会打印出已配置情况的各种信息(有地址信息)

发布于4年前

您好,感谢您的回复,因为配置里面只能填数字,板子上CE引脚是PG8,我之前尝试了填个8,但是还是显示发送 …


一个个排除, 看看RTT文档的PIN设备吧

发布于4年前

cepin 就是nrf的实际控制引脚, 肯定要整对, 要对应才行呀。 随便填….(´ཀ`」 ∠)_

发布于4年前

nrf24 内部的引脚设置是基于RTT PIN设备的, ce_pin 参数就是PIN设备中的引脚号, 具体该填什么要看你连接的引脚在PIN设备中被映射到了哪个引脚号

发布于5年前

你说的软件具体是指哪一类 RT-Thread自己这边的软件还是说其他 ???


rt-thread 的软件包啊

发布于5年前

建议弄个软件包交流区, 每个软件包可以发个主题, 交流使用心得,改进意见。 还可以讨论软件包开发规划啥的, 尽量避免重复(好像可能性很小哈└(^o^)┘)..

发布于5年前

一对多, rtt目前应该是没有直接的解决方案的, 要自己搞, 除了共享内存,还可以看看观察者模式或者发布订阅模式

发布于5年前

你用的哪个发行版,争取 v1.2 版本支持 linux 哈


我用的 deepin

发布于5年前

博主能分享一下你的 ”ANO_TC匿名科创地面站” 软件吗?
我最近调通了这个robot框架的电机闭环,发现框架 …

https://pan.baidu.com/s/1Zbvmzr8Mbt9Mytft31IcCw

发布于5年前

touch是一块区域, &touch->parent是这块区域的头加部分 (有图更直观哈…)只要锁定了头+加区域形式(大小与组织)就能获得整个块

发布于5年前

用rust来一个;P

发布于5年前

请问这kinematics_get_velocity函数是不是预留的?demo上没用到过

是不是预留 《==》 有没有被调用到? 用SourceInsight 或其它工具看看就知道了

发布于5年前

依最新的rt-robot更新“组装”过程

  1. #include <rtthread.h>
  2. #include <chassis.h>
  3. #include <command.h>
  4. #include <ps2.h>
  5. #include <dual_pwm_motor.h>
  6. #include <ab_phase_encoder.h>
  7. #include <inc_pid_controller.h>
  8. #define DBG_SECTION_NAME "car"
  9. #define DBG_LEVEL DBG_LOG
  10. #include <rtdbg.h>
  11. // MOTOR
  12. #define LEFT_FORWARD_PWM "pwm4"
  13. #define LEFT_FORWARD_PWM_CHANNEL 3
  14. #define LEFT_BACKWARD_PWM "pwm4"
  15. #define LEFT_BACKWARD_PWM_CHANNEL 4
  16. #define RIGHT_FORWARD_PWM "pwm2"
  17. #define RIGHT_FORWARD_PWM_CHANNEL 3
  18. #define RIGHT_BACKWARD_PWM "pwm2"
  19. #define RIGHT_BACKWARD_PWM_CHANNEL 4
  20. // ENCODER
  21. #define LEFT_ENCODER_A_PHASE_PIN 31 // GET_PIN(B, 15)
  22. #define LEFT_ENCODER_B_PHASE_PIN 34 // GET_PIN(C, 2)
  23. #define RIGHT_ENCODER_A_PHASE_PIN 38 // GET_PIN(C, 6)
  24. #define RIGHT_ENCODER_B_PHASE_PIN 39 // GET_PIN(C, 7)
  25. #define PULSE_PER_REVOL 2000 // Real value 2000
  26. #define ENCODER_SAMPLE_TIME 50
  27. // PID CONTROLLER
  28. #define PID_SAMPLE_TIME 50
  29. #define PID_PARAM_KP 6.6
  30. #define PID_PARAM_KI 6.5
  31. #define PID_PARAM_KD 7.6
  32. // WHEEL
  33. #define WHEEL_RADIUS 0.066
  34. #define GEAR_RATIO 1
  35. // CAR
  36. chassis_t chas;
  37. #define WHEEL_DIST_X 0
  38. #define WHEEL_DIST_Y 0.13
  39. // PS2
  40. #define PS2_CS_PIN 28
  41. #define PS2_CLK_PIN 29
  42. #define PS2_DO_PIN 4
  43. #define PS2_DI_PIN 36
  44. // Car Thread
  45. #define THREAD_PRIORITY 10
  46. #define THREAD_STACK_SIZE 512
  47. #define THREAD_TIMESLICE 5
  48. static rt_thread_t tid_car = RT_NULL;
  49. void car_thread(void *param)
  50. {
  51. // TODO
  52. struct velocity target_velocity;
  53. target_velocity.linear_x = 0.00f;
  54. target_velocity.linear_y = 0;
  55. target_velocity.angular_z = 0;
  56. chassis_set_velocity(chas, target_velocity);
  57. // Open-loop control
  58. // controller_disable(chas->c_wheels[0]->w_controller);
  59. // controller_disable(chas->c_wheels[1]->w_controller);
  60. while (1)
  61. {
  62. rt_thread_mdelay(ENCODER_SAMPLE_TIME);
  63. chassis_update(chas);
  64. }
  65. // chassis_destroy(chas);
  66. }
  67. void car_init(void *parameter)
  68. {
  69. // 1. Initialize two wheels - left and right
  70. wheel_t* c_wheels = (wheel_t*) rt_malloc(sizeof(wheel_t) * 2);
  71. if (c_wheels == RT_NULL)
  72. {
  73. LOG_D("Failed to malloc memory for wheels");
  74. }
  75. // 1.1 Create two motors
  76. dual_pwm_motor_t left_motor = dual_pwm_motor_create(LEFT_FORWARD_PWM, LEFT_FORWARD_PWM_CHANNEL, LEFT_BACKWARD_PWM, LEFT_BACKWARD_PWM_CHANNEL);
  77. dual_pwm_motor_t right_motor = dual_pwm_motor_create(RIGHT_FORWARD_PWM, RIGHT_FORWARD_PWM_CHANNEL, RIGHT_BACKWARD_PWM, RIGHT_BACKWARD_PWM_CHANNEL);
  78. // 1.2 Create two encoders
  79. ab_phase_encoder_t left_encoder = ab_phase_encoder_create(LEFT_ENCODER_A_PHASE_PIN, LEFT_ENCODER_B_PHASE_PIN, PULSE_PER_REVOL, ENCODER_SAMPLE_TIME);
  80. ab_phase_encoder_t right_encoder = ab_phase_encoder_create(RIGHT_ENCODER_A_PHASE_PIN, RIGHT_ENCODER_B_PHASE_PIN, PULSE_PER_REVOL, ENCODER_SAMPLE_TIME);
  81. // 1.3 Create two pid contollers
  82. inc_pid_controller_t left_pid = inc_pid_controller_create(PID_PARAM_KP, PID_PARAM_KI, PID_PARAM_KD, PID_SAMPLE_TIME);
  83. inc_pid_controller_t right_pid = inc_pid_controller_create(PID_PARAM_KP, PID_PARAM_KI, PID_PARAM_KD, PID_SAMPLE_TIME);
  84. // 1.4 Add two wheels
  85. c_wheels[0] = wheel_create((motor_t)left_motor, (encoder_t)left_encoder, (controller_t)left_pid, WHEEL_RADIUS, GEAR_RATIO);
  86. c_wheels[1] = wheel_create((motor_t)right_motor, (encoder_t)right_encoder, (controller_t)right_pid, WHEEL_RADIUS, GEAR_RATIO);
  87. // 2. Iinialize Kinematics - Two Wheel Differential Drive
  88. kinematics_t c_kinematics = kinematics_create(TWO_WD, WHEEL_DIST_X, WHEEL_DIST_Y, WHEEL_RADIUS);
  89. // 3. Initialize Chassis
  90. chas = chassis_create(c_wheels, c_kinematics);
  91. // 4. Enable Chassis
  92. chassis_enable(chas);
  93. // Remote-control
  94. command_init(chas);
  95. ps2_init(PS2_CS_PIN, PS2_CLK_PIN, PS2_DO_PIN, PS2_DI_PIN);
  96. // thread
  97. tid_car = rt_thread_create("tcar",
  98. car_thread, RT_NULL,
  99. THREAD_STACK_SIZE,
  100. THREAD_PRIORITY, THREAD_TIMESLICE);
  101. if (tid_car != RT_NULL)
  102. {
  103. rt_thread_startup(tid_car);
  104. }
  105. }

发布于5年前

cortex-m 系列的 DWT 可以实现‘最高精度’的计时(取决于主频),ns级

发布于5年前

rt-robot 软件包有更新,接口变动。更新“组装”过程

回到
顶部

发布
问题

投诉
建议