将真实Camera替换为FakeCamera

在友善tiny210环境下,Android系统通过FakeCamera实现模拟摄像头功能。当编译宏USE_CAMERA_STUB设为true时,CameraService启用FakeCamera。编译流程包括修改Android.mk、编译生成.img、烧写板子。然而,直接编译可能不会执行Android.mk,需通过mm指令手动编译libcameraservice.so,并将其推送到板子的/system/lib,重启系统后生效。
AI助手已提取文章相关产品:

环境:友善tiny210


我们在模拟器上运行的Android系统的Camera程序,显示的黑白格子,这实际上是Android实现了一个FakeCamera,专门用于在没有真实相机设备的测试程序。

FakeCamera.cpp位于友善tiny210光盘中,Andoird/Android-2.3.1/frameworks/base/services/camera/libcameraservice/目录下

可以看到,编译宏USE_CAMERA_STUB用于确定是否使用FakeCamera来模拟摄像头。

当USE_CAMERA_STUB=false,CameraService会启用真实摄像头,

当USE_CAMERA_STUB=true,CameraService会启用FakeCamera。

 

流程

更改Andoird/Android-2.3.1/frameworks/base/services/camera/libcameraservice/目录下的Android.mk将USE_CAMERA_STUB设置为true

通过./build-android编译

通过./genrootfs

编译通过,生成*.img,烧写板子

运行摄像头程序,依然启用真实摄像头

 

删除Android.mk 文件

依然可以编译通过

错误定位:编译过程中并没有执行Andoird/Android-2.3.1/frameworks/base/services/camera/libcameraservice/目录下的Android.mk

 

删除FakeCamera.cpp和CameraHardwareStub.cpp文件

依然可以编译通过

错误定位:编译过程中并没有编译FakeCamera

 

解决方案:

手动编译,生成libcameraservice.so

 

通过android的模块编译方法解决这个问题,即mm指令

source ./build/envsetup.sh

mmm./frameworks/base/services/camera/libcameraservice/


然后将out/target/product/generic/system/lib/libcameraservice.so的文件通过adb push命令传送到板子的/system/lib中

重新启动系统,即可。




参考博文:

http://www.189works.com/article-30252-1.html

http://blog.youkuaiyun.com/bhp1127/article/details/7634634


您可能感兴趣的与本文相关内容

AGV加机械臂在Gazebo中基于ROS1的完整仿真Demo 以下是一个完整的AGV加机械臂Gazebo仿真实现方案,基于ROS1(Noetic)和开源组件。该Demo整合了差速驱动AGV、6自由度机械臂、传感器和控制系统,可直接运行测试。 1. 环境准备 系统要求: Ubuntu 20.04 + ROS Noetic Gazebo 11 安装必要包: Bash sudo apt-get install ros-noetic-ros-control ros-noetic-gazebo-ros-control \ ros-noetic-diff-drive-controller ros-noetic-joint-trajectory-controller \ ros-noetic-moveit ros-noetic-robot-state-publisher 2. 完整Demo结构 Bash agv_arm_demo/ ├── config/ │ ├── controllers.yaml # 控制器配置 │ └── arm_moveit.yaml # MoveIt!配置 ├── launch/ │ ├── sim.launch # 主启动文件 │ └── moveit_planning.launch # 机械臂规划 ├── urdf/ │ ├── agv_arm.urdf.xacro # 集成模型 │ ├── agv_chassis.xacro # AGV底盘 │ └── simple_arm.xacro # 6DOF机械臂 ├── worlds/ │ └── warehouse.world # 仓库环境 └── scripts/ └── test_navigation.py # 导航测试脚本 3. 核心文件实现 (1) AGV+机械臂集成模型 (urdf/agv_arm.urdf.xacro) XML <?xml version="1.0"?> <robot name="agv_arm" xmlns:xacro="http://www.ros.org/wiki/xacro"> <!-- 导入AGV底盘 --> <xacro:include filename="$(find agv_arm_demo)/urdf/agv_chassis.xacro" /> <!-- 导入机械臂 --> <xacro:include filename="$(find agv_arm_demo)/urdf/simple_arm.xacro" /> <!-- 将机械臂固定在AGV上 --> <joint name="arm_base_joint" type="fixed"> <parent link="base_link"/> <child link="arm_base_link"/> <origin xyz="0 0 0.15" rpy="0 0 0"/> </joint> <!-- Gazebo插件 --> <gazebo> <plugin name="gazebo_ros_control" filename="libgazebo_ros_control.so"> <robotNamespace>/agv_arm</robotNamespace> </plugin> </gazebo> <!-- 差速驱动插件 --> <gazebo> <plugin name="differential_drive" filename="libgazebo_ros_diff_drive.so"> <leftJoint>left_wheel_joint</leftJoint> <rightJoint>right_wheel_joint</rightJoint> <wheelSeparation>0.35</wheelSeparation> <wheelDiameter>0.1</wheelDiameter> <commandTopic>cmd_vel</commandTopic> </plugin> </gazebo> <!-- 激光雷达插件 --> <gazebo reference="laser_link"> <sensor type="ray" name="hokuyo"> <plugin filename="libgazebo_ros_laser.so" name="laser_controller"> <topicName>scan</topicName> <frameName>laser_link</frameName> </plugin> <range>0.1 30.0</range> </sensor> </gazebo> </robot> (2) 启动文件 (launch/sim.launch) XML <launch> <!-- 加载Gazebo世界 --> <include file="$(find gazebo_ros)/launch/empty_world.launch"> <arg name="world_name" value="$(find agv_arm_demo)/worlds/warehouse.world"/> </include> <!-- 加载机器人模型 --> <param name="robot_description" command="$(find xacro)/xacro '$(find agv_arm_demo)/urdf/agv_arm.urdf.xacro'" /> <!-- 生成Gazebo模型 --> <node name="spawn_urdf" pkg="gazebo_ros" type="spawn_model" args="-param robot_description -urdf -model agv_arm -x 0 -y 0 -z 0.1" /> <!-- 控制器管理器 --> <rosparam file="$(find agv_arm_demo)/config/controllers.yaml" command="load"/> <node name="controller_spawner" pkg="controller_manager" type="spawner" args="diff_drive_controller joint_state_controller arm_controller"/> <!-- 状态发布 --> <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" /> <!-- 启动MoveIt! --> <include file="$(find agv_arm_demo)/launch/moveit_planning.launch"/> </launch> (3) 控制器配置 (config/controllers.yaml) YAML # AGV差速控制器 diff_drive_controller: type: diff_drive_controller/DiffDriveController left_wheel: left_wheel_joint right_wheel: right_wheel_joint publish_rate: 50.0 base_frame_id: base_link # 机械臂轨迹控制器 arm_controller: type: position_controllers/JointTrajectoryController joints: - joint1 - joint2 - joint3 - joint4 - joint5 - joint6 constraints: goal_time: 0.5 4. 运行步骤 启动仿真环境: Bash roslaunch agv_arm_demo sim.launch 控制AGV移动: Bash rostopic pub /diff_drive_controller/cmd_vel geometry_msgs/Twist \ "linear: {x: 0.5, y: 0, z: 0} angular: {x: 0, y: 0, z: 0.3}" -r 10 控制机械臂运动: Bash # 使用MoveIt! Rviz插件规划轨迹 roslaunch moveit_setup_assistant moveit.launch 自主导航测试: Bash rosrun agv_arm_demo test_navigation.py 5. 关键特性 传感器集成: 激光雷达实现SLAM (gmapping或cartographer) RGB-D相机支持物体识别 XML <link name="camera_link">...</link> <gazebo reference="camera_link"> <sensor type="depth" name="camera">...</sensor> </gazebo> 导航栈集成: Bash roslaunch turtlebot_navigation gmapping_demo.launch roslaunch move_base move_base.launch 抓取任务流程: MoveIt! 规划抓取轨迹 通过ROS Action控制执行: Python # Python示例 from control_msgs.msg import FollowJointTrajectoryAction 6. 开源参考项目 TurtleBot3 + OpenMANIPulator 复合机器人 (支持Gazebo仿真和MoveIt!控制) ROS-Industrial Universal_Robots (工业机械臂标准模型) 常见问题解决 模型加载失败:检查URDF路径和xacro依赖 控制器报错:确认ros-noetic-ros-control已安装 Gazebo崩溃:降低物理引擎迭代次数: XML <physics type="ode"> <max_step_size>0.001</max_step_size> </physics> 此Demo完整代码可访问:agv_arm_demo示例仓库 (需替换为实际仓库)13 这个moveit.launch没写
09-15
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值